在論壇碰到有人問到無法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)
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)
650) this.width=650;" alt="" src="http://www.bkjia.com/uploads/allimg/131229/1SR91R5-0.png" />
結果如下:
0表示檔案是不是MDF檔案
1最詳細可以查詢資料庫檔案大小增長檔案ID
2顯示資料庫名稱,組建號已經定序
3是1的縮減版結果
使用DBCC checkprimaryfile查詢剛才附件的檔案就報了上面的錯誤,所以確信這個MDF檔案錯誤了,使用其他檔案就可以正確附加。
其實解決這個問題沒必要這麼麻煩,幾個MDF檔案試一次就可以了。但是知道了這個命令,以後想查詢Detach資料庫資訊了,就非常容易了。
另外有一個好的命名習慣是很重要的,不要將所有的輔助檔案也命名為MDF,應該為NDF或者自己制定規則。
本文出自 “關注SQL Server技術” 部落格,請務必保留此出處http://lzf328.blog.51cto.com/1196996/1119452