http://blog.163.com/ruifeng_00/blog/static/6904584200971291923462/

 

一、定义

微软当初从SYBASE将DBCC是作为数据库一致性检查(Database Consistency Check)命令扩展过来的,但经过后来的扩展,DBCC命令的功能范围增大,现在称之为数据库控制台命令(Database Console Command)。

二、公开的DBCC命令

2.1验证类

对数据库、文件组、表、索引、数据库页的分配、系统目录进行的验证操作。

DBCC CHECKDB

对索引结构和数据完整性进行检查之外,它还包括对分配进行检查、对数据存储中使用的页信息进行验证。

仿佛是对数据库执行 DBCC CHECKALLOC 语句和每个表执行DBCC CHECKTABLE 语句。

DBCC CHECKFILEGROUP

对数据库中的所有文件组执行 DBCC CHECKFILEGROUP 语句与运行单个 DBCC CHECKDB 语句相同。唯一的差别在于:如果表的索引在不同文件组上,则将多次检查该表和索引(对包含表或其索引的每个文件组检查一次)。

DBCC CHECKTABLE

对表或索引视图的数据、索引及 text、ntext 和 image 页的完整性检查。

包括:

索引和数据页是否已正确链接。

索引是否按照正确的顺序排列。

各指针是否一致。

每页上的数据是否均合理。

页面偏移量是否合理。

text、ntext 和 image 页的链接及大小进行检查。

DBCC CHECKALLOC

对数据库中所有数据页的分配进行验证。

默认情况下,DBCC CHECKALLOC 不获取表锁。相反,它获取架构锁,该锁在 DBCC CHECKALLOC 正在执行时阻止对元数据(即DDL)进行更改,但允许更改数据(即DML)。

DBCC NEWALLOC

等同于 DBCC CHECKALLOC,为了向后兼容。

注:

(1)以上DBCC 语句收集信息,然后扫描日志以查找所做的任何其它更改,并在扫描的结尾将两组信息合并在一起以产生数据的一致性检查视图;

(2)DBCC往往大量占用 CPU 及磁盘,因为 DBCC 必须读取每个数据页,而这需要从磁盘到内存全都检查一遍(除非数据页已高速缓存到内存中)。当系统上有许多活动而运行 DBCC 时,系统活动和DBCC的性能都会被削弱。在SQL SERVER 2005以后,在执行这些 DBCC 命令之一时,数据库引擎创建一个数据库快照,并将其置于在事务上一致的状态,以防止在执行这些命令时出现阻塞和并发问题。然后,DBCC 命令对该快照运行检查。DBCC 命令完成后,将删除该快照。(在无法创建快照的情况下,或指定了TABLOCK,则DBCC将获取一个共享表锁来获得所需的一致性,也就是说并不能保证DBCC完全摆脱阻塞的可能。)

DBCC CHECKCATALOG

对 syscolumns 中的每种数据类型在 systypes 中是否都有一个匹配项进行检查,同时还对 sysobjects 中的每个表和视图在 syscolumns 中是否都至少有一列进行检查。

DBCC CHECKCONSTRAINTS

对表的所有外键约束和检查约束的查询(针对可通过ALTER TABLE启用/禁用的约束)。

DBCC CHECKIDENT

检查指定表的当前标识值,如有必要,还对标识值进行更正。

注:几种标识列的维护方法

DBCC CHECKIDENT('tablename',RESEED,1)

--清表后会自动回到原始

TRUNCATE TABLE tablename

--新增列

ALTER TABLE tablename ADD newcolname INT IDENTITY(1,1) not null

--设置选项就可以insert自定义的id值了

SET IDENTITY_INSERT Tablename ON

2.2、查看类

DBCC OPENTRAN

查看日志中的活动事务(即未COMMIT或ROLLBACK的TRAN)。

DBCC INPUTBUFFER

返回指定SESSION在SQL SERVER中的最后一条语句,这里的BUFFER应该指的是BUFFER POOL中的PROC CACHE,即保存SQL语句、过程及执行计划的地方。此返回结果可用于对某个会话的跟踪。

DBCC OUTPUTBUFFER

以十六进制或 ASCII 格式返回指定的SESSION中最后一条语句的输出数据(如果有输出流的话,比如SELECT语句)。

DBCC PROCCACHE

以表格格式显示有关过程缓存区的信息。SQL Server 性能监视器使用 DBCC PROCCACHE 以获得有关过程高速缓存的信息。

DBCC SHOWCONTIG

显示指定的表的数据和索引的碎片信息。通常依此判断是否需要对索引进行维护。在2005及以后的版本中请改用 sys.dm_db_index_physical_stats。

DBCC SHOW_STATISTICS

返回的统计结果指明索引的选择性(所返回的密度越低,选择性越大),并提供用于确定索引对查询优化器是否有用的基本信息。所返回的结果基于索引的分发步骤。若要查看更新统计的最近日期,请使用STATS_DATE()。

DBCC SQLPERF

返回当前实例中所有数据库的日志使用率。可以自己根据每个数据库中sysfiles里的size和maxsize算出这个比例。

DBCC TRACESTATUS

返回跟踪标记号列和状态列,指明跟踪标记是 ON (1) 还是 OFF (0)。

DBCC USEROPTIONS

返回当前会话的SET选项,每自定义一个SET在结果集中即为返回,未返回的项表示未进行自定义设置,即使用默认设置。也可以使用SESSIONPROPERTY()查询会话中某个SET的设置。

DBCC CONCURRENCYVIOLATION

显示有关在 SQL Server 2000 Desktop Engine 或 SQL Server 2000 个人版上并发执行 5 个以上批处理的次数的统计。

2005及以后此命令已是无效命令。

2.3、维护类

DBCC INDEXDEFRAG

对表或视图上的索引的叶级进行碎片整理,以便页的物理顺序与叶节点从左到右的逻辑顺序相匹配,从而提高索引扫描性能。

2005中使用ALTER INDEX的REORGANIZE选项代替此命令。

DBCC DBREINDEX

重建表的某个或全部索引。

2005中使用ALTER INDEX的REBUILD选项代替此命令。

DBCC SHRINKDATABASE

以每个文件为单位,对指定数据库的所有数据和日志文件收缩未使用空间:包括已删除的数据、文件自动增长所未使用的空间及其一些不能被使用的碎片空间,这些未使用空间可通过sp_sapceused得到。执行命令后将分配页从文件末尾移动到文件前部的未分配页,然后进行压缩,只有指定了TRUNCATEONLY选项,才会将空间释放给操作系统。

注:

1、DBCC SHRINKDATABASE仅仅是将空间给收缩了,并没有对数据或索引做碎片整理,所以并不会带来性能上的改观;

2、在产生许多未使用空间的操作(如截断表、日志或删除表)后,执行收缩操作最有效,产生碎片较少。过度频繁使用,不仅影响数据库的正常运行,还会增加数据库的碎片程度。

DBCC SHRINKFILE

收缩相关数据库的指定数据文件或日志文件,一次一个。

DBCC DROPCLEANBUFFERS

从缓冲池中清除数据缓冲区中的内容,而不用关闭和重新启动服务器。在进行查询优化时,可用此方法来生成各种所需的执行计划。

DBCC FREEPROCCACHE

从缓冲池中清除过程缓冲区中的内容,以强制执行计划的重编译。

DBCC UPDATEUSAGE

报告和更正sysindexes 表的不正确内容,可能会导致sp_spaceused 产生不正确的空间使用报表。

DBCC CLEANTABLE

收回用 ALTER TABLE DROP COLUMN 语句除去可变长度列或 text 列后的空间。而不收回固定长度列除去后的空间。

DBCC DBREPAIR

除去损坏的数据库,为了向后兼容,请使用DROP DATABASE来删除。

2.4、其他

DBCC ROWLOCK

对表启用插入行锁定 (IRL) 操作。SQL SERVER默认启用行级锁定,并可能提升为页或表锁定。

2000 及以后此命令已是无效命令。

DBCC PINTABLE

将表标记为驻留,当表中的页由普通的 Transact-SQL 语句读入到高速缓存中时,这些页将标记为内存驻留页。

适用于将小的、经常引用的表保存在内存中。将小表的页一次性读入到内存中,将来对其数据的所有引用都不需要从磁盘读入。

如果驻留大表,则该表在开始时会使用一大部分高速缓存,而不为系统中的其它表保留足够的高速缓存。如果所驻留的表比高速缓存大,则该表会填满整个高速缓存。

查看哪个表是否驻留在内存的方法是:

select objectproperty(object_id('tablename'),‘tableispinned')

2005及以后此命令已是无效命令。

DBCC UNPINTABLE

将表标记为不在内存驻留,不会导致立即将表从数据高速缓存中清空。而指定如果需要空间以从磁盘中读入新页,高速缓存中的表的所有页都可以清空。

2005及以后此命令已是无效命令。

DBCC HELP

显示DBCC命令的语法。

DBCC dllname (FREE)

当执行扩展存储过程时,DLL 仍保持由 SQL Server 的实例加载,直到关闭服务器为止。此语句允许从内存中卸载 DLL,而不用关闭 SQL Server。Dllname指定扩展存储过程的dll文件名。执行 sp_helpextendedproc 以显示当前由 SQL Server 装载的 DLL 文件。

DBCC TRACEON

启用指定的跟踪标记。跟踪标记用于临时设置服务器的特定特征或关闭特定行为。

DBCC TRACEOFF

禁用指定的跟踪标记。

三、未公开的DBCC命令

注:

既然是未公开的,那么就不要在开发环境中使用,没有人会对可能出现的问题负责。但作为对于SQL SERVER的学习工具,还是可以一用的。

3.1、性能

事实上我们可以通过性能监视器来获得类似的信息,但可能没有结果集来得更具体。

DBCC SQLPERF

以下是SQLPERF的一些Undocumented的参数:

DBCC SQLPERF(UMSSTATS) 提供有关sql server 线程管理情况的统计信息,可以用来检查是否CPU使用达到瓶颈,最关键的一个参考数据num runnable,表明当前有多少个线程再等待运行,如果大于等于2,考虑CPU达到瓶颈

DBCC SQLPERF(WAITSTATS):提供有关SQL Server read-ahead activity的信息

DBCC SQLOERF(IOSTATS):提供主要的SQL server读和写的信息

DBCC SQLPERF(RASTATS):提供SQL Server read-ahead 活动的信息

DBCC SQLPERF(THREADS):提供每个SQL Server线程的I/O,CPU及内存使用情况的信息。

DBCC CACHESTATS

显示SQL Server缓冲区的统计信息,如命中率、使用内存页数等

DBCC CURSORSTATS

显示SQL Server游标使用时的统计信息

DBCC MEMORYSTATUS

列出一个详细分类,分类中显示SQL SERVER缓存如何分配,包括缓存的活动。

DBCC SQLMGRSTATS

显示SQL SERVER缓冲中先读和预读准备的SQL语句

3.2、存储引擎

详见:Some Useful Undocumented SQL Server 7.0 and 2000 DBCC Commands

以下DBCC命令需要打开3604标记,否则命令运行成功,但不会看到结果。

DBCC TRACEON (3604)

DBCC ERRORLOG

初始化SQL Server的错误日志文件,使用这个命令,可以截断当前的服务器日志(不要理解成数据库日志文件),主要是生成一个新的服务器日志。可以考虑设置一个调度任务,每周执行这个命令自动截断服务器日志。

使用存储过程sp_cycle_errorlog也可以达到同样的目的。

DBCC PSS (user,spid,1)

显示当前连接到SQL Server服务器的进程信息

DBCC RESOURCE

显示服务器当前使用的资源情况

DBCC DBINFO (db_name)

显示数据库的结构信息

DBCC DBTABLE

显示管理数据的表(数据字典)信息

DBCC IND (db_name,table_name,index_id)

查看某个索引页面信息,事实上查看聚焦索引页面就是查看数据页面

DBCC PRTIPAGE

查看某个索引页面的每行指向的页面号

DBCC PAGE(db_name,pagenum)

查看某个数据页面信息

DBCC TAB (db_id,object_id)

查看某个表的所有数据页面的信息

DBCC LOG (db_name,3)  (-1~4)

查看某个数据库使用的事物日志信息

DBCC REBUILDLOG

重建SQL Server事务日志文件,可以用在还原无日志数据文件时重建一个初始日志

DBCC BUFFER (db_name,object_name,int(要查看的缓冲区个数))

显示缓冲区的头部信息和页面信息

DBCC PROCBUF

显示过程缓冲池中的缓冲区头和存储过程头

DBCC FLUSHPROCINDB (db_id)

清除SQL Server服务器内存中的某个数据库的存储过程缓存内容

DBCC BYTES ( startaddress, length )

从给定的内存地址清空指定长度的字节数,这个功能还是不要用的比较好。

SQL Server 2000 ——DBCC命令的更多相关文章

  1. SQL SERVER 2005 DBCC IND命令说明

    每天笑一笑,烦恼少一倍 轻松一笑!狗狗被调戏:http://947kan.com/video/player-52952-0-0.html ------------------------------- ...

  2. 详解SQL Server数据修复命令DBCC的使用

    严重级别为 21 表示可能存在数据损坏. 可能的原因包括损坏的页链.损坏的 IAM 或该对象的 sys.objects目录视图中存在无效条目. 这些错误通常由硬件或磁盘设备驱动程序故障而引起. MS ...

  3. sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

    SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...

  4. 把sql server 2000的用户表的所有者改成dbo

    怎么样把sql server 2000的用户表的所有者,改成dbo,而不是用户名. 推荐使用下面介绍的第二种方法,执行以下查询便可以了.sp_configure 'allow updates','1' ...

  5. SQL SERVER 2000通过链接服务器发送邮件出现错误

    案例环境: 服务器A系统: Windows Server 2000 数据库版本 : Microsoft SQL Server  2000 - 8.00.2282 (Intel X86) 服务器B系统: ...

  6. SQL Server 2000 ——系统表和系统视图

    一.系统表 数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分. 1.1.sysservers 1.查看所有本地服务器及链接服务器 select * from master..sys ...

  7. 配置sql server 2000以允许远程访问 及 连接中的四个最常见错误

    地址:http://www.cnblogs.com/JoshuaDreaming/archive/2010/12/01/1893242.html 配置sql server 2000以允许远程访问适合故 ...

  8. SQL Server 2000的安全配置

    SQL Server 2000的安全配置 数据库是电子商务.金融连同ERP系统的基础,通常都保存着重要的商业伙伴和客户信息.大多数企业.组织连同政府 部门的电子数据都保存在各种数据库中,他们用这些数据 ...

  9. 使用SQL Server 2000索引视图提高性能

    什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...

随机推荐

  1. Python——文件打开模式辨析

    版权声明:本文系原创,转载请注明出处及链接. Python中,open()函数打开文件时打开模式如r.r+ .w+.w.a.a+有何不同 r 只能读 r+ 可读可写,不会创建不存在的文件.如果直接写文 ...

  2. ASP.NET Core 2.0 MVC 发布部署--------- linux安装.NET CORE SDK具体操作链接以及操作总细节

    具体链接:https://www.microsoft.com/net/learn/get-started/linuxubuntu 如下图:

  3. java并发编程实战笔记---(第四章)对象的组合

    4.1设计线程安全的类 包含三个基本要素: 1.找出构成对象状态的所有变量 2.找出约束状态变量的不变性条件 2.简历对象状态的并发访问管理策略 对象的状态: 域 基本类型所有域, 引用类型包括被引用 ...

  4. LightOJ - 1010 Knights in Chessboard(规律)

    题目链接:https://vjudge.net/contest/28079#problem/B 题目大意:给你一个nxm的棋盘,问你最多可以放几个骑士让他们互相攻击不到.骑士攻击方式如下图: 解题思路 ...

  5. Perl 连接Oracle 出现OCI missing的问题及解决

    问题描述 新申请了一个虚拟机操作系统: Win Server 2008, 64位 , 8核, 16G Memory 上 http://www.activestate.com/activeperl 下载 ...

  6. beego学习笔记(4):开发文档阅读(2)

    bee工具的安装和使用 bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建.热编译.开发.测试.和部署. go get gith ...

  7. Next Permutation——简单、经典

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  8. JavaScript中的数据类型总结

    Javascript是一种弱类型语言,没有明确的类型分类:网上分类的方式比较多,个人感觉不比去特别的追究细分是什么什么类型,若是能够明确的分出类型的话,javascript就不是弱类型语言,又由于大家 ...

  9. Redis实战(六)

    查询数据 1.使用Linq匹配关键字查询 using (var redisClient = RedisManager.GetClient()) { var user = redisClient.Get ...

  10. ubuntu16.04 内核源码编译

    1)下载 首先看一下自己的内核版本 apt-cache search linux-source下载内核代码:sudo apt-get install linux-source-4.10.0 2)解压: ...