Sql-Server
如何找回一些已刪除的記錄?
我錯誤地從遠端 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' ) ;
但是這個日誌是十六進制格式的,你需要把這個十六進制格式轉換成你的實際數據。
下面的文章將幫助您以上面定義的方式恢復已刪除的記錄: