一.完整備份、差別備份和事務日誌備份的腳本git
--完整備份數據庫sql
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表示完整或差別備份
--備份事務日誌,文件名中包含當前時間,適合定時備份sqlserver
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
二. 還原須要修改數據文件路徑的多文件數據庫(作過度區的)spa
錯誤:3d
上面錯誤的緣由爲:原來備份的數據文件在G盤下,還原完整備份時新服務器下不存在G盤這個路徑就會報錯。日誌
解決辦法:可使用WITH MOVE讓數據文件保存到新的有效路徑下,首先在磁盤下創建這個有效路徑。code
正確的還原多文件備份的方法以下:server
方法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
但願對大家有所幫助,若是你以爲不錯,請在右邊推薦一下喔,歡迎拍磚~