![SQL Server-截断表后备份中的敏感数据](https://linux22.com/image/705664/SQL%20Server-%E6%88%AA%E6%96%AD%E8%A1%A8%E5%90%8E%E5%A4%87%E4%BB%BD%E4%B8%AD%E7%9A%84%E6%95%8F%E6%84%9F%E6%95%B0%E6%8D%AE.png)
我有一个 Microsoft SQL 2008 R2 数据库,其中有大约 50GB 的客户数据和大约 500MB 的非客户特定数据,如库存、零件、术语等。我使用以下粗略程序生成了一个没有客户数据的数据库干净副本进行测试(它是完全脚本化的):
- 将生产数据库备份到文件
- 将文件恢复到测试数据库(此时为简单恢复模式)
- 精心策划的 TRUNCATE TABLE/DELETE 语句,从数据库中删除所有客户数据
- 插入一些测试客户,使其最低限度可用
- 收缩数据库+收缩测试数据库上的日志
- 将测试数据库备份到“干净”的备份文件
现在,我们将允许外部开发人员获取上一步生成的干净备份文件的副本,而不仅仅是 SQL 服务器(查询)访问测试数据库。
我的问题:我能否确定从步骤 6 开始,所有包含客户敏感数据库的页面/区都已被清零/删除(如果备份文件本身是用十六进制编辑器打开的)?覆盖索引怎么样,是否还会有“脏”页面?我相信这个问题有详细的答案,但我似乎无法在网上找到它。
后续问题:我正在备份和恢复 50+GB,最终得到一个 500MB 的数据库。500MB 仍然比我想通过 INSERT 语句重放到空数据库中的容量要大。有没有更好的方法来克隆 300 个表的结构以及 50 个表的结构+数据?我们每月至少进行 2 次重大架构更改(新表、新列、删除列等)。当前脚本可能需要 10 分钟才能运行,所以我对它还满意,但如果可能的话,我想改进一下。