服务器消息823 级别24,请教 服务器: 消息 823,级别 24,状态 2,行 1 连接中的错误...

#5

也可能是数据库有问题,参考以下:

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)来修复。

另外一种情况是在进行检测时,提示无法建立数据连接,此时表明,数据库已损坏。

对于这种情况,我们可采取如下措施来尝试修复。

(1)在SQL Enterprise中新建一数据库(如数据库名为test)

(2)停止SQL Server Service Manager,并将客户数据库的MDF文件更名为test _data.mdf(即新建数据库的主文件名)

(3)用更名后的文件覆盖新建数据库同名文件,接着,启动SQL Server Service Manager

(4)对Master数据库将系统表设置为可更改状态

Use Master

go

sp_configure 'allow updates', 1

go

reconfigure with override

go

--将数据库设为紧急状态:

update sysdatabases set status = 32768 where name = ' database '

--停止并重新启动SQL Server Service Manager,并重建Log文件:

dbcc traceon (3604)

go

dbcc rebuild_log ('test','test_log.ldf')

go

--将数据库设置为单用户模式,然后进行检测:

sp_dboption 'test', 'single user', 'true'

go

dbcc checkdb('test')

go

此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作:

dbcc dbreindex(tablename)

go

如执行以上操作仍然不能解决,若索引破坏的表是临时表或不是关键表,则可从新建账套中引入,若是主表,则可能通过近期的备份来(部份)恢复。若没有一个备份,则无法修复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值