DBCC-CHECKDB用法-手工修复数据库

合集下载

DBCC CHECKDB 数据库或表修复

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 (表名,’’) 修复此表所有的索引。

用友U8帐套引入报错

用友U8帐套引入报错

数据库CHECKDB 发现了x个分配错误和x 个一致性错误(在数据库'pos' 中)的处理方法.数据库有错误时的修复方法如下:--1、在SQL查询分析器中执行以下语句:(注以下所用的POS为数据库名称,请用户手工改为自己的数据库名)use posdbcc checkdb--2、查看查询结果,有很多红色字体显示,最后结果有这样的提示:--CHECKDB --发现了x个分配错误和x 个一致性错误(在数据库'pos' 中)。

--一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复。

--3、查看红色字体,并把有错误的数据库表名记录下来,或把索引损坏的表名记录下来。

--4、把数据库设置为单用户模式,直接在查询分析器中执行以下语句即可:(如发现语句运行不成功,请把用户的电脑注销一下,后再重新运行一下。

)EXEC sp_dboption 'pos', 'single user', 'TRUE'--5、进入查询分析器执行如下语句:use posdbcc checkdb('pos',repair_allow_data_loss)-------修复数据库dbcc checkdb ('pos',REPAIR_REBUILD) -------修复数据库索引--6、再执行:dbcc checkdb,检测数据库,出现结果为:--CHECKDB 发现了0个分配错误和0个一致性错误(在数据库'pos' 中)。

--数据库已经修复完毕。

--7、取消单用户模式,即直接在查询分析器中执行以下语句即可:EXEC sp_dboption 'pos', 'single user','FALSE'。

修复数据库可疑模式

修复数据库可疑模式
1、修改数据库为紧急模式
ALTER DATABASE jd13dafa SET EMERGENCY
2、使数据库变为单用户模式
ALTER DATABASE jd13dafa SET SINGLE_USER
3、修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。
DBCC CheckDB (jd13dafa , REPAIR_ALLOW_DATA_LOSS) Biblioteka 4、使数据库变回为多用户模式
ALTER DATABASE jd13dafa SET MULTI_USER
5、开始->运行->输入cmd->打开DOS命令窗口,输入以下命令重启数据库服务(此处可以直接到服务列表里,重新启动数据库服务,为了方便我直接用DOS命令了)
Net stop mssqlserver --停止服务
Net start mssqlserver --启动服务

dbcc语句

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
检查表的完整性
检查索引完整性
检查触发器状态

DBCC CHECKDB 物理一致性SQL修复

DBCC CHECKDB 物理一致性SQL修复

寒山sql数据库修复中心/由于种种原因,我们如果当时仅仅备份了mdf 文件,那么恢复起来就是一件很麻烦的事情了。

如果您的mdf 文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db 或者sp_attach_single_file_db 可以恢复数据库,但是会出现类似下面的提示信息设备激活错误。

物理文件名'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。

已创建名为'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。

但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。

你也许会得到类似下面的错误信息服务器: 消息1813,级别16,状态2,行 1 未能打开新数据库'test'。

CREATE DATABASE 将终止。

设备激活错误。

物理文件名'd:\test_log.LDF' 可能有误。

怎么办呢?别着急,下面我们举例说明恢复办法。

A.我们使用默认方式建立一个供恢复使用的数据库(如test)。

可以在SQL Server Enterprise Manager 里面建立。

B.停掉数据库服务器。

C.将刚才生成的数据库的日志文件test_log.ldf 删除,用要恢复的数据库mdf 文件覆盖刚才生成的数据库数据文件test_data.mdf。

D.启动数据库服务器。

此时会看到数据库test 的状态为“置疑”。

这时候不能对此数据库进行任何操作。

E.设置数据库允许直接操作系统表。

此操作可以在SQL Server Enterprise Manager 里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。

DBCC_CHECKDB用法_手工修复数据库

DBCC_CHECKDB用法_手工修复数据库

DBCC CHECKDB用法手工修复数据库快速修复DBCC CHECKDB ('数据库名', REPAIR_FAST)重建索引并修复DBCC CHECKDB ('数据库名', REPAIR_REBUILD)如果必要允许丢失数据修复DBCC CHECKDB ('数据库名'', REPAIR_ALLOW_DATA_LOSS)如果出现错误:未处理修复语句。

数据库需处于单用户模式下。

可以先启用单用户模式,方法如下执行存储过程:Use mastergosp_dboption 数据库名, single, trueexec sp_dboption Database 'single user','fales'--多用户模式--更改成单用户alter database ams2 set single_user with rollback immedi ate--还原数据库为多用户模式alter database ams2 set multi_user with rollback immediate############################################################ ############################################################手工修复数据库试例操作步骤:----------------------------------------------------------------------------------------------进入SQL查询分析器,执行语句:--检查数据库完整性dbcc checkdb('ams1')执行结果:---------------------------------------------------------------CHECKDB 发现了0 个分配错误和11 个一致性错误(在数据库'ams1' 中)。

DBCC用法

DBCC用法

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 命令可以产生表格格式的输出(使用WITHTABLERESULTS 选项)。

MSSQL数据库损坏的修复命令DBCC简介

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检查指定数据库中的系统表内及系统表间的一致性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DBCC CHECKDB用法手工修复数据库
快速修复
DBCC CHECKDB ('数据库名', REPAIR_FAST)
重建索引并修复
DBCC CHECKDB ('数据库名', REPAIR_REBUILD)
如果必要允许丢失数据修复
DBCC CHECKDB ('数据库名'', REPAIR_ALLOW_DATA_LOSS)
如果出现错误:未处理修复语句。

数据库需处于单用户模式下。

可以先启用单用户模式,方法如下执行存储过程:
Use master
go
sp_dboption 数据库名, single, true
--更改成单用户
alter database ams2 set single_user with rollback immedi ate
--还原数据库为多用户模式
alter database ams2 set multi_user with rollback immediate
############################################################ ############################################################
手工修复数据库试例
操作步骤:
----------------------------------------------------------------------------------------------
进入SQL查询分析器,执行语句:
--检查数据库完整性
dbcc checkdb('ams1')
执行结果:
---------------------------------------------------------------
CHECKDB 发现了0 个分配错误和11 个一致性错误(在数据库'ams1' 中)。

repair_allow_data_loss 是最低的修复级别(对于由DBCC CHECKDB (ams1 ) 发现的错误而言)。

DBCC 执行完毕。

如果DBCC 输出了错误信息,请与系统管理员联系。

说明数据库确实有问题,11个错误,找到错误地方:
-------------------------------------------------------------------------------
对象'Tb_Archives_File_1' 有3777 行,这些行位于172 页中。

CHECKDB 发现了0 个分配错误和2 个一致性错误(在表
'Tb_Archives_File_1' 中,该表的对象ID 为907150277)。

表明'Tb_Archives_File_1' 表确实有2个错误,难怪一查询就要死机,于是运行语句进行表修复:
-------------------------------------------------------------------------------------- --以repair_allow_data_loss级别修复表
dbcc checktable('Tb_Archives_File_1',repair_allow_data_loss) go
执行结果:
服务器: 消息7919,级别16,状态3,行2
未处理修复语句。

数据库需要处于单用户模式下。

DBCC 执行完毕。

如果DBCC 输出了错误信息,请与系统管理员联系。

---------------------------------------------------------------------------------------------------
需要将数据库改为"单用户模式",于是再执行:
--更改成单用户
alter database ams2 set single_user with rollback immedi ate
go
--已repair_allow_data_loss级别修复表
dbcc checktable('Tb_Archives_File_1',repair_allow_data_loss) go
--若还有问题,修复索引表
DBCC DBREINDEX('Tb_Archives_File_1')
--再修复表
DBCC CHECKTABLE('Tb_Archives_File_1')
直到返回的结果没有错误!
--查询是否正常
select * from Tb_Archives_File_1
再查询那张错误表,不报错,也不死机了,数据也完好无损.....哈哈....
--还原数据库为多用户模式
alter database ams2 set multi_user with rollback immediate。

相关文档
最新文档