检查和修复SQL Server数据库
软件世界
在使用硬盘的时候,我们会在使用一段时间后对磁盘做一次检查,看看是否有坏道和文件是否都正常。而在使用SQL Server 的时候,作为数据库管理员也一样必须对运行了一段时间的数据库做检查,保证数据库可以正常地运行和使用。但是在SQL Server 中我们没有图形界面工具来完成这个工作,惟一的方法是使用DBCC这个工具。下面我们来看看如何使用DBCC来完成数据库的检查和修复工作。
DBCC是SQL Server中提供检查数据库的一个集合工具。这个工具中包含了大量的命令,本文使用的是DBCC CHECKDB这个命令。下面我们就看看如何使用它。
基本语法:
DBCC CHECKDB
( 'database_name'
[ , NOINDEX
| { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD
} ]
) [ WITH { [ ALL_ERRORMSGS ]
[ , [ NO_INFOMSGS ] ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
[ , [ PHYSICAL_ONLY ] ]
}
]
一、检查数据库
首先打开查询分析器,选择要检查的数据库,然后输入:DBCC CHECKDB。运行后我们可以看到很多信息。如果数据库没有错误,那么在最后一行我们可以看到“CHECKDB 发现了 0 个分配错误和 0 个一致性错误”。如果有错误,那么系统会将错误一一列出。图1显示了用DBCC CHECKDB检查master数据库的情况。当在DBCC CHECKDB中不指定数据库时,默认它将对当前数据库进行检查,也就是在工具栏中我们选择的数据库。
如果待查数据库的表比较少的话,那么直接输入DBCC CHECKDB即可。如果表比较多,我们可以使用: DBCC CHECKDB WITH NO_INFOMSGS,如果数据库没有问题,那么将不会看到详细信息,但是,如果有错误则将详细列出。
还有个参数是:ALL_ERRORMSGS。如果使用了这个参数,那么将列出全部的错误信息。如果不使用它,那么数据库只列出前200个错误,超过此数的错误将不会列出。
二、修复数据库
当用上面的命令检查后,如发现了数据库有错误,那么我们可以使用修复命令来修复数据库。关于修复数据库的命令仍然是:DBCC CHECKDB,不同的是我们需要使用别的参数。一共有3个参数,我们来分别看看。
REPAIR_ALLOW_DATA_LOSS:包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。
REPAIR_FAST:进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。
REPAIR_REBUILD:除了重建索引外。完成REPAIR_ALLOW_DATA_LOSS中的所有修复。
注意,如要使用这3个参数,我们必须将要修复的数据库设置为单用户模式。如我们要使用REPAIR_FAST参数,那么具体的步骤是:
1.打开企业管理器,选择要进行修复的数据库,然后右击,在出现的窗口中选择“属性”,在属性窗口中选择“选项”标签。
2.选中“限制访问”下的“单用户”(图2),然后点击“确定”退出。接着刷新数据库。稍等一会我们可以看到数据库的图标中有一个人的头像,并且在旁边显示了“单个用户”(图3)。在本文中将数据库g设置为单用户。
3.打开查询分析器,输入如下命令:DBCC CHECKDB (g,REPAIR_FAST)。其中g是要修复的数据库,并且是单用户访问。记住修复完成后将数据库恢复为多用户,方法是将图2的“限制访问”取消掉。
小结
除了DBCC CHECKDB外,我们还可以使用DBCC CHECKTABLE来对单个表进行检查,它是DBCC CHECKDB的子集,其语法和DBCC CHECKDB一样,同时也有和DBCC CHECKDB一样的3个修复参数,这里我们就不多说了。
其实在SQL Server 中还有很多CHECK开头的检查命令,但是这些都是CHECKDB的子集,所以一般我们只要掌握好了CHECKDB,那么大部分情况下就够用了。


