Sql server DBCC SHRINKFILE EMPTYFILE因sysfiles1表而阻塞

Sql server DBCC SHRINKFILE EMPTYFILE因sysfiles1表而阻塞,sql-server,sql-server-2008,data-migration,Sql Server,Sql Server 2008,Data Migration,我正在尝试将SQLServer2008上相当大的数据库从一个驱动器迁移到另一个驱动器,并尽量减少停机时间,但遇到了一些问题 所以,基本上,我的计划是使用DBCC SHRINKFILE“filename”,EMPTYFILE来移动数据块。 经过一段时间后,我缩小了这个文件,以避免其他服务器中的日志传送数据库出现一些空间问题。 成功移动了大量数据块,但随后出现了此错误 DBCC SHRINKFILE:系统表SYSFILES1第1:21459450页无法移动到其他文件,因为它只能驻留在数据库的主文件中

我正在尝试将SQLServer2008上相当大的数据库从一个驱动器迁移到另一个驱动器,并尽量减少停机时间,但遇到了一些问题

所以,基本上,我的计划是使用DBCC SHRINKFILE“filename”,EMPTYFILE来移动数据块。 经过一段时间后,我缩小了这个文件,以避免其他服务器中的日志传送数据库出现一些空间问题。 成功移动了大量数据块,但随后出现了此错误

DBCC SHRINKFILE:系统表SYSFILES1第1:21459450页无法移动到其他文件,因为它只能驻留在数据库的主文件中。 味精2555,16级,状态1,第3行 无法将文件名的所有内容移动到其他位置以完成清空文件操作。 DBCC执行已完成。如果DBCC打印了错误消息,请与系统管理员联系

所以,我已经试过了:

通过添加空空间手动使我的数据库变大通过更改数据库使文件变大 稍微处理辅助文件组中的文件 在完全\事务性备份后使用数据库 但这不起作用。 有人能帮我修一下吗


非常感谢。

正如错误消息所述,有些东西需要驻留在主文件组中。使用sys.allocation\u units中的信息,找出与系统对象相对的用户仍在主要位置,并在其他\u文件组上使用create index…with drop\u existing=on移动它们。移动所有对象后,应该能够将文件缩小到尽可能小的大小。最后一步是导致移动主文件的停机时间。在这种情况下,最小停机时间并不意味着没有停机时间。幸运的是,实际上需要驻留在主服务器中的数据并不多,因此停机时间应该很小。但是一旦你把所有的东西都弄出来,你就会有一个好主意

此时,请将数据库的默认文件组设置为主文件组以外的其他文件组,以避免将来将用户对象放在那里