如果我有一个包含一NVARCHAR(MAX)
列的表并且我删除了它,回收它使用的空间的标准方法是:
- 重建聚簇索引或
- 跑
DBCC CLEANTABLE
如果我不执行其中任何一个,该列仍然保留(通过可见sys.system_internals_partition_columns
)在表的物理结构中,并且对数据库进行了完整备份和恢复,恢复的副本是否仍然在其物理结构中删除了列并且占用与删除列之前相同的空间?
对于我自己的用例,我正在查看 SQL Server 2012,但我认为它在所有相对现代的版本中都具有相同的功能。我知道这很容易测试,但我希望有人对此有更多的背景知识,因为我自己找不到太多。
参考:
我写过如何使用DBCC CLEANTABLE回收空间。
在幕后,sql server 只是释放页面,然后一个名为ghost clean up 的后台线程将清理数据。
我假设您要问的另一个方面是物理数据安全性——我如何确定我的数据一旦删除/删除就无法恢复?
为了回答这个问题,SQL Server 提供了——
sp_clean_db_free_space
话虽如此,销毁数据真的很难,尤其是。对于下拉列
Michael J. Swart 有一篇关于很难销毁数据的非常有趣的帖子——尤其是具有不同选项的汇总表。