Sql Server实用操作-数据库一致性检测工具(DBCC)
- 格式:doc
- 大小:42.50 KB
- 文档页数:6
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错误校验和不正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 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语句之前,务必进行适当的准备工作,如备份数据库和查看相关文档。
此外,建议在以生产环境中使用此命令之前,在测试环境中先进行测试以避免意外情况的发生。
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数据库修复语句,帮助大家解决数据库问题。
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 磁盘路径```这种方法可以将数据库还原到一个较为稳定的状态,但需要注意备份和还原的时机,避免数据丢失。
一、了解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:收缩指定数据库中的数据文件大小。
在危急时刻,数据库一致性检测(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 是 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 可以更好地了解数据库的健康状况,并采取适当的措施来维护其完整性和性能。
在危急时刻,数据库一致性检测(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选项是缺省的设置。