我可以只恢復數據庫的LOG嗎?
我們有一個 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 異常終止。
我應該為此任務使用差異備份嗎?對此最好的策略是什麼?如果問題令人困惑,我可以解決它。
我正在嘗試遵循這個問題的答案,但它不起作用:
您需要在每次還原結束時使用 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 standby
。with standby
當你進入模式時,你必須做一些權衡:
- 當您恢復日誌時,所有使用者都必須被踢出。
- 主要和次要版本必須相同。
- 在待機模式下無法自動創建統計資訊。
- 由於您使用的是 SQL Server 2014,因此您可以將連接任何數據庫和使用者安全對象授予伺服器角色,以便使用者可以訪問備用數據庫。
- 在待機模式下,使用事務撤消文件(**
*.TUF
**file)完成部分恢復,使數據庫可以處於只讀狀態。這可能很慢並且需要資源,從而減慢恢復速度。請注意,如果您失去了一個日誌文件或有人進行了臨時日誌文件備份(您可以拒絕日誌備份 - 以避免這種情況),您最終將執行完整恢復(1.5TB 數據庫),或者您可能會趕上一個差異備份(假設未發生完整備份)。