2

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

这是我尝试过的:复制数据库,删除所有包含客户信息的表,然后备份结果。

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

4

2 回答 2

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. 运行 aDBCC CHECKDB以确保您没有破坏任何东西
  9. 备份

现在这是一个非常具有破坏性的过程,因此请确保永远不要对您想要继续使用自己的数据库执行此操作,但它应该删除所有已删除的数据。

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

于 2013-06-21T14:25:23.783 回答
0

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

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

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

于 2013-06-21T14:57:17.193 回答