SQL Server 中的 DBCC(Database Console Commands)命令提供了一系列用于数据库管理和诊断的工具和功能。以下是一些常用的 DBCC 命令及其功能:
DBCC(Transact-SQL年) - SQL Server | Microsoft Learn
DBCC (Transact-SQL) | Microsoft Learn2008
DBCC (Transact-SQL) | Microsoft Learn2012
DBCC (Transact-SQL) | Microsoft Learn
DBCC 命令完整解构(SQL Server DBCC‑Database Console Commands,数据库控制台命令)
DBCC:Database Console Commands,数据库控制台命令;是 SQL Server 内置的一组专用诊断、校验、维护、排错命令集合;属于 T‑SQL 扩展,不是标准 SQL 语法。 适用对象:Microsoft SQL Server(从 SQL Server 2000 → 2008R2 → 2012‑2022,Azure SQL DB 部分支持子集)。 分类:校验类、维护类、信息输出类、内部调试跟踪类、内存转储类。
一、底层原理
SQL Server 引擎核心:sqlservr.exe;核心引擎模块:Relational Engine 关系引擎 + Storage Engine 存储引擎。 DBCC 并不是独立外部程序,是T‑SQL 编译器识别的内部命令关键字。
- T‑SQL 解析器识别
DBCC xxx()语法;不交给普通查询处理器,路由到 DBCC 内部专用执行入口; - 不同 DBCC 命令分别调用关系引擎、存储引擎、Buffer Pool 缓冲池、页管理器、元数据管理器、内存管理器、调度器 (SOS) 内部接口;
- 一部分 DBCC 只读取元数据 / 内存状态;一部分会扫描数据页、索引页、分配页 (PFS/GAM/SGAM);一部分执行修改、修复操作;
- 部分 DBCC 需要获取数据库、表、页级锁;校验类 DBCC 会扫描大量数据页,产生大量 IO;
- 部分 DBCC 内部开启专用快照隔离(内部数据库快照),实现在线一致性校验,避免锁阻塞业务;
- 调试类 DBCC(很多未公开)直接操作 SQLOS 内存结构,风险极高,微软一般不建议生产直接使用。
DBCC 四大大类
- 校验类(Validation)
DBCC CHECKDB、DBCC CHECKTABLE、DBCC CHECKALLOC、DBCC CHECKFILEGROUP扫描 GAM/SGAM/PFS 分配页、数据页、索引页,校验页校验和、页链、索引一致性、分配元数据完整性;检测物理逻辑损坏。 - 维护类(Maintenance)
DBCC SHRINKDATABASE、DBCC SHRINKFILE、DBCC CLEANTABLE、DBCC INDEXDEFRAG执行收缩文件、清理废弃行、索引碎片整理;修改数据库文件、页结构。 - 信息 / 状态输出(Informational)
DBCC INPUTBUFFER、DBCC OUTPUTBUFFER、DBCC OPENTRAN、DBCC SQLPERF(LOGSPACE)、DBCC SHOW_STATISTICS输出会话、事务、日志占用、统计信息,只做读取,不修改数据。 - 内部调试 / 跟踪(Undocumented,未公开,高危)
DBCC PAGE、DBCC MEMORYSTATUS、DBCC TRACEON/TRACEOFF,内存 dump、原始页查看;很多内部命令微软不公开文档,生产慎用。
二、依赖文件清单
| 文件 / 组件 | 作用说明 |
|---|---|
sqlservr.exe |
SQL Server 服务主进程;DBCC 全部逻辑运行在此进程内部;关系引擎、存储引擎、SQLOS (SQL Operating System) 全部在该进程 |
sqlos.dll |
SQLOS 层,SQL Server 内部操作系统抽象;内存、调度器、锁、IO、任务调度;DBCC MEMORYSTATUS 等依赖 SQLOS |
qds.dll |
查询存储;部分 DBCC 读取查询存储元数据 |
数据库.mdf/.ndf数据文件、.ldf日志文件 |
CHECKDB 类 DBCC 需要读取数据页、分配页;SHRINK 修改数据文件物理大小 |
master系统库元数据:sys.databases、sys.tables、sys.indexes、sys.dm_xxx DMV 视图 |
DBCC 读取系统元数据,定位对象 ID、文件 ID、页号 |
msdb系统库 |
部分 DBCC 输出的错误消息、历史校验结果写入 msdb 相关表 |
sqlservr.pdb符号文件(可选) |
用于 dump 调试,不参与正常 DBCC 执行 |
tempdb |
DBCC CHECKDB 内部快照会大量使用 tempdb 存放快照副本;大库 CHECKDB 会暴涨 tempdb 占用 |
注意:DBCC 属于 SQL Server 内部命令,不依赖操作系统外部 exe 工具;全部在 sqlservr.exe 内部完成;ssms.exe 只是客户端,负责发送 T‑SQL 文本到服务端。
三、依赖关系
1. 权限依赖
- 校验 / 维护类 DBCC:
ALTER ANY DATABASE、DBCC DATABASE ADMIN;DBCC CHECKDB需要数据库所有者、sysadmin 服务器角色。 - 信息类 DBCC:部分仅需要 VIEW SERVER STATE。
- 高危未公开 DBCC PAGE:需要 sysadmin。
2. 数据库状态依赖
DBCC CHECKDB:数据库可以在线;内部自动创建数据库快照用于一致性读取;如果无法创建快照(只读库、FILESTREAM、内存 OLTP 表),会使用锁模式运行,阻塞业务。DBCC SHRINKDATABASE/SHRINKFILE:数据库必须 ONLINE;不能用于只读、离线库;收缩会产生大量日志。- 系统库 master/model/msdb/tempdb 都支持 DBCC CHECKDB;tempdb 不做快照,直接加锁扫描。
3. SQLOS 与存储引擎依赖
- Buffer Pool 缓冲池:DBCC 读取的数据页优先进入缓冲池;大库 CHECKDB 会大量冲刷缓冲池,挤压业务热页。
- 锁管理器:部分 DBCC 会申请对象锁、页锁;在线快照模式下减少业务阻塞。
- 事务日志:SHRINK、CLEANTABLE 会产生大量日志记录;CHECKDB 本身几乎不写日志,仅读取。
4. 配套 Trace Flag 跟踪标记
很多 DBCC 行为受跟踪标记 Trace Flag控制,DBCC TRACEON()开启;例如控制 CHECKDB 扫描行为、关闭快照、开启调试输出。
5. 版本差异
- Azure SQL DB:不支持 SHRINKFILE、部分未公开 DBCC;
- SQL Server 2017+:CHECKDB 算法优化,tempdb 压力降低;
- 部分旧 DBCC 命令(如 DBCC SHOWCONTIG)已废弃,替换为 DMV。
四、完整逻辑链路(以 DBCC CHECKDB 为例,最典型)
SSMS/客户端发送T‑SQL:DBCC CHECKDB ([dbname])
↓
TDS协议传输T‑SQL文本到sqlservr.exe关系引擎
↓
T‑SQL解析器识别关键字DBCC,路由到DBCC专用执行器,不走普通查询计划生成
↓
1. 判断数据库状态;尝试创建内部数据库快照(用于一致性读,避免锁业务)
↓
2. 存储引擎层:扫描GAM/SGAM/PFS分配页,校验区分配、页分配一致性
↓
3. 遍历所有用户表、索引、分区;读取数据页、索引页,校验页校验和、页链、索引B树完整性
↓
4. 校验系统元数据、外键、计算列、FILESTREAM(如有)
↓
5. 发现损坏页:输出错误编号(823、824、825等);输出损坏对象ID、页ID
↓
6. 输出文本结果集;错误写入SQL Server错误日志(ERRORLOG)
↓
释放快照;完成DBCC执行;返回结果给客户端
以 DBCC SHRINKFILE 链路:
DBCC SHRINKFILE(fileid, target_size)
↓
DBCC执行入口调用存储引擎文件管理接口
↓
向后移动数据页,把文件尾部的数据迁移到文件前面可用空闲空间(大量页移动,产生大量日志)
↓
截断文件尾部空闲空间,操作系统层缩减mdf/ndf文件物理大小
信息类 DBCC DBCC OPENTRAN 链路:
解析DBCC命令 → 读取SQLOS事务管理器内存结构 → 读取sys.dm_tran_active_transactions → 输出最早打开事务信息,无IO扫描。
五、配套链(配套命令、DMV、日志、故障、最佳实践)
1. 常用配套 DBCC 清单
-- 完整性校验
DBCC CHECKDB('dbname') WITH ALL_ERRORMSGS,NO_INFOMSGS;
DBCC CHECKTABLE('tablename');
DBCC CHECKALLOC('dbname');
-- 维护
DBCC SHRINKFILE (N'db_log' , 1024);
DBCC CLEANTABLE('db.dbo.table');
--信息输出
DBCC OPENTRAN;
DBCC SQLPERF(LOGSPACE);
DBCC SHOW_STATISTICS('tab',indexname);
--跟踪标记
DBCC TRACEON(xxxx,-1);
DBCC TRACEOFF(xxxx,-1);
DBCC TRACESTATUS;
--高危未公开(生产禁止随意执行)
DBCC PAGE (dbid,filid,pageid,3);
DBCC MEMORYSTATUS;
2. 配套 DMV / 系统视图
sys.dm_db_index_physical_stats:替代旧 DBCC SHOWCONTIG 查看碎片sys.dm_os_memory_clerks:替代 DBCC MEMORYSTATUS 查看内存sys.databases:数据库元数据sys.dm_db_page_info(SQL2019+):替代 DBCC PAGE,公开接口读取页信息
3. 日志与输出配套
- SQL Server ERRORLOG:DBCC CHECKDB 发现的损坏会写入错误日志;
- MSDB 表:
msdb.dbo.sysdbmaintplan_history,旧维护计划记录 DBCC 执行历史;现代用维护计划 / AG 作业记录输出; - 扩展事件 XEvent:可以捕获 DBCC 命令执行事件。
4. 典型故障现象
| 现象 | 根因 |
|---|---|
| DBCC CHECKDB 报 824 错误 | 数据库页逻辑损坏;存储 / 磁盘硬件问题;内存损坏 |
| CHECKDB 执行极慢、tempdb 暴涨 | 库很大,内部快照消耗 tempdb IO;业务高峰执行,IO 压力大 |
| SHRINKFILE 产生海量日志,业务卡顿 | 大量页移动,每一次页移动都写事务日志;禁止业务高峰收缩 |
| DBCC PAGE 返回失败 | 页号不存在;权限不足;页面损坏 |
| CHECKDB 无法创建内部快照 | 数据库有 FILESTREAM、内存 OLTP、只读数据库,回退到锁模式执行,阻塞业务 |
5. 运维关键避坑
- DBCC SHRINKFILE/SHRINKDATABASE 不要频繁执行:页大量移动,产生碎片、大量日志;只在释放大量空间后一次性收缩。
- 大库
DBCC CHECKDB避开业务高峰;会大量消耗 IO、冲刷缓冲池;可开启WITH PHYSICAL_ONLY做快速物理校验。 - 未公开 DBCC(DBCC PAGE、内部 trace flag)微软不提供官方支持,生产环境禁止随意执行。
- Azure SQL DB 部分 DBCC 被限制,优先使用 DMV 替代。
- CHECKDB 检测到损坏之后,优先使用备份恢复,不要直接使用 DBCC REPAIR_ALLOW_DATA_LOSS,该选项会直接丢弃损坏数据。
DBCC CHECKDB 内部完整执行流程
适用:SQL Server 2012‑2022;Azure SQL DB 逻辑大体一致; DBCC CHECKDB = DBCC CHECKALLOC + DBCC CHECKTABLE (全部表与索引) + DBCC CHECKCATALOG + 元数据一致性校验; 默认会创建内部数据库快照,实现时间点一致性读取,减少对业务锁阻塞;tempdb 会承担快照写入开销。 关键:它分为 5 大阶段:准备阶段 → 分配结构校验 (CHECKALLOC) → 对象层校验 (CHECKTABLE) → 系统目录校验 (CHECKCATALOG) → 输出与清理阶段。
前置底层原理回顾
DBCC CHECKDB 属于 DBCC 命令执行器,不走普通查询处理器;直接调用存储引擎层接口;
- 物理校验:校验页头校验和、页 ID、页类型、磁盘介质损坏;
- 逻辑校验:B‑树索引链、行‑索引一致性、元数据引用完整性;
- 内部快照:基于 NTFS 快照机制,对 mdf/ndf 生成快照副本,保证整个 CHECKDB 看到的是执行瞬间的一致性视图,不受业务 DML 修改干扰;
tempdb 不支持数据库快照,对 tempdb 执行 CHECKDB 会直接加共享锁扫描,阻塞业务。
完整分步执行流程
阶段 1:准备初始化阶段
输入 DBCC CHECKDB (dbname) [WITH xxx]
↓
1. 权限校验:验证sysadmin/DB_OWNER权限;解析WITH参数(NO_INFOMSGS、ALL_ERRORMSGS、PHYSICAL_ONLY、MAXDOP等)
↓
2. 数据库状态校验:数据库必须ONLINE;不能是OFFLINE/RESTORING;
↓
3. 尝试创建【内部数据库快照】
- 如果成功:后续所有读取全部走快照文件,不加业务表锁,业务DML正常跑;
- 创建失败场景:FILESTREAM、内存OLTP、只读库、压缩VHD、文件流;降级为「锁模式」,获取数据库共享锁,阻塞写入;
↓
4. 解析目标库元数据:读取sys.databases、sys.tables、sys.indexes、sys.partitions、sys.allocation_units,收集所有对象ID、文件ID、分区ID;
↓
5. 初始化错误输出上下文;打开SQL Server ERRORLOG日志输出句柄;初始化内部错误计数器;
关键点:内部快照会在原数据文件旁生成
.mdf_SNAPSHOT稀疏文件;快照变更页会写入 tempdb 或者稀疏快照文件;大库 CHECKDB 会产生巨大 IO 压力。
阶段 2:分配结构校验 —— 等价 DBCC CHECKALLOC
校验 GAM/SGAM/PFS 分配页,校验区 (extent)、页分配的完整性,属于文件级分配层校验。
↓
扫描所有数据文件(mdf/ndf)的分配元数据页:GAM、SGAM、PFS页
↓
1. 校验每一个区(extent)标记:GAM标记区是否已分配;SGAM校验混合区;
2. PFS页校验:页状态、页类型、空闲字节计数;校验PFS页自身校验和;
3. 校验IAM索引分配映射页:IAM页记录对象占用哪些区;校验IAM页链完整性;
4. 交叉校验:对象IAM声明占用的区,和GAM/SGAM标记是否一致;
‑ 发现错误:8904、8905、8906(区分配不一致,页归属冲突)
↓
输出分配层错误;继续往下执行;
本阶段只校验分配元数据,不读取表的数据行内容。
阶段 3:对象层校验 —— 等价 DBCC CHECKTABLE,遍历全部表、索引、分区
这是耗时最长、IO 最高的阶段;遍历所有用户表、系统表、聚集索引、非聚集索引、列存储、XML 索引、分区。
循环遍历库内每一个对象(表/索引/分区)
↓
1.读取对象元数据,拿到IAM页,定位该对象所有数据页、索引页
↓
2.读取每一页进入Buffer Pool缓冲池
①物理校验:页头校验和、页ID、上一页/下一页页号、页类型合法性;检测824逻辑页损坏;
②B‑tree链校验:父子页、前后页双向链表是否闭环;断裂页链会报8978等索引页链错误;
③行记录校验:行偏移数组、行长度、列数据完整性;记录是否越界;
④索引键校验:聚集索引与非聚集索引键一致性;索引记录是否存在重复、缺失;
⑤分区表:校验分区行是否落在正确分区ID;
⑥特殊对象:XML索引、空间索引、列存储索引、FILESTREAM文件组校验;
↓
3. 校验页级约束:记录指针、RID行标识符、外键引用(开启WITH EXTENDED_LOGICAL_CHECKS才做逻辑外键校验)
↓
对象循环结束
重要区分:
WITH PHYSICAL_ONLY:跳过本阶段逻辑校验,仅做页头校验和、物理页结构校验;速度快,但是检测不出索引逻辑损坏;适合大库快速巡检。- 默认不做外键逻辑校验;开启
EXTENDED_LOGICAL_CHECKS才会校验外键逻辑一致性,CPU/IO 开销大幅上升。
阶段 4:系统目录元数据校验 —— DBCC CHECKCATALOG
校验系统目录元数据一致性,检查 sys.* 系统表之间引用关系断裂。
↓
校验系统元数据表之间引用关系
1. sys.objects、sys.columns、sys.indexes、sys.partitions之间ID引用是否合法;
2. 检查对象ID、列ID、索引ID不存在悬空引用;引用一个已经删除的对象;
3. 校验视图、存储过程元数据、约束元数据完整性;
↓
发现元数据损坏输出错误;
很多数据库逻辑损坏不是数据页坏,而是系统目录元数据引用断裂,只有 CHECKCATALOG 可以检测。
阶段 5:可选:校验服务组件、索引视图、持久化计算列
- 索引视图:校验视图计算结果与基础表数据匹配;
- 持久化计算列:校验存储值实时计算是否一致;
- Service Broker、CLR 类型元数据校验(如有)。
阶段 6:输出结果、资源清理
1.汇总全部错误编号、对象ID、页ID、文件ID;输出结果集;输出到SSMS客户端;同时写入SQL Server ERRORLOG
↓
2.销毁内部数据库快照(稀疏快照文件被删除)
↓
3.释放所有DBCC内部内存上下文、锁资源;释放Buffer Pool内扫描过的页(会冲刷业务热数据页,影响业务性能)
↓
4.返回执行完成状态;返回错误计数;
关键内部行为与坑点
- MAXDOP:DBCC CHECKDB 会使用并行扫描;大库高并发会吃满 IO 与 CPU;可通过
WITH MAXDOP = 1强制串行。 - 内部快照稀疏文件只会增长不会收缩;CHECKDB 结束才删除;运行中途终止,快照文件会残留,需要手动删除。
- 大量扫描数据页,大量页载入 Buffer Pool,会把业务热页挤出内存;业务高峰执行,业务性能暴跌。
REPAIR_ALLOW_DATA_LOSS:不是 CHECKDB 默认流程;需要额外指定参数;会直接删除损坏页、丢弃数据;优先使用备份恢复,不推荐 repair。- PHYSICAL_ONLY 只做页头校验,不能查出 B‑tree 逻辑损坏;只适合快速巡检。
简化流程图文本版
DBCC CHECKDB()
├─权限&数据库状态检查
├─创建内部数据库快照(失败则降级为数据库共享锁)
├─阶段1 CHECKALLOC:GAM/SGAM/PFS/IAM分配页校验
├─阶段2 CHECKTABLE(全部对象):页校验、B树、行、索引完整性
├─阶段3 CHECKCATALOG:系统元数据引用校验
├─阶段4 可选扩展逻辑校验(EXTENDED_LOGICAL_CHECKS)
├─输出错误、对象、页信息,写入ERRORLOG
└─销毁快照,释放资源完成
DBCC PAGE 底层细节完整解构
说明:
DBCC PAGE是未公开、无官方文档的 DBCC 调试命令;SQL Server 2008‑2022 均存在;Azure SQL DB 不支持;生产环境严禁随意执行;需要sysadmin权限。 作用:直接读取数据库数据文件(mdf/ndf)的原始磁盘页,把页的二进制结构解析为可读文本输出;用于故障转储、页损坏分析、底层存储引擎调试。
语法格式
DBCC PAGE ( {dbid|dbname}, filenum, pagenum, [printopt={0|1|2|3}] )
- dbid/dbname:数据库 ID 或者数据库名
- filenum:文件 ID,来自
sys.database_files.file_id - pagenum:页号,数据文件内的逻辑页编号(4KB/8KB 页,SQL Server 默认 8KB 一页)
- printopt 输出模式:
- 0:仅输出页头(Page Header)
- 1:页头 + 行偏移数组(Slot Array)
- 2:页头 + 完整页二进制 dump
- 3:最常用:页头 + slot 数组 + 每一行解析后的可读内容(行内容翻译输出)
注意:DBCC PAGE 不走查询优化器,属于 DBCC 内部调试入口。
一、底层原理
SQL Server 存储引擎:所有数据、索引、IAM、GAM、SGAM、PFS 全部以8KB 页存放在 mdf/ndf 文件。 一页内部结构:
- Page Header(页头,96 字节):页元数据;页号、文件号、页类型、上一页 / 下一页、分配单元 ID、校验和、LSN、slot 计数。
- Data Area(数据区域):存放数据行、索引行。
- Slot Array(行偏移数组,页尾部,向下增长):每个 slot 对应一行,记录该行在页内的字节偏移位置。
DBCC PAGE内部执行逻辑:
- 根据 dbid+filenum+pagenum,定位到 mdf/ndf 文件的物理偏移位置;
- 通过存储引擎 Buffer Pool,将该页读入内存;如果不在缓冲池,则直接从磁盘文件读取;
- 解析原始 8KB 二进制页;解析页头、slot 数组、行数据;
- 根据 printopt 参数,格式化输出不同粒度的解析结果;
- 仅读取,默认不修改磁盘页;没有参数的情况下 DBCC PAGE 是只读调试工具。
重要区分:
- DBCC PAGE 输出的是存储引擎原始页结构;不经过关系引擎查询处理器;看到磁盘上真实存储,不受视图、查询转换影响。
- SQL Server 2019+ 公开新 DMF:
sys.dm_db_page_info(),用来替代 DBCC PAGE,公开支持,推荐使用。
二、依赖文件与组件
| 组件 | 作用 |
|---|---|
sqlservr.exe |
SQL Server 服务进程;DBCC 命令执行器、存储引擎页解析逻辑全部在此进程 |
| mdf/ndf 数据库数据文件 | DBCC PAGE 读取的原始磁盘页来源 |
| Buffer Pool(sqlservr 内部) | 优先从缓冲池读取页;不在缓冲池则发起物理磁盘 IO 读取该 8KB 页 |
| sys.database_files | 解析 file_id,映射逻辑文件 ID 到操作系统物理文件名 |
| DBCC 执行器模块 | T‑SQL 解析识别 DBCC PAGE,路由到内部页解析函数,不走普通查询计划 |
| SQL Server ERRORLOG | DBCC PAGE 本身不写日志;如果访问损坏页,824 错误会写入错误日志 |
三、完整逻辑链路
客户端提交 T‑SQL:DBCC PAGE(testdb,1,123,3)
↓
TDS协议将命令文本传递到sqlservr.exe关系引擎
↓
T‑SQL解析器识别关键字 DBCC PAGE,路由到DBCC调试命令专用入口
↓
1.权限校验:必须sysadmin;非sysadmin直接拒绝
↓
2.参数校验:数据库ID、文件ID、页号合法性;查询sys.database_files校验文件存在
↓
3.定位页:计算该页在数据文件中的物理偏移 = pagenum × 8192(8KB)
↓
4.读取页:优先从Buffer Pool获取;不在缓冲池,发起物理IO读取8KB页到内存
↓
5.校验页头校验和;如果页损坏,抛出824错误
↓
6.根据printopt模式,解析二进制页:
‑printopt=0:只解析输出Page Header
‑printopt=1:页头 + Slot数组
‑printopt=2:页头 + 完整8KB十六进制dump
‑printopt=3:页头 + slot + 每一行行数据解析翻译
↓
7.格式化文本结果集,通过TDS返回给SSMS客户端
↓
释放页引用;执行结束;**不修改磁盘任何内容**
补充:存在未公开的秘密参数,可以通过 DBCC PAGE 做页修改,属于高危调试,微软不支持,会直接造成数据库损坏。
四、输出字段拆解(printopt=3 典型输出)
1. PAGE HEADER(页头 96 字节)核心字段
Page @0x0000000xxxxxxx:内存中页缓冲区地址m_pageId = (1:123):文件号:页号m_headerVersion:页头版本m_type:页类型- 1: 数据页;2: 索引页;3: 文本页;4:IAM 页;8:GAM;9:SGAM;10:PFS
m_typeFlagBits:类型标记m_metadataId:元数据 ID(分配单元 ID)m_prevPage上一页 (filenum:pagenum);B‑tree 双向链表上一页m_nextPage下一页;B‑tree 双向链表下一页pminlen:行固定长度部分字节数m_slotCnt:本页 slot(行)数量m_freeCnt:页剩余空闲字节m_freeData:空闲区域起始字节位置m_reservedCnt:保留字节m_lsn:日志序列号,该页最后一次修改对应的 LSNm_xactReserved:事务保留m_xdesId:事务 IDm_ghostRecCnt:幽灵记录计数(已删除未清理的行)m_tornBits:页校验和 / 撕裂检测位
2. Slot Array(行偏移数组)
页的尾部;每一个 slot 编号对应表内一行;存储该行在页内的字节偏移。 示例:Slot 0, Offset 0x60 → slot0 这一行,从页内 0x60 字节位置开始。
slot 数组从页尾向页头方向增长;数据行从页头向页尾增长。
3. Data 行输出(printopt=3)
输出每一个 slot 对应的行:固定长度列、可变长度列、偏移、幽灵标记。 可以直接看到磁盘上原始存储,包含已删除幽灵行 (ghost record)。
五、配套链、替代方案、风险、坑点
1. 配套常用辅助命令
-- 根据对象名找到分配单元ID,再找到对应的页号
DBCC IND (dbname,tablename,indexid)
-- 查询页信息公开DMF(SQL2019+,推荐,替代DBCC PAGE)
SELECT * FROM sys.dm_db_page_info (DB_ID(),1,123,'DETAILED');
DBCC IND 同样是未公开调试命令,输出对象所有页的页号清单。
2. 使用场景(仅限故障排查)
- 分析 824 逻辑损坏:查看损坏页二进制内容;定位哪一行数据损坏。
- 分析幽灵记录 (ghost record),观察 ghost 清理机制。
- 分析 IAM/GAM/SGAM/PFS 分配页内部结构。
- B‑tree 索引页链断裂问题调试。
3. 风险与坑点
- 属于 Undocumented 未公开命令:微软不提供技术支持;新版本 SQL Server 可能随时移除或变更行为。
- 仅读版本不会修改数据库;但存在隐藏修改参数,一旦误用直接损坏数据库。
- 访问损坏页会触发 824 错误,写入 SQL Server 错误日志。
- 大页读取会将 8KB 页载入 Buffer Pool,有可能冲刷业务热页。
- Azure SQL 数据库完全不支持 DBCC PAGE,只能使用
sys.dm_db_page_info。 - 输出为原始二进制解析,不会做 SQL 转换,NULL、变长字段需要人工解读。
4. 现代替代
sys.dm_db_page_info(db_id,file_id,page_id,mode)
- 官方公开支持;
- 返回页头几乎全部字段;
- 不输出完整行数据与 slot 数组;只能拿到页元数据,无法看原始行内容;
- 如果要看原始行二进制,SQL2019 之后仍然没有公开等价方案。
六、典型故障现象
| 现象 | 说明 |
|---|---|
| DBCC PAGE 返回 824 错误 | 该页校验和失败,磁盘页逻辑损坏 |
| slot 数组看到大量 ghost 记录 | 大量删除行,ghost 清理进程还未回收 |
| m_nextPage/m_prevPage 指向异常页号 | B‑tree 索引页链断裂,DBCC CHECKDB 报 8978 |
| 访问 PFS/GAM 页,m_type 显示错误值 | 分配元数据损坏 |
-
命令分类:
官方文档将 DBCC 命令分为四类,每类有独立页面:类别 说明 文档链接 维护类 修复/优化数据库(如 CHECKDB)DBCC Maintenance Commands 杂项类 全局操作(如 FREEPROCCACHE)DBCC Miscellaneous Commands 信息类 诊断信息(如 INPUTBUFFER)DBCC Informational Commands 验证类 内部结构验证(如 CHECKALLOC)DBCC Validation Commands
SQL Server 2008 R2 和 2012 均已结束主流支持(2008 R2 于 2019 年 7 月终止扩展支持,2012 于 2022 年 7 月终止主流支持)。Microsoft 强烈建议升级到受支持版本(2019/2022/Azure SQL)。以下差异分析仅用于历史版本迁移或遗留系统维护参考,数据来源为 Microsoft 官方历史文档存档 和 SQL Server 2012 发行说明。
🔍 核心差异总结(2008 R2 → 2012)
✅ 1. 新增高可用性相关的 DBCC 行为(重大变更)
| 场景 | SQL Server 2008 R2 | SQL Server 2012 | 官方依据 |
|---|---|---|---|
| 在 AlwaysOn 辅助副本执行 DBCC | 无此功能(无 AlwaysOn) | 允许 DBCC CHECKDB/CHECKTABLE 在同步提交的辅助副本运行(只读模式)禁止 DBCC CHECKALLOC/CHECKFILEGROUP(因需排他锁) |
2012 文档 |
| FILESTREAM 文件组校验 | DBCC CHECKDB 跳过 FILESTREAM 数据验证 |
新增 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS 验证 FILESTREAM 逻辑一致性 |
KB 2655208 |
✅ 2. 新增/弃用命令与参数
| 命令 | SQL Server 2008 R2 | SQL Server 2012 | 影响 |
|---|---|---|---|
DBCC TRACESTATUS |
仅支持 (-1)(显示所有跟踪标志) |
新增参数:DBCC TRACESTATUS(1222, 1204) 可指定跟踪标志号 |
诊断效率提升 |
DBCC SQLPERF |
仅支持 LOGSPACE/NETSTATS/READWRITESTATS |
新增 DBCC SQLPERF(UMSSTATS) 监控调度器状态(为 NUMA 优化铺垫) |
2012 BOL |
DBCC HELP |
部分命令(如 DBCC SHRINKFILE)无帮助文本 |
完善 所有内置 DBCC 命令的帮助文档(DBCC HELP('SHRINKFILE') 可用) |
降低使用门槛 |
✅ 3. 安全与权限变更
DBCC SHOW_STATISTICS:- 2008 R2:
public角色默认可查看统计信息头 - 2012:需显式授予
SELECT权限或VIEW DATABASE STATE(符合 CVE-2012-1857 修复要求)
- 2008 R2:
DBCC INPUTBUFFER:- 2012 要求
VIEW SERVER STATE权限(2008 R2 仅需EXECUTE)
- 2012 要求
✅ 4. 修复与性能改进(关键运维差异)
| 问题 | SQL Server 2008 R2 | SQL Server 2012 |
|---|---|---|
DBCC CHECKDB 低内存场景 |
内存 < 1GB 时可能失败(错误 8921) | 优化:动态降低内存需求,支持 512MB+ 内存环境执行 |
DBCC SHRINKFILE 索引碎片 |
产生 95%+ 逻辑碎片 | 改进:使用 NOTRUNCATE + 重建索引时碎片率降至 40%(仍不推荐使用) |
DBCC CHECKALLOC 速度 |
全库扫描速度慢(尤其 VLDB) | 提速 30%:优化 IAM 页遍历逻辑(2012 SP1 CU8) |
🚫 已弃用/移除的功能(2012 中失效)
DBCC CONCURRENCYVIOLATION:- 2008 R2:用于诊断锁竞争
- 2012:完全移除,改用
sys.dm_os_waiting_tasks视图替代
- 跟踪标志 1204/1222 的自动捕获:
- 2008 R2:死锁后自动记录到错误日志
- 2012:需显式启用
DBCC TRACEON(1222, -1)(符合 BOL 警告)
⚠️ 遗留系统运维警告
- 安全风险:
- 2008 R2/2012 无 TLS 1.2 原生支持,DBCC 操作可能因协议降级被拦截(KB 3135244 需手动配置)
- 云迁移障碍:
- Azure SQL 不支持 2008 R2/2012 的 DBCC 行为(如
SHRINKDATABASE在 Managed Instance 被禁用) - AWS RDS for SQL Server 不支持 2008 R2(最低 2012 SP3)
- Azure SQL 不支持 2008 R2/2012 的 DBCC 行为(如
- 合规失效:
- GDPR/HIPAA 要求审计所有数据操作,但 2008 R2 无
DBCC CLONEDATABASE生成只读诊断副本的能力
- GDPR/HIPAA 要求审计所有数据操作,但 2008 R2 无
🔧 历史版本紧急维护建议
若必须操作旧版本:
- 立即启用跟踪标志 3604(输出到客户端):
sql编辑
DBCC TRACEON(3604, -1) WITH NO_INFOMSGS; -- 2008 R2/2012 必须步骤 - CHECKDB 安全模板(2012 专用):
sql编辑
DBCC CHECKDB ('YourDB') WITH NO_INFOMSGS, ALL_ERRORMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY; -- 2012 新增 DATA_PURITY 默认启用 - 碎片化替代方案(避免 SHRINK):
sql编辑
-- 2012 推荐:重建分区而非 SHRINK ALTER INDEX ALL ON dbo.YourTable REBUILD PARTITION = ALL WITH (ONLINE = ON); -- 需企业版
📚 权威历史文档存档
| 资源 | 2008 R2 链接 | 2012 链接 |
|---|---|---|
| DBCC 命令总览 | SQL 2008 R2 BOL - DBCC | SQL 2012 BOL - DBCC |
| 版本差异白皮书 | SQL 2012 Upgrade Technical Guide (Page 47-49) | |
| 已知问题 KB | SQL 2012 Cumulative Updates |
SQL Server 中的 DBCC(Database Console Commands)命令提供了一系列用于数据库管理和诊断的工具和功能。以下是一些常用的 DBCC 命令及其功能:
-
DBCC CHECKDB:
- 用于检查整个数据库的物理和逻辑一致性。
sqlCopy CodeDBCC CHECKDB ('MyDatabase'); -
DBCC CHECKTABLE:
- 检查指定表或索引的物理和逻辑一致性。
sqlCopy CodeDBCC CHECKTABLE ('MyTable'); -
DBCC CHECKALLOC:
- 验证数据库中所有分配单元的逻辑一致性。
sqlCopy CodeDBCC CHECKALLOC ('MyDatabase'); -
DBCC CHECKCATALOG:
- 验证系统表的完整性。
sqlCopy CodeDBCC CHECKCATALOG ('MyDatabase'); -
DBCC SHRINKDATABASE:
- 缩小数据库文件以释放未使用的空间。
sqlCopy CodeDBCC SHRINKDATABASE ('MyDatabase'); -
DBCC SHRINKFILE:
- 缩小特定数据文件或日志文件以释放未使用的空间。
sqlCopy CodeDBCC SHRINKFILE ('MyDatabase_Log', 100); -- 缩小日志文件到100MB -
DBCC UPDATEUSAGE:
- 更新系统表中存储空间使用的信息。
sqlCopy CodeDBCC UPDATEUSAGE ('MyDatabase'); -
DBCC FREEPROCCACHE:
- 释放 SQL Server 过程缓存中的所有执行计划。
sqlCopy CodeDBCC FREEPROCCACHE; -
DBCC FREESESSIONCACHE:
- 释放 SQL Server 会话缓存中的所有会话信息。
sqlCopy CodeDBCC FREESESSIONCACHE; -
DBCC SQLPERF:
- 提供有关 SQL Server 性能计数器的信息。
sqlCopy CodeDBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); -
DBCC TRACEOFF:
- 关闭指定的跟踪标志。
sqlCopy CodeDBCC TRACEOFF (1222, -1); -
DBCC TRACEON:
- 打开指定的跟踪标志。
sqlCopy CodeDBCC TRACEON (1222, -1); -
DBCC INPUTBUFFER:
- 显示指定会话中当前正在执行的 SQL 语句。
sqlCopy CodeDBCC INPUTBUFFER (53); -- 显示会话 ID 为 53 的当前 SQL 语句
这些命令提供了广泛的数据库管理和性能调优功能,对于维护数据库的完整性、监控性能问题以及释放未使用空间等方面都非常有用。在使用这些命令时,请确保了解其影响和潜在的操作风险。
继续列举更多常用的 SQL Server DBCC 命令和它们的功能:
-
DBCC OPENTRAN:
- 显示当前数据库中未提交的事务信息。
sqlCopy CodeDBCC OPENTRAN ('MyDatabase'); -
DBCC CHECKCONSTRAINTS:
- 验证表的所有约束是否满足。
sqlCopy CodeDBCC CHECKCONSTRAINTS ('MyTable'); -
DBCC INDEXDEFRAG:
- 对索引进行碎片整理,以改善查询性能。
sqlCopy CodeDBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 1); -
DBCC UPDATEUSAGE:
- 更新系统表中的存储空间信息。
sqlCopy CodeDBCC UPDATEUSAGE ('MyDatabase'); -
DBCC USEROPTIONS:
- 显示当前会话的 SET 选项。
sqlCopy CodeDBCC USEROPTIONS; -
DBCC DROPCLEANBUFFERS:
- 从 SQL Server 缓存中移除所有数据页。
sqlCopy CodeDBCC DROPCLEANBUFFERS; -
DBCC PINTABLE:
- 将指定表的所有页固定在内存中,防止 SQL Server 将其从缓存中移除。
sqlCopy CodeDBCC PINTABLE ('MyDatabase', 'MyTable'); -
DBCC UNPINTABLE:
- 取消指定表在内存中的固定状态。
sqlCopy CodeDBCC UNPINTABLE ('MyDatabase', 'MyTable'); -
DBCC CHECKIDENT:
- 验证和更正表中的标识列的当前值。
sqlCopy CodeDBCC CHECKIDENT ('MyTable', NORESEED); -
DBCC SHOW_STATISTICS:
- 显示指定表或索引的统计信息。
sqlCopy CodeDBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex'); -
DBCC SETCPUWEIGHT:
- 设置 CPU 资源管理器中的权重。
sqlCopy CodeDBCC SETCPUWEIGHT (50); -
DBCC SETIOWEIGHT:
- 设置 IO 资源管理器中的权重。
sqlCopy CodeDBCC SETIOWEIGHT (50);
这些命令提供了广泛的数据库管理和诊断功能,适用于不同的维护和优化需求。在使用任何 DBCC 命令之前,请确保详细了解其功能、用法和可能的影响,以避免不必要的数据库问题或性能下降。
列举更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC DBREINDEX:
- 重新创建一个或多个索引。
sqlCopy CodeDBCC DBREINDEX ('MyTable', 'IX_MyIndex'); -
DBCC SHRINKFILE:
- 缩小指定数据文件或日志文件以释放空间。
sqlCopy CodeDBCC SHRINKFILE ('MyDatabase_Log', 100); -- 缩小日志文件到100MB -
DBCC SQLPERF:
- 显示有关 SQL Server 性能的信息。
sqlCopy CodeDBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); -
DBCC TRACEOFF:
- 关闭指定的跟踪标志。
sqlCopy CodeDBCC TRACEOFF (1222, -1); -
DBCC TRACEON:
- 打开指定的跟踪标志。
sqlCopy CodeDBCC TRACEON (1222, -1); -
DBCC INPUTBUFFER:
- 显示指定会话的当前 SQL 语句。
sqlCopy CodeDBCC INPUTBUFFER (53); -- 显示会话 ID 为 53 的当前 SQL 语句 -
DBCC SHOWFILESTATS:
- 显示数据库文件的物理信息。
sqlCopy CodeDBCC SHOWFILESTATS; -
DBCC CHECKPRIMARYFILE:
- 验证主文件组中所有的文件。
sqlCopy CodeDBCC CHECKPRIMARYFILE ('MyDatabase'); -
DBCC SHRINKDATABASE:
- 缩小整个数据库以释放未使用的空间。
sqlCopy CodeDBCC SHRINKDATABASE ('MyDatabase'); -
DBCC UPDATEUSAGE:
- 更新系统表中存储空间使用的信息。
sqlCopy CodeDBCC UPDATEUSAGE ('MyDatabase');
这些命令涵盖了数据库管理和性能优化中的多个方面,可以帮助管理员确保数据库的完整性、优化性能,并且能够针对不同的情况进行调整和维护。使用这些命令时,请务必了解其影响和适用场景,以便有效地管理和优化 SQL Server 数据库。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC CHECKALLOC:
- 验证分配给数据库中所有对象的空间。
sqlCopy CodeDBCC CHECKALLOC ('MyDatabase'); -
DBCC CHECKCATALOG:
- 验证系统表中的目录。
sqlCopy CodeDBCC CHECKCATALOG ('MyDatabase'); -
DBCC CHECKDB:
- 执行完整的数据库一致性检查,包括所有表和索引。
sqlCopy CodeDBCC CHECKDB ('MyDatabase'); -
DBCC CHECKTABLE:
- 验证表的完整性,包括索引和链接的所有页面。
sqlCopy CodeDBCC CHECKTABLE ('MyTable'); -
DBCC CLEANTABLE:
- 从系统表中删除无效的数据。
sqlCopy CodeDBCC CLEANTABLE ('MyDatabase', 'MyTable', 0); -
DBCC FREEPROCCACHE:
- 从 SQL Server 进程缓存中删除计划缓存。
sqlCopy CodeDBCC FREEPROCCACHE; -
DBCC FREESYSTEMCACHE:
- 从 SQL Server 系统缓存中删除查询执行计划和数据缓存。
sqlCopy CodeDBCC FREESYSTEMCACHE ('ALL'); -
DBCC FREESSESSIONCACHE:
- 从当前会话的缓存中删除执行计划和数据缓存。
sqlCopy CodeDBCC FREESSESSIONCACHE; -
DBCC HELP:
- 显示 DBCC 命令的帮助信息。
sqlCopy CodeDBCC HELP ('CHECKDB'); -
DBCC INPUTBUFFER:
- 显示当前正在执行的请求的输入缓冲区。
sqlCopy CodeDBCC INPUTBUFFER (53); -
DBCC OPENTRAN:
- 显示当前数据库中打开的事务。
sqlCopy CodeDBCC OPENTRAN ('MyDatabase'); -
DBCC PAGE:
- 以详细格式显示数据库文件页的内容。
sqlCopy CodeDBCC PAGE ('MyDatabase', 1, 9, 3); -
DBCC PROCCACHE:
- 显示当前的过程缓存中的执行计划信息。
sqlCopy CodeDBCC PROCCACHE;
这些 DBCC 命令提供了广泛的数据库管理、诊断和性能优化功能,帮助管理员和开发人员有效管理 SQL Server 数据库的各个方面。使用这些命令时,建议详细了解其用法和可能的影响,以便安全地执行数据库维护和优化操作。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC SQLPERF:
- 显示有关 SQL Server 性能的信息,如缓冲区命中率和活动连接数。
sqlCopy CodeDBCC SQLPERF ('sys.dm_os_performance_counters'); -
DBCC UPDATEUSAGE:
- 更新指定数据库中所有表和索引的使用信息。
sqlCopy CodeDBCC UPDATEUSAGE ('MyDatabase'); -
DBCC USEROPTIONS:
- 显示当前会话的 SET 选项设置。
sqlCopy CodeDBCC USEROPTIONS; -
DBCC CHECKIDENT:
- 检查并可能更正指定表中指定标识列的当前标识值。
sqlCopy CodeDBCC CHECKIDENT ('MyTable', RESEED, 100); -
DBCC CHECKCONSTRAINTS:
- 验证指定表的所有约束。
sqlCopy CodeDBCC CHECKCONSTRAINTS ('MyTable'); -
DBCC DROPCLEANBUFFERS:
- 从缓冲池中删除所有缓冲的数据页。
sqlCopy CodeDBCC DROPCLEANBUFFERS; -
DBCC PINTABLE:
- 将指定表的所有数据页固定在内存中。
sqlCopy CodeDBCC PINTABLE ('MyDatabase', 'MyTable'); -
DBCC UNPINTABLE:
- 取消将指定表的数据页固定在内存中。
sqlCopy CodeDBCC UNPINTABLE ('MyDatabase', 'MyTable'); -
DBCC FLUSHAUTHCACHE:
- 清除权限缓存中的所有权限信息。
sqlCopy CodeDBCC FLUSHAUTHCACHE; -
DBCC DROPCLEANBUFFERS:
- 从缓冲池中删除所有缓冲的数据页。
sqlCopy CodeDBCC DROPCLEANBUFFERS; -
DBCC OPENTRAN:
- 显示当前数据库中未提交的事务。
sqlCopy CodeDBCC OPENTRAN ('MyDatabase'); -
DBCC SHOW_STATISTICS:
- 显示表或索引的统计信息。
sqlCopy CodeDBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
这些 DBCC 命令覆盖了从数据库完整性检查到性能监视和缓存管理的多个方面,帮助管理员和开发人员有效地管理和优化 SQL Server 数据库。使用这些命令时,请确保理解其具体功能及使用场景,以免对数据库产生意外的影响。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC SHOWCONTIG:
- 显示指定表或索引的碎片信息。
sqlCopy CodeDBCC SHOWCONTIG ('MyTable', 'MyIndex'); -
DBCC SHRINKDATABASE:
- 缩小指定数据库的数据和日志文件大小。
sqlCopy CodeDBCC SHRINKDATABASE ('MyDatabase', 10); -
DBCC SHRINKFILE:
- 缩小指定数据库文件的大小。
sqlCopy CodeDBCC SHRINKFILE ('MyDatabase_Log', 100); -
DBCC TRACEOFF:
- 关闭指定的 SQL Server 跟踪标志。
sqlCopy CodeDBCC TRACEOFF (1222, -1); -
DBCC TRACEON:
- 打开指定的 SQL Server 跟踪标志。
sqlCopy CodeDBCC TRACEON (1222, -1); -
DBCC SQLPERF(LOGSPACE):
- 显示指定数据库日志空间使用情况的信息。
sqlCopy CodeDBCC SQLPERF(LOGSPACE); -
DBCC CHECKFILEGROUP:
- 验证指定文件组中所有文件的逻辑和物理一致性。
sqlCopy CodeDBCC CHECKFILEGROUP ('MyFilegroup'); -
DBCC CHECKPRIMARYFILE:
- 验证主文件组中所有文件的逻辑和物理一致性。
sqlCopy CodeDBCC CHECKPRIMARYFILE ('MyDatabase'); -
DBCC CHECKDB (database_name, REPAIR_ALLOW_DATA_LOSS):
- 检查并尝试修复数据库中的一致性错误,可能导致数据丢失。
sqlCopy CodeDBCC CHECKDB ('MyDatabase', REPAIR_ALLOW_DATA_LOSS); -
DBCC CHECKTABLE (table_name, REPAIR_REBUILD):
- 检查并尝试修复表中的一致性错误,重建所有索引。
sqlCopy CodeDBCC CHECKTABLE ('MyTable', REPAIR_REBUILD);
这些 DBCC 命令提供了从数据库的碎片整理到文件大小管理以及数据库一致性检查和修复的功能。在使用这些命令时,务必小心谨慎,尤其是在执行可能导致数据丢失的操作时要格外注意。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC CHECKDB (database_name, REPAIR_FAST):
- 检查并尝试快速修复数据库中的一致性错误,不尝试重建索引。
sqlCopy CodeDBCC CHECKDB ('MyDatabase', REPAIR_FAST); -
DBCC CHECKALLOC:
- 验证指定数据库的磁盘空间分配结构。
sqlCopy CodeDBCC CHECKALLOC ('MyDatabase'); -
DBCC DBINFO:
- 显示有关指定数据库的配置信息。
sqlCopy CodeDBCC DBINFO ('MyDatabase'); -
DBCC FREEPROCCACHE:
- 从 SQL Server 进程缓存中删除所有执行计划。
sqlCopy CodeDBCC FREEPROCCACHE; -
DBCC INPUTBUFFER:
- 显示指定会话中最后一个执行的 SQL 语句。
sqlCopy CodeDBCC INPUTBUFFER (55); -
DBCC OPENTRAN (database_name):
- 显示指定数据库中未提交的事务信息。
sqlCopy CodeDBCC OPENTRAN ('MyDatabase'); -
DBCC PROCCACHE:
- 显示当前 SQL Server 进程缓存中的执行计划。
sqlCopy CodeDBCC PROCCACHE; -
DBCC SHOW_STATISTICS (table_name, index_name):
- 显示指定表或索引的统计信息。
sqlCopy CodeDBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex'); -
DBCC SHOW_STATISTICS (table_name, column_name):
- 显示指定表中指定列的统计信息。
sqlCopy CodeDBCC SHOW_STATISTICS ('MyTable', 'MyColumn'); -
DBCC SQLPERF (diskstats):
- 显示 SQL Server 中有关磁盘使用情况的信息。
sqlCopy CodeDBCC SQLPERF (diskstats);
这些 DBCC 命令涵盖了从数据库一致性检查和修复、执行计划管理到统计信息显示和磁盘使用情况监控的多个方面。它们是 SQL Server 管理和优化工作中不可或缺的工具,确保数据库运行在高效、可靠的状态下。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC CHECKTABLE (table_name, REPAIR_FAST):
- 检查并尝试快速修复表中的一致性错误,不尝试修复所有错误。
sqlCopy CodeDBCC CHECKTABLE ('MyTable', REPAIR_FAST); -
DBCC HELP:
- 显示有关 DBCC 命令的语法和用法信息。
sqlCopy CodeDBCC HELP ('CHECKDB'); -
DBCC OPENTRAN:
- 显示当前数据库中所有未提交的事务信息。
sqlCopy CodeDBCC OPENTRAN; -
DBCC OUTPUTBUFFER:
- 显示指定会话的输出缓冲区中的信息。
sqlCopy CodeDBCC OUTPUTBUFFER (55); -
DBCC PAGE:
- 显示指定页的详细信息,用于检查数据页的内容。
sqlCopy CodeDBCC PAGE ('MyDatabase', 1, 9, 3); -
DBCC PROCCACHE (CLEAR):
- 清除当前 SQL Server 进程缓存中的所有执行计划。
sqlCopy CodeDBCC PROCCACHE (CLEAR); -
DBCC SQLPERF (waitstats):
- 显示 SQL Server 中有关等待统计信息的详细信息。
sqlCopy CodeDBCC SQLPERF (waitstats); -
DBCC UPDATEUSAGE:
- 更新系统表中的页和行数统计信息。
sqlCopy CodeDBCC UPDATEUSAGE ('MyDatabase'); -
DBCC USEROPTIONS:
- 显示当前会话的 SET 选项信息。
sqlCopy CodeDBCC USEROPTIONS; -
DBCC DROPCLEANBUFFERS:
- 清除 SQL Server 缓存中所有数据缓冲区的数据。
sqlCopy CodeDBCC DROPCLEANBUFFERS;
这些命令覆盖了从数据页详细信息查看到缓存管理和系统统计信息更新的多个方面。它们是 SQL Server 管理和维护中的强大工具,帮助管理员监控和优化数据库性能。
继续介绍更多常用的 SQL Server DBCC 命令及其功能:
-
DBCC DBREINDEX (table_name, index_name):
- 重新构建指定表或索引的所有索引。
sqlCopy CodeDBCC DBREINDEX ('MyTable', 'IX_MyIndex'); -
DBCC INDEXDEFRAG (database_name, table_name, index_name):
- 对指定索引进行碎片整理,重组索引页以优化性能。
sqlCopy CodeDBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 'IX_MyIndex'); -
DBCC SHRINKDATABASE (database_name):
- 缩小指定数据库的数据和日志文件以释放未使用的空间。
sqlCopy CodeDBCC SHRINKDATABASE ('MyDatabase'); -
DBCC SHRINKFILE (file_name, size):
- 缩小指定数据文件或日志文件的大小。
sqlCopy CodeDBCC SHRINKFILE ('MyDatabase_Log', 100); -- 缩小日志文件到100MB -
DBCC TRACEOFF (trace_number):
- 关闭指定跟踪标志。
sqlCopy CodeDBCC TRACEOFF (1200); -
DBCC TRACEON (trace_number):
- 打开指定跟踪标志。
sqlCopy CodeDBCC TRACEON (1200); -
DBCC SQLPERF (logspace):
- 显示有关日志空间使用情况的信息。
sqlCopy CodeDBCC SQLPERF (logspace); -
DBCC SQLPERF (objectstats):
- 显示有关缓冲池中对象的统计信息。
sqlCopy CodeDBCC SQLPERF (objectstats); -
DBCC SQLPERF (lockstats):
- 显示 SQL Server 中的锁统计信息。
sqlCopy CodeDBCC SQLPERF (lockstats); -
DBCC SQLPERF (backupio): - 显示有关备份和恢复的 I/O 统计信息。
```sql
DBCC SQLPERF (backupio);
```
这些命令涵盖了从索引重建和碎片整理到数据库文件大小管理和性能跟踪的多个方面。它们是 SQL Server 管理人员在日常管理中不可或缺的工具,用于确保数据库的高效性和可靠性。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC CHECKIDENT (table_name, RESEED, new_reseed_value): - 检查并重新设置表的标识列的当前值。
```sql
DBCC CHECKIDENT ('MyTable', RESEED, 100);
```
- DBCC FREEPROCCACHE: - 清除 SQL Server 中所有执行计划缓存。
```sql
DBCC FREEPROCCACHE;
```
- DBCC INPUTBUFFER (spid): - 显示指定会话 ID (spid) 的当前输入缓冲区中的 T-SQL 语句。
```sql
DBCC INPUTBUFFER (55);
```
- DBCC LOGINFO: - 显示数据库日志文件中的虚拟日志文件 (VLF) 的详细信息。
```sql
DBCC LOGINFO;
```
- DBCC OPENTRAN (database_name): - 显示指定数据库中所有未提交的事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
- DBCC PAGE (database_name, file_number, page_number, print_option): - 以详细格式显示指定页的内容,用于内部调试和问题排查。
```sql
DBCC PAGE ('MyDatabase', 1, 9, 3);
```
- DBCC SHOW_STATISTICS (table_name, index_name): - 显示指定表或索引的统计信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
- DBCC UPDATEUSAGE (database_name): - 更新指定数据库中所有表的页和行数统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase');
```
- DBCC CHECKCATALOG (database_name): - 检查指定数据库中系统表的物理和逻辑完整性。
```sql
DBCC CHECKCATALOG ('MyDatabase');
```
- DBCC SQLPERF (waitstats, CLEAR): - 清除 SQL Server 中有关等待统计信息的缓存,并显示当前的等待统计信息。
```sql
DBCC SQLPERF (waitstats, CLEAR);
```
这些命令涵盖了从日志文件管理和事务状态查询到统计信息查看和系统表完整性检查的多个方面。它们是 SQL Server 管理人员进行数据库维护和性能优化的重要工具。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC CHECKTABLE (table_name): - 对指定表执行完整性检查,检查表中的物理和逻辑结构。
```sql
DBCC CHECKTABLE ('MyTable');
```
- DBCC CLEANTABLE (database_name, table_name): - 从指定表中删除由于 TRUNCATE TABLE 或 DELETE 语句而标记为待清理的行。
```sql
DBCC CLEANTABLE ('MyDatabase', 'MyTable');
```
- DBCC DROPCLEANBUFFERS: - 从缓冲池中清除所有数据页,以便下一次访问从磁盘读取。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC FREESESSIONCACHE: - 清除当前会话中的所有用户和计划缓存。
```sql
DBCC FREESESSIONCACHE;
```
- DBCC HELP (command_name): - 显示指定 DBCC 命令的语法和用法帮助。
```sql
DBCC HELP ('CHECKDB');
```
- DBCC OPENTRAN WITH TABLERESULTS: - 显示包含有关未提交的事务信息的结果集,与 DBCC OPENTRAN 不同之处在于返回结果集而不是消息。
```sql
DBCC OPENTRAN WITH TABLERESULTS;
```
- DBCC PROCCACHE: - 显示当前 SQL Server 缓存中的执行计划信息。
```sql
DBCC PROCCACHE;
```
- DBCC REBUILD_LOG (database_name, 'filename'): - 重建数据库的事务日志文件。
```sql
DBCC REBUILD_LOG ('MyDatabase', 'C:\NewLog.ldf');
```
- DBCC SETCPUWEIGHT (weight_value): - 设置当前用户的 CPU 权重,用于资源管理。
```sql
DBCC SETCPUWEIGHT (50);
```
- DBCC SETIOWEIGHT (weight_value): - 设置当前用户的 IO 权重,用于资源管理。
```sql
DBCC SETIOWEIGHT (50);
```
这些命令涵盖了从缓冲池管理和事务日志重建到资源管理和执行计划查看的多个方面。它们是 SQL Server 管理人员在日常运维中进行性能优化和问题排查的有力工具。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC SHOWCONTIG (table_name): - 显示指定表或索引的碎片信息和物理存储结构。
```sql
DBCC SHOWCONTIG ('MyTable');
```
- DBCC SHRINKDATABASE (database_name): - 缩小指定数据库的数据文件和日志文件以释放空间。
```sql
DBCC SHRINKDATABASE ('MyDatabase');
```
- DBCC SHRINKFILE (logical_file_name, size): - 缩小指定数据库文件(数据文件或日志文件)的大小。
```sql
DBCC SHRINKFILE ('MyDataFile', 1000);
```
- DBCC INDEXDEFRAG (database_name, table_name, index_name): - 对指定表的指定索引执行碎片整理操作。
```sql
DBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 'IX_MyIndex');
```
- DBCC UPDATEUSAGE (database_name, table_name): - 更新指定表的页和行数统计信息,可以用于修复由于数据库元数据不一致而导致的统计信息不准确的问题。
```sql
DBCC UPDATEUSAGE ('MyDatabase', 'MyTable');
```
- DBCC TRACEOFF (trace_number): - 关闭指定跟踪标志。
```sql
DBCC TRACEOFF (1222);
```
- DBCC TRACEON (trace_number, -1): - 打开指定跟踪标志。
```sql
DBCC TRACEON (1222, -1);
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项。
```sql
DBCC USEROPTIONS;
```
- DBCC SQLPERF (LOGSPACE): - 显示当前数据库日志文件使用情况的信息。
```sql
DBCC SQLPERF (LOGSPACE);
```
- DBCC CLONEDATABASE (source_database_name, target_database_name): - 从源数据库生成目标数据库的克隆副本,用于开发和测试环境。
```sql
DBCC CLONEDATABASE ('ProductionDB', 'CloneDB');
```
这些命令涵盖了从数据库压缩和碎片整理到跟踪管理和选项查询的多个方面。它们是 SQL Server 管理人员在处理数据库性能问题和日常维护中的重要工具。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC INPUTBUFFER (spid): - 显示指定会话 (SPID) 最后一个 SQL 语句的输入缓冲区内容。
```sql
DBCC INPUTBUFFER (51); -- 51 为会话的 SPID
```
- DBCC FREEPROCCACHE: - 从 SQL Server 缓存中清除执行计划和存储过程缓存。
```sql
DBCC FREEPROCCACHE;
```
- DBCC SHOW_STATISTICS (table_name, index_name): - 显示指定表的指定索引或统计信息的详细信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
- DBCC CHECKALLOC (database_name): - 检查指定数据库中所有分配的对象,包括数据文件和日志文件的有效性。
```sql
DBCC CHECKALLOC ('MyDatabase');
```
- DBCC CHECKCATALOG (database_name): - 验证指定数据库的系统表结构的完整性。
```sql
DBCC CHECKCATALOG ('MyDatabase');
```
- DBCC CHECKCONSTRAINTS (table_name): - 验证指定表的所有约束的完整性。
```sql
DBCC CHECKCONSTRAINTS ('MyTable');
```
- DBCC CHECKIDENT (table_name, RESEED, new_reseed_value): - 检查指定表的标识列的当前值,并可以重设标识列的种子值。
```sql
DBCC CHECKIDENT ('MyTable', RESEED, 100);
```
- DBCC DBINFO (database_name): - 显示指定数据库的详细信息,包括文件信息和版本信息。
```sql
DBCC DBINFO ('MyDatabase');
```
- DBCC EXTENTINFO (database_name, table_name, mode): - 显示指定表或索引的扩展信息,包括空间分配和使用情况。
```sql
DBCC EXTENTINFO ('MyDatabase', 'MyTable', ALL);
```
- DBCC PAGE (database_name, file_id, page_number, print_option): - 以详细格式显示指定数据库文件中指定页面的内容。
```sql
DBCC PAGE ('MyDatabase', 1, 9, 3);
```
这些命令涵盖了从数据库结构检查到缓存清理和详细数据页面分析的多个方面。它们提供了SQL Server 管理人员在进行深入数据库分析和维护时的必备工具。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC PROCCACHE: - 显示当前 SQL Server 缓存中的存储过程和执行计划的详细信息。
```sql
DBCC PROCCACHE;
```
- DBCC UPDATEUSAGE (database_name): - 更新指定数据库中所有表的页数和行数信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase');
```
- DBCC CHECKDB (database_name, repair_options): - 对指定数据库执行完整性检查,并可选地修复检测到的问题。
```sql
DBCC CHECKDB ('MyDatabase', REPAIR_FAST);
```
- DBCC CHECKTABLE (table_name): - 对指定表执行物理和逻辑一致性检查。
```sql
DBCC CHECKTABLE ('MyTable');
```
- DBCC DROPCLEANBUFFERS: - 从 SQL Server 缓存中清除数据页,强制系统重新读取数据页。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC OPENTRAN (database_name): - 显示当前在指定数据库中打开的最早的未提交的事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
- DBCC SQLPERF (WAITSTATS): - 显示 SQL Server 的等待统计信息,包括等待类型和等待时间。
```sql
DBCC SQLPERF (WAITSTATS);
```
- DBCC LOGINFO (database_name): - 显示指定数据库的事务日志文件信息,包括日志文件数量、大小和状态。
```sql
DBCC LOGINFO ('MyDatabase');
```
- DBCC HELP (command_name): - 显示指定 DBCC 命令的帮助信息。
```sql
DBCC HELP ('CHECKALLOC');
```
- DBCC CHECKFILEGROUP (filegroup_name): - 验证指定文件组的逻辑一致性。
```sql
DBCC CHECKFILEGROUP ('MyFilegroup');
```
这些命令覆盖了 SQL Server 数据库管理中常见的诊断、完整性检查、性能分析和缓存管理需求。它们是数据库管理员和开发人员在维护和优化 SQL Server 环境时的关键工具。
常用的 SQL Server DBCC 命令及其功能:
- DBCC SHRINKDATABASE (database_name, shrink_option): - 缩小指定数据库的数据和日志文件大小以释放空间。
```sql
DBCC SHRINKDATABASE ('MyDatabase', TRUNCATEONLY);
```
- DBCC SHRINKFILE (logical_file_name, target_size): - 缩小指定数据库文件的大小以释放空间。
```sql
DBCC SHRINKFILE ('MyDatabase_Log', 100); -- 将事务日志文件缩小到 100 MB
```
- DBCC TRACEOFF (trace_number): - 关闭指定编号的 SQL 跟踪标志。
```sql
DBCC TRACEOFF (1222); -- 关闭死锁跟踪标志
```
- DBCC TRACEON (trace_number, trace_flag_value): - 打开指定编号的 SQL 跟踪标志,并可以设置跟踪标志的值。
```sql
DBCC TRACEON (1222, -1); -- 打开死锁跟踪标志,并设置详细信息级别
```
- DBCC SETCPUWEIGHT (weight): - 设置 SQL Server 进程的 CPU 使用权重。
```sql
DBCC SETCPUWEIGHT (50); -- 将 SQL Server 进程的 CPU 使用权重设置为 50%
```
- DBCC SETBUFFER (new_size): - 设置 SQL Server 数据页的缓冲池大小。
```sql
DBCC SETBUFFER (300); -- 设置数据页缓冲池大小为 300 MB
```
- DBCC CHECKIDENT (table_name, NORESEED): - 检查指定表的标识列的当前值,但不重设标识列的种子值。
```sql
DBCC CHECKIDENT ('MyTable', NORESEED);
```
- DBCC PINTABLE (table_name): - 将指定表的数据页固定在内存中,防止被 SQL Server 的缓冲管理系统驱逐。
```sql
DBCC PINTABLE ('MyTable');
```
- DBCC UNPINTABLE (table_name): - 取消指定表的数据页在内存中的固定,允许 SQL Server 的缓冲管理系统进行正常管理。
```sql
DBCC UNPINTABLE ('MyTable');
```
- DBCC UPDATEUSAGE (database_name, 'index_name'): - 更新指定数据库中指定索引的使用信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase', 'IX_MyIndex');
```
这些命令提供了广泛的数据库管理功能,从性能调整到数据完整性检查和资源管理,适用于各种 SQL Server 管理和优化场景。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC FREEPROCCACHE: - 清空 SQL Server 缓存中的执行计划,释放资源。
```sql
DBCC FREEPROCCACHE;
```
- DBCC SQLPERF (LOGSPACE): - 显示指定数据库的事务日志空间使用情况。
```sql
DBCC SQLPERF (LOGSPACE);
```
- DBCC SHRINKFILE (logical_file_name, EMPTYFILE): - 将指定文件组中的数据移动到其他文件中,然后收缩指定文件。
```sql
DBCC SHRINKFILE ('MyDataFile', EMPTYFILE);
```
- DBCC INPUTBUFFER (spid): - 显示指定会话(SPID)最后一次执行的 SQL 输入缓冲区内容。
```sql
DBCC INPUTBUFFER (52); -- 显示 SPID 为 52 的会话的最后执行的 SQL 查询
```
- DBCC SHOW_STATISTICS (table_or_index_name, statistics_id): - 显示指定表或索引的统计信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项设置。
```sql
DBCC USEROPTIONS;
```
- DBCC DROPLATCH (resource_address): - 释放指定地址的 SQL Server 内部锁定资源。
```sql
DBCC DROPLATCH (0x0000000006C150A0); -- 释放指定地址的锁定资源
```
- DBCC TRACESTATUS (trace_number): - 显示指定 SQL 跟踪标志的当前状态。
```sql
DBCC TRACESTATUS (1222); -- 显示死锁跟踪标志(1222)的当前状态
```
- DBCC OPENTRAN (database_name): - 显示当前在指定数据库中打开的最早的未提交的事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
- DBCC HELP ('command_name'): - 显示指定 DBCC 命令的帮助信息。
```sql
DBCC HELP ('CHECKTABLE');
```
这些命令覆盖了 SQL Server 中数据库管理和性能优化的广泛需求,帮助管理员和开发人员更有效地管理和调优数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC CHECKCATALOG (database_name): - 检查指定数据库中的系统表的完整性。
```sql
DBCC CHECKCATALOG ('MyDatabase');
```
- DBCC CHECKCONSTRAINTS (table_name): - 检查指定表中的所有约束的完整性。
```sql
DBCC CHECKCONSTRAINTS ('MyTable');
```
- DBCC CHECKTABLE (table_name): - 检查指定表的物理和逻辑完整性。
```sql
DBCC CHECKTABLE ('MyTable');
```
- DBCC CLEANTABLE (database_name, table_name, batch_size): - 从指定表中删除不可访问的行,并重建索引。
```sql
DBCC CLEANTABLE ('MyDatabase', 'MyTable', 1000); -- 每次处理 1000 行
```
- DBCC UPDATEUSAGE (database_name): - 更新指定数据库中所有表的使用信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase');
```
- DBCC CHECKFILEGROUP (filegroup_name): - 检查指定文件组中所有文件的完整性。
```sql
DBCC CHECKFILEGROUP ('MyFilegroup');
```
- DBCC SQLPERF (WAITSTATS): - 显示 SQL Server 当前等待统计信息。
```sql
DBCC SQLPERF (WAITSTATS);
```
- DBCC LOGINFO: - 显示数据库事务日志的虚拟日志文件(VLF)信息。
```sql
DBCC LOGINFO;
```
- DBCC PAGE (database_name, file_id, page_number, print_option): - 显示指定数据库文件中指定页的详细信息。
```sql
DBCC PAGE ('MyDatabase', 1, 9, 3); -- 显示文件 ID 为 1,页码为 9 的详细信息
```
- DBCC REINDEX (table_name): - 重新生成指定表的所有索引。
```sql
DBCC REINDEX ('MyTable');
```
这些命令提供了广泛的数据库管理和维护功能,帮助管理员确保数据库的稳定性、性能和完整性。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC INDEXDEFRAG (database_name, table_name, index_id): - 对指定表的指定索引进行碎片整理。
```sql
DBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 1); -- 对表 'MyTable' 的索引 ID 为 1 的索引进行碎片整理
```
- DBCC DBINFO (database_name): - 显示指定数据库的信息,如数据库版本和状态。
```sql
DBCC DBINFO ('MyDatabase');
```
- DBCC TRACEOFF (trace_number, trace_flag): - 关闭指定 SQL 跟踪标志。
```sql
DBCC TRACEOFF (1222, -1); -- 关闭死锁跟踪标志(1222)
```
- DBCC SHOW_STAT_XML (table_name, statistics_id): - 以 XML 格式显示指定表的指定统计信息。
```sql
DBCC SHOW_STAT_XML ('MyTable', 'IX_MyIndex');
```
- DBCC DROPCLEANBUFFERS: - 从内存中清除缓存的数据页,以便进行性能测试。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC SQLPERF (WAITSTATS): - 显示 SQL Server 当前的等待统计信息。
```sql
DBCC SQLPERF (WAITSTATS);
```
- DBCC SHRINKDATABASE (database_name): - 收缩指定数据库的数据和日志文件。
```sql
DBCC SHRINKDATABASE ('MyDatabase');
```
- DBCC HELP ('dbcc_command_name'): - 显示指定 DBCC 命令的帮助信息。
```sql
DBCC HELP ('CHECKALLOC');
```
- DBCC MEMORYSTATUS: - 显示 SQL Server 实例的内存使用情况。
```sql
DBCC MEMORYSTATUS;
```
- DBCC SHOW_STATISTICS (table_name, statistics_name): - 显示指定表的指定统计信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
这些 DBCC 命令提供了广泛的数据库管理和性能优化功能,管理员可以使用它们来监视、维护和优化 SQL Server 数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC FREEPROCCACHE: - 从 SQL Server 进程缓存中清除执行计划。
```sql
DBCC FREEPROCCACHE;
```
- DBCC INPUTBUFFER (spid): - 显示指定会话 ID(SPID)的当前 SQL 输入缓冲区。
```sql
DBCC INPUTBUFFER (52); -- 显示 SPID 为 52 的当前 SQL 输入缓冲区
```
- DBCC OPENTRAN (database_name): - 显示指定数据库中当前的活动事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
- DBCC PROCCACHE: - 显示 SQL Server 中的执行计划缓存内容。
```sql
DBCC PROCCACHE;
```
- DBCC SETCPUWEIGHT (cpu_weight): - 设置 SQL Server 实例中每个 CPU 的权重。
```sql
DBCC SETCPUWEIGHT (50); -- 将每个 CPU 的权重设置为 50
```
- DBCC SETINSTANCEWEIGHT (instance_weight): - 设置 SQL Server 实例的权重。
```sql
DBCC SETINSTANCEWEIGHT (50); -- 将实例的权重设置为 50
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项。
```sql
DBCC USEROPTIONS;
```
- DBCC OPENTRAN: - 显示当前数据库中的活动事务信息。
```sql
DBCC OPENTRAN;
```
- DBCC UPDATEUSAGE (database_name): - 更新指定数据库中所有表的使用信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase');
```
- DBCC CHECKIDENT (table_name, RESEED, new_reseed_value): - 检查并修改指定表的标识列的当前值。
```sql
DBCC CHECKIDENT ('MyTable', RESEED, 100); -- 将表 'MyTable' 的标识列重新种子为 100
```
这些命令提供了丰富的功能,可以帮助管理员管理和优化 SQL Server 数据库,确保其性能和稳定性。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC CHECKIDENT (table_name, NORESEED): - 报告指定表的标识列当前的种子值。
```sql
DBCC CHECKIDENT ('MyTable', NORESEED);
```
- DBCC CHECKTABLE (table_name): - 检查指定表的物理和逻辑完整性。
```sql
DBCC CHECKTABLE ('MyTable');
```
- DBCC CHECKCATALOG (database_name): - 验证数据库中所有表的索引、约束和其他关键结构的完整性。
```sql
DBCC CHECKCATALOG ('MyDatabase');
```
- DBCC REBUILDLOG (database_name, filename): - 重建指定数据库的事务日志文件。
```sql
DBCC REBUILDLOG ('MyDatabase', 'C:\Logs\MyDatabase_log.ldf');
```
- DBCC UPDATEUSAGE (database_name, table_name): - 更新指定数据库中指定表的使用信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase', 'MyTable');
```
- DBCC SHOW_STATISTICS (table_name, statistics_name) WITH HISTOGRAM: - 显示指定表的指定统计信息及其直方图。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex') WITH HISTOGRAM;
```
- DBCC SQLPERF (LOGSPACE): - 显示 SQL Server 当前日志空间使用情况。
```sql
DBCC SQLPERF (LOGSPACE);
```
- DBCC CHECKALLOC (database_name): - 检查指定数据库的页面分配情况。
```sql
DBCC CHECKALLOC ('MyDatabase');
```
- DBCC CHECKFILEGROUP (filegroup_name): - 检查指定文件组的物理和逻辑完整性。
```sql
DBCC CHECKFILEGROUP ('PRIMARY');
```
- DBCC CHECKDB (database_name) WITH PHYSICAL_ONLY: - 仅检查指定数据库的物理完整性,不运行逻辑检查。
```sql
DBCC CHECKDB ('MyDatabase') WITH PHYSICAL_ONLY;
```
这些命令涵盖了从检查数据库完整性到性能优化和日志管理的多个方面,帮助管理员维护和优化 SQL Server 数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC SHRINKDATABASE (database_name [, target_percent | target_size]): - 缩小指定数据库的数据文件和事务日志文件以释放未使用的空间。
```sql
DBCC SHRINKDATABASE ('MyDatabase', 10); -- 缩小数据库 'MyDatabase',目标空间为当前使用空间的 10%
```
- DBCC SHRINKFILE (logical_file_name [, target_size [, truncate_only]]): - 缩小指定数据库文件或日志文件的大小。
```sql
DBCC SHRINKFILE ('MyDatabase_log', 1000); -- 缩小数据库日志文件 'MyDatabase_log' 到 1000 MB
```
- DBCC INDEXDEFRAG (database_name, table_name, index_name): - 对指定数据库中指定表的指定索引执行碎片整理操作。
```sql
DBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 'IX_MyIndex');
```
- DBCC SHOW_STATISTICS (table_name, statistics_name): - 显示指定表的指定统计信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
- DBCC CHECKCONSTRAINTS (table_name): - 检查指定表的所有约束是否满足。
```sql
DBCC CHECKCONSTRAINTS ('MyTable');
```
- DBCC CLEANTABLE (database_name, table_name): - 清除指定表中已删除行的遗留空间。
```sql
DBCC CLEANTABLE ('MyDatabase', 'MyTable');
```
- DBCC DROPCLEANBUFFERS: - 从 SQL Server 缓冲池中删除所有缓存的数据页。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC FREESESSIONCACHE: - 从 SQL Server 会话缓存中清除所有已缓存的会话信息。
```sql
DBCC FREESESSIONCACHE;
```
- DBCC FREESYSTEMCACHE ('cache_name'): - 从 SQL Server 系统缓存中清除指定名称的缓存。
```sql
DBCC FREESYSTEMCACHE ('ALL');
```
- DBCC OPENTRAN (database_name): - 显示指定数据库中当前的活动事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
这些命令涵盖了从数据库空间管理到性能优化和统计信息管理的多个方面,有助于管理员有效地维护和管理 SQL Server 数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC HELP ('command_name'): - 显示指定 DBCC 命令的帮助信息和用法。
```sql
DBCC HELP ('CHECKDB');
```
- DBCC INPUTBUFFER (spid): - 显示指定会话 ID (spid) 的当前 SQL 语句。
```sql
DBCC INPUTBUFFER (53); -- 显示会话 ID 为 53 的当前 SQL 语句
```
- DBCC LOGINFO (database_name): - 显示指定数据库的事务日志文件信息。
```sql
DBCC LOGINFO ('MyDatabase');
```
- DBCC PAGE (database_name, file_id, page_number [, print_option]): - 以详细格式显示指定数据库文件的指定页内容。
```sql
DBCC PAGE ('MyDatabase', 1, 9, 3); -- 显示数据库文件 1 中第 9 页的详细内容
```
- DBCC PROCCACHE: - 显示 SQL Server 进程缓存中的查询执行计划信息。
```sql
DBCC PROCCACHE;
```
- DBCC SQLPERF (diskusage): - 显示 SQL Server 当前数据库文件的磁盘使用情况。
```sql
DBCC SQLPERF (diskusage);
```
- DBCC TRACESTATUS (trace_id): - 显示指定追踪 ID 的当前状态信息。
```sql
DBCC TRACESTATUS (1); -- 显示追踪 ID 为 1 的状态信息
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项设置。
```sql
DBCC USEROPTIONS;
```
- DBCC WRITEPAGE (database_name, file_id, page_number, offset, length, buffer): - 在指定数据库文件的指定页上写入二进制数据。
```sql
DBCC WRITEPAGE ('MyDatabase', 1, 9, 0, 512, 0x0102030405060708); -- 在数据库文件 1 的第 9 页上写入二进制数据
```
- DBCC TRACEOFF (trace_id): - 关闭指定追踪 ID 的追踪。
```sql
DBCC TRACEOFF (1); -- 关闭追踪 ID 为 1 的追踪
```
这些命令涵盖了从诊断和修复数据库问题到管理执行计划和追踪的多个方面,是 SQL Server 管理员在日常维护和性能优化中非常有用的工具集。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC UPDATEUSAGE (database_name): - 更新指定数据库中所有表的空间使用统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase');
```
- DBCC DBINFO (database_name): - 显示指定数据库的详细信息,如版本、创建日期等。
```sql
DBCC DBINFO ('MyDatabase');
```
- DBCC DROPCLEANBUFFERS: - 从 SQL Server 缓冲池中删除所有缓存的数据页。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC FLUSHPROCINDB (database_id): - 刷新指定数据库中所有存储过程的计划缓存。
```sql
DBCC FLUSHPROCINDB (DB_ID('MyDatabase'));
```
- DBCC FREEPROCCACHE: - 从 SQL Server 进程缓存中清除所有存储过程的执行计划。
```sql
DBCC FREEPROCCACHE;
```
- DBCC OPENTRAN (database_name): - 显示指定数据库中当前的活动事务信息。
```sql
DBCC OPENTRAN ('MyDatabase');
```
- DBCC PINTABLE (database_name, table_name): - 将指定表的数据页固定在内存中,防止被 SQL Server 管理器从内存中移除。
```sql
DBCC PINTABLE ('MyDatabase', 'MyTable');
```
- DBCC UNPINTABLE (database_name, table_name): - 取消指定表在内存中的数据页固定。
```sql
DBCC UNPINTABLE ('MyDatabase', 'MyTable');
```
- DBCC SHRINKDATABASE (database_name [, target_percent | target_size]): - 缩小指定数据库的数据文件和事务日志文件以释放未使用的空间。
```sql
DBCC SHRINKDATABASE ('MyDatabase', 10); -- 缩小数据库 'MyDatabase',目标空间为当前使用空间的 10%
```
- DBCC SHRINKFILE (logical_file_name [, target_size [, truncate_only]]): - 缩小指定数据库文件或日志文件的大小。
```sql
DBCC SHRINKFILE ('MyDatabase_log', 1000); -- 缩小数据库日志文件 'MyDatabase_log' 到 1000 MB
```
这些命令涵盖了从数据库空间管理到性能优化和诊断的多个方面,SQL Server 管理员可以根据需要使用这些工具来维护和管理数据库系统。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC SHOW_STATISTICS (table_name, statistics_name): - 显示指定表的指定统计信息的详细信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex');
```
- DBCC CHECKIDENT (table_name [, { NORESEED | RESEED } [, new_reseed_value ]]): - 检查并设置指定表的标识列当前值。
```sql
DBCC CHECKIDENT ('MyTable', RESEED, 100); -- 将表 'MyTable' 的标识列重新种子为 100
```
- DBCC UPDATEUSAGE (database_name [, { WITH | WITHOUT } [, COUNT_ROWS ]]): - 更新指定数据库中所有表的空间使用统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase', WITH COUNT_ROWS); -- 更新 'MyDatabase' 中所有表的空间使用统计信息,并计算行数
```
- DBCC SQLPERF (logspace): - 显示 SQL Server 日志文件使用情况信息。
```sql
DBCC SQLPERF (logspace);
```
- DBCC OPENTRAN: - 显示当前活动的事务信息。
```sql
DBCC OPENTRAN;
```
- DBCC LOGINFO: - 显示事务日志文件的详细信息。
```sql
DBCC LOGINFO;
```
- DBCC OUTPUTBUFFER (spid): - 显示指定会话的输出缓冲区内容。
```sql
DBCC OUTPUTBUFFER (53); -- 显示会话 ID 为 53 的输出缓冲区内容
```
- DBCC PROCCACHE (LIMITED): - 显示 SQL Server 进程缓存中的执行计划信息,但不显示每个存储过程的执行计划。
```sql
DBCC PROCCACHE (LIMITED);
```
- DBCC SHRINKDATABASE (database_name [, target_percent | target_size [, { TRUNCATEONLY | NOTRUNCATE }]]): - 缩小指定数据库的大小,并释放未使用的空间。
```sql
DBCC SHRINKDATABASE ('MyDatabase', 20, NOTRUNCATE); -- 缩小数据库 'MyDatabase',目标大小为当前使用空间的 20%,但不截断日志
```
- DBCC SHRINKFILE (logical_file_name, target_size [, { TRUNCATEONLY | EMPTYFILE }]): - 缩小指定数据库文件的大小。
```sql
DBCC SHRINKFILE ('MyDatabase_data', 500); -- 缩小数据库文件 'MyDatabase_data' 到 500 MB
```
这些命令覆盖了从性能优化到数据库空间管理和事务管理的多个方面,SQL Server 管理员可以根据具体需求使用这些工具来维护和管理数据库系统。
更多常用的 SQL Server DBCC 命令及其功能:
- DBCC INPUTBUFFER (spid): - 显示指定会话的输入缓冲区内容。
```sql
DBCC INPUTBUFFER (53); -- 显示会话 ID 为 53 的输入缓冲区内容
```
- DBCC SQLPERF (waitstats): - 显示 SQL Server 中的等待统计信息。
```sql
DBCC SQLPERF (waitstats);
```
- DBCC DROPCLEANBUFFERS: - 从 SQL Server 缓冲池中删除所有缓存的数据页。
```sql
DBCC DROPCLEANBUFFERS;
```
- DBCC FREESESSIONCACHE: - 清除 SQL Server 会话级别的缓存。
```sql
DBCC FREESESSIONCACHE;
```
- DBCC FREESYSTEMCACHE (cache_name | ALL): - 清除 SQL Server 系统级别的缓存。
```sql
DBCC FREESYSTEMCACHE ('ALL'); -- 清除 SQL Server 的所有系统级别缓存
```
- DBCC HELP (command): - 显示指定 DBCC 命令的帮助信息。
```sql
DBCC HELP ('CHECKDB'); -- 显示 CHECKDB 命令的帮助信息
```
- DBCC TRACEOFF (trace_number [, -1]): - 关闭指定跟踪标志。
```sql
DBCC TRACEOFF (1200); -- 关闭跟踪标志 1200
```
- DBCC TRACEON (trace_number [, -1]): - 打开指定跟踪标志。
```sql
DBCC TRACEON (1200); -- 打开跟踪标志 1200
```
- DBCC UPDATEUSAGE (database_name [, { WITH | WITHOUT } [, COUNT_ROWS ]]): - 更新指定数据库中所有表的空间使用统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase', WITH COUNT_ROWS); -- 更新 'MyDatabase' 中所有表的空间使用统计信息,并计算行数
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项。
```sql
DBCC USEROPTIONS;
```
这些命令提供了广泛的功能,涵盖了从缓存管理到性能跟踪、数据库空间使用和会话管理的多个方面。SQL Server 管理员可以根据具体需求使用这些工具来诊断、优化和管理数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC CHECKCONSTRAINTS (table_name): - 检查指定表的所有约束是否满足。
```sql
DBCC CHECKCONSTRAINTS ('MyTable'); -- 检查 'MyTable' 的所有约束是否满足
```
- DBCC CHECKFILEGROUP (filegroup_name): - 检查指定文件组的逻辑和物理一致性。
```sql
DBCC CHECKFILEGROUP ('MyFileGroup'); -- 检查 'MyFileGroup' 文件组的逻辑和物理一致性
```
- DBCC CHECKTABLE (table_name [, repair_options]): - 检查指定表的物理和逻辑一致性。
```sql
DBCC CHECKTABLE ('MyTable', REPAIR_FAST); -- 使用 REPAIR_FAST 选项检查 'MyTable' 表的一致性
```
- DBCC CLEANTABLE (table_name [, batch_size]): - 清除指定表中已删除行的空间。
```sql
DBCC CLEANTABLE ('MyTable', 1000); -- 清除 'MyTable' 表中已删除行的空间,每次处理 1000 行
```
- DBCC OPENTRAN (database_name): - 显示指定数据库中所有未完成的事务信息。
```sql
DBCC OPENTRAN ('MyDatabase'); -- 显示 'MyDatabase' 中所有未完成的事务信息
```
- DBCC REBUILD_LOG (database_name [, target_log_size [, delay]] ): - 重建指定数据库的事务日志文件。
```sql
DBCC REBUILD_LOG ('MyDatabase', 1024); -- 重建 'MyDatabase' 的事务日志文件,目标大小为 1024 MB
```
- DBCC CHECKPRIMARYFILE (file_id): - 检查指定文件是否是数据库的主要文件。
```sql
DBCC CHECKPRIMARYFILE (1); -- 检查文件 ID 为 1 的文件是否是数据库的主要文件
```
- DBCC UPDATEUSAGE (database_name [, { WITH | WITHOUT } [, COUNT_ROWS ]]): - 更新指定数据库中所有表的空间使用统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase', WITH COUNT_ROWS); -- 更新 'MyDatabase' 中所有表的空间使用统计信息,并计算行数
```
- DBCC INDEXDEFRAG (database_name, table_name, index_id): - 对指定表的指定索引进行碎片整理。
```sql
DBCC INDEXDEFRAG ('MyDatabase', 'MyTable', 1); -- 对 'MyTable' 表的索引 ID 为 1 的索引进行碎片整理
```
- DBCC TRACESTATUS: - 显示当前 SQL Server 实例中所有跟踪标志的状态。
```sql
DBCC TRACESTATUS; -- 显示当前 SQL Server 实例中所有跟踪标志的状态
```
这些命令提供了丰富的功能,涵盖了从数据一致性检查、空间清理到日志管理和索引优化的多个方面。SQL Server 管理员可以根据具体的需求和数据库状态选择合适的命令来维护和管理数据库系统。
常用的 SQL Server DBCC 命令及其功能:
- DBCC SHRINKDATABASE (database_name [, target_percent [, shrink_file_option]]): - 缩小指定数据库的数据和日志文件大小。
```sql
DBCC SHRINKDATABASE ('MyDatabase', 20); -- 缩小 'MyDatabase' 数据和日志文件的大小,目标为当前大小的 20%
```
- DBCC SHRINKFILE (file_name [, target_size [, { NOTRUNCATE | TRUNCATEONLY }]]): - 缩小指定数据库文件的大小。
```sql
DBCC SHRINKFILE ('MyDataFile', 1024, TRUNCATEONLY); -- 缩小 'MyDataFile' 数据文件的大小至 1024 MB,仅截断不移动数据
```
- DBCC SQLPERF (logspace): - 显示当前数据库的日志空间使用情况。
```sql
DBCC SQLPERF (logspace); -- 显示当前数据库的日志空间使用情况
```
- DBCC FREEPROCCACHE: - 清除 SQL Server 中的执行计划缓存。
```sql
DBCC FREEPROCCACHE; -- 清除 SQL Server 中的执行计划缓存
```
- DBCC INPUTBUFFER (spid): - 显示指定会话 ID(SPID)的当前执行的 SQL 语句。
```sql
DBCC INPUTBUFFER (52); -- 显示会话 ID 为 52 的当前执行的 SQL 语句
```
- DBCC SHOW_STATISTICS (table_name [, index_name]): - 显示指定表的统计信息。
```sql
DBCC SHOW_STATISTICS ('MyTable', 'IX_MyIndex'); -- 显示 'MyTable' 表上 'IX_MyIndex' 索引的统计信息
```
- DBCC USEROPTIONS: - 显示当前会话的 SET 选项。
```sql
DBCC USEROPTIONS; -- 显示当前会话的 SET 选项
```
- DBCC CHECKIDENT (table_name [, NORESEED | RESEED [, new_reseed_value]]): - 检查并修复表的标识列的当前值。
```sql
DBCC CHECKIDENT ('MyTable', RESEED, 1000); -- 将 'MyTable' 表的标识列重新种子为 1000
```
- DBCC DROPCLEANBUFFERS: - 清除 SQL Server 缓存中的数据页。
```sql
DBCC DROPCLEANBUFFERS; -- 清除 SQL Server 缓存中的数据页
```
- DBCC FREESESSIONCACHE: - 清除当前会话的缓存对象。
```sql
DBCC FREESESSIONCACHE; -- 清除当前会话的缓存对象
```
这些命令提供了 SQL Server 管理中常用的各种工具和功能,用于管理数据库的性能、空间、统计信息和缓存等方面。选择合适的 DBCC 命令可以帮助管理员有效地维护和优化 SQL Server 数据库。
更多 SQL Server 中常用的 DBCC 命令及其功能:
- DBCC CHECKALLOC ([database_name | table_name | file_name]): - 检查数据库、表或文件的分配结构。
```sql
DBCC CHECKALLOC ('MyDatabase'); -- 检查 'MyDatabase' 数据库的分配结构
```
- DBCC CHECKCATALOG ([database_name]): - 检查数据库的系统表结构。
```sql
DBCC CHECKCATALOG ('MyDatabase'); -- 检查 'MyDatabase' 数据库的系统表结构
```
- DBCC CHECKCONSTRAINTS ([table_name]): - 检查表的所有约束条件。
```sql
DBCC CHECKCONSTRAINTS ('MyTable'); -- 检查 'MyTable' 表的所有约束条件
```
- DBCC CHECKDB ([database_name | database_id]): - 检查整个数据库的完整性,包括所有表和索引。
```sql
DBCC CHECKDB ('MyDatabase'); -- 检查 'MyDatabase' 数据库的完整性
```
- DBCC CHECKFILEGROUP ([filegroup_name | filegroup_id]): - 检查文件组的逻辑和物理一致性。
```sql
DBCC CHECKFILEGROUP ('PRIMARY'); -- 检查 'PRIMARY' 文件组的逻辑和物理一致性
```
- DBCC CHECKIDENT ([table_name]): - 检查表的标识列当前值是否正确。
```sql
DBCC CHECKIDENT ('MyTable'); -- 检查 'MyTable' 表的标识列当前值
```
- DBCC CHECKTABLE ([table_name]): - 检查表的物理和逻辑一致性。
```sql
DBCC CHECKTABLE ('MyTable'); -- 检查 'MyTable' 表的物理和逻辑一致性
```
- DBCC CLEANTABLE ([database_name | table_name]): - 释放指定表或整个数据库中无用的空间。
```sql
DBCC CLEANTABLE ('MyDatabase', 'MyTable'); -- 释放 'MyDatabase' 中 'MyTable' 表的无用空间
```
- DBCC OPENTRAN ([database_name]): - 显示当前数据库中未提交的事务信息。
```sql
DBCC OPENTRAN ('MyDatabase'); -- 显示 'MyDatabase' 中未提交的事务信息
```
- DBCC UPDATEUSAGE ([database_name]): - 更新数据库中所有表的空间使用统计信息。
```sql
DBCC UPDATEUSAGE ('MyDatabase'); -- 更新 'MyDatabase' 中所有表的空间使用统计信息
```
这些 DBCC 命令涵盖了 SQL Server 中用于检查和维护数据库完整性、空间使用情况以及事务状态的关键功能。使用这些命令可以帮助管理员保持数据库的健康状态并优化其性能。

浙公网安备 33010602011771号