不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。
Posted ajiangg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。相关的知识,希望对你有一定的参考价值。
SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题。
但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某个文件组中的剩余空间占了整个磁盘的很大一部分,而且磁盘空间已经吃紧的情况下,你也许会考虑收缩一下某个数据文件。
收缩数据文件时,可以每次收缩一点点(例如每次5GB)来进行。
然而博主最近对某个数据库进行数据库收缩时碰到了标题所示的困扰。在DBCC SHRINKFILE (db_name , target_size)执行了几次之后。
DBCC SHRINKFILE (db_name , target_size)
莫名出现了如下错误:
不能收缩 ID 为 6 的数据库中 ID 为 1 的文件,因为它正由其他进程收缩或为空。
据网上的经验,备份之后仍然不变,重启也无效,尝试重建某些表的索引,也无效。
但博主在尝试将数据库文件增加10MB,然后再次收缩数据库的时候这个错误消失了。
ALTER DATABASE db_name MODIFY FILE ( NAME = file_name, SIZE = target_size )
后来从官方社区找到了答案:应该是我在进行DBCC SHRINKFILE的时候正好同时进行了备份操作(定时日志备份)。
官方给的解决方法就是将要收缩的数据文件增加一点点,哪怕1MB。
本文地址:https://www.cnblogs.com/ajiangg/p/9968948.html
以上是关于不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。的主要内容,如果未能解决你的问题,请参考以下文章
SQL server2008 临时表tempdb如何自动释放存储空间
(2.17)备份与还原--事务日志不能截断的原因与收缩日志文件