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

===================================

SQL SERVER数据库的检测及修复方法 
随着K/3产品的推广,要求客户服务人员对SQL SERVER数据库的了解也进一步提高。在K/3的使用过程中,数据库文件被频繁地使用,由于某些原因,数据库有可能被损坏,本文将针对这种情况的数据库检测及修复方法做一简单讲解。希望各位在实际工作过程中有新的发现时,及时给我们提供信息,以便做进一步的更新。 
1.1 SQL SERVER数据库的检测 
SQL SERVER提供了数据库检测的命令,可用DBCC CHECKDB对数据库中各个对象的分配及结构的正确性进行检测,并可通过一参数控制,将所有的错误信息显示出来。其语法如下: 
DBCC CHECKDB 
('database_name' [,NOINDEX | { REPAIR_ALLOW_DATA_LOSS 
| REPAIR_FAST 
| REPAIR_REBUILD 
}] 
) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}] 
参数说明: 
'database_name'代表被检测的数据库实体名; 
NOINDEX指非系统表的非聚族索引不检测; 
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST| REPAIR_REBUILD 指直接修复发现的错误,其中REPAIR_ALLOW_DATA_LOSS代表,若此错误不能修复时,系统将直接删除相关数据。带此三个参数的任一个时,数据库必须处于单用户模式,可在Enterprise Manager中的数据库属性中设置; 
ALL_ERRORMSGS代表将检测到的错误信息全部显示出来,否则,对于每张表最多只显示200条错误信息; 
NO_INFOMSGS代表隐藏所有的信息及占用空间的报告。 
经过检测,对于错误的对象,将以OBJECT ID的形式报告具体出错的信息,可根据OBJECT ID到系统表sysobjects中查找到相关的表,即NAME。

1.2 SQL SERVER问题数据库的修复 
经过数据库检测后,可针对出现的问题采取相应的措施进行处理。如通过检测后,发现对象的物理存放存在问题,可用DBCC CHECKALLOC来进行修复: 
DBCC CHECKALLOC ('database_name' | REPAIR_REBUILD }] ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}] 
若是非系统对象的索引出错,则可用DBCC DBREINDEX进行修复: 
DBCC DBREINDEX ( [ 'database.owner.table_name' [, index_name [, fillfactor ] ] ] ) [WITH NO_INFOMSGS] 
以上两种情况,也可直接使用DBCC CHECKDB(‘db_name’,repair_rebuild)来修复。 
另外一种情况是在进行检测时,提示无法建立数据连接,此时表明,数据库已损坏。对于这种情况,我们可采取如下措施来尝试修复。 
首先,在SQL Enterprise中新建一数据库(如数据库名为test),建好数据库后,停止SQL Server Service Manager,并将客户数据库的MDF文件更名为test _data.mdf(即新建数据库的主文件名),然后用更名后的文件覆盖新建数据库同名文件,接着,启动SQL Server Service Manager。对Master数据库将系统表设置为可更改状态 
Use Master 
Go 
sp_configure 'allow updates', 1 
reconfigure with override 
Go 
将数据库设为紧急状态: 
update sysdatabases set status = 32768 where database ' 
停止并重新启动SQL Server Service Manager,并重建Log文件: 
DBCC TRACEON (3604) 
DBCC REBUILD_LOG(' test ','test _log_ldf') 
将数据库设置为单用户模式,然后进行检测: 
sp_dboption ' test ', 'single user', 'true' 
DBCC CHECKDB(' test ') 
Go 
此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作: 
DBCC DBREINDEX(表名) 
如执行以上操作仍然不能解决,若索引破坏的表是临时表或不是关键表,则可从新建账套中引入,若是主表,则可能通过近期的备份来(部份)恢复。若没有一个备份,则无法修复。

1.3 SQL Server数据库为什么易损坏呢? 
以下是微软提供的一些可能引起数据库损坏的原因及一些预防措施: 
操作问题,包括冷起动机器、热拔硬盘、删除一些数据库文件; 
硬件问题,包括磁盘控制器的问题; 
操作系统问题,包括与系统相关的一些致命错误。

1.4 预防措施: 
1、定期/不定期执行CHKDSK(不带参数),以检测硬盘物理结构并修复一些CHKDSK报告的问题; 
2、常备份数据。

1.5 应用数据库修复举例 
declare @databasename varchar(255) 
set @databasename='AIS20021224170730'------一定要手工输入 
---------执行一般性修复还存在问题时,进行允许数据丢失的修复 
---------许数据丢失的修复要求在单用户下进行,此时请退出中间层,客户端,sql的其他模块 
---所有功能退出,在查询分析器master里设置数据库为单用户

exec sp_dboption @databasename, N'single', N'true'

-----在查询分析器master里,进行修复数据库 
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 
dbcc checkdb(@databasename,REPAIR_REBUILD) 
------还原数据库状态 
exec sp_dboption @databasename, N'single', N'false'

第2章数据库日志损坏的修复 
请遵照如下步骤来试图重建数据库事务日志.

注意: 由于事务日志丢失, 数据库可能有没有提交的数据.

注:都要替换成真实的数据库名字

2.1 步骤1:

创建一个新的数据库,命名为原来数据库的名字.

2.2步骤2:

停止SQL Server

2.3步骤3:

把老数据库的MDF文件替换新数据库的相应的MDF文件, 并把LDF文件删除

2.4步骤4:

重新启动SQL Server 服务,然后运行如下命令:

Use Master

Go

sp_configure 'allow updates', 1

reconfigure with override

Go

begin tran

update sysdatabases set status = 32768 where db_name'

-- Verify one row is updated before committing

commit tran

2.5步骤5:

停止SQL然后重新启动SQL Server 服务,然后运行如下命令:

DBCC TRACEON (3604)

DBCC REBUILD_LOG('db_name','c:\mssql7\data\dbxxx_3.LDF')

Go

2.6步骤6:

停止SQL然后重新启动SQL Server 服务,然后运行:

use master

update sysdatabases set status = 8 where 
Go

sp_configure 'allow updates', 0

reconfigure with override

Go

2.7步骤7: 
运行dbcc checkdb(db_name)检查数据库的完整性.

第3章 数据库质疑的一般处理 
1、执行如下SQL(打开修改系统表的开关): 
EXEC sp_configure 'allow updates', 1 
RECONFIGURE WITH OVERRIDE 
2、修改数据库Master中的表:sysdatabases 
将 status字段数值更改为4 
3、再执行如下SQL: 
EXEC sp_configure 'allow updates', 0 
RECONFIGURE WITH OVERRIDE。

DBCC CHECKDB 数据库或表修复相关推荐

  1. MS Sql Server 数据库或表修复(DBCC CHECKDB)

    MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令.  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL ...

  2. SQLSERVER 数据库或表修复(DBCC CHECKDB)

    ** SQLSERVER 数据库或表修复(DBCC CHECKDB) ** 1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复 ...

  3. extmail mysql数据库 重启_extmail数据库dspam表修复

    原因是mysql的dspam数据库中的dspam_token_data表有错误,需要使用myisamchk进行修复: # cd /var/lib/mysql/dspam # myisamchk dsp ...

  4. oracle+dbcc+checkdb,dbcc checkdb 修复数据库

    MS SQL 数据库状态为SUSPECT的处理方法 当SQL SERVER数据库状态为质疑(SUSPECT)状态时,我们可以用以下方法来处理: 1. 修改数据库为紧急模式:ALTER DATABASE ...

  5. DBCC CHECKDB用法 手工修复数据库

    快速修复 DBCC CHECKDB ('数据库名', REPAIR_FAST)      重建索引并修复 DBCC CHECKDB ('数据库名', REPAIR_REBUILD) 如果必要允许丢失数 ...

  6. dbnetlib sqlserver不存在或拒绝访问_SQL Server数据库损坏和修复

    常见错误解读 823错误 错误信息是:"在文件'%ls'中.偏移量为%#016I64x的位置执行%S_MSG期间,操作系统已经向SQL Server返回了错误%ls." " ...

  7. SQL SERVER数据库 “可能发生了架构损坏。请运行DBCC CHECKCATALOG。的错误修复

    拿到客户数据后,对数据库DBCC Checkdb修复,报"消息211,级别23,状态51,第1 行,可能发生了架构损坏.请运行DBCC CHECKCATALOG."错误. 看来用S ...

  8. SQL Server 检测到基于一致性的逻辑 I/O 错误.....请执行完整的数据库一致性检查(DBCC CHECKDB)......

    错误信息: SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0xb11dc661,但实际为: 0x395240ca).在文件 'D:\Program Files\Mi ...

  9. sqlserver实验心得体会_sqlserver 关于DBCC CHECKDB的总结

    官方文档 https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql? ...

  10. SQL Server FILESTREAM数据库损坏和修复

    This article will cover corruption and recovery scenarios in the context of SQL Server FILESTREAM in ...

最新文章

  1. Sourse Insight使用教程及常见的问题解决办法
  2. django ajax传参数
  3. 如何在Centos 7上用Logrotate管理日志文件
  4. Practice:Office2010中OneNote与outlook的协同工作
  5. Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程...
  6. 产业研发用房是什么意思_【企业】米东中小微创业产业园:筑巢引凤栖 花开蝶自来...
  7. Atitit 知识搜索 信息检索的方法总结 目录 1. 目录搜索 1 1.1. 向下同级搜索 1 1.2. 向上目录抽象搜索 1 2. hash搜索模式 1 2.1. 关键词搜索 主题搜索 1 2
  8. C++ 注册表编程(包含权限的提升)
  9. 一个人php建站_人人站CMS-简单安全的PHP开源CMS建站系统
  10. 在Chrome上安装ie tab插件
  11. Linux那些事儿 之 我是PCI(1)PCI,我们来了
  12. SAS接口完全互连指南(SATA到MINI SAS发展履历)
  13. 关于上传文件的报错问题
  14. 手把手教你玩转android应用Microsoft Remote Desktop
  15. 最详细的Android图片压缩攻略
  16. 猪八戒java开发,猪八戒--Java开发
  17. 20190401每周精品之读书
  18. 【电力系统】经济调度、最优潮流、机组组合
  19. 防火墙Deny记录实时检测
  20. 【车载以太网案例】全新100/1000BASE-T1 IOP测试解决方案

热门文章

  1. iphone尺寸_巨额罚款无法“阻挡”,iPhone 12真机现已开箱,一睹为快!|iphone|手机|包装盒...
  2. numpy flatten
  3. 深度学习框架PyTorch:入门与实践 学习(三)
  4. Hadoop中的一些基本操作
  5. Gephi绘制网络图初步探索
  6. 【POJ1958】【典型递推问题】汉诺塔问题
  7. 360 绑架浏览器首页的解决方法
  8. 工控安全| 西门子S7-300攻击分析
  9. win7 mysql 未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  10. 关于oracle的笔记