Sql-Server

我可以只恢復數據庫的LOG嗎?

  • November 15, 2019

我們有一個 1.5TB 的數據庫。我可以創建一些複製策略,在固定的時間將數據庫複製到另一台伺服器。但是開發人員不知道他們什麼時候需要將這個開發數據庫複製到 teste 環境。

所以,我在開發伺服器中有 1TB 的數據庫。我將(我已經做過)完全備份數據庫,並在測試伺服器中恢復它。然後,我想只恢復修改(因為每次恢復整個數據庫都需要很多時間)。

我正在嘗試對 2 個數據庫進行小測試:

我創建了 1 個數據庫,進行了完整備份,然後將其還原。但是當我嘗試只恢復日誌時,我收到了這個錯誤:

restore log banco_2 from disk ='e:\backup\banco1_primeiroLog.bkp' with recovery

消息 3117,級別 16,狀態 1,第 13 行 日誌或差異備份無法恢復,因為沒有文件準備好前滾。消息 3013,級別 16,狀態 1,第 13 行 RESTORE LOG 異常終止。

我應該為此任務使用差異備份嗎?對此最好的策略是什麼?如果問題令人困惑,我可以解決它。

我正在嘗試遵循這個問題的答案,但它不起作用:

是否可以僅使用 .trn 文件恢復數據庫?

您需要在每次還原結束時使用 WITH NORECOVERY,直到最後一次還原。數據庫未處於繼續還原備份的正確狀態。你得到那個錯誤是因為你沒有這樣做。

使用 LOG 備份,您可能需要恢復的不僅僅是一個,您需要自上次 FULL 備份以來進行的所有 LOG 備份。你會用 NORECOVERY 恢復每一個,最後只做一個 RESTORE DATABASE

$$ DatabaseName $$WITH RECOVERY 使數據庫聯機。 自上次 FULL 備份以來,DIFF 備份的所有頁面都已更改(因此始終與某個 FULL 備份相關聯)。與恢復大量 LOG 備份相比,這通常是一種讓您了解最新資訊的更快方法。

只要您遵循順序(完整、差異、日誌等),只要它們都以某種方式重疊,您就可以組合這些備份的恢復。如果你搞砸了(比如試圖恢復一個差異,然後是一個舊的差異或舊的日誌),它就會被跳過,你可以繼續。

例子:

Restore Database [DatabaseName] From Disk = '... full backup ...' With Norecovery
Restore Database [DatabaseName] From Disk = '... diff backup ...' With Norecovery
-- This will be ignored
Restore Database [DatabaseName] From Disk = '... an older diff backup ...' With Norecovery 
-- This will be used
Restore Database [DatabaseName] From Disk = '... later diff backup ...'  With Norecovery
-- If this was before that newest diff, it will be ignored
Restore Database [DatabaseName] From Disk = '... log backup 1 ...' With Norecovery
-- Parts of this after the newest diff, will be used
Restore Database [DatabaseName] From Disk = '... log backup 2 ...' With Norecovery
Restore Database [DatabaseName] From Disk = '... every later log backup up to the end of what you want ...' With Norecovery
-- You're finished, set the database online.
Restore Database [DatabaseName] With Recovery

Tim Radney 為 PASS DR VC 做了一個影片會議,這可能有助於您了解備份/恢復基礎知識https://www.youtube.com/watch?v=0GCZ6sNoC2o

所以,我在開發伺服器中有 1TB 的數據庫。我將(我已經做過)完全備份數據庫,並在測試伺服器中恢復它。

恢復完整備份with NORECOVERY,以便可以應用額外的日誌備份。

然後,我想只恢復修改(因為每次恢復完整數據庫都需要很多時間)。

你可以restore log ... with standbywith standby當你進入模式時,你必須做一些權衡:

  • 當您恢復日誌時,所有使用者都必須被踢出。
  • 主要和次要版本必須相同。
  • 在待機模式下無法自動創建統計資訊。
  • 由於您使用的是 SQL Server 2014,因此您可以將連接任何數據庫和使用者安全對象授予伺服器角色,以便使用者可以訪問備用數據庫。
  • 在待機模式下,使用事務撤消文件(***.TUF**file)完成部分恢復,使數據庫可以處於只讀狀態。這可能很慢並且需要資源,從而減慢恢復速度。

請注意,如果您失去了一個日誌文件或有人進行了臨時日誌文件備份(您可以拒絕日誌備份 - 以避免這種情況),您最終將執行完整恢復(1.5TB 數據庫),或者您可能會趕上一個差異備份(假設未發生完整備份)。

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