完整的資料庫還原 (完整復原模式)
適用於:SQL Server
在完整資料庫還原中,目標是還原整個資料庫。 在還原期間,整個資料庫為離線狀態。 在讓資料庫的任何部分上線之前,所有的資料都必須復原到一致的位置;此時資料庫的所有部分都會回到相同的時間點,而且沒有未認可的交易存在。
在完整復原模式下,還原一個或多個資料備份之後,您必須先還原所有後續的交易記錄備份,然後再復原資料庫。 您可以將資料庫還原到其中一個記錄備份內的特定 「復原點」 (Recovery point)。 復原點可以是特定日期和時間、標示的交易或記錄序號 (LSN)。
還原資料庫時 (特別是在完整復原模式或大量記錄復原模式下),應該使用單一還原順序。 「還原順序」 (Restore sequence) 包含一個或多個還原作業,會在一個或多個還原階段中移動資料。
不受信任的來源
建議您「不」 要附加或還原來自未知來源或不受信任之來源的資料庫。 這些資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。 在您使用來自未知或不受信任之來源的資料庫時,請在非生產環境伺服器的資料庫上執行 DBCC CHECKDB。 此外,檢查資料庫中使用者撰寫的程式碼,如預存程序或其他使用者自訂的程式碼。
來自舊版的備份
如需舊版 SQL Server 備份支援的相關資訊,請參閱 RESTORE (Transact-SQL) 的<相容性支援>一節。
將資料庫還原到失敗點
一般而言,將資料庫復原至失敗點的作業,包含下列基本步驟:
備份使用中的交易記錄檔 (即所謂的記錄檔結尾)。 這會建立結尾記錄備份。 如果沒有使用中的交易記錄,就會遺失該部分記錄中的所有交易。
重要
在大量記錄復原模式下,備份包含大量記錄作業的記錄時,需要存取資料庫中的所有資料檔案。 如果無法存取資料檔案,就無法備份交易記錄。 在這種情況下,您必須手動重做最近一次備份記錄之後進行的所有變更。
如需詳細資訊,請參閱 結尾記錄備份 (SQL Server)。
還原最新的完整資料庫備份,但不復原資料庫 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。
如果有差異備份存在,請還原最新的備份,但是不要復原資料庫 (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY)。
還原最近一次的差異備份,可減少必須還原的記錄備份數目。
從剛才還原的備份之後所建立的第一個交易記錄備份開始,依順序以 NORECOVERY 還原記錄。
復原資料庫 (RESTORE DATABASE database_name WITH RECOVERY)。 或者,這個步驟也可以合併在還原最後的記錄備份。
下圖顯示此還原順序。 在失敗發生之後 (1),會建立結尾記錄備份 (2)。 接下來,資料庫會還原至失敗點。 這個程序牽涉到還原資料庫備份、後續的差異備份,以及在差異備份之後所進行的每一個記錄備份,包括結尾記錄備份在內。
注意
當您將資料庫備份還原至不同的伺服器執行個體時,請參閱 使用備份與還原複製資料庫。
基本 Transact-SQL RESTORE 語法
上圖中還原順序的基本 RESTORE Transact-SQL 語法如下:
RESTORE DATABASE <database> FROM full database backup WITH NORECOVERY;
RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;
RESTORE LOG database FROM log_backup WITH NORECOVERY;
針對其他每個記錄備份重複此還原記錄步驟。
RESTORE DATABASE <database> WITH RECOVERY;
範例:復原到失敗點 (Transact-SQL)
下列 Transact-SQL 範例顯示將資料庫還原到失敗點之還原順序中的基本選項。 此範例會建立資料庫的結尾記錄備份。 接下來,此範例會還原完整的資料庫備份和記錄備份,然後還原結尾記錄備份。 此範例會在一個不同的最後步驟中復原資料庫。
注意
此範例會使用完整資料庫備份 (SQL Server) 中,<在完整復原模式下使用資料庫備份>一節所建立的資料庫備份和記錄備份。 在資料庫備份之前, AdventureWorks2022
範例資料庫會設定為使用完整復原模式。
USE master;
--Create tail-log backup.
BACKUP LOG AdventureWorks2022
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH NORECOVERY;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=1,
NORECOVERY;
--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=2,
NORECOVERY;
--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=3,
NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2022 WITH RECOVERY;
GO
將資料庫還原到記錄備份內的時間點
在完整復原模式下,完整資料庫還原通常可以復原到某個時間點、標示的交易或記錄備份內的 LSN。 然而,在大量記錄復原模式下,如果記錄備份包含大量記錄的變更,則無法進行時間點復原。
範例時間點還原案例
下列範例假設有一個關鍵任務的資料庫系統,每天午夜時會建立一次完整資料庫備份,從星期一到星期六每小時整點時會建立一次差異資料庫備份,而全天每隔 10 分鐘會建立一次交易記錄備份。 若要將資料庫還原到星期三上午 5:19 時的狀態,請執行下列動作:
還原星期二午夜建立的完整資料庫備份。
還原星期三上午 5:00 建立的差異資料庫備份。
套用星期三上午 5:10 建立的交易記錄備份。
套用星期三上午 5:20 建立的交易記錄備份,並指定復原程序只套用在上午 5:19 之前發生的交易。
或者,如果必須將資料庫還原到星期四上午 3:04 時的狀態,但是沒有星期四上午 3:00 建立的差異資料庫備份,請執行下列動作:
還原星期三午夜建立的資料庫備份。
還原星期四上午 2:00 建立的差異資料庫備份。
套用星期四上午 2:10 到 3:00 之間所建立的所有交易記錄備份。
套用星期四上Ƞ3:10 建立的交易記錄備份,並於上午 3:04 時停止復原程序。
注意
如需時間點還原的範例,請參閱將 SQL Server 資料庫還原至某個時間點 (完整復原模式)。
相關工作
還原完整資料庫備份
還原差異資料庫備份
還原交易記錄備份
使用 SQL Server 管理物件 (SMO) 還原備份
將資料庫還原到記錄備份內的時間點
另請參閱
RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
套用交易記錄備份 (SQL Server)
sp_addumpdevice (Transact-SQL)
完整資料庫備份 (SQL Server)
差異備份 (SQL Server)
Backup Overview (SQL Server)
還原和復原概觀 (SQL Server)