2013-02-25 81 views
1

我意外地在錯誤的表格上執行了TRUNCATE命令,並且我的所有數據都消失了。我們確實有一個備份,但它的2周大,並沒有所有的最新數據。如何撤消TRUNCATE命令

任何想法如何回滾此命令並在可能的情況下獲取數據?有沒有第三方工具可以做到這一點?

+0

數據庫中有哪些恢復模式?假設你不能在'TRUNCATE'命令之前進行時間點恢復,那麼原則上數據可能是可恢復的,因爲'TRUNCATE'只是釋放頁面而使數據完好無損,但我不知道任何第三方工具這樣做。 – 2013-02-25 11:56:22

+0

如果數據庫處於完全模式並且日誌沒有因任何原因而被截斷,則可以嘗試立即備份事務日誌,然後將數據庫恢復到截斷之前的某個時間點。 – steoleary 2013-02-25 13:50:35

回答

2

簡單的答案是 - 如果它已經承諾你不能回滾事務,但你可以做其他的事情來找回數據(或者至少它的某些部分)。

當您執行truncate語句時,您的數據仍在MDF文件中,但它不可見,因爲SQL Server現在將其視爲可用空間(截斷基本上告訴SQL Server取消分配數據頁)。

返回數據的唯一方法是以某種方式讀取已釋放的數據頁並將其轉換爲可讀數據。

重要提示:您必須快速行動,因爲可用空間將被新數據覆蓋(如果尚未存在)。如果你可以停止你的SQL Server實例,並製作一份MDF和LDF文件的副本,這些文件會爲你提供更多的時間。

嘗試使用ApexSQL Recover。從我所知道的這是唯一可以做這種恢復的工具。如果你對SQL非常好,你可以嘗試修改和執行非常長的腳本,如this

0

除非是交易包裹,恐怕你運氣不好。 這裏是一個類似的帖子,但是這也有更多的解釋。

http://www.sql-server-performance.com/forum/threads/how-to-rollback-truncate-operation.16968/

+0

一個潛在解決方案的鏈接總是值得歡迎的,但請在鏈接中添加上下文,以便您的同行用戶瞭解它是什麼以及它爲什麼在那裏。始終引用重要鏈接中最相關的部分。想象一下,頁面被移動到另一臺服務器,或直接鏈接改變 - 未來的用戶將無法從答案中獲益。請看看[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – Jesse 2013-04-15 03:36:31