官方文档

https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-2017

通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性:

对数据库运行 DBCC CHECKALLOC。

对数据库中的每个表和视图运行 DBCC CHECKTABLE。

对数据库运行 DBCC CHECKCATALOG。

验证数据库中每个索引视图的内容。

使用 FILESTREAM 在文件系统中存储 varbinary(max) 数据时,验证表元数据和文件系统目录和文件之间的链接级一致性。

验证数据库中的 Service Broker 数据。

DBCC CHECKDB 其实主要做两件事情:

检查数据库里有没有损坏发生(不检查禁用的索引)

尽力修复数据库损坏,使数据库能够被重新正常访问。

DBCC CHECKDB 最佳实践

建议对生产系统频繁使用 PHYSICAL_ONLY 选项。 使用 PHYSICAL_ONLY 可以极大地缩短对大型数据库运行 DBCC CHECKDB 的运行时间。 同时建议您定期运行没有选项的 DBCC CHECKDB。 应当以什么频率执行这些运行任务将取决于各个企业及其生产环境。

DBCC CHECKDB修复参数

示例:DBCC CHECKDB ('db_name', REPAIR_FAST);

1. REPAIR_ALLOW_DATA_LOSS 尝试修复报告的所有错误。 这些修复可能会导致一些数据丢失。

2. REPAIR_FAST 保留该语法只是为了向后兼容。 未执行修复操作。

3. REPAIR_REBUILD,执行不会丢失数据的修复。 这包括快速修复(如修复非聚集索引中缺少的行)以及更耗时的修复(如重新生成索引)。此参数不修复涉及 FILESTREAM 数据的错误。

DBCC CHECKDB是否加锁

DBCC CHECKDB默认不加锁而是工作在一个隐藏的数据库快照,执行DBCC CheckDB时指定了TABLOCK选项才会加锁

DBCC CHECKDB参数说明

ALL_ERRORMSGS:显示针对每个对象报告的所有错误。 默认情况下显示所有错误消息。

EXTENDED_LOGICAL_CHECKS:如果兼容性级别为 100 (SQL Server 2008) 或更高,则对索引视图、XML 索引和空间索引(如果存在)执行逻辑一致性检查。

NO_INFOMSGS:取消显示所有信息性消息。

NOINDEX:指定不应对用户表的非聚集索引执行会占用很大系统开销的检查。 这将减少总执行时间。 NOINDEX 不影响系统表,因为总是对系统表索引执行完整性检查。

PHYSICAL_ONLY:将检查限制为页和记录标头的物理结构完整性以及数据库的分配一致性。 设计该检查是为了以较小的开销检查数据库的物理一致性,但它还可以检测会危及用户数据安全的残缺页、校验和错误以及常见的硬件故障。因此,使用 PHYSICAL_ONLY 选项可能会大幅减少对较大数据库运行 DBCC CHECKDB 所需的时间,所以对需要频繁检查的生产系统,建议使用此选项。我们仍然建议完整地定期执行 DBCC CHECKDB。

ESTIMATEONLY:显示运行包含所有其他指定选项的 DBCC CHECKDB 时所需的 tempdb 空间估计量。 不执行实际数据库检查。

DATA_PURITY:使 DBCC CHECKDB 检查数据库中是否存在无效或越界的列值。

TABLOCK:使 DBCC CHECKDB 获取锁,而不使用内部数据库快照。 这包括一个短期数据库排他 (X) 锁。 TABLOCK 可使 DBCC CHECKDB 在负荷较重的数据库上运行得更快,但 DBCC CHECKDB 运行时会减少数据库上可获得的并发性。

DBCC

CHECKDB

错误消息

DBCC CHECKDB 命令结束之后,便会将一个消息写入 SQL Server 错误日志。 如果 DBCC 命令成功执行,则消息指示成功以及命令的运行时间。 如果 DBCC 命令在完成检查之前由于错误而停止,则消息将指示命令已终止,并指示状态值和命令运行的时间。 下表列出并说明了此消息中可包含的状态值。

State

描述

0

出现错误号 8930。 这表示元数据中存在的损坏终止了 DBCC 命令。

1

出现错误号 8967。 存在一个内部 DBCC 错误。

2

在紧急模式数据库修复过程中出错。

3

这表示元数据中存在的损坏终止了 DBCC 命令。

4

检测到断言或访问违规。

5

出现终止了 DBCC 命令的未知错误

sp_MSforeachDB

sp_MSforeachdb是微软提供的不公开的存储过程,存储在master数据库中。可以用来对某个数据库的所有表或某个SQL服务器上的所有数据库进行管理,下面将对此进行详细介绍。

sp_MSforeachDB使用DBCC CHECKDB的示例:

use master

exec sp_MSforeachDB 'DBCC CHECKDB ([?]) WITH ALL_ERRORMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY,NO_INFOMSGS'

其中?表示通配符,表示所有数据库

DBCC CHECKDB 遇到的一些错误及分析

1、There is insufficient memory available in the buffer pool. [SQLSTATE 42000] (Error 802)  During undoing of a logged operation in database 'HistoryDB', an error occurred at log record ID (5106285:51843537:99). Typically, the specific failure is logged previously as an error in the operating system error log. Restore the database or file from a backup, or repair the database. [SQLSTATE 42000] (Error 3314)  A database snapshot cannot be created because it failed to start.

原因分析:报错很明显:缓冲池中没有足够的可用内存。检查是否数据库HistoryDB特别大导致,如果是则在DBCC CHECKDB时加上PHYSICAL_ONLY 选项

2、Object ID 34 (object 'sys.sysschobjs'):  DBCC could not obtain a lock on this object because the lock request timeout period was exceeded.  This object has been skipped and will not be processed.

原因分析:当我看到这个错误时,我问自己一个问题:“DBCC CHECKDB执行锁吗?”答案是否定的。从SQL Server 2005开始,DBCC CheckDB工作在一个隐藏的数据库快照上。数据库快照是数据库的只读副本。由于快照I/O开销,您可以看到服务器上出现了一些阻塞,或者用户速度较慢,但肯定没有锁。这个时候要检查自己的DBCC CHECKDB是否加了TABLOCK选项,如果是则取消TABLOCK选项

sqlserver实验心得体会_sqlserver 关于DBCC CHECKDB的总结相关推荐

  1. sqlserver实验心得体会_SQLServer数据库实训总结

    SQLServer 数据库实训总结 为期一周的实训已经结束,从这一周中,有了很多的感 悟.从学到和掌握到的东西来说,在书本上学到的东西非常 不牢固, 然而实训真的让我受益匪浅! 实训第一天到教室时, ...

  2. matlab实验是啥,matlab实验心得体会

    matlab实验心得体会这个就是我自己做出来的,发现用soundsc听出来还行,但是用wavwrite就变的很难听. 后来发现PB写的很好,而且还能够把前面一段没有噪音的部分给保存下来,我就看了他的代 ...

  3. 用计算机做科学实验心得体会,科学实验的心得体会

    科学实验心得体会 在成功的道路上,免不了失败.一次小小的实验,就可以*,失败乃成功之母. 那是风和日丽的一天早上,我坐在家里悠然自在的看报纸.几个黑体大字引人注目:一条细线可以钓起*块!不是吧?我不敢 ...

  4. 大学生python实验心得体会_大学生实验心得体会精选例文【三篇】

    大学生实验心得体会精选例文[三篇] 通过该实验,对所学的知识有了进一步的了解.在实验的过程 中,出现了一些问题,不过最后都得以解决.不过通过这些错误,使 我对这些知识点更加印象深刻. ERP 是一门十 ...

  5. 流水灯c语言实验报告心得,嵌入式流水灯实验心得体会.docx

    嵌入式流水灯实验心得体会 嵌入式流水灯实验心得体会 篇一:嵌入式流水灯实验 实验三 GPIO输出控制实验 一. 实验目的 熟悉LPCXX系列ARM7微控制器的GPIO输入控制. 二.实验设备 ? 硬件 ...

  6. 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想

    计算机网络是很复杂的一个事务,进行计算机网络实验是为了提升用户使用需求.下面是学习啦带来的计算机网络实验的心得体会,仅供参考. 计算机网络实验心得体会篇一 计算机网络课程的实验不同于以前做过的C语言上 ...

  7. java类与对象实验报告心得体会_java上机实验心得体会报告(大全五篇)

    北京联合大学信息学院 "面向对象程序设计"课程上机实验报告 题目: JAVA上机实验心得体会 姓名(学号): 专业:计算机科学与技术 编制时间: 2012年12月19日 版本: 1 ...

  8. python语言的实验心得体会范文_实验心得体会四篇

    实验心得体会四篇 导读: 本文 实验心得体会四篇,仅供参考,如果能帮助到您,欢迎点 评和分享. 下面是整理的实验心得体会范文,欢迎阅读参考. 实验心得体会 ( 一 ) 时间过得真快,不经意间,一个学期 ...

  9. Matlab实践课心得体会,实验心得体会4篇

    实践是检验真理唯一的标准,当想要检验自己的所学时一需要做实验来检验.下面是由出国留学网小编为大家整理的"实验心得体会四篇",仅供参考,欢迎大家阅读. 篇一:实验心得体会 大学数学实 ...

最新文章

  1. C++中的override关键字
  2. notepad++的NppFTP插件远程连接linux操作系统
  3. cfile read 最大读取限制_pandas读取表格后的常用数据处理操作
  4. python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...
  5. android画面传输到电视,如何将手机内容投屏到电视上?
  6. [Machine Learning]朴素贝叶斯(NaiveBayes)
  7. Vue2.0 相对于Vue1.0的变化:生命周期
  8. Android 6.0 扫描不到 Ble 设备需开启位置权限
  9. Spring的IOC机制
  10. typora输入LATEX数学公式语法总结
  11. [译]露天矿山道路设计指南:第一章
  12. 在Linux系统中搭建web服务器
  13. Swift游戏实战-跑酷熊猫 02 创建熊猫类
  14. python中histogram_python – 了解Pillow中的histogram()
  15. linux自动清理磁盘日志的一种方案
  16. 解决word,ppt,excel图标为空白(适用于新电脑)
  17. 送你一个励志故事(转载)
  18. 【区块链技术与应用】(五)
  19. 常用激活函数:Sigmoid、Tanh、Relu、Leaky Relu、ELU、Mish、Swish等优缺点总结
  20. 使用OpenCV和C++实现的分水岭算法(Watershed)

热门文章

  1. Android允许应用程序使用Http明文网络传输
  2. 设置edittext不自动获取焦点
  3. Android开发之RecyclerView动态添加item长按删除item源码
  4. java 优化 寄存器_JVM性能优化系列-(6) 晚期编译优化
  5. Swift之旅--数据类型
  6. Objective-C利用协议实现回调函数(类似java的回调函数)
  7. [JS]string.substr(start,length)str.slice(begin, end)
  8. 第一次使用最新开发的在线编辑器讲课记录笔记
  9. Redis缓存数据库服务器
  10. (一)Builder(建造者)模式