什么是DBCC?
DBCC是SQL Server中的一种命令,全称为Database Consistency Checker,即数据库一致性检查工具。DBCC除了能够检查数据库的一致性,还可以完成一系列维护任务,如释放空间,修复物理、逻辑上的问题等等。在DBCC中,DBCC CHECKDB是最常用的命令之一。它可以检查整个数据库的一致性并修复发现的问题。
DBCC CHECKDB的常见问题
问题1:DBCC CHECKDB执行过程中耗时过长
在大型数据库中,DBCC CHECKDB可能需要较长的时间才能完成。这时,可以在执行CHECKDB时添加参数PHYSICAL_ONLY,这可以让SQL Server只检查物理上的结构而不进行逻辑检查。这样可以大大缩短检查的时间。例如:
DBCC CHECKDB('MyDatabase', PHYSICAL_ONLY);
当然,这只是一个手段而已。如果你碰到了执行检查时耗时过长的问题,还可以更改SQL Server实例的其他配置,如IO系统、内存配置等。
问题2:DBCC CHECKDB无法修复发现的问题
在某些情况下,当DBCC CHECKDB发现数据库存在一些物理或逻辑上的问题时,它会尝试自动修复这些问题。然而,这并不意味着它总能修复成功。在一些复杂的情况下,DBCC CHECKDB可能无法自动修复问题。此时,需要手动修复,或者恢复备份文件。
DBCC CHECKDB的升级版本:DBCC CHECKDB WITH PHYSICAL_ONLY 和 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS
1. DBCC CHECKDB WITH PHYSICAL_ONLY
DBCC CHECKDB WITH PHYSICAL_ONLY是SQL Server 2005及以上版本的新特性,主要用于检查物理上的一致性问题。与普通的DBCC CHECKDB相比,DBCC CHECKDB WITH PHYSICAL_ONLY不会执行一些逻辑上的检查,因此检查速度较快。例如:
DBCC CHECKDB('MyDatabase', PHYSICAL_ONLY);
2. DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS
DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS是SQL Server 2008及以上版本的新特性,它是对DBCC CHECKDB的一种扩展,可以更全面地检查逻辑上的一致性问题,包括约束、索引等等。例如:
DBCC CHECKDB('MyDatabase', EXTENDED_LOGICAL_CHECKS);
DBCC CHECKDB那些常用参数
1. REPAIR_ALLOW_DATA_LOSS
当检查中发现一些严重的问题时,这个参数可以尝试修复这些问题。然而,该选项可能导致数据损坏,因此应小心使用。例如:
DBCC CHECKDB('MyDatabase', REPAIR_ALLOW_DATA_LOSS);
2. REPAIR_REBUILD
此选项用于修复一些范围限定的问题。它可以重建索引和对象,但不会宽泛地重构数据库。使用此选项能够提高检查的速度,而且数据风险较低。例如:
DBCC CHECKDB('MyDatabase', REPAIR_REBUILD);
3. REPAIR_FAST
该选项用于修复简单问题,如损坏的索引和无用的页。它可以很快地解决一些较小的问题,在保证数据完整性的情况下提高执行速度。例如:
DBCC CHECKDB('MyDatabase', REPAIR_FAST);
总结
DBCC CHECKDB在MSSQL数据库维护中非常重要,它可以帮助我们发现并解决一些物理上和逻辑上的问题。然而,在使用DBCC CHECKDB时,需要注意一些问题,如检查的时间、检查无法修复的问题以及数据风险等等。除此之外,DBCC CHECKDB还有一些升级版本和可选参数,可以根据实际需要加以使用,以达到更好的维护效果。