Sql-Server

如何找回一些已刪除的記錄?

  • July 16, 2020

我錯誤地從遠端 SQL Server 2008 表中刪除了大約 2,000,000 條記錄。伺服器沒有授予我訪問伺服器端備份文件的權限。

有沒有辦法找回這些記錄?

您的數據庫是否處於完全恢復模式?

  • 如果是,您是否在進行事務日誌備份?

    • 如果有,您是否有 Quest LiteSpeed、Red Gate SQL Backup 或 Idera SQLSafe 之類的備份實用程序?

      • 如果是,這些實用程序可以從備份文件(包括完整文件和事務日誌)中取消刪除對象 - 但解釋如何使用這些超出了我在這裡可以做的範圍。請與供應商聯繫以獲取說明。
      • 如果不是,則將完整備份和事務日誌還原為具有不同名稱的數據庫。(不要覆蓋現有數據庫。)您將能夠在刪除發生之前獲得對象的最新副本,但您需要使用 restore 命令的 stopat 部分來指定何時停止恢復命令。您需要在刪除發生之前停止。
    • 如果沒有,請獲取日誌閱讀器實用程序的副本,例如 Quest LiteSpeed 或 Apex SQL Log。這些實用程序可以連接到數據庫伺服器、檢查日誌文件並幫助您撤消事務。我不確定展示版是否可以使用,但付費版肯定可以。

  • 如果否(未處於完全恢復模式),則將上次完全備份還原為具有不同名稱的數據庫。(不要覆蓋您已經擁有的數據庫。)從那裡,您將能夠恢復備份時線上的任何記錄,但您將失去此後的所有更改。

SQL Server 為每條刪除的記錄保留日誌。fn_dblog您可以通過SQL Server 函式查詢這些日誌。

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
      AllocUnitName = 'dbo.TableName'        
  AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
  AND Operation in ( 'LOP_DELETE_ROWS' )   
;

但是這個日誌是十六進制格式的,你需要把這個十六進制格式轉換成你的實際數據。

下面的文章將幫助您以上面定義的方式恢復已刪除的記錄:

如何從 SQL Server 中恢復已刪除的數據

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