日期:2014-05-18  浏览次数:20539 次

SQL2008 差异备份和差异备份还原
我有两个数据库结构相同,它们不在不同地方(不相通的)!
 现在我想在第一个数据库里进行差异备份,然后把这个差异备份,放到第二个数据库里,进行还原!
这样做可以吗?如果行要怎样做,如果不行,请问有什么其他好方法!求详解

------解决方案--------------------
建议直接完全备份,然后到这个机器还原.
------解决方案--------------------
探讨
建议直接完全备份,然后到这个机器还原.

------解决方案--------------------
探讨

建议直接完全备份,然后到这个机器还原.

------解决方案--------------------
完整备份还原吧!用差异楼主要做什么!
------解决方案--------------------
楼主的目的是什么? 数据库迁移还是数据同步.
数据库迁移 --> 直接用完整备份还原即可.
数据同步 --> 可考虑用定时差异备份还原, 或日志传送(Log Shipping).

------解决方案--------------------
探讨

因为数据量很大的,所以不想每次都传输。
我主要是想用来:在晚上,把第一个数据库新添加的数据,输入到第二个数据库。也不用同步的,只是方便我第二天做统计

------解决方案--------------------
可考虑用日志传送或SSIS工具,详见Google.
------解决方案--------------------
SQL code
可以用备份作业:
/*******************完整备份作业*******************/
--完整备份,每周一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'
BACKUP DATABASE [demo] TO DISK=@str
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME=N'Demo完整备份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO




/*******************差异备份作业*******************/
--截断日志
USE Master
GO
BACKUP LOG Demo  WITH NO_LOG
GO
--收缩日志文件
USE Demo
GO
DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
GO
--差异备份,每天一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
BACKUP DATABASE [Demo] TO DISK=@str
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME=N'Demo差异备份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO




/******************日志备份作业*******************/
--日志备份,每小时一次
USE Demo
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'
BACKUP LOG [Demo] TO DISK=@str
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME=N'Demo日志备份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO




--删除过期的备份文件,每天两次
declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
set @dir='del D:\DBtext\jgj\DBABak\'
set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),' ',''),':',''),8)
set @str=@dir+'fullbak'+@filename+'*.bak'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
set @str=@dir+'diffbak'+@filename+'*.diff'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
set @str=@dir+'logbak'+@filename+'*.trn'
exec xp_cmdshell @str

------解决方案--------------------
只做备份吗,你第二个数据库做了操作怎么办,也把他给还原了?