为什么删除的数据在SQL Server备份文件中仍然存在?

时间:2013-06-21 13:56:26

标签: sql-server database-backups pii

我想备份我的SQL Server数据库,以便将其发送给我的供应商以帮助诊断。但是,我不想在表中包含客户信息的数据。

以下是我尝试的内容:制作数据库副本,删除所有包含客户信息的表格,然后备份结果。

但是,当我在文本编辑器中查看备份时,我发现备份文件中有大量私有数据。知道为什么吗?

2 个答案:

答案 0 :(得分:3)

当您删除SQL Server数据库中的数据时,SQL Server只会将页面标记为空闲,但不会覆盖数据。就像任何现代文件系统一样,实际上并没有删除文件,只是将磁盘块标记为空闲。

要清理数据库,我会尝试以下方法:

  1. 删除数据
  2. 重建所有索引和堆(重建,而不是重新组织)
  3. 将每个数据文件缩小,并将页面重组为最小可能的大小
  4. 重复2次和3次
  5. 执行检查点
  6. 分离数据库并重命名日志文件
  7. 重新附加数据库,强制SQL Server重新创建新的空日志文件(http://www.mssqltips.com/sqlservertip/1894/attach-a-sql-server-database-with-a-missing-transaction-log-file/
  8. 运行DBCC CHECKDB以确保您没有破坏任何内容
  9. 进行备份
  10. 现在这是一个非常具有破坏性的过程,因此请务必永远对您想要自己使用的数据库执行此操作,但它应删除所有已删除的数据。

    重建索引是必要的,因为否则单个已删除的行可能会在页面中未删除的行中存在。重组和缩小会删除未使用的页面。但有时它不会完全清理,因此您需要重复步骤2和3. 4,5和6确保日志文件中没有剩余数据的痕迹,否则将根据您的恢复模型,仍然包含已删除的数据,可能会多次。

答案 1 :(得分:0)

这里可能是一个很好的答案:

https://serverfault.com/questions/33432/does-restoring-a-sql-database-from-backup-rebuild-its-indexes

请记住,表(应该)是聚簇索引。