昨天,我问了一个关于如何减少数据库大小的问题。社区建议使用命令dbcc shrinkdatabase
。我听从了他们的建议并运行了超过 24 小时的命令。但是,我遇到了一个错误,因为我的硬盘驱动器已满。该命令似乎没有减小文件大小,而是dbcc shrinkdatabase
增加了它(参见照片链接)。此外,即使没有添加额外的数据,数据库中原来的可用空间现在也被填满了。我做错了吗?
这是我运行的确切查询:
在我用完空间后将DBCC SHRINKDATABASE (<DB>,1); GO
其更改为(当前仍在运行,nad 尚未完成。停在中间)DBCC SHRINKDATABASE (<DB>,10); GO
请注意:
- 我知道这会使我的索引碎片化,我对此没有意见
- 这是一个开发环境,没有额外的数据进出
- 我正在运行 SQL Server 和 SSMS 2017
有人可以帮帮我吗。我做错了什么吗?我应该更改查询吗?
记录将数据页移动到文件的开头。如果您不在简单恢复模式中,则 ldf 文件需要能够容纳这些日志记录。这就是发生在你身上的事。预期的。
另外,我们倾向于建议使用 SHRINKFILE 而不是 SHRINKDATABASE,因为您可以更好地控制您正在做的事情。在这种情况下无济于事,但仅供参考。
所以你有大约 170GB(数据文件中的已用空间)需要移动到文件的开头。这需要一段时间。有些事情会花费很长时间(LOB 页面、堆表、等待锁)。考虑是否可以让数据库处于简单恢复模式(与您的 DBA 交谈,这会影响备份例程),并且还可以缩小较小的部分。