SQLSERVER完整、差异和事务⽇志备份及还原(脚本和GUI实
现)[原创]
⼀.完整备份、差异备份和事务⽇志备份的脚本
--完整备份数据库
BACKUP DATABASE Test_Bak TO DISK='E:\20150609_75\bak\Test_bak_full.bak'WITH INIT
--差异备份数据库
BACKUP DATABASE Test_Bak TO DISK='E:\20150609_75\bak\Test_bak_diff.bak'WITH INIT, DIFFERENTIAL  --加上DIFFERENTIAL代表差异备份
--事务⽇志备份
BACKUP LOG Test_Bak TO DISK='E:\20150609_75\bak\Test_bak_log.bak'WITH INIT  --BACKUP LOG表⽰备份事务⽇志,BACKUP DATABASE表⽰完整或差异备份--备份事务⽇志,⽂件名中包含当前时间,适合定时备份
DECLARE@strbackup NVARCHAR(100)
--改为⽇期加时间的
SET@strbackup='E:\20150609_75\bak\Test_bak_log_'
+REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), '',
''), ':', '') +'.bak'
BACKUP LOG Test_Bak TO DISK=@strbackup WITH INIT;
GO
⼆. 还原需要修改数据⽂件路径的多⽂件数据库(做过分区的)
错误:
上⾯错误的原因为:原来备份的数据⽂件在G盘下,还原完整备份时新服务器下不存在G盘这个路径就会报错。
sql数据库备份文件解决办法:可以使⽤WITH MOVE让数据⽂件保存到新的有效路径下,⾸先在磁盘下建⽴这个有效路径。
正确的还原多⽂件备份的⽅法如下:
⽅法1(脚本):
还原完整备份:
RESTORE DATABASE[DigitalLibDB]
FROM DISK= N'E:\20150609_75\DigitalLibDB_20150609_FULL.bak'--完整备份的路径
WITH  MOVE 'DigitalLibDB_Data'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB.mdf',
MOVE 'UI0'TO'C:\Program Files\Microsoft SQL  --重新指定⽂件的路径,取决⽂件数量Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_1.ndf',
MOVE 'UI1'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_2.ndf',
MOVE 'UI10'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_3.ndf',
MOVE 'UI11'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_4.ndf',
MOVE 'UI12'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_5.ndf',
MOVE 'UI13'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_6.ndf',
MOVE 'UI14'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_7.ndf',
MOVE 'UI15'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_8.ndf',
MOVE 'UI16'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_9.ndf',
MOVE 'UI2'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_10.ndf',
MOVE 'UI3'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_11.ndf',
MOVE 'UI4'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_12.ndf',
MOVE 'UI5'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_13.ndf',
MOVE 'UI6'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_14.ndf',
MOVE 'UI7'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_15.ndf',
MOVE 'UI8'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_16.ndf',
MOVE 'UI9'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_17.ndf',
MOVE 'ftrow_RegInfo_UnitName'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_18.ndf',
MOVE 'DigitalLibDB_Log'TO'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_Log.ldf',
STATS =10, REPLACE,
NORECOVERY
GO
WITH MOVE TO:重新指定⽂件的路径,WITH MOVE TO数量取决于数据库⽂件数量
STATS = 10:没完成10%显⽰⼀条记录
REPLACE:覆盖现有数据库
NORECOVERY:不对数据库进⾏任何操作,不回滚未提交的事务
完整备份结果:
还原差异备份:(只有⼀个差异备份的情况,当还原多个差异备份时,通常前⾯的都⽤WITH NORECOVERY,还原最后⼀个差异备份才能⽤WITH RECOVERY)
注:移动数据⽂件是完整备份时移动,差异备份和⽇志备份不保存⽂件路径,差异备份和⽇志备份还原时不能移动路径。
RESTORE DATABASE [DigitalLibDB] FROM DISK='E:\20150609_75\新建⽂件夹\DigitalLibDB_20150610_Diff.bak' WITH RECOVERY 差异备份还原结果:
⽅法2:(可视化界⾯操作)
还原完整备份:
选择还原数据库
选择完整备份路径
选择覆盖现有数据库,选择RESTORE WITH NORECOVERY选项
还原完整备份成功
此时,差异备份还未完成,数据库还处于正在还原状态
还原差异备份,选择任务-还原-⽂件和⽂件组
所以,此时还原这个差异备份还是应该使⽤脚本来完成,不⽤移动⽂件。
RESTORE DATABASE [DigitalLibDB] FROM DISK='E:\20150609_75\新建⽂件夹\DigitalLibDB_20150610_Diff.bak' WITH RECOVERY --还原差异备份
三.不需要修改数据库⽂件路径的差异备份还原
注意:
对于不需要修改数据库⽂件路径的差异备份还原,使⽤sqlserver可视化界⾯还原是没问题的。
此处,还原差异备份成功,原因是备份时⽂件是C盘下这个⽬录,还原时还是还原到C盘这个⽬录,不需要修改路径。
对于不需要修改数据库⽂件路径的数据库完整备份、差异备份和事务⽇志备份的还原过程如下(使⽤脚本):
--还原顺序:完整备份--差异备份--⽇志备份
--还原单⽂件数据库的完整备份,数据库⽂件路径⼀致,不⽤移动路径的情况
RESTORE DATABASE[Test_Bak]
FROM DISK= N'E:\20150609_75\local\Test_Bak_full.bak'
WITH
STATS =10, REPLACE,
NORECOVERY
GO
--还原差异备份
RESTORE DATABASE[Test_Bak]
FROM DISK= N'E:\20150609_75\local\Test_Bak_diff.bak'
WITH
STATS =10,
NORECOVERY
GO
--还原⽇志备份
RESTORE DATABASE[Test_Bak]
FROM DISK= N'E:\20150609_75\local\Test_Bak_Log.bak'
WITH
STATS =10,
RECOVERY
希望对你们有所帮助,如果你觉得不错,请在右边推荐⼀下喔,欢迎拍砖~