天天看點

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

dbForge Studio for SQL Server為有效的探索、分析SQL Server資料庫中的大型資料集提供全面的解決方案,并設計各種報表以幫助作出合理的決策。

點選下載下傳dbForge Studio for SQL Server最新試用版

資料庫恢複類型

在本文讨論資料還原過程時,讓我介紹三種主要的資料庫恢複類型:

  1. 資料庫完全恢複表明整個資料庫恢複到以前的狀态,并進行恢複。請注意,在還原和恢複操作期間,資料庫處于脫機模式。
  2. 資料庫檔案恢複建議将一個資料檔案或一個檔案組恢複到原來的狀态,并進行恢複。在檔案恢複過程中,所有包含處理過的檔案的檔案組都會在恢複的時候切換到脫機模式。任何使用離線檔案和檔案組的嘗試都會導緻錯誤。
  3. 資料頁面恢複允許在使用完全恢複模式或不完全記錄模式時恢複單獨的資料庫。頁面恢複适用于任何資料庫,無論檔案組的數量如何。

我建議我們更詳細地探讨每種還原類型。是以,讓我們從基本類型開始-一個簡單的恢複模型和一個完整的恢複模型。

簡單恢複模型

您可以使用以下腳本在簡單恢複模型下從完全備份執行資料庫恢複:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO
           
是以,我們通過覆寫現有檔案和JobEmplDB資料庫并将檔案傳輸到D:\ Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ MSSQLSERVER \ DATA,從JobEmplDB_Full_backup_2020_07_19_14_21_57.bak備份中還原JobEmplDB資料庫。      

使用SSMS還原SQL Server資料庫

或者,您可以在SSMS界面中執行相同的還原。為此,右鍵單擊資料庫,然後選擇“還原資料庫”選項:

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。1.在SSMS中選擇資料庫還原

接下來,在“正常”頁籤上,選擇備份檔案的路徑以及要将其還原到的目标位置(還有建立新資料庫的選項):

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。2. SSMS中的正常頁籤設定

請注意,“還原計劃”部分提供了有關備份檔案的詳細資訊。除其他外,它顯示檔案中存在的内容和備份類型。

之後,在“檔案”頁籤上,指定将還原的資料庫檔案重新定位到的位置:

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。3. SSMS中的“檔案”頁籤設定

在“選項”頁籤上,啟用“覆寫現有資料庫”選項:

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。4. SSMS中的“選項”頁籤設定

完全恢複模式

對于完整恢複模型,您将需要執行以下步驟。

首先,從完全備份還原資料庫,然後将資料庫切換到RESTORE WITH NORECOVERY模式:

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。5.在完全恢複模式下從完全備份還原資料庫

簡單恢複模型下的資料恢複腳本如下所示:

USE[master]  RESTORE DATABASE[JobEmplDB]  FROM DISK = N '\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak'  WITH FILE = 1,      MOVE N 'JobEmplDB'  TO N 'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',      MOVE N 'JobEmplDB_log'  TO N 'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',      NORECOVERY,      NOUNLOAD,      REPLACE,      STATS = 5;  GO
           

其次,還原最後一個差異備份,并将資料庫切換到RESTORE WITH NORECOVERY模式:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = ‘N\\Shared\Backup\Diff\JobEmplDB_Diff_backup_2020_07_19_13_21_29.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  
           

僅當差異備份與相應的完整備份檔案位于同一檔案中時,該可視界面才允許還原差異備份:

如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。6. SSMS中的差異備份還原

在我們的例子中,我們得到以下查詢:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_21_57.bak' WITH FILE = 3,       MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',  	 MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_21_57.bak' WITH FILE = 5,       NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO
           
即,JobEmplDB_Full_backup_2020_07_19_14_21_57.bak檔案包含有關3的完全備份RD位置(FILE = 3)和差異備份是對5個位置(FILE = 5)。      

第三,一個接一個地還原完成最後一個差異備份之後建立的所有事務日志:

RESTORE LOG [JobEmplDB]     FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO
           
RESTORE LOG [JobEmplDB]      
 FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_56.trn'       
WITH RECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO
           
重要的是,僅當此備份位于包含完整備份的同一檔案中時,圖形界面才允許我們從事務日志備份中還原資料庫:      
如何使用T-SQL腳本和SSMS還原SQL Server資料庫備份

圖。7.事務日志備份還原

在我們的例子中,我們得到以下查詢:

USE [master]  RESTORE DATABASE [JobEmplDB]  
FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 3,      
 MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',  
     MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',       NORECOVERY,       NOUNLOAD,       REPLACE,       STATS = 5;    RESTORE LOG [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 4,       NOUNLOAD,  	 STATS = 5;  GO      

最後,我們獲得以下用于完全還原JobEmplDB的最終腳本:

USE [master]    --Restoring full backup  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  --restoring the last differential backup for the respective full backup    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Diff\JobEmplDB_Diff_backup_2020_07_19_14_04_44.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  -- restoring the sequence of transaction log backups after the last differential backup creation  RESTORE LOG [JobEmplDB]     FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO    RESTORE LOG [JobEmplDB]       FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_56.trn'       WITH RECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO
           
今天的内容就是這些,下篇文章我們将對如何恢複資料庫檔案和檔案組進行詳細講解。