天天看點

使用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,valuesql_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)

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

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

結果如下:

0表示檔案是不是MDF檔案

1最詳細可以查詢資料庫檔案大小增長檔案ID

2顯示資料庫名稱,内部版本号已經排序規則

3是1的縮減版結果

使用DBCC checkprimaryfile查詢剛才附件的檔案就報了上面的錯誤,是以确信這個MDF檔案錯誤了,使用其他檔案就可以正确附加。

其實解決這個問題沒必要這麼麻煩,幾個MDF檔案試一次就可以了。但是知道了這個指令,以後想查詢Detach資料庫資訊了,就非常容易了。

另外有一個好的命名習慣是很重要的,不要将所有的輔助檔案也命名為MDF,應該為NDF或者自己制定規則。

本文轉自 lzf328 51CTO部落格,原文連結:http://blog.51cto.com/lzf328/1119452