Log-Shipping

日誌傳送以修復意外刪除?

  • October 20, 2020

我正在閱讀 Carter 的《Pro SQL Server 2019 Administration》一書:

在此處輸入圖像描述

使用者不小心刪除數據的場景;他提到我們可以(從 DR 伺服器)恢復數據,然後“重新填充生產伺服器”。

然後他補充說“這意味著您不需要恢復備份來恢復數據。”

他所說的“重新填充”是什麼意思?這比備份/恢復有什麼更好/不同?

由於 DR 站點上的數據庫處於read_only模式,您可以從主伺服器上發生刪除的 DR 表中導出數據,並使用從 DR 站點導出的數據為該表“重新填充”主伺服器。如果數據庫非常大,這將特別有用,因為您不必恢復整個數據庫即可僅恢復一張表。

當然,這假設包含 的日誌記錄deletes尚未應用於 DR 數據庫。

為了便於討論,我們假設將更改應用到 DR 伺服器上的數據庫有30 分鐘的延遲(滯後)。

  • 10:00 使用者刪除了他們不應該擁有的東西。
  • 10:10 他們打電話給你。
  • 10:20 您在備用數據庫上查詢(尚未更改的表)。您找到他們刪除的行並將它們複製到另一個表中,將數據移植回主數據庫並重新插入它們。
  • 10:30 日誌傳送“趕上”,行從備用數據庫中刪除。
  • 10:50 在您將它們“放回”到主數據庫後的 30 分鐘,這些行被重新添加到備用數據庫。

您所做的只是將一個表查詢到另一個表中,將其移植到另一個數據庫並執行另一個insert..select 以將行重新填充到原始表中。

面對現實吧; 這很容易

替代方案?

您必須從某個時間點恢復數據庫的副本

$$ just $$在他們刪除行之前。根據數據庫的大小,這可能需要一段時間,當然,您必須手頭有磁碟空間才能進行恢復(您應該將其置於“熱備用”狀態,以備不時之需)。 然後您可以再次執行整個插入..選擇、埠、插入..選擇。

這聽起來“不錯”,但是……快速現實檢查。

三十分鐘是計算時間的永恆。在您的 DR“循環”中有這麼多滯後只是在自找麻煩(儘管您的恢復目標可能會有所不同)。 ,而不是分鐘,通常是這裡的業務順序。當使用者意識到他們做了一些愚蠢的事情時,您通常會期望備用數據庫與主數據庫處於相同的混亂狀態。

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