SQL Server數據恢復准備之TRUNCATE TABLE理解
轉自:https://blog.51cto.com/aimax/2142553
當truncate table發生時,如何進行恢復,相信大部分人都會選擇通過還原備份到truncate table前,然后將數據重新導入正式表中。
那么在SQL Server中是不是真的只有這種方法呢,當然不是,這也是本文即將介紹的內容,前提條件是SQL Server完整恢復模式(大容量日志模式未做測試,暫不介紹)。
首先,了解一下truncate table的一些相關知識
官檔:
TRUNCATE TABLE 通過釋放用於存儲表數據的數據頁刪除數據,且僅在事務日志中記錄頁釋放。
這句話包含的信息量是很大的,通過實驗進行驗證,解釋如下:
truncate table時,數據庫日志中不會記錄確切的已刪除值,只記錄截斷記錄的頁的ID,並且這些記錄所占用的空間會被標識為可重寫,
mdf中會暫時保留這些頁內的數據,當有新事務寫入這些頁時,truncate table的數據將會被覆蓋(數據頁被format,然后重新使用)。
測試:
創建一張表,並插入數據
利用dbcc ind找到該表的數據頁,如下PageType=1為數據頁,即為:288
使用dbcc page查看數據頁內容