本文转自百度id:zqgm0412空间http://hi.baidu.com/zqgm0412/blog/item/d367d4109464b9f7c2ce790a.html

MSSQL 数据库修复,语句参考及单用户模式的处理

修理还原一个库的时候,碰到库不完整的情况,采用DBCC修复。

DBCC CHECKALLOC (Transact-SQL)
检查指定数据库的磁盘空间分配结构的一致性。 http://msdn.microsoft.com/zh-cn/library/ms188422.aspx

DBCC CHECKDB (Transact-SQL)

 

通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性。http://msdn.microsoft.com/zh-cn/library/ms176064.aspx

DBCC CHECKCATALOG (Transact-SQL)

 

检查指定数据库内的目录一致性。数据库必须联机。http://msdn.microsoft.com/zh-cn/library/ms186720.aspx

DBCC CHECKFILEGROUP (Transact-SQL)

 

检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性。http://msdn.microsoft.com/zh-cn/library/ms187332.aspx

DBCC CHECKTABLE (Transact-SQL)
检查组成表或索引视图的所有页和结构的完整性。 http://msdn.microsoft.com/zh-cn/library/ms174338.aspx

其中修复数据库语句 DBCC CHECKDB 的三个重要参数:

快速修复:DBCC CHECKDB ('databasename', REPAIR_FAST) 
重建索引并修复:DBCC CHECKDB ('databasename', REPAIR_REBUILD)
如果必要允许丢失数据修复:DBCC CHECKDB ('databasename', REPAIR_ALLOW_DATA_LOSS)

如果出现错误:未处理修复语句。数据库需处于单用户模式下。

可以先启用单用户模式,方法如下执行存储过程:

use databasename
go
sp_dboption databasename,single,true

====END=====

或者在企业管理器中(以sql2000为例),选中要置于单用户模式的数据库,然后“右键”——“属性”——“选项”选项卡——“访问”点选限制访问,选择单用户即可。

注意:单用户模式下,对数据库启动一个连接,企业管理器或者查询分析器,二选一。

如果知道是哪个表出错,可以选择DBCC CHECKTABLE:检查指定表或索引视图的数据、索引及 textntext 和 p_w_picpath 页的完整性。

其语法为:DBCC CHECKTABLE

    ( 'table_name' | 'view_name'
        
NOINDEX
            | index_id
            | { REPAIR_ALLOW_DATA_LOSS
                | REPAIR_FAST
                | REPAIR_REBUILD }
        ] 
    )    [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]
                    [ [ TABLOCK ] ]
                    [ [ ESTIMATEONLY ] ]
                    [ [ PHYSICAL_ONLY ] ] 
                } 
        ] 

另外有个有趣的命令,可以显示错误表页的讯息:(显示1:25错误)

dbcc traceon(3604) 
dbcc page(DB_name,1,25,3)