備份是否包括仍在表的物理結構中的已刪除的隱藏列?
如果我有一個包含一
NVARCHAR(MAX)
列的表並將其刪除,則回收它使用的空間的標準方法是:
- 重建聚集索引或
- 跑
DBCC CLEANTABLE
如果我沒有執行其中任何一項,該列仍然保留
sys.system_internals_partition_columns
在表的物理結構中(通過 可見),並且對數據庫進行了完整備份和恢復,恢復的副本是否仍會在其物理結構中刪除列並且佔用與我刪除列之前相同數量的空間?對於我自己的案例,我正在查看 SQL Server 2012,但我認為這個功能在所有相對現代的版本中都是相同的。我知道這很容易測試,但我希望有人對此有更多的背景知識,因為我自己找不到太多東西。
參考:
如果我有一個包含 NVARCHAR(MAX) 列的表並且我刪除它
我寫了關於如何使用DBCC CLEANTABLE來回收空間的文章。
在後台,sql server 只是釋放頁面,然後一個名為ghost clean up 的後台執行緒將清理數據。
我假設您要問的另一個方面是物理數據安全性 - 我如何確保我的數據在刪除/刪除後無法恢復?
為了回答這個問題,SQL Server 提供了 -
sp_clean_db_free_space
在數據或備份文件的物理安全存在風險的環境中,您可以使用 sp_clean_db_free_space 來清理這些幽靈記錄。
執行 sp_clean_db_free_space 所需的時間長度取決於文件大小、可用空間和磁碟容量。因為執行 sp_clean_db_free_space 會顯著影響 I/O 活動,我們建議您在正常執行時間之外執行此過程。
話雖如此,破壞數據真的很難,尤其是。用於下拉列
- 如果您的列數據類型被定義為固定長度,例如 char(10)(需要重建索引;對於堆,請創建一個聚集索引,然後將其刪除,因為沒有其他選項)
- 如果您的列數據類型定義為可變長度,例如 varchar(10) / nvarchar(10)(可以由 dbcc cleantable 處理)
Michael J. Swart 在It’s Hard To Destroy Data上有一篇非常有趣的文章——尤其是帶有不同選項的匯總表。