使用DBCC CHECKPRIMARYFILE 查询Detach数据库信息 推荐
2013-01-16 11:35
323 查看
在论坛碰到有人问到无法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)
结果如下:
0表示文件是不是MDF文件
1最详细可以查询数据库文件大小增长文件ID
2显示数据库名称,内部版本号已经排序规则
3是1的缩减版结果
使用DBCC checkprimaryfile查询刚才附件的文件就报了上面的错误,所以确信这个MDF文件错误了,使用其他文件就可以正确附加。
其实解决这个问题没必要这么麻烦,几个MDF文件试一次就可以了。但是知道了这个命令,以后想查询Detach数据库信息了,就非常容易了。
另外有一个好的命名习惯是很重要的,不要将所有的辅助文件也命名为MDF,应该为NDF或者自己制定规则。
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)
结果如下:
0表示文件是不是MDF文件
1最详细可以查询数据库文件大小增长文件ID
2显示数据库名称,内部版本号已经排序规则
3是1的缩减版结果
使用DBCC checkprimaryfile查询刚才附件的文件就报了上面的错误,所以确信这个MDF文件错误了,使用其他文件就可以正确附加。
其实解决这个问题没必要这么麻烦,几个MDF文件试一次就可以了。但是知道了这个命令,以后想查询Detach数据库信息了,就非常容易了。
另外有一个好的命名习惯是很重要的,不要将所有的辅助文件也命名为MDF,应该为NDF或者自己制定规则。
相关文章推荐
- 使用DBCC CHECKPRIMARYFILE 查询Detach数据库信息
- 查询数据库中表使用的空间信息。
- 使用SQL语句查询数据库信息及表结构
- 如何在 SQL Server 2005 中使用 DBCC SHRINKFILE 语句收缩事务日志文件-数据库知识
- 使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错
- Scripts:查询数据库中参数文件的信息(在重新建库或者克隆数据库时经常使用)dba_cr_init.sql
- 【mysql元数据库】使用information_schema.tables查询数据库和数据表信息
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SQLPERF提供所有数据库的事务日志空间使用情况统计信息
- DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- 使用DBCC SHRINKFILE EMPTYFILE 选项迁移数据 推荐
- 使用DBCC DBINFO查询数据库信息
- 使用DBCC DBINFO查询数据库信息
- DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- 使用java查看mongodb的数据库、集合以及数据信息
- oracle 9i使用闪回查询恢复数据库误删问题
- 数据库设计不推荐使用Bool类型