一.完整備份、差異備份和事務日志備份的腳本
--完整備份數據庫
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盤這個路徑就會報錯。
解決辦法:可以使用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
希望對你們有所幫助,如果你覺得不錯,請在右邊推薦一下喔,歡迎拍磚~















