SQL SERVER完整、差別和事務日誌備份及還原(腳本和GUI實現) [原創]

一.完整備份、差別備份和事務日誌備份的腳本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

wps9779.tmp

上面錯誤的緣由爲:原來備份的數據文件在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:不對數據庫進行任何操做,不回滾未提交的事務

完整備份結果:

wps978A.tmp

還原差別備份:(只有一個差別備份的狀況,當還原多個差別備份時,一般前面的都用WITH NORECOVERY,還原最後一個差別備份才能用WITH RECOVERY)

注:移動數據文件是完整備份時移動,差別備份和日誌備份不保存文件路徑,差別備份和日誌備份還原時不能移動路徑。

RESTORE DATABASE [DigitalLibDB] FROM DISK='E:\20150609_75\新建文件夾\DigitalLibDB_20150610_Diff.bak' WITH RECOVERY

差別備份還原結果:

wps979A.tmp

方法2:(可視化界面操做)

還原完整備份:

選擇還原數據庫

wps979B.tmp

選擇完整備份路徑

wps97AC.tmp

選擇覆蓋現有數據庫,選擇RESTORE WITH NORECOVERY選項

wps97BD.tmp

還原完整備份成功

wps97BE.tmp

此時,差別備份還未完成,數據庫還處於正在還原狀態

wps97BF.tmp

還原差別備份,選擇任務-還原-文件和文件組

wps97C0.tmp

wps97D0.tmp

wps97D1.tmp

wps97E2.tmp

因此,此時還原這個差別備份仍是應該使用腳原本完成,不用移動文件。

RESTORE DATABASE [DigitalLibDB] FROM DISK='E:\20150609_75\新建文件夾\DigitalLibDB_20150610_Diff.bak' WITH RECOVERY --還原差別備份

 

三.不須要修改數據庫文件路徑的差別備份還原

注意:

對於不須要修改數據庫文件路徑的差別備份還原,使用sqlserver可視化界面還原是沒問題的。

wps97E3.tmp

wps97F3.tmp

wps97F4.tmp

此處,還原差別備份成功,緣由是備份時文件是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

 

但願對大家有所幫助,若是你以爲不錯,請在右邊推薦一下喔,歡迎拍磚~

相關文章
相關標籤/搜索