我最近从一批生产数据库中删除了表数据,并且我一直在使用 SSMS 中的“收缩文件”功能收缩数据库文件。一些数据库将缩小超过 50GB。我注意到这个过程需要很长时间才能完成,并且在这个过程运行时没有取消按钮。我正在通过 RDP 远程连接到所有数据库服务器,并且不能保证它们不会在修剪过程中重新启动。
如果收缩过程正在运行并且服务器重新启动,我会遇到数据库损坏吗?
我最近从一批生产数据库中删除了表数据,并且我一直在使用 SSMS 中的“收缩文件”功能收缩数据库文件。一些数据库将缩小超过 50GB。我注意到这个过程需要很长时间才能完成,并且在这个过程运行时没有取消按钮。我正在通过 RDP 远程连接到所有数据库服务器,并且不能保证它们不会在修剪过程中重新启动。
如果收缩过程正在运行并且服务器重新启动,我会遇到数据库损坏吗?
我认为这完全取决于停电时哪些页面正在运行。你可能会出来,但如果是我的数据,我当然不想在这里掷骰子。
DBCC SHRINKFILE
您可以使用命令一次少量地收缩文件,而不是只运行单个收缩操作(尤其是不要为此使用 UI) 。由于此选项允许您设置目标大小,因此您可以在短时间内重复运行该命令。
虽然这会降低您的腐败风险,但是,它可能会导致其他危害,例如增加碎片化。您可以先重建索引,然后使用 truncateonly 运行收缩文件,从而获得更好的效果。这将在重建可能将所有数据一起移向文件开头之后清除文件的“结尾”。
更好的解决方案可能是在其自己的文件组中添加第二个数据文件,将所有索引重建到新文件组上,然后缩小主文件会将其缩小到仅存在于其中的系统/元数据对象的大小。