我试图将SQLServer 2008上相当大的数据库从一个驱动器迁移到另一个驱动器,停机时间最短并且存在一些问题。
所以,基本上,我的计划是使用DBCC SHRINKFILE(' filename',EMPTYFILE)进行范围移动。 经过一段时间后,我缩小此文件以避免日志传送db在其他服务器中出现一些空间问题。 大量的范围被成功移动,但后来我发现了这个错误
DBCC SHRINKFILE:系统表SYSFILES1 Page 1:21459450无法移动到其他文件,因为它只能驻留在数据库的主文件中。 Msg 2555,Level 16,State 1,Line 3 无法移动文件的所有内容" filename"到其他地方完成emptyfile操作。 DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。
所以,我已经尝试过了:
这并没有奏效。 有人可以帮我解决这个问题吗?
非常感谢。
答案 0 :(得分:0)
正如错误消息所述,有些东西需要驻留在PRIMARY文件组中。使用sys.allocation_units中的信息找出仍在PRIMARY中的用户(而不是系统)对象,并使用create index … with (drop_existing = on) on OTHER_FILEGROUP
移动它们。移动完所有对象后,您应该能够将文件缩小到尽可能小的范围。您的最后一步将是停止移动主文件的停机时间(在这种情况下,最短的停机时间并不意味着“没有停机时间”)。幸运的是,实际需要驻留在PRIMARY中的数据并不多,因此停机时间应该很短。但是一旦你把所有东西都拿出来,你就会有一个好主意。
当您使用它时,请将数据库的默认文件组设置为非主要文件组,以避免将来放置用户对象。