Sql Server实用操作-数据库一致性检测工具(DBCC)
DBCC CHECKDB 数据库或表修复

DBCC CHECKDB 数据库或表修复MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令。
1. DBCC CHECKDB重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。
use masterdeclare @databasename varchar(255)set @databasename='需要修复的数据库实体的名称'exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(@databasename,REPAIR_REBUILD)exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态然后执行DBCC CHECKDB('需要修复的数据库实体的名称') 检查数据库是否仍旧存在错误。
注意:修复后可能会造成部分数据的丢失。
2. DBCC CHECKTABLE如果DBCC CHECKDB 检查仍旧存在错误,可以使用DBCC CHECKTABLE来修复。
use 需要修复的数据库实体的名称declare @dbname varchar(255)set @dbname='需要修复的数据库实体的名称'exec sp_dboption @dbname,'single user','true'dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)------把’ 需要修复的数据表的名称’更改为执行DBCC CHECKDB时报错的数据表的名称exec sp_dboption @dbname,'single user','false'3. 其他的一些常用的修复命令DBCC DBREINDEX 重建指定数据库中表的一个或多个索引用法:DBCC DBREINDEX (表名,’’) 修复此表所有的索引。
解决方法:SQLServer检测到基于一致性的逻辑IO错误校验和不正

解决⽅法:SQLServer检测到基于⼀致性的逻辑IO错误校验和不正select count(*) from todayConsumeRecords消息 824,级别 24,状态 2,第 1 ⾏ SQL Server 检测到基于⼀致性的逻辑 I/O 错误由于缺少 DEK,⽆法解密页。
在⽂件 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\devicesys.mdf' 中、偏移量为 0x000000dea6a000 的位置对数据库 ID 9 中的页 (1:455989) 执⾏读取期间,发⽣了该错误。
SQL Server 错误⽇志或系统事件⽇志中的其他消息可能提供了更详细信息。
这是⼀个威胁数据库完整性的严重错误条件,必须⽴即纠正。
请执⾏完整的数据库⼀致性检查(DBCC CHECKDB)。
此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
所⽤到的解决⽅法有:1、 use devicesysgoALTER DATABASE devicesys SET SINGLE_USERDBCC CHECKDB (‘devicesys’, repair_allow_data_loss) with NO_INFOMSGSgoALTER DATABASE devicesys SET MULTI_USERgo失败!2、尝试着新建了个数据库tmp,并把发现数据库错误时所备份的⽂件还原到tmp中,然后删除devicesys 数据库中的todayConsumeRecords 表。
之后把temp中的todayConsumeRecords表导⼊到devicesys中,当运⾏后出错的那⼏⾏时导⼊动作⾃动停⽌。
失败!3、最终的解决⽅法:把第⼀⽅法中的SQL语句放到tmp数据库进⾏运⾏,只花了⼏秒钟时间就提⽰修复成功,接着再把tmp中的todayConsumeRecords导⼊devicesys中,成功!PS:第⼀个⽅法中的语句确实有效,但不懂为什么在出问题的数据库中运⾏不了,要借助临时的数据库才⾏。
赛贝斯数据库 检查数据库中数据的一致性

dbcc checktable (table_name)
检查指定的表, 检查索引和数据页是否正确链接, 索引是否正确排序, 所有指针是否一致, 每页的数据信息是否合理, 页偏移是否合理。
dbcc checkdb (database_name)
对指定数据库的所有表做和checktable 一样的检查。
数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。Dbcc主要有两个功能:
使用checkstorage 或 checktable 及 checkdb 在页一级和行一级检查页链及数据指针。
使用checkstorage, checkalloc, 或 checkverify, tablealloc, 及indexalloc 检查页分配。
use pubs2
go
dbcc checktable(titles)
go
dbcc tablealloc(titles)
go
isql -Usa -Pxxxxxx -SSYBASE < dbcc_table.sql > dbcc_table.out
grep Msg dbcc_table.out
go
use pubs2
go
checkpoint
go
quit
go
isql -Usa -Pxxxxxx -SSYBASE dbcc_db.out
grep Msg dbcc_db.out
举例2: Unix平台检查pubs2数据库中titles表的一致性
vi dbcc_table.sql
在下列情况中需要使用 dbcc 命令:
dbcc checkdb语句

dbcc checkdb语句
DBCC CHECKDB语句是用于对SQL Server数据库进行完整性检查和诊断的命令。
该命令检查数据库中的所有对象,并查找任何潜在的问题或损坏。
它可以帮助数据库管理员检测并修复数据文件中的错误,以及检查表、索引、约束等对象的一致性。
使用DBCC CHECKDB语句可以检查数据库的物理和逻辑完整性。
它会扫描数据库中的所有分配的页,并对每个分配的页执行一些检查。
数据库管理员可以指定是否要修复任何发现的错误。
DBCC CHECKDB语句的一些常见的选项和参数包括:
1. REPAIR_ALLOW_DATA_LOSS:该选项用于指定在修复过程中是否允许删除数据,可能会导致数据丢失。
在执行此选项之前,务必进行备份以防数据丢失。
2. ALL_ERRORMSGS:该选项用于在检查过程中显示所有错误消息。
3. NO_INFOMSGS:该选项用于在检查过程中禁止显示信息消息。
4. PHYSICAL_ONLY:该选项用于仅检查数据库的物理完整性,而不执行逻辑检查。
这可以提高检查速度。
DBCC CHECKDB语句是维护和管理SQL Server数据库的重要工具之一。
它提供了对数据库完整性的全面检查,并能够帮助管理员及时发现并修复潜在的问题。
建议定期运行该命令,以确保数据库的健康和稳定性。
请注意,在使用DBCC CHECKDB语句之前,务必进行适当的准备工作,如备份数据库和查看相关文档。
此外,建议在以生产环境中使用此命令之前,在测试环境中先进行测试以避免意外情况的发生。
dbcc语句

```
这个结果表明`mydatabase`数据库存在10个错误,需要进一步分析并修复。
dbcc命令的错误处理
默认情况下,dbcc命令在执行过程中遇到错误会停止执行并显示错误信息。
可以使用try...catch语句捕获dbcc命令执行过程中发生的错误,并执行相应的错误处理逻辑。
try...catch语句允许用户在捕获到错误后,根据需要选择性地处理错误,而不是简单地停止执行。
验证数据库完整性
修复数据库错误
检查事务日志
执行快速检查
如果DBCC CHECKDB语句检测到数据库中存在错误或损坏的数据,它将尝试修复这些错误。如果无法修复错误,则可能需要恢复数据库。
使用DBCC CHECKDB语句可以验证数据库的完整性,检查数据库中是否存在错误或损坏的数据。
DBCC CHECKDB语句可以执行快速检查,只检查特定的表或文件组,而不是整个数据库。
DBCC SHOWFILESTATS
03
用于缩小数据库文件的大小,以回收未使用的空间。
DBCC SHRINKFILE
感谢您的观看
THANKS
DBCC CHECKTABLE语句还可以检查约束的完整性,确保表中的数据满足约束条件。
DBCC CHECKTABLE语句还可以检查触发器的状态,以确保它们在正确的状态下运行。
检查文件组中的文件状态
DBCC CHECKFILEGROUP语句还可以检查文件组中的文件状态,以确保它们在正确的状态下运行。
DBCC CHECKDB语句还会检查事务日志,以确保它们与数据库文件保持一致。
01
02
03
04
检查表的完整性
检查索引完整性
检查触发器状态
MSSQL数据库损坏的修复命令DBCC简介

MSSQL数据库损坏的修复命令DBCC简介MSSQL数据库损坏的修复命令DBCC简介DBCC命令能对数据库进行维护,重点介绍内容:一、CHECKALLOC 磁盘空间一致性二、CHECKCATALOG 系统表一致性三、CHECKCONSTRAINTS约束完整性四、CHECKDB 结构完整性五、CHECKTABLE 页的完整性六、DBREINDEX 索引七、INDEXDEFRAG 整理索引碎片八、SHRINKDATABASE 释放空间九、SHRINKFILE 释放文件空间十、HELP 语句的语法信息一、DBCC CHECKALLOC检查指定数据库的磁盘空间分配结构一致性<单用户模式>。
语法DBCC CHECKALLOC(‘database_name’[ , NOINDEX<指定不检查非系统表的非聚集索引>| {REPAIR_ALLOW_DATA_LOSS<同REPAIR_REBUILD但删除已损坏的内容,数据会丢失>|REPAIR_FAST<进行简单的修复操作,数据不会丢失>|REPAIR_REBUILD<进行复杂的修复,数据不会丢失>} ])[WITH{[ALL_ERRORMSGS<显示全部错误信息>|NO_INFOMSGS<不显示错误信息>|][,[TABLOCK<获取共享表锁> ] ][, [ESTIMATEONLY<显示需要的临时空间tempdb]]}<此四个参数不重要> ]例:use ufdata_999_2001goALTER DATABASE ufdata_999_2001 SET SINGLE_USER--SQL7.0下同(sp_dboption 'ufdata_999_2001','single_user', 'true')goDBCC CHECKALLOC('ufdata_999_2001 ', REPAIR_REBUILD) withNO_INFOMSGSgoALTER DATABASE ufdata_999_2001 SET MULTI_USER--SQL7.0(sp_dboption 'ufdata_999_2001','single_user', 'false')二、DBCC CHECKCATALOG检查指定数据库中的系统表内及系统表间的一致性。
sql server数据库修复语句

SQL Server数据库修复语句在SQL Server中,数据库可能会遇到各种问题,比如损坏、不一致或者出现其他错误,这时就需要使用修复语句来修复数据库。
本文将介绍一些常见的SQL Server数据库修复语句,帮助大家解决数据库问题。
1. 使用DBCC CHECKDB命令检查数据库的一致性DBCC CHECKDB是SQL Server中用于检查数据库一致性的命令。
可以使用以下命令来检查指定数据库的一致性问题:```DBCC CHECKDB('数据库名')```这个命令会检查数据库对象的物理和逻辑一致性,包括索引、数据页、数据链路等内容。
如果发现问题,会输出错误信息并尝试修复。
需要说明的是,在运行此命令之前,建议先备份数据库,以免造成数据丢失。
2. 修复损坏的数据页如果DBCC CHECKDB命令检查出了数据页损坏的问题,可以使用以下语句修复:```DBCC PAGE('数据库名', 1, 数据页号, 数据页修复选项)```其中,数据页号是需要修复的数据页的页号,数据页修复选项包括3种:0表示不执行修复,1表示尝试逻辑级别的修复,2表示尝试物理级别的修复。
根据实际情况选择修复选项。
3. 使用修复命令修复数据库如果数据库无法自动修复,可以使用修复命令手动修复数据库。
修复数据库的命令如下:```DBCC CHECKDB('数据库名', REP本人R_REBUILD)```修复操作会尝试重建损坏或不一致的索引,并进行一些其他的一致性检查和修复。
但需要注意的是,该操作可能会导致数据丢失或者数据库不一致,使用前务必确认已经备份了数据库。
4. 使用备份和还原来修复数据库如果数据库问题较为严重,以上方法无法修复,可以尝试使用备份和还原来修复数据库。
需要备份数据库:```BACKUP DATABASE 数据库名 TO 磁盘路径```将备份文件还原到一个新的数据库中:```RESTORE DATABASE 新数据库名 FROM 磁盘路径```这种方法可以将数据库还原到一个较为稳定的状态,但需要注意备份和还原的时机,避免数据丢失。
SQL Server数据库管理员必备的DBCC命令

一、了解DBCCDBCC(database consistenecy checker,简称dbcc)是一个实用命令集,用来检查数据库的逻辑一致性及物理一致性。
数据库控制台命令语句可分为以下类别:维护:对数据库、索引或文件组进行维护的任务。
杂项:杂项任务,如启用跟踪标志或从内存中删除DLL。
信息:收集并显示各种类型信息的任务。
验证:对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。
二、DBBCC维护语句:对数据库、索引或文件组进行维护的任务DBCC CLEANTABLE:回收删除的可变长度列和文本列的空间。
其语法结构如下:DBCC CLEANTABLE({ 'database_name' | database_id | 0 },{ 'table_name' | table_id | 'view_name' | view_id }[ , batch_size ])[ WITH NO_INFOMSGS ]DBCC INDEXDEFRAG:指定表或视图的索引碎片整理。
其语法结构如下:DBCC INDEXDEFRAG({ 'database_name' | database_id | 0 },{'table_name' | table_id | 'view_name' | view_id }, { 'index_name' | index_id }, { partition_number | 0 })[ WITH NO_INFOMSGS ]DBCC DBREINDEX:对指定数据库中的表重新生成一个或多个索引。
其语法结构如下:DBCC DBREINDEX('table_name'[ , 'index_name' [ , fillfactor ] ])[ WITH NO_INFOMSGS ]DBCC SHRINKDATABASE:收缩指定数据库中的数据文件大小。
Sql-Server实用操作-数据库一致性检测工具(DBCC)

在危急时刻,数据库一致性检测(DBCC)可能是你最重要的工具。
本文向你简单介绍DBCC 的功能,它们包括:检测表和相关目录的完整性。
检测整个数据库。
检测数据库页的完整性。
重建任何指定表中的目录。
你为何需要学习DBCC如果你甚至还不知道为何使用DBCC,下面提供一些原因:需要不断分割数据库页(表和目录),这可能会破坏分配。
目录可能遭到破坏,或效率降低。
SQL Server引擎有时会误解你的意图。
需要大量更新时,事情可能会很麻烦(记住,任何指定的更新实际为删除和插入)。
单个页面,虽然仍然“健康”,但可能会失去它们的最优存储足迹。
如何运行DBCC你可以用两种方法运行DBCC:通过命令行窗口或查询分析器(Query Analyzer)窗口。
如果你认为必要,你还可以确定其操作的时间。
(我从未感到有必要这样做,因为在微软的所有产品中,我对SQL Server的稳定性最为自信。
我认为它是雷蒙德推出的最佳产品。
但是,感觉也可能出错。
)DBCC命令包括以下扩展:CheckDB:检测整个数据库的一致性,是检查数据库破坏的基本方法。
CheckTable:检测特定表的问题。
CheckAlloc:检测数据库的单个页面,包括表和目录。
Reindex:重建某个特定表的目录。
CacheStats:说明当前存储在内存缓存中的对象。
DropCleanBuffers:释放当前存储在缓冲区中的所有数据,这样你就可以继续进行检测,而不必使用前面的结果。
Errorlog:删除(缩短)当前日志。
你可以考虑确定包含这个命令的操作的时间,一个星期左右运行一次。
FlushProclnDB:清除特定数据库的存储过程缓存(使用它的数据库id而不是名称)。
使用下列代码找出id:SELECT dbid FROM master.dbo.sysdatabasesWHERE name = '<name your poison>IndexDefrag:减少目录分裂,但不给文件加锁,以便用户能够继续应用数据库。
dbcc checkdb实例

dbcc checkdb实例DBCC CHECKDB 是 SQL Server 中的一个非常有用的命令,用于验证数据库文件的物理和逻辑完整性。
它可以帮助数据库管理员 (DBA) 识别并解决可能存在的问题,如损坏的索引、不一致的数据等。
下面是一个关于如何使用 DBCC CHECKDB 的实例,以及对其输出的解释。
实例:假设我们有一个名为 SalesDB 的数据库,我们想检查其完整性。
我们可以在 SQL Server Management Studio (SSMS) 中执行以下 T-SQL 命令:sqlUSE SalesDB;GODBCC CHECKDB ('SalesDB', REPAIR_ALLOW_DATA_LOSS);GO在这个例子中,我们使用了 DBCC CHECKDB 命令,并指定了数据库名 SalesDB。
REPAIR_ALLOW_DATA_LOSS 是一个修复级别参数,它允许修复过程中可能导致数据丢失的操作。
这是最高级别的修复,通常在数据损坏严重且没有其他选择时使用。
输出解释:执行 DBCC CHECKDB 后,你将收到一个输出,其中包含有关数据库完整性的信息。
输出可能包括:检查摘要:显示检查的总览,包括检查的对象数和发现的问题数。
详细输出:列出每个发现的问题,包括问题类型、对象名、页号等。
修复摘要:如果执行了修复操作,这部分将显示修复的总览。
注意事项:在执行 DBCC CHECKDB 之前,最好备份数据库,以防修复过程中发生不可预见的数据损失。
如果发现严重的问题,最好在修复之前咨询经验丰富的 DBA 或数据库专家。
在生产环境中,最好在低峰时段执行 DBCC CHECKDB,因为它可能会消耗大量资源并影响性能。
通过仔细分析和理解 DBCC CHECKDB 的输出,DBA 可以更好地了解数据库的健康状况,并采取适当的措施来维护其完整性和性能。
sql数据库中dbcc的使用方法大全

DBCC是SQL Server提供的一组控制台命令,功能很强大,掌握一些必要的语句,对操作数据库有不少帮助,所以决定整理一下,发现已有不少类似的整理,减少了不少工作,归类如下:一、DBCC 帮助类命令* DBCC HELP('?')查询所有的DBCC命令* DBCC HELP('命令')查询指定的DBCC命令的语法说明* DBCC USEROPTIONS返回当前连接的活动(设置)的SET选项二、DBCC 检查验证类命令* DBCC CHECKALLOG ('数据库名称')检查指定数据库的磁盘空间分配结构的一致性* DBCC CHECKCATALOG ('数据库名称')检查指定数据库的系统表内和系统表间的一致性* DBCC CHECKCONSTAINTS ('tablename')检查指定表上的指定约束或所有约束的完整性* DBCC CHECKDB检查数据库中的所有对象的分配和结构完整性* DBCC CHECKFILEGROUP检查指定文件组中所有表在当前数据库中的分配和结构完整性* DBCC CHECKTABLE检查指定表或索引视图的数据、索引及test、ntest和image页的完整性* DBCC CHECKIDENT检查指定的当前标识值* DBCC SQLPERF(UMSSTATS) undocumented in BOL可以用来检查是否CPU使用达到瓶颈最关键的一个参考数据num runnable,表明当前有多少个线程再等待运行如果大于等于2,考虑CPU达到瓶颈三、DBCC 维护类命令* DBCC CLEANTABLE ('db_name','table_name')回收Alter table drop column语句删除可变长度列或text* DBCC DBREINDEX重建指定数据库的一个或多个索引* DBCC INDEXDEFRAG对表或视图上的索引和非聚集索引进行碎片整理* DBCC PINTABLE (db_id,object_id)将表数据驻留在内存中查看哪些表驻留在内存的方法是:select objectproperty(object_id('tablename'),‘tableispinned') * DBCC UNPINTABLE (db_id,object_id)撤消驻留在内存中的表* DBCC SHRINKDATABASE(db_id,int)收缩指定数据库的数据文件和日志文件大小* DBCC SHRINKFILE(file_name,int)收缩相关数据库的指定数据文件和日志文件大小四、DBCC 性能调节命令* DBCC dllname(FREE)sp_helpextendedproc 查看加载的扩展PROC在内存中卸载指定的扩展过程动态链接库(dll)* DBCC DROPCLEANBUFFERS从缓冲池中删除所有缓冲区* DBCC FREEPROCCACHE从过程缓冲区删除所有元素* DBCC INPUTBUFFER显示从客户机发送到服务器的最后一个语句* DBCC OPENTRAN (db_name)查询某个数据库执行时间最久的事务,由哪个程序拥有* DBCC SHOW_STATISTICS显示指定表上的指定目标的当前分布统计信息* DBCC SHOWCONTIG显示指定表的数据和索引的碎片信息* DBCC SQLPERF(logspace) 查看各个DB的日志情况(iostats) 查看IO情况(threads) 查看线程消耗情况返回多种有用的统计信息* DBCC CACHESTATS显示SQL Server 2000内存的统计信息* DBCC CURSORSTATS显示SQL Server 2000游标的统计信息* DBCC MEMORYSTATS显示SQL Server 2000内存是如何细分的* DBCC SQLMGRSTATS显示缓冲中先读和预读准备的SQL语句五、DBCC 未公开的命令* DBCC ERRLOG初始化SQL Server 2000的错误日志文件* DBCC FLUSHPROCINDB (db_id)清除SQL Server 2000服务器内存中的某个数据库的存储过程缓存内容* DBCC BUFFER (db_name,object_name,int(缓冲区个数))显示缓冲区的头部信息和页面信息* DBCC DBINFO (db_name)显示数据库的结构信息* DBCC DBTABLE显示管理数据的表(数据字典)信息* DBCC IND (db_name,table_name,index_id)查看某个索引使用的页面信息* DBCC REBUILDLOG重建SQL Server 2000事务日志文件* DBCC LOG (db_name,3) (-1--4)查看某个数据库使用的事物日志信息* DBCC PAGE查看某个数据库数据页面信息* DBCC PROCBUF显示过程缓冲池中的缓冲区头和存储过程头* DBCC PRTIPAGE查看某个索引页面的每行指向的页面号* DBCC PSS (user,spid,1)显示当前连接到SQL Server 2000服务器的进程信息* DBCC RESOURCE显示服务器当前使用的资源情况* DBCC TAB (db_id,object_id)显示数据页面的结构六、DBCC跟踪标记跟踪标记用于临时设置服务器的特定特征或关闭特定行为,常用于诊断性能问题或调试存储过程或复杂的计算机系统* DBCC TRACEON (3604)打开跟踪标记* DBCC TRACEOFF关闭跟踪标记* DBCC TRACESTATS查看跟踪标记状态七、使用DBCC 结果集输出许多DBCC 命令可以产生表格格式的输出(使用WITH TABLERESULTS 选项)。
Oracle数据库教程 —— sql server dbcc常用命令使用详解

Oracle数据库教程—— sql server dbcc常用命令使用详解常用DBCC命令详解Transact-SQL 编程语言提供 DBCC 语句作为 SQL Server 的数据库控制台命令。
DBCC 命令使用输入参数并返回值。
所有 DBCC 命令参数都可以接受 Unicode 和 DBCS 文字。
维护命令1、DBCC INPUTBUFFER功能:显示从客户端发送到 Microsoft SQL Server实例的最后一个语句。
格式:DBCC INPUTBUFFER ( session_id [ , request_id ] )[WITH NO_INFOMSGS ]执行权限:用户必须是 sysadmin 固定服务器角色的成员。
用户必须具有 VIEW SERVER STATE 权限。
相关命令:SELECT @@spidSELECT request_id FROM sys.dm_exec_requests WHERE session_id = @@spid2、DBCC OUTPUTBUFFER功能:以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区。
格式:DBCC OUTPUTBUFFER ( session_id [ , request_id ] )[ WITH NO_INFOMSGS ]执行权限:用户必须是 sysadmin 固定服务器角色的成员。
相关命令:SELECT @@spidSELECT request_id FROM sys.dm_exec_requests WHERE session_id = @@spid3、DBCC SHOWCONTIG功能:显示指定的表或视图的数据和索引的碎片信息。
格式:DBCC SHOWCONTIG [ (对象名) ][ WITH { [ , [ ALL_INDEXES ] ] [ , [ TABLERESULTS ] ] [ , [ FAST ] ] [ ,[ ALL_LEVELS ] ] [ NO_INFOMSGS ] } ]执行权限:用户必须是对象所有者,或是 sysadmin 固定服务器角色、db_owner 固定数据库角色或db_ddladmin 固定数据库角色的成员。
dbcc checkdb的工作原理

matlab随机纤维生成算法?答:DBCC CHECKDB是SQL Server 中的一个数据库控制台命令,它用于检查数据库的物理和逻辑完整性。
这个命令的工作原理主要包括以下步骤:1.物理结构检查:首先,DBCC CHECKDB会检查数据库的物理结构。
这包括检查数据文件、日志文件以及数据库中的各个页。
它会验证这些文件的物理完整性,确认没有损坏或丢失的页。
2.逻辑结构检查:在物理结构检查之后,DBCC CHECKDB会进行逻辑结构检查。
这包括检查表、索引、视图、存储过程等数据库对象的逻辑结构。
它会验证这些对象的定义是否正确,以及它们之间的关系是否一致。
3.数据完整性检查:除了物理和逻辑结构检查,DBCC CHECKDB还会进行数据完整性检查。
它会检查表中的数据是否满足定义的约束条件,例如主键约束、外键约束、唯一约束等。
如果发现数据不满足约束条件,它会报告错误。
4.索引一致性检查:DBCC CHECKDB还会检查索引的一致性。
它会比较索引中的数据和表中的数据,确认它们是一致的。
如果发现索引和表的数据不一致,它会报告错误。
值得注意的是,DBCC CHECKDB的工作原理可能因SQL Server 的版本和设置的不同而有所差异。
例如,在一些版本中,DBCC CHECKDB可以在线运行,即在不中断数据库的正常操作的情况下进行检查。
而在一些设置中,可能需要指定额外的选项来启用或禁用某些类型的检查。
另外,DBCC CHECKDB的执行可能会对数据库的性能产生影响,特别是在大型数据库或高负载的情况下。
因此,通常建议在低负载时段或维护窗口期间运行此命令。
以上就是DBCC CHECKDB的基本工作原理。
如果你需要更详细的信息,建议查阅SQL Server 的官方文档或相关的学习资源。
SQLSERVERDBCC命令大全

SQLSERVERDBCC命令大全DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保证测试的公正性。
需要注意的是这个命令只移走干净的缓存,不移走脏缓存。
由于这个原因,在执行这个命令前,应该先执行CheckPoint,将所有脏的缓存写入磁盘,这样在运行DBCC RROPCLEANBUFFERS 时,可以保证所有的数据缓存被清理,而不是其中的一部分。
DBCC CacheStats:显示存在于当前buffer Cache中的对象的信息,例如:hit rates,编译的对象和执行计划DBCC ErrorLog :如果很少重启mssqlserver服务,那么服务器的日志(不是数据库事务日志)会增长得很快,而且打开和查看日志的速度也会很慢使用这个命令,可以截断当前的服务器日志,主要是生成一个新的日志。
可以考虑设置一个调度任务,每周执行这个命令自动截断服务器日志。
使用存储过程sp_cycle_errorlog也可以达到同样的目的一、DBCC 帮助类命令DBCC HELP('?') :查询所有的DBCC命令DBCC HELP('命令') :查询指定的DBCC命令的语法说明DBCC USEROPTIONS :返回当前连接的活动(设置)的SET选项二、DBCC 检查验证类命令DBCC CHECKALLOG ('数据库名称') :检查指定数据库的磁盘空间分配结构的一致性DBCC CHECKCATALOG ('数据库名称') :检查指定数据库的系统表内和系统表间的一致性DBCC CHECKCONSTAINTS ('tablename') :检查指定表上的指定约束或所有约束的完整性DBCC CHECKDB :检查数据库中的所有对象的分配和结构完整性DBCC CHECKFILEGROUP :检查指定文件组中所有表在当前数据库中的分配和结构完整性DBCC CHECKTABLE :检查指定表或索引视图的数据、索引及test、ntest和image页的完整性DBCC CHECKIDENT :如果存在大量数据删除,考虑在删除后,使用 dbcc checkident 重置一下自增值/Forums/zh-CN/sqlserverzhchs/thread/8fa3e3a8-2ff2-4a68-be3e-92e76c380ef9/检查指定的当前标识值DBCC SQLPERF(UMSSTATS):最关键的一个参考数据num runnable:表明当前有多少个线程再等待运行,如果大于等于2,考虑CPU达到瓶颈Scheduler ID:当前机器有多少个逻辑CPU就有多少个Scheduler ID,具体怎麽看可以看一下我的这篇文章SQLSERVER独特的任务调度算法"SQLOS"三、DBCC 维护类命令DBCC CLEANTABLE ('db_name','table_name') :回收Alter table drop column语句删除可变长度列或textDBCC DBREINDEX :重建指定数据库的一个或多个索引跟ALTER INDEX REBUILD差不多DBCC INDEXDEFRAG:对表或视图上的索引和非聚集索引进行碎片整理DBCC PINTABLE (db_id,object_id) :将表数据驻留在内存中查看哪些表驻留在内存的方法是:0:没有驻留,1:驻留1 USE [GPOSDB]2 GO3 SELECT OBJECTPROPERTY(OBJECT_ID('dbo.SystemPara'), 'tableispinned')DBCC UNPINTABLE (db_id,object_id) :撤消驻留在内存中的表DBCC SHRINKDATABASE(db_id,int) :收缩指定数据库的数据文件和日志文件大小DBCC SHRINKFILE(file_name,int):收缩相关数据库的指定数据文件和日志文件大小四、DBCC 性能调节命令DBCC dllname(FREE) :在内存中卸载指定的扩展过程动态链接库(dll)sp_helpextendedproc 查看加载的扩展PROCDBCC DROPCLEANBUFFERS :从缓冲池中删除所有缓冲区DBCC FREEPROCCACHE :从执行计划缓冲区删除所有缓存的执行计划DBCC INPUTBUFFER :显示从客户机发送到服务器的最后一个语句DBCC OPENTRAN (db_name) :查询某个数据库执行时间最久的事务,由哪个程序拥有DBCC SHOW_STATISTICS :显示指定表上的指定目标的当前统计信息分布DBCC SHOWCONTIG :显示指定表的数据和索引的碎片信息DBCC SQLPERF (logspace) :查看各个DB的日志情况(iostats) 查看IO情况(threads) 查看线程消耗情况返回多种有用的统计信息DBCC CACHESTATS :显示SQL Server 2000内存的统计信息DBCC CURSORSTATS :显示SQL Server 2000游标的统计信息DBCC MEMORYSTATS :显示SQL Server 2000内存是如何细分的DBCC SQLMGRSTATS :显示缓冲区中先读和预读准备的SQL语句五、DBCC 未公开的命令DBCC ERRLOG :初始化SQL Server 2000的错误日志文件DBCC FLUSHPROCINDB (db_id) :清除SQL Server 2005服务器内存中的某个数据库的存储过程缓存内容DBCC BUFFER (db_name,object_name,int(缓冲区个数)) :显示缓冲区的头部信息和页面信息DBCC DBINFO (db_name) :显示数据库的结构信息DBCC DBTABLE :显示管理数据的表(数据字典)信息DBCC IND (db_name,table_name,index_id) :查看某个索引使用的页面信息DBCC REBUILDLOG :重建SQL Server 2000事务日志文件DBCC LOG (db_name,3) (-1~4) :查看某个数据库的事物日志信息显示格式可以为:-1,0,1,2,3,4 每个数字代表不同的格式DBCC PAGE :查看某个数据库数据页面信息DBCC PROCBUF :显示过程缓冲池中的缓冲区头和存储过程头DBCC PRTIPAGE :查看某个索引页面的每行指向的页面号DBCC PSS (user,spid,1) :显示当前连接到SQL Server 2000服务器的进程信息DBCC RESOURCE :显示服务器当前使用的资源情况DBCC TAB (db_id,object_id) :显示数据页面的结构六、DBCC跟踪标记跟踪标记用于临时设置服务器的特定特征或关闭特定行为,常用于诊断性能问题或调试存储过程或复杂的系统DBCC TRACEON (3604) :打开跟踪标记DBCC TRACEOFF :关闭跟踪标记DBCC TRACESTATS :查看跟踪标记状态七、官方使用DBCC的建议1、在系统使用率较低时运行 CHECKDB。
dbcc dropcleanbuffers 用法

"DBCC DROPcleanbuffers" 是 SQL Server 数据库引擎提供的一个命令,用于从内存中
清除缓存的数据页。
这个命令可以用来模拟数据库重新加载到内存中的效果,以测试
查询或其他数据库操作的性能。
使用方法如下:
1. 首先,确保你有足够的权限执行该命令。
2. 打开 SQL Server Management Studio (SSMS) 或任何其他支持执行 T-SQL 命令的工具。
3. 在查询编辑器中输入以下命令:DBCC DROPCLEANBUFFERS;
4. 执行该命令。
请注意,执行该命令后,数据库缓存中的所有数据将被清除,这可能会导致之后的查
询性能较差,因为需要重新从磁盘加载数据到内存中。
因此,在生产环境中,请谨慎
使用该命令,并确保在适当的时间和环境下使用。
SqlServer中的DBCC命令详细介绍

SqlServer中的DBCC命令详细介绍今天研发中⼼办年会,晚上就是各⾃部门聚餐了,我个⼈喜欢喝⼲红,在⼲红中你可以体味到那种酸甜苦辣。
⼈⽣何尝不是这样呢正好ceo从美国带了⼲红回来,然后我就顺道开⼼的过了把瘾。
⼀个字。
爽。
喝着有点多。
到现在头还疼。
回来地铁上想这个周末忙着找房⼦,书⼀点都没看,也没在博客上接着忽悠,想起了上篇博客有个哥们说普及普及DBCC,虽然有点迷迷糊糊的。
看能不能写出点新花样。
不管学什么语⾔,还是数据库,你得看的⽐⼈家深⼀层。
最可悲的就是停留的在表层,这样每次版本升级后,出了些新花样,然后你就觉得太他妈神奇了,可事实真的是这样么?有个很现实的例⼦就是C#各个版本中的语法糖。
当你ILdasm之后,你会发现都是些基础不能再基础的东西,C#有个好处,就是你可以看源码,你还可以ILdasm它。
基本上你就可以让它裸着来见你,但sqlserver有点特殊,它不是编程语⾔,你肯定不会通过反编译来学习,那它更深⼀层的东西就只能是底层的数据页了。
. 。
所以这个是学习sqlserver的基本功,扯的有点多。
⼀:DBCC1:什么是DBCC 我不是教学⽼师,我也说不到没有任何⽆懈可击的定义,全名:Database Console Commands。
顾名思义“数据库控制台命令”,说到“控制台“,我第⼀反应就是chrome的开发者⼯具,不知道你的第⼀反应会是怎样?开发者⼯具中,只要javascript能认的语法,你都可以在控制台键⼊。
同样的道理sqlserver能认的也是⼀样。
2:DBCC到底有多少个命令 你应该知道,凡是控制台,⼤多都会提供⼀个help命令,⽐如cmd界⾯,⼜或者是mongodbのconsole,然后看看DBCC中的help会是怎样从上图中,我从上到下数了下,有32个命令,不过有意思的是,微软提供的这32个命令其实都是些对外公开的,我这么说的意思是还有些未公开的命令只是微软⾃⼰⽤。
详解SQLServer数据修复命令DBCC的使用

详解SQLServer数据修复命令DBCC的使用MS Sql Server 提供了很多关于数据库修复的命令,当MS Sql Server 数据库遭到质疑或者是有的无法完成读取时可以尝试这些修复命令。
1. DBCC CHECKDB重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。
e master2.declare @databasename varchar(255)3.set @databasename=’需要修复的数据库实体的名称’4.exec sp_dboption @databasename, N’single’, N’true’ –将目标数据库置为单用户状态5.dbcccheckdb(@databasename,REPAIR_ALLOW_DATA_LOSS)6.dbcc checkdb(@databasename,REPAIR_REBUILD)7.exec sp_dboption @databasename, N’single’, N’false’–将目标数据库置为多用户状态然后执行 SQL Server数据修复命令DBCC CHECKDB(’需要修复的数据库实体的名称’) 检查数据库是否仍旧存在错误。
注意:修复后可能会造成部分数据的丢失。
2. DBCC CHECKTABLE如果DBCC CHECKDB 检查仍旧存在错误,可以使用DBCC CHECKTABLE来修复。
e 需要修复的数据库实体的名称2.declare @dbname varchar(255)3.set @dbname=’需要修复的数据库实体的名称’4.exec sp_dboption @dbname,’single user’,'true’5.dbcc checktable(’需要修复的数据表的名称’,REPAIR_ALLOW_DATA_LOSS)6.dbcc checktable(’需要修复的数据表的名称’,REPAIR_REBUILD)7.—把’ 需要修复的数据表的名称’更改为执行SQL Server数据修复命令DBCC CHECKDB时报错的数据表的名称8.exec sp_dboption @dbname,’single user’,'false’3. 其他的一些常用的修复命令DBCC DBREINDEX 重建指定数据库中表的一个或多个索引用法:DBCC DBREINDEX (表名,’’) 修复此表所有的索引。
DBCC简介

DBCC简介DBCC是SQL Server的数据库控制台命令(Database Console Command)的简写,主要分为维护、信息、验证和其他共四类。
⼀,维护DBCC 可以回收空间、收缩数据库,更新系统视图中的页⾯数量和⾏数量。
1,回收空间从表或索引视图中的被删除的可变长度列(variable-length column)中回收空间,该命令不会从已被删除的固定长度的列(fix-length column)中回收空间。
DBCC CLEANTABLE({ database_name | database_id |0 }, { table_name | table_id | view_name | view_id }[ , batch_size ])[ WITH NO_INFOMSGS ]batch_size是指每个事务处理的数据⾏数量,默认值是0,表⽰在⼀个事务中处理整个表。
2,数据库收缩,⽤于收缩数据库的数据⽂件和⽇志⽂件,,⽤于收缩数据库中指定的单个⽂件,或者清空单个⽂件。
DBCC SHRINKDATABASE( database_name | database_id |0[ , target_percent ][ , { NOTRUNCATE | TRUNCATEONLY } ])[ WITH NO_INFOMSGS ]DBCC SHRINKFILE({ file_name|file_id }{ [ , EMPTYFILE ]|[ [ , target_size ][ , { NOTRUNCATE | TRUNCATEONLY } ] ]})[ WITH NO_INFOMSGS ]3,更新视图中的页⾯数量和⾏数量该命令⽤于校正表或索引中每个分区的⾏、已⽤页,保留页,叶级页和数据页的数量,使得 sp_spaceused 等系统存储过程或视图返回的结果更精确。
DBCC UPDATEUSAGE( { database_name | database_id |0 }[ , { table_name | table_id | view_name | view_id }[ , { index_name | index_id } ] ]) [ WITH [ NO_INFOMSGS ][ , ][ COUNT_ROWS ] ]⼆,信息信息类DBCC主要输出信息。
SQLSERVERDBCC命令解释

SQLSERVERDBCC命令解释SQL SERVER DBCC命令解释八点钟起床一直搞到现在好多还不太记得先放上来以后慢慢修改dbcc trraceon DBCC TRACEOFF对于数据库死锁通常可以通过TRACE FLAG 检查ERRORLOG里面的输出和分析SQLTRACE的执行上下文判断死锁问题的来由TRACEON函数的第三个参数设置为表示不单单针对当前connection而是针对所有包括未来建立的connection 这样才够完全否则只是监视当前已经建立的数据库连接了执行下面的话可以把死锁记录到Errorlog中dbcc traceon ( )godbcc tracestatus( )go说明打印关于扩展存储过程动态链接库的版本信息停止auto parameterization输出锁信息传回参与死锁的SQL SERVER相关程序之运行数据停止lock escalation(锁升级)显示动态选择锁的相关信息通过DBCC CHECKDB DBCC CHECKFILEGROUP 和DBCC CHECKTABLE 禁用对象的并行检查默认情况下并行度由查询处理器自动确定最大并行度的配置方式与并行查询相同有关更多信息请参见 max degree of paralleli *** 选项通常情况下应将并行DBCC 保留为启用状态执行DBCC CHECKDB 时查询处理器重新评估和自动调整并行度并检查每个表或一批表有时检查可能在服务器处于实际空闲状态时进行如果管理员知道在检查结束前负荷将加大可能希望手工减小或禁用并行度但是禁用并行检查会导致数据库的总体性能降低降低并行度将增加必须扫描的事务日志量这反过来增加了对 tempdb 空间的需求并导致 dbcc 完成检查所需的时间非线性增加如果运行 DBCC 时启用了 TABLOCK 功能并关闭了并行度则表可能被锁定更长时间默认情况下如果磁带驱动器支持硬件压缩则 DUMP 或 BACKUP 语句会使用该功能利用此跟踪标记可以禁用磁带驱动程序的硬件压缩本项在要与不支持压缩的其它站点或磁带驱动器交换磁带时有用将trace结果输出到前端要求DBCC的输出放到SQL server ERROR LOG停止索引提示功能停止join group等最优化提示功能停止锁提示功能停止最优化超时配置强制做完整的最优化动作DBCC pagedbcc traceon( )dbcc page(northwind )/*查询northwind 的数据的第个页面的信息*//*DBCC Page ({dbid|dbname} filenum pagenum[ printopt])具体参数描述如下dbid: 包含页面的数据库IDdbname:包含页面的数据库的名称filenum:包含页面的文件编号pagenum:文件内的页面printopt:可选的输出选项;选用其中一个值:默认值输出缓冲区的标题和页面标题:输出缓冲区的标题页面标题(分别输出每一行) 以及行偏移量表:输出缓冲区的标题页面标题(整体输出页面) 以及行偏移量表:输出缓冲区的标题页面标题(分别输出每一行) 以及行偏移量表;每一行后跟分别列出的它的列值*/DBCC checkallocDBCC checkalloc(northwind)/*检查指定数据库的系统表内和表间的一致性checkalloc是检查指定数据库看其所有正确分配的页和尚未分配的页的情况若未指定数据库名则checkalloc检查当前数据库checkalloc会返回已分配的和使用的空间数量checkalloc的缺省模式为nofix 要使用fix选项必须把数据库置于单用户模式*/DBCC checkcatalogDBCC checkcatalog(northwind)/*检查批定数据库的系统表内和系统表间的一致性*/DBCC checkconstraintsDBCC checkconstraints(products)/*检查指定表上的指定约束或所有约束的完整性DBCC CHECKCONSTRAINTS[( table_name | constraint_name)][WITH {ALL_ERRORMSGS|ALL_CONSTRAINTS}]DBCC CHECKCONSTRAINTS在某个数据库中检测某些特定的约束或者全部约束的一致性DBCC CHECKCONSTRAINTS总是在当前数据库的上下文环境中执行注意 DBCC CHECKCONSTRAINTS并不进行磁盘或者文件级别的一致性检测;它只是确保外键定义的一致性同时检测约束——仅仅是确认数据有效如果你希望检测磁盘上表和索引的一致性你应该执行DBCC CHECKDB或者在所有的表上执行DBCC CHECKALLOC和 DBCC CHECKTABLE的组合*/DBCC checkdbDBCC checkdb/*检查数据库中的所有对象的分配和结构完整性checkdb [( database_name [ NOINDEX | REPAIR])][WITH NO_INFOMSGS[ ALL_ERRORMSGS][ PHYSICAL_ONLY] [ ESTIMATEONLY][ TABLOCK]]*/DBCC cleantableDBCC cleantable/*回收alter table drop column语句删除可变长度列或text列后的存储空间cleantable ( database_name |database_id table_name |table_id [batch_size])*/DBCC dbreindexDBCC dbreindex/*重建指定数据库的一个或多个索引dbreindex ( table_name [ index_name [ fillfactor ]]) [WITH NO_INFOMSGS]*/DBCC indexdefragDBCC indexdefrag/*对表或视图上的索引和非聚集索引进行碎片整理indexdefrag ({dbid | dbname | } {tableid | tablename} {indid | indname})*/DBCC pintable/DBCC unpintable将表数据驻留在内存中或撤销驻留在内存中的数据pintable (database_id table_id)DBCC shrinkdatabase收缩指定数据库的数据文件和日志文件大小shrinkdatabase ({dbid | dbname } [freespace_percentage [ {NOTRUNCATE | TRUNCATEONLY}]])DBCC shrinkfile收缩相关数据库的指定数据文件和日志文件大小shrinkfile ({fileid | filename } [press_size [ {NOTRUNCATE | TRUNCATEONLY | EMPTYFILE}]])DBCC dllname(free)在内存中制裁指定的扩展想念过程动态链接库(DLL)sp_helpextended proc查询当前内存中的扩展存储过程动态链接库DBCC dropcleanbuffers从缓冲池中删除所有缓冲区/*使用DBCC DROPCLEANBUFFERS 测试带有冷高速缓存的查询而不用关闭和重新启动服务器*/DBCC freeproccache从过程缓冲区删除所有元素清理所有数据库的过程高速缓存DBCC inputButter显示从客户机发送到服务器的最后一个语句DBCC opentran查询某个数据库执行时间最久的事务由哪个程序拥有DBCC show_statistics显示指定表上的指定目前的当前分布统计信息DBCC showcontig显示指定表的数据和索引的碎片信息DBCC sqlperf可用参数logspace iostats threads返回多种有用的统计信息dbcc sqlperf(logspace)Database Name Log Size (MB) Log Space Used (%) Status mastertempdbmodelmsdbpubsNorthwinddb cdrfcdbfcdb_testkldbdbcc sqlperf(iostats)Statistic ValueReads OutstandingWrites Outstandingdbcc sqlperf(threads)Spid Thread ID Status LoginName IO CPU MemUsageNULL background NULLNULL background NULLNULL sleeping NULLNULL background NULLbackground saNULL sleeping NULLbackground sabackground sabackground sabackground sabackground sabackground sasleeping RD Admsleeping RD Admrunnable RD AdmDBCC cachestats显示SQL SERVER内存的统计信息DBCC cursorstats显示SQL SERVER游标的统计信息DBCC sqlmgrstats显示缓冲中先读和预先准备的SQL语句DBCC errlog初始化SQL SERVER错误日志文件DBCC flushprocindb清除SQL SERVER服务器内存中某个数据库的存储过程缓存内容DBCC Buffer显示缓冲区的善信息和页面信息DBCC DBinfo显示数据库结构信息DBCC DBtable显示管理数据的表信息DBCC IND查看某个索引使用的页面信息DBCC REbuild_log重建SQL SERVER事务日志文件DBCC log查看某个数据库使用的事务日志信息DBCC procbuf显示过程缓冲池中的缓冲区头和存储过程头DBCC prtipage查看某个索引页面的每行指向的页面号DBCC pss显示当前连接到SQL SERVER的进程信息DBCC resource显示服务器当前使用的资源情况DBCC tablishixinzhi/Article/program/SQLServer/201311/22263。
dbccshowconfig用法

dbccshowconfig用法数据库管理系统(DBMS)是现代企业中不可或缺的一部分,它们存储和管理着企业的关键数据,保证业务的正常运行。
对于数据库管理员来说,了解和掌握DBMS的各种配置选项是至关重要的,因为这些选项可以影响系统的性能、可靠性和安全性。
在Microsoft SQL Server中,有一个重要的工具叫做dbccshowconfig,它可以帮助管理员查看数据库引擎的配置信息,从而优化数据库性能。
首先,我们需要了解dbccshowconfig的基本用法。
dbccshowconfig是一个在SQL Server中运行的诊断命令,它可以显示数据库引擎的当前配置信息。
管理员可以通过运行这个命令来查看诸如内存分配、CPU使用、磁盘IO等关键指标,从而判断系统的运行状况。
同时,dbccshowconfig还可以帮助管理员识别系统中存在的潜在问题,比如内存泄漏、磁盘IO瓶颈等,提供改进的建议。
通过dbccshowconfig,管理员可以对SQL Server的配置进行优化。
比如,管理员可以调整内存配置,设置磁盘缓存,优化查询计划等,从而提升系统的性能和响应速度。
此外,dbccshowconfig还可以帮助管理员监控系统的运行状态,及时发现和解决问题,保证系统的稳定运行。
除了基本用法之外,dbccshowconfig还提供了一些高级功能,帮助管理员更深入地了解数据库引擎的运行情况。
比如,管理员可以通过设置参数,查看特定配置项的详细信息,比如缓冲池大小、日志文件配置等。
此外,dbccshowconfig还可以生成配置报告,帮助管理员分析系统的性能瓶颈,并提供改进的建议。
在实际应用中,dbccshowconfig可以帮助管理员解决各种数据库性能问题。
比如,管理员可以通过查看配置信息,发现系统中存在的性能瓶颈,比如内存不足、io延迟等,从而调整配置,提升系统的性能。
此外,通过定期运行dbccshowconfig,管理员可以监控系统的运行状况,及时发现问题并解决,保证系统的稳定运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在危急时刻,数据库一致性检测(DBCC)可能是你最重要的工具。
本文向你简单介绍DBCC 的功能,它们包括:检测表和相关目录的完整性。
检测整个数据库。
检测数据库页的完整性。
重建任何指定表中的目录。
你为何需要学习DBCC如果你甚至还不知道为何使用DBCC,下面提供一些原因:需要不断分割数据库页(表和目录),这可能会破坏分配。
目录可能遭到破坏,或效率降低。
SQL Server引擎有时会误解你的意图。
需要大量更新时,事情可能会很麻烦(记住,任何指定的更新实际为删除和插入)。
单个页面,虽然仍然“健康”,但可能会失去它们的最优存储足迹。
如何运行DBCC你可以用两种方法运行DBCC:通过命令行窗口或查询分析器(Query Analyzer)窗口。
如果你认为必要,你还可以确定其操作的时间。
(我从未感到有必要这样做,因为在微软的所有产品中,我对SQL Server的稳定性最为自信。
我认为它是雷蒙德推出的最佳产品。
但是,感觉也可能出错。
)DBCC命令包括以下扩展:CheckDB:检测整个数据库的一致性,是检查数据库破坏的基本方法。
CheckTable:检测特定表的问题。
CheckAlloc:检测数据库的单个页面,包括表和目录。
Reindex:重建某个特定表的目录。
CacheStats:说明当前存储在内存缓存中的对象。
DropCleanBuffers:释放当前存储在缓冲区中的所有数据,这样你就可以继续进行检测,而不必使用前面的结果。
Errorlog:删除(缩短)当前日志。
你可以考虑确定包含这个命令的操作的时间,一个星期左右运行一次。
FlushProclnDB:清除特定数据库的存储过程缓存(使用它的数据库id而不是名称)。
使用下列代码找出id:SELECT dbid FROM master.dbo.sysdatabasesWHERE name = '<name your poison>IndexDefrag:减少目录分裂,但不给文件加锁,以便用户能够继续应用数据库。
CheckCatalog:检测特定数据库表及表之间的一致性(后者意味着使用外键等。
)如何使用这五个扩展DBCC首先建立一个数据库快照(在某些情况下,如应用一个Master、TempDB或只读数据库时)。
附带条件:要使用DBCC,数据库必须处于单用户模式。
使用DBCC CheckDB此命令保证:数据与目录页正确连接。
目录被正确分类,并保持最新。
指针一致。
每个页面的数据保持最新。
页面偏移值保持最新。
以下是使用CheckDB的最常见方法:DBCC CHECKDB ('AdventureWorks', REPAIR_FAST)DBCC CHECKDB ('AdventureWorks', REPAIR_REBUILD)DBCC CHECKDB ('AdventureWorks', REPAIR_ALLOW_DATA_LOSS)你还可以指定其它几个选项,但以上是三个最重要的选项。
我按顺序列出这些DBCC命令, 你应该先运行它们,然后检查结果。
前两个选项不会造成数据损失,但第三个选项会引起数据损失。
因此建议把第三个命令放在一个事务内,如果数据损失不可接受,你可以执行一次回滚(ROLL BACK)。
使用DBCC CheckTable大多数情况下,你遇到的问题往往与数据库中的一个或几个表,而不是整个数据库有关。
这时即可运行CheckTable。
首先,使用相关数据库,然后运行DBCC CheckTable命令。
下面是两个例子:DBCC CheckTable ('Sales,SalesOrderHeader')DBCC CheckTable ('Sales,SalesOrderHeader', REPAIR_REBUILD)使用DBCC CheckAlloc这个命令检测数据页及其目录的一致性。
下面是两个例子:DBCC CHECKALLOC ('Sales.SalesOrderDetails')DBCC CHECKALLOC ('Sales.SalesOrderDetails', REPAIR_REBUILD)使用DBCC CheckCatalog使用这个命令来验证一个数据库系统表的一致性。
你指定数据库的名称进行检查,自变量WIT H NO_INFOMSGS可选。
下面是一个例子:DBCC CHECKCATALOG ('AdventureWorks')使用DBCC ReIndex这个命令促使某个特定的表或视图中的一个或几个目录进行重建。
你还可以应用某个特定目录的名称和填充系数。
列表A中包含两个例子。
第三个自变量说明我希望使用重建目录中的一个90%的填充系数。
一DBCC命令的格式dbcc(checktable ((表名|表标识( [, skip_ncindex] ) |checkdb [(数据库名[, skip_ncindex] )] |checkalloc [ (数据库名[, fix | nofix] )] |tablealloc( {表名|表标识}[,{full |optimized |fast |null}[, fix |nofix] ]]) |indexalloc ( {表名|表标识},索引标识[,{full |optimezed | fast | null}[, fix |nofix ]] ) |checkcatalog [ (数据库名)] |dbrepair(数据库名,dropdb ) |reindex({表名|表标识} ) |fix_text({表名|表标识) }dbcc的权限,对于checktable,fix_text和reindex是缺省赋给表的属主,对于checkd b,checkalloc,checkcatalog,dbrepair,indexalloc和tablealloc,是缺省赋给数据库属主的。
DBO自动获得DBCC命令和全部选项的权限。
该权限不可转授。
此外,dbcc在数据库是活动时运行,除了dbrepair选项和带有fix选项的dbcc checkalloc以外。
checktable选项checktable是用来对一个指定的表做检查,确保索引和数据页正确地连接,索引按正确的顺序存储,所有指针的一致性,每页上数据信息的合理性,页偏移的合理性。
如果日志段在它自己的(日志)设备上,对syslogs表使用dbcc checktable命令可以报告已使用的和剩余的日志空间,使用skip_ncindex选项使得dbcc checktable跳过对用户表上非聚簇索引(noncl ustered index)的检查。
缺省是检查所有的索引。
例1.检查日志使用的空间量和未用的空间量:dbcc checktable (syslogs)若日志段在日志设备上,则会返回如下信息:checking syslogsThe total number of data page in the table is 1.NOTICE:Space used on the log segment is 0.20 Mbytes, 0.13%.NOTICE:Space free on the log segment is 153.4Mbytes,99.87%.DBCC execution Completed.If dbcc printed error messages,Contact a user with SA role.若日志不在它自己的设备上,则会显示下列信息:NOTICE:Notification of log space used/free.Can not be reported because the log segment is not on its own device.例2. dbcc checktable (titles)The total number of data page in this table is 3.Table has 18 data rows.DBCC execution Completed. If DBCC printed error messages. contact a user wi th SA role.checkdb选项运行checkdb选项同checktable检查的内容一样,但它是对一指定数据库中的每张表都做这样的检查。
若未指定数据库名,checkdb检查当前的数据库。
checkdb返回的信息,也同于checktable。
checkalloc选项checkalloc是检查指定数据库,看其所有正确分配的页和尚未分配的页的情况。
若未指定数据库名,则checkalloc检查当前数据库。
checkalloc会返回已分配的和使用的空间数量。
checkalloc的缺省模式为nofix,要使用fix选项,必须把数据库置于单用户模式。
例:dbcc checkalloc (pubs2)...alloc page 0 (#of extent=32 used pages=68 ref pages=68)alloc page 256 (# of extent=32 used pages=154 ref pages=154)alloc page 512 (# of extent=28 used pages=184 ref pages=184)alloc page 768 (# of extent=1 used pages=1 ref pages=1)total (# of extent=93 used pages=407 ref pages=407) in this database.DBCC execution completed.If dbcc printed error message,Contact a user with System Adminstrator (SA) role.tablealloc选项tablealloc检查指定的表以确保所有页都被正确地分配。
它是checkalloc的缩小版本。
对单张表进行相同的完整性检查。
使用tablealloc可以生成三种类型的报表:full,optimized和fast。
full选项相当于表一级的checkalloc;它报告各种类型的分配错误。
optimized选项基于表的对象分配映像(OAM)页里列出的分配页生成报告。
它并不报告,也不能整理OAM页里没有列出的在分配页上没有引用的扩展(extent)。
如果没有指明类型,或使用了null,则o ptimized选项是缺省的设置。