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 (表名,’’) 修复此表所有的索引。
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 命令可以产⽣表格格式的输出(使⽤ WITH TABLERESULTS 选项)。
REPAIR_ALLOW_DATA_LOSS 修复sql mdf

寒山sql数据库修复中心/MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令。
1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL 查询分析器中执行以下SQL 进行数据库的修复,修复数据库存在的一致性错误与分配错误。
use master declare @databasename varchar(255) set @databasename='需要修复的数据库实体的名称' exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态dbcc checkdb(@databasename,REPAIR_ALLOW_DA TA_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 (表名,’修复此表所有的索引。
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 里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。
检测修复数据库(分配错误)

检测数据库和修复数据库的方法1、(所有操作前先将数据库备份)在SQL查询分析器中执行以下语句:(注以下所用的dbname 为数据库名称,请客户手工改为自己的数据库名)use dbnamedbcc checkdb2、查看查询结果,有很多红色字体显示,最后结果有这样的提示:CHECKDB 发现了x个分配错误和x 个一致性错误(在数据库'dbname' 中)。
一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复。
3、查看红色字体,并把有错误的数据库表名记录下来,或把索引损坏的表名记录下来。
4、把数据库设置为单用户模式,直接在查询分析器中执行以下语句即可:EXEC sp_dboption 'dbname', 'single user', 'TRUE'5、进入查询分析器执行如下语句:(分别执行)A.use dbnamedbcc checkdb ('dbname',REPAIR_REBUILD)----------------修复数据库索引B.use dbnamedbcc checkdb('dbname',repair_allow_data_loss)-------修复数据库-----注意:这里的A、B可以先执行B后执行A,也可以先执行A,后执行B6、再执行:dbcc checkdb,检测数据库,出现结果为:CHECKDB 发现了0个分配错误和0个一致性错误(在数据库'dbname' 中)。
数据库已经修复完毕。
7、取消单用户模式,即直接在查询分析器中执行以下语句即可:EXEC sp_dboption 'dbname', 'single user','FALSE'现在可以正常使用了!8、再用语句use dbnamedbcc checkdb检查还是有问题(如:POS_t_daysum 还有问题)可以执行下面操作1.2.在这里点击编辑3.点机编辑SQL(E)4.点击执行(E)执行成功后,再使用use dbnamedbcc checkdb执行后看是否还有分配错误和一致性错误到这里应该是可以了的。
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数据库是否损坏的语句

一、检查数据库完整性的重要性在数据库管理中,数据库的完整性是非常重要的。
如果数据库损坏或不完整,可能会导致数据丢失或系统崩溃。
定期检查数据库的完整性是保证数据安全和系统稳定性的关键步骤。
二、检查数据库完整性的方法1. 使用DBCC CHECKDB命令DBCC CHECKDB是SQL Server提供的一个用于检查数据库完整性的命令。
它可以检查数据库中所有对象的完整性,包括表、索引、视图等。
可以通过以下语句来运行DBCC CHECKDB命令:DBCC CHECKDB ('database_name');2. 使用DBCC CHECKTABLE命令DBCC CHECKTABLE命令可以用来检查数据库中特定表的完整性。
可以通过以下语句来运行DBCC CHECKTABLE命令:DBCC CHECKTABLE ('table_name');3. 使用DBCC CHECKFILEGROUP命令DBCC CHECKFILEGROUP命令可以用来检查文件组的完整性。
可以通过以下语句来运行DBCC CHECKFILEGROUP命令:DBCC CHECKFILEGROUP ('filegroup_name');4. 使用DBCC CHECKALLOC命令DBCC CHECKALLOC命令可以用来检查分配给数据库对象的存储空间的完整性。
可以通过以下语句来运行DBCC CHECKALLOC命令:DBCC CHECKALLOC;三、检查数据库完整性的注意事项1. 在进行完整性检查之前,应该备份数据库以防止任何意外发生。
2. 在生产环境中进行完整性检查时,应该避免对数据库进行写操作,以免影响正在运行的业务。
3. 对于大型数据库,完整性检查可能需要较长的时间,应该安排在系统负载较低的时段进行。
四、检查数据库完整性的建议1. 定期检查数据库完整性,例如每周或每月进行一次完整性检查。
sqlserver数据库修复语句

sqlserver数据库修复语句
嘿,朋友们!咱今天就来讲讲 SQL Server 数据库修复语句那些事儿。
你知道吗,这数据库就好比是一个大宝藏,有时候可能会出点小毛病,这时候就得靠修复语句来拯救啦!比如说,当数据库出现一些奇怪的
错误提示,就好像一个人突然生病了一样,得赶紧想办法治好呀!
“DBCC CHECKDB”,这可是个厉害的家伙呢!就像医生手里的听
诊器,能帮我们找出数据库的问题所在。
比如说,“DBCC CHECKDB (your_database_name)”,这就像是在对数据库进行一次全面的体检。
还有“ALTER DATABASE SET SINGLE_USER”,这就像是给数据
库这个大房间上了一把锁,让其他人暂时不能进来,我们好专心地给
它疗伤呀!然后再进行修复操作。
哎呀呀,这修复语句可真是太重要啦!想象一下,如果没有这些语句,那我们的数据库出了问题可咋办呀?就像人病了没有药一样难受呢!我们得好好掌握这些语句,就像战士握紧手中的武器一样,随时
准备应对数据库的各种状况。
总之,SQL Server 数据库修复语句就是我们的得力助手,能让我们
的数据库一直健康地运行下去。
所以呀,一定要认真学习和运用这些
语句哦!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
exec 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' 中)。
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。