2012-03-28 78 views
1

我想知道如果在截斷期間取消查詢執行會發生什麼情況,記錄是否被刪除?有什麼方法可以恢復它們嗎? 截斷在包含1,5百萬條記錄的表上被激活 從谷歌的一個小搜索我明白答案是否定的,但我想確定。 我正在使用SQL Server 2005在截斷期間取消查詢

+1

如果截斷是未提交的事務的一部分,取消查詢執行可能會導致記錄被還原。 – 2012-03-28 12:23:34

+1

如果你實際上設法取消它中間截斷,並且不在一個明確的事務中,它將作爲自動提交事務的一部分被回滾。可能不太可能,儘管截斷非常快,並且延遲截斷可以用於巨大的表。 – 2012-03-28 12:25:33

+0

這不是交易的一部分。當我計算取消後,它只有30萬條記錄。我想其餘的已經沒有了...... – Cat 2012-03-28 12:35:28

回答

3

Truncate解除分配給表的頁面。

這仍然是原子的,因爲您可以取消並使其回滾。您也可以將一個TRUNCATE放入一個顯式事務中並執行回滾。

但是,一旦提交事務,記錄就不存在了。與DELETE不同,由於該操作的記錄最少,因此記錄內容的事務日誌中沒有記錄。

+0

謝謝,下次我會更加小心......非常不幸 – Cat 2012-03-28 12:38:50

+0

第0步:完整備份 – datagod 2012-03-28 12:46:27

+0

你是對的,它是完全意外的 – Cat 2012-03-28 12:54:40

0

this鏈接

據我所知很好的解釋,如果你有一個交易的控制,無論是刪除並截斷可以回滾。

不同之處在於,在沒有事務的情況下,如果您執行了DELETE操作,仍然可以通過恢復日誌來恢復數據,例如,您無法在TRUNCATE上執行操作,因爲刪除操作將被記錄爲行-row和truncate,正如@JNK指出的那樣,被最小化記錄。