你的位置:首页 > 数据库

[数据库]DBCC CHECKDB


  DBCC CHECKDB 算是管理员们最常用的命令也是必须要知道的命令了。定期的检查及问题的修复都是比较重要的!!下面介绍一下 DBCC CHECKDB 的一些基本用法。

  

  DBCC CHECKDB 完成两项任务:

  • 检查数据库里有没有损坏发生。
  • 尽力修复数据库损坏,使数据库能够被重新正常访问。

  

  DBCC CHECK 做了些什么:

  • 检查一些关键的系统表
  • 对数据库运行DBCC CHECKALLOC
  • 对数据库运行DBCC CHECKCATALOG
  • 验证数据库中每个索引视图的内容
  • 验证数据库中service broker数据

  DBCC CHECKDB提供的修复方法

  • Repair_allow_data_loss :尝试修复所有错误(可能导致一些数据丢失,一般无发从备份恢复才使用)
  • Repair_fast 未执行任何修复
  • Repair_rebuild :执行次要、快速修复(如:修复非聚集索引中的额外键)及耗时修复(如:重新生成索引),这些修复不会造成数据丢失。

  注意:使用Repair_allow_data_loss参数导致的数据丢失也许是不能接受的,一般从备份还原的数据丢失可以做到心里有数,可以通过查询丢失前数据条数与修复后数据条数进行对比知道丢了多少数据。另外在早期备份中尝试找回。

  如果使用repair_allow_data_loss级别都不能恢复:

  • 按照预先备份恢复
  • 如果损坏发生在默写用户对象(表、视图、存储过程等),可以把它们DROP掉
  • 将数据库设置成紧急只读模式,用select into 将数据导入一个新建的空库。挽救尽可能多的数据,但是损坏严重程度不一样,丢失的数据多少也不一样。这样挽救回来的数据库各个数据表的状态将不一致,一般在逻辑上或有很大的问题。

  虽然sqlserver 对dbcc checkdb 做了一些优化但是对于较大的数据库还是不小的负担所以分时间段进行不同的check检查以分散一次check的影响。还可以通过下面两个参数减轻一些消耗负担

  • With noindex : 不对非聚集索引检查。
  • With physical_only:只做物理结构完整性检查。

  

  数据库损坏确实让人头疼,但出现问题耐心处理并积累处理手法还是很重要的!损坏的修复处理我也是新手仍然需要多多积累!