2009-08-04 101 views
3

我正在使用事務更新表中的某些數據。事務的日誌在數據庫的ldf文件中可用。現在,用戶錯誤地提交了刪除記錄的事務,並且它已經提交併且數據被刪除。那麼是否有任何方式回滾該特定交易。請提出建議。我將衷心感謝您的幫助。回滾事務

謝謝,

回答

3

您不能回滾已提交的事務。

在事務提交之前,您將擁有數據庫的'point in time recovery'。您從事件發生前的最後一次完整備份開始,然後在事件發生前應用最新的差異,然後將所有日誌記錄到興趣點上,並在事件發生時停止,當您恢復數據庫時不使用任何其他日誌。鏈接中的更多細節。如果在該時間點之後還有其他事務需要恢復,則可以在出現錯誤時復原數據庫的副本,然後手動將已刪除的數據從副本數據庫複製到真實數據庫中。

+0

,不要忘記之後刪除可以通過這種方法迷路這項工作。如果數據庫在事件發生後已經使用了很多,這將變得非常棘手 – djna 2009-08-04 07:34:58

0

此外,對於以前的解決方案(即上述),可以使用日誌恢復命令中的「WITH STANDBY ='filename'」選項。這將允許您在恢復之間讀取數據庫,這使恢復數據變得容易一些。

如果是SQL 2000並且您有完整的備份和事務日誌備份文件,則可以使用該工具來提取撤消腳本。它仍然依賴於具有可恢復備份和事務日誌文件,但可以讓您過濾事務日誌並將SQL解壓縮爲腳本。我沒有收到任何副本,但它是一個免費的主要SQL工具供應商(例如Quest,Red Gate,Idera)。

3

使用內置的SQL Server函數和命令(如fn_dblog和DBCC LOGINFO)讀取事務日誌可能很困難,因爲所有數據都以十六進制格式存儲。手動查詢和轉換對於獲取可讀數據是必需的。這些是沒有記錄的功能,不能給出結果。理論上你可以跟蹤刪除的記錄,看看已被刪除

請注意,recovery model也是非常重要的,當涉及到數據,FULL或大容量日誌記錄模型應該用於

至於時間點的恢復恢復你可以看看article,它描述了使用SQL Server Management Studio和名爲ApexSQL Log的第三方工具的過程。還有其他第三方工具,如RedGate的SQL Rescue。請注意,您必須提供完整的事務日誌備份鏈:自存在完整數據庫備份以來的事務日誌備份鏈,或完整數據庫備份,然後是差異數據庫備份,然後是事務日誌備份鏈,直至點及時你想要數據恢復。

聲明:我ApexSQL工作作爲支持工程師