欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。

程序员文章站 2022-05-04 13:45:38
SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题。 但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某个文件组中的剩余空间占了整个磁盘的很大一部分,而且磁盘空间已经吃紧的情况下,你也许会考虑收缩一下某个 ......

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。

本文地址: