我在一个企业系统中工作,它有一个 1.5 TB 的数据库,它位于单个文件组上,日志处于简单恢复模式。由于我们有许多团队并行处理不同的项目,因此我们在不同环境中拥有该数据库的大约 20 个副本,以及主要的 DEV、QA、Staging 和 Production 副本。
对于 DEV、QA 和其他环境,我们不需要完整的数据库,因此我们开发了一个脚本来从前 20 个表中删除旧数据。这将回收大约 1 TB 的可用空间。在所有环境中,我们将在 SAN 上节省至少 15 TB 的磁盘空间。我知道这个缩小过程会导致索引碎片 - 但不要介意在数据库缩小后重建所有索引。
Shrink 数据库有两个问题:
它似乎需要永远;超过 48 小时。
它不会像预期的那样收缩数据库。收缩过程没有错误地完成,但在数据库中留下了 100 MB 的可用空间。
我试过了:
DBCC SHRINKFILE ( 'XXXX_Data', NOTRUNCATE )
GO
DBCC SHRINKFILE ( 'XXXX_Data', TRUNCATEONLY )
GO
DBCC SHRINKFILE ( 'XXXX_Log' ) GO
Run Code Online (Sandbox Code Playgroud)
我还尝试创建一个新的文件组并将数据移动到其中 - 没有结果。
有没有人在类似大小的数据库上做过这种类型的事情?关于如何最好地做到这一点的任何建议?或者有人知道为什么数据库收缩不起作用?