我在我们的 SQL Server 上启用了即时文件初始化,因此数据库文件的“空”部分在分配之前不会清零。我的理解是,这意味着该文件可能包含“已删除”的数据。
所以现在我想向公司外部发送一份数据库副本(可能是备份文件)。但是文件中存在所有可能敏感的“已删除”数据。现在我想将文件未使用的部分归零。
那可能吗?我想我可以创建一个新的数据库并将所有内容复制过来,或者可能将数据库的副本恢复到另一台服务器而不启用即时文件初始化,然后使用 ShrinkFile 命令积极删除数据库文件的大部分或全部未使用部分,但有没有更省时省力的方法呢?理想情况下,一个命令告诉 SQL 将文件清零,就像在未启用即时文件初始化时它会做的那样。
SQL Server BACKUP仅备份用于保存数据的区。未使用的范围由备份留下。当一个页面用于数据时,它会根据需要进行格式化以供使用,因此该页面将没有旧数据。
因此,您需要做的就是备份数据库并在别处恢复它。恢复的文件将与原始数据库大小相同,但未使用的范围将使用目标服务器的功能创建。这可以使用目标服务器上的磁盘块完全初始化或立即初始化。
但是,由于扩展区是备份发生的级别,扩展区中未使用的页面在另一台服务器上恢复时仍有可能暴露一些数据。没有在源服务器上暴露的那么多,因为没有恢复未使用的范围。
您是否考虑过恢复它的副本,启用 TDE 将强制它为 0,然后再次禁用 TDE?我还没有对此进行测试,但我认为它会起作用,但我们必须对其进行测试。
还有其他事情,您是否考虑过在禁用 IFI 的情况下恢复它的副本,用新文件创建一个新文件组,调整它的大小,在新文件组上重建聚簇索引和其他索引,然后删除现有文件组(如果它是主文件组你必须缩小它,因为你不能放弃主要的)