Sql-Server-2014

為什麼我們在進行尾日誌備份時要添加 NO_TRUNCATE 和 NORECOVERY 選項?

  • August 27, 2019

假設我的 mdf 文件被刪除並且我將我的數據庫設置為單使用者模式。我做的第一件事是進行尾日誌備份。我的問題是在進行尾日誌備份時是否需要添加 NORECOVERY 選項?如果是這樣,那為什麼?我的觀點是,如果我的數據庫設置為單使用者模式,這意味著除了我之外沒有人訪問數據庫,那麼我可以省略寫 NORECOVERY,因為這個關鍵字的主要功能是停止後續事務。

我想問關於 NO_TRUNCATE 關鍵字的相同問題。據我所知,當我們進行 t-log 備份(在完全恢復模式下)時,我們實際上會截斷 t-log 文件,並且通過編寫 NO_TRUNCATE 關鍵字,SQL Server 不會在備份後截斷 t-log 文件。當我已經成功地進行了尾日誌備份時,為什麼我需要保留該非活動部分?

根據Tail-Log Backups (SQL Server) - (突出顯示我的)

  • 如果數據庫處於聯機狀態並且您計劃對數據庫執行還原操作,請從備份日誌尾部開始。為避免聯機數據庫出錯,您必須使用 BACKUP Transact-SQL 語句的 … WITH NORECOVERY 選項。
  • 如果數據庫離線,啟動失敗,需要恢復數據庫,首先備份日誌尾部。因為此時不能發生任何事務,所以使用 WITH NORECOVERY 是可選的。

根據 SQL Server 專家Paul Randal關於災難恢復 101:備份日誌尾部的說法

使用該NO_TRUNCATE選項,即使數據庫文件不存在也允許日誌備份

在您的情況下,所需的數據庫文件不存在,這需要您使用NO_TRUNCATE

引用自:https://dba.stackexchange.com/questions/246382