我们有一个超过 TB 的数据库——我们通常会备份它,然后当开发人员创建克隆数据库以针对它进行开发时,会获取该数据库的副本并将其恢复到新的实例中。我们有很多开发人员确实不需要的数据(日志表等)我想获取主数据库,运行 TFS 脚本将数据库恢复到不同的服务器,并将其从 Full 更改为简单恢复模式,截断很多大表收缩数据库并备份它,然后使用这个副本来运行我们的克隆系统。缩小需要很长时间——我已经运行了 4 个小时,到目前为止我们已经缩小了大约 13G 的数据。目前,我可以将它缩小到 336,857.24 MB——这需要几天时间才能得到。有没有人遇到过这个问题?有什么方法可以更快地收缩吗?我已经阅读了有关创建新文件组的信息,但我真的不想编写每个表的脚本 - 有数百个表。谢谢你。
收缩就是收缩,它做它必须做的事情。没有办法让它通过一些魔术开关或其他东西更快地将页面移动到文件的开头。由于页面的移动,您将受到 I/O 的限制。
您可以随时尝试 TRUNCATEONLY 选项,看看您是否幸运(文件末尾有很大一部分没有使用过的页面)。但这可能很难自动化。
有些事情让收缩变得超级慢:
看到你们可以先改善以上任何一项。将堆表更改为聚簇表。截断 LOB 页面。等等,即在恢复之后但在收缩之前。
另一个选项可能是 DBCC CLONEDATABASE。使用正确的选项,如果您使用足够高的 SQL Server 版本,您可以获得数据库的非数据副本。然后仅将您需要的数据从 prod 移动到该数据库(使用 SSIS 或任何适合您的方法)。这是否有益将取决于您最终真正需要多少数据。