在处理碎片磁盘空间时,我将第二个数据文件添加到我的一个数据库中。大多数数据现在都在第二个文件中,我想删除第一个文件以简化事情。但是,它是主要数据文件:
Msg 5020, Level 16, State 1, Line 3
The primary data or log file cannot be removed from a database.
那么如何将第二个文件标记为主要文件,以便删除第一个文件?
在谷歌搜索这个问题时,我看到很多人试图删除文件组,但我只是想从组中删除一个文件。
同样的情况,但没有关于“主数据文件”的问题:https ://stackoverflow.com/questions/2183742/remove-merge-sql-servers-database-secondary-data-file 。
类似,但对于具有不同问题的日志文件:https ://stackoverflow.com/questions/10839374/sql-server-database-has-2-log-files-and-i-want-to-remove-one-how . 我有兴趣删除数据文件。
类似的情况,但问题在于清空文件:http ://www.sqlservercentral.com/Forums/Topic464326-5-1.aspx 。
主数据库文件永远无法删除,因为它包含仅存在于该文件上且无法重定位的特殊页面结构。如果您需要单个数据库文件,请使用带有 EMPTYFILE 选项的DBCC SHRINKFILE从辅助文件中移动所有数据,然后删除辅助文件。最后,重建/重组索引以减少碎片。
不可移动页的一个例子是数据库引导页,它是每个数据库的主数据文件的第 9 页。有关详细信息,请参阅 Paul Randal 的页面剖析。