- backup database [liDataBase] to disk = 'c:/liDataBase.bak'
- backup log [liDataBase] to disk = 'c:/liDataBase.log.bak' WITH NORECOVERY
- restore database [liDataBase] from disk = 'c:/liDataBase.bak'
更新日期: 2006 年 7 月 17 日
本主題僅適用於使用完整恢復模式或大容量日誌恢復模式的數據庫。
對於大多數情況,在完整恢復模式或大容量日誌恢復模式下,SQL Server 2005 要求您備份日誌尾部以捕獲尚未備份的日誌記錄。還原操作之前對日誌尾部執行的日誌備份稱爲“尾日誌備份”。
SQL Server 2005 通常要求您在開始還原數據庫前執行尾日誌備份。尾日誌備份可以防止工作丟失並確保日誌鏈的完整性。將數據庫恢復到故障點時,尾日誌備份是恢復計劃中的最後一個相關備份。如果無法備份日誌尾部,則只能將數據庫恢復爲故障前創建的最後一個備份。
並非所有還原方案都要求執行尾日誌備份。如果先前的日誌備份中包含恢復點,或者您準備移動或替換(覆蓋)數據庫,則不一定需要尾日誌備份。並且,如果日誌文件受損且無法創建尾日誌備份,則必須在不使用尾日誌備份的情況下還原數據庫。最新日誌備份後提交的任何事務都將丟失。有關詳細信息,請參閱本主題下文中的“不使用尾日誌備份執行還原操作”。
尾日誌備份與任何其他日誌備份類似,使用 BACKUP LOG 語句執行。建議您在下列情況下執行尾日誌備份:
- 如果數據庫處於在線狀態,每當您準備對數據庫執行的下一個操作爲還原操作時,請在開始還原順序之前使用 WITH NORECOVERY 備份日誌尾部:
BACKUP LOG database_name TO <backup_device> WITH NORECOVERY注意: 爲防止出錯,必須使用 NORECOVERY 選項。 - 如果數據庫處於離線狀態並且無法啓動。
嘗試執行尾日誌備份。由於此時不會發生任何事務,所以 WITH NORECOVERY 是可選的。如果數據庫受損,請使用 WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE。
BACKUP LOG database_name TO <backup_device> [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }如果數據庫受損(例如,數據庫無法啓動),則僅當日志文件未受損、數據庫處於支持尾日誌備份的狀態並且不包含任何大容量日誌更改時,尾日誌備份才能成功。重要提示: 除非數據庫受損,否則不建議使用 NO_TRUNCATE。
下表對這些選項進行了彙總。
BACKUP LOG 選項 | 註釋 | ||
---|---|---|---|
NORECOVERY | 每當您準備對數據庫繼續執行還原操作時,請使用 NORECOVERY。NORECOVERY 使數據庫進入還原狀態。這確保了數據庫在尾日誌備份後不會更改。 除非同時指定 NO_TRUNCATE 或 COPY_ONLY 選項,否則將截斷日誌。 | ||
{ CONTINUE_AFTER_ERROR | NO_TRUNCATE } | 僅當您要備份受損數據庫的尾部時才能使用 NO_TRUNCATE 或 CONTINUE_AFTER_ERROR。
|
在數據庫損壞時創建事務日誌備份
尾日誌備份可捕獲日誌尾部,即使數據庫離線、損壞或缺少數據文件。這可能導致還原信息命令和 msdb 生成不完整的元數據。但只有元數據是不完整的,而捕獲的日誌是完整且可用的。
如果尾日誌備份包含不完整的元數據,則 backupset 表中的 has_incomplete_metadata 將設置爲 1。此外,在 RESTORE HEADERONLY 的輸出中,HasIncompleteMetadata 將設置爲 1。
如果尾日誌備份中的元數據不完整,則 backupfilegroup 表在尾日誌備份時將丟失文件組的大多數相關信息。大多數 backupfilegroup 表列爲 NULL;只有以下幾列有意義:
- backup_set_id
- filegroup_id
- type
- type_desc
- is_readonly
不需要尾日誌備份的還原方案包括以下幾種:
- 將數據庫還原到先前日誌備份中包含的某個時間點。
如果還原一個數據庫並在還原順序中的每個 RESTORE 語句中指定 STOPAT、STOPATMARK 或 STOPBEFOREMARK 選項,則不必進行尾日誌備份。
將數據庫還原到先前時間點- 若要使用 Transact-SQL 還原到特定時間點,請參閱如何還原到某個時間點 (Transact-SQL)、恢復到標記的事務或恢復到日誌序列號 (LSN)。
- 若要使用 SQL Server Management Studio,請參閱如何還原到某個時點 (SQL Server Management Studio)或如何將數據庫還原爲標記的事務 (SQL Server Management Studio)。
- 若要使用 Transact-SQL 還原到特定時間點,請參閱如何還原到某個時間點 (Transact-SQL)、恢復到標記的事務或恢復到日誌序列號 (LSN)。
- 將數據庫副本還原到新位置。
當您還原數據庫時,只有將數據庫還原到不同的服務器實例時,纔可以使用相同的數據庫名稱,例如,創建鏡像數據庫用於數據庫鏡像或創建輔助數據庫用於日誌傳送。如果在同一服務器實例上移動數據庫,您必須爲數據庫指定新名稱。
將數據庫還原到新位置- 在還原順序的每個 RESTORE 語句中,使用 Transact-SQL 指定 MOVE 選項。有關詳細信息,請參閱如何將數據庫還原到新位置和新名稱 (Transact-SQL)或如何將文件還原到新位置 (Transact-SQL)。
- 使用 SQL Server Management Studio,在“還原數據庫”(“選項”頁)的“還原爲”字段中指定每個文件的新位置。有關詳細信息,請參閱如何還原數據庫備份 (SQL Server Management Studio)。
- 在還原順序的每個 RESTORE 語句中,使用 Transact-SQL 指定 MOVE 選項。有關詳細信息,請參閱如何將數據庫還原到新位置和新名稱 (Transact-SQL)或如何將文件還原到新位置 (Transact-SQL)。
- 完整替換(覆蓋)數據庫。替換數據庫
注意: 應當儘量避免使用 REPLACE 選項執行還原,並且只有經驗豐富的數據庫管理員在慎重考慮後才能這樣做。有關詳細信息,請參閱使用 REPLACE 選項。 - 使用 Transact-SQL 在 RESTORE 語句中指定 REPLACE 選項。
- 使用 SQL Server Management Studio,在“還原數據庫”(“選項”頁)的“還原爲”字段中指定每個文件的新位置。有關詳細信息,請參閱如何還原數據庫備份 (SQL Server Management Studio)。
- 使用 Transact-SQL 在 RESTORE 語句中指定 REPLACE 選項。