日期:2014-05-16  浏览次数:20444 次

使用DBCC CHECKPRIMARYFILE 查询Detach数据库信息

在论坛碰到有人问到无法Attach数据库的问题,错误信息为:

 

Msg 5171, Level 16, State 1, Line2 path\allen_log.ldfis not a primary database file.

 

很明显这个错误表示Attch数据库选择的文件不是主数据库文件,但是看附加的数据文件确实是MDF结尾的。问用户是否有多个MDF文件,用户说是,但是他确定选择的文件肯定是主数据文件,不会有错。他认为数据库文件是损坏了,我很确信这个错误是因为选择的主数据文件不对。

 

Profiler Trace抓了一下,看到后台执行下面的语句:

 

declare @command nvarchar(300)

                  select @command = 'dbcc checkprimaryfile (N'''+ @fileName+ ''' , 2)'

                  create table #smoPrimaryFileProp(propertysql_variantNULL,value sql_variantNULL)

                  insert #smoPrimaryFileProp exec(@command)

 

里边使用了'dbcc checkprimaryfile,从网上查了一下这个DBCC命令可以查询Detach的数据库主数据文件信息,有四个选项可以使用:

 

DBCCCHECKPRIMARYFILE('D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\backup\allen.mdf', 0)

GO

DBCCCHECKPRIMARYFILE('D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\backup\allen.mdf', 1)

GO

DBCCCHECKPRIMARYFILE('D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\backup\allen.mdf', 2)

GO

DBCCCHECKPRIMARYFILE('D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\backup\allen.mdf', 3)