Transact-SQL 编程语言提供 DBCC 语句作为 SQL Server 的数据库控制台命令
数据库控制台命令语句可分为以下类别
命令类别 |
执行 |
维护 |
对数据库、索引或文件组进行维护的任务 |
杂项 |
杂项任务,如启用跟踪标志或从内存中删除 DLL |
信息 |
收集并显示各种类型信息的任务 |
验证 |
对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作 |
-- I.信息语句
-- 1.DBCC INPUTBUFFER 根据session_id显示从客户端发送到 Microsoft SQL Server 实例的一个语句
SELECT @@SPID -- 获得当前会话ID
SELECT * FROM sys.dm_exec_requests WHERE session_id = @@spid -- 跟据当前会话ID获得此次请求信息
DBCC INPUTBUFFER(@@SPID) WITH NO_INFOMSGS -- 显示从客户端发送到 Microsoft SQL Server 实例的一个语句
-- 2.DBCC SHOWCONTIG 显示指定的表或视图的数据和索引的碎片信息,建议使用 sys.dm_db_index_physical_stats
USE AdventureWorks
GO
DBCC SHOWCONTIG ('Person.Address') WITH NO_INFOMSGS -- 显示Person.Address表的数据和索引的碎片信息
GO
-- 返回所有数据库中所有对象的信息
SELECT * FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, NULL);
-- 返回AdventureWorks数据库中Person.Address表的信息
SELECT * FROM sys.dm_db_index_physical_stats
(DB_ID(N'AdventureWorks'), OBJECT_ID(N'Person.Address'), NULL, NULL , 'DETAILED');
GO
-- 3.DBCC OPENTRAN 确定打开的事务是否存在于事务日志中
DBCC OPENTRAN (0) -- 当前数据库
DBCC OPENTRAN (N'AdventureWorks') -- AdventureWorks数据库
-- 创建数据库和表并打开一个事务
USE master
GO
CREATE DATABASE Test
GO
USE Test
GO
CREATE TABLE T1
(col1 INT,
col2 VARCHAR(10))
GO
BEGIN TRAN
INSERT INTO T1 VALUES (1, 'Kobe');
GO
DBCC OPENTRAN; -- 查看此数据库中打开的事务
ROLLBACK TRAN;
GO
DROP TABLE T1;
GO
USE master
GO
DROP DATABASE Test
GO
-- 4.DBCC SQLPERF 提供所有数据库的事务日志空间使用情况统计信息,也可以用于重置等待和闩锁的统计信息.
DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS; -- 显示所有数据库的日志空间信息
GO
DBCC SQLPERF("sys.dm_os_latch_stats",CLEAR) WITH NO_INFOMSGS; -- SQL Server 实例重置闩锁统计信息
GO
DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR) WITH NO_INFOMSGS; -- SQL Server 实例重置等待统计信息
GO
SELECT * FROM sys.dm_os_latch_stats -- 返回按类组织的所有闩锁等待的相关信息
GO
SELECT * FROM sys.dm_os_wait_stats -- 返回执行的线程所遇到的所有等待的相关信息
GO
-- 5.DBCC OUTPUTBUFFER 以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区
SELECT @@SPID
DBCC OUTPUTBUFFER (@@SPID) WITH NO_INFOMSGS -- 返回当前进程缓冲区内容
-- 6.DBCC TRACESTATUS 显示跟踪标志的状态
-- 在 SQL Server 中,有两种跟踪标志:会话和全局.会话跟踪标志对某个连接是有效的,只对该连接可见;
-- 全局跟踪标志在服务器级别上进行设置,对服务器上的每一个连接都可见.
DBCC TRACESTATUS(-1) WITH NO_INFOMSGS; -- 显示当前全局启用的所有跟踪标志的状态
GO
DBCC TRACESTATUS (2528, 3205) WITH NO_INFOMSGS; -- 显示跟踪标志 2528 和 3205 的状态
GO
DBCC TRACESTATUS (3205, -1) WITH NO_INFOMSGS; -- 以下示例显示跟踪标志 3205 是否是全局启用的
GO
DBCC TRACESTATUS() WITH NO_INFOMSGS; -- 列出针对当前会话启用的所有跟踪标志
GO
-- 7.DBCC PROCCACHE 以表格格式显示有关过程缓存的信息
-- 使用过程缓存来缓存已编译计划和可执行计划,以加快批处理的执行速度.过程缓存中的项处于批处理级别.过程缓存包括以下项:
-- A.已编译计划;B.执行计划;C.Algebrizer 树;D.扩展过程
DBCC PROCCACHE WITH NO_INFOMSGS
-- 8.DBCC USEROPTIONS 返回当前连接的活动(设置)的 SET 选项
DBCC USEROPTIONS WITH NO_INFOMSGS;
GO
-- 9.DBCC SHOW_STATISTICS 显示索引,统计信息或列的当前查询优化统计信息.根据统计信息对象中存储的数据,显示的相应统计信息包括标题,直方图和密度
USE AdventureWorks;
GO
-- 以下示例显示 Person.Address 表的 AK_Product_Name 索引的所有统计信息
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) -- WITH NO_INFOMSGS, STAT_HEADER, DENSITY_VECTOR, HISTOGRAM;
GO
DBCC SHOW_STATISTICS ("Person.Address", PK_Address_AddressID)
GO
-- II.验证语句
-- 1.DBCC CHECKALLOC 检查指定数据库的磁盘空间分配结构的一致性
DBCC CHECKALLOC; -- 不指定此参数或指定了 0 值,则默认值为当前数据库
GO
DBCC CHECKALLOC (N'AdventureWorks'); -- 检查AdventureWorks数据库
GO
-- 显示当指定所有其他选项时运行 DBCC CHECKALLOC 所需的估计 tempdb 空间大小
DBCC CHECKALLOC WITH ALL_ERRORMSGS, NO_INFOMSGS, TABLOC