sql 2000 数据库附加失败 提示823

sql 2000 数据库附加失败 提示823,第1张

sqlserver附加数据错误823的解决方案2008-10-13 15:06sqlserver附加数据库错误823的解决方案一、SQL-Server附加数据库时失败。

1、异常情况:服务器在正常运行的情况下突然断电,导致数据库文件损坏,具体表现是:数据库名后面有“(置疑)”字样。

2、异常分析:关于823错误的 SQL-SERVER 中的帮助:

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

错误 823

严重级别 24

消息正文

在文件 "%4!" 的偏移量 %3! 处的 %2! 过程中,检测到 I/O 错误 %1!。

解释

Microsoft SQL Server 在对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘问题。但是,错误日志中在错误 823 之前记录的其它核心消息应指出涉及了哪个设备。

3、解决办法:

在SQL-Server企业管理器中,新建同名数据库(这里假设为Test)后,停止数据库,把损坏的数据库文件Datamdf和Test_logLDF覆盖刚才新建数据库目录下的Datamdf和Test_logLDF,同时删除Test_logLDF文件;启动数据库服务,发现数据库名Test后面有“置疑”字样。不要紧,打开SQL自带查询分析器,分别执行如下SQL语句:

第一、

exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE / 打开修改系统表的开关 /

第二、

update sysdatabases set status=32768 where name='数据库名' / 设置数据库状态 /

第三、

DBCC REBUILD_LOG ('数据库名','D:\database\Test_LogLDF') / 重建LDF文件 /

第四、

update sysdatabases set status=0 where name='数据库名' / 重置数据库状态 /

第五、

restore database 数据库名 WITH RECOVERY / 恢复数据库 /

第六、

exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE / 关闭打开修改系统表的开关 /

按照此方法 *** 作,应该能修复数据库正常访问了。如果问题依然存在,最笨的一个方法就是新建另一个数据库,把原数据库(Test)各个表的数据导出到新建数据库表中。

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

补充说明:用上面的六步把数据库置疑的问题解决了,但是数据库表里还有损坏的表(inf_gdscode),把坏表导出的时候也不成功。最后在查询分析器里运行:

USE nmgbt_hcxuexipos (数据库名)

GO

DBCC CHECKTABLE ('inf_gdscode',REPAIR_ALLOW_DATA_LOSS)

GO

建议你试试:

1、进入企业管理器中,将现有的数据库删除(若重要则先备份哦!),再创建一相同名字的数据库,但要在“选项”中的“兼容级别”选择“SQL

Server

2005”。

2、然后进行还原数据库时,在“选项”中勾上“覆盖现有数据库”。

应该是数据文件或日志文件损坏了。

方案一:设置数据库为紧急模式

暂停SQL Server服务;

把应用数据库的数据文件XXX_Datamdf移走;

启动SQL服务;

重新建立一个同名的数据库XXX;

停SQL服务;

把原来的数据文件再覆盖回来;

运行以下语句,把该数据库设置为紧急模式;

运行

Use Master

Go

sp_configure 'allow updates', 1

reconfigure with override

Go”

执行结果:

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

已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

接着运行“update sysdatabases set status = 32768 where name = 'XXX'”

启动SQL服务;

运行以下语句,把应用数据库设置为Single User模式;

运行“sp_dboption 'XXX', 'single user', 'true'”

执行结果:

命令已成功完成。

DBCC CHECKDB;

运行“DBCC CHECKDB('XXX')”

运行以下语句把系统表的修改选项关掉;

运行“sp_resetstatus "XXX"

go

sp_configure 'allow updates', 0

reconfigure with override

重新建立另外一个数据库XXXLost;

第一步:先建立一个同名数据库,停止SQL SERVER2005,将原来的mdf数据库文件覆盖刚新建的mdf数据库文件,重新启动数据库

第二步:查询分析器执行,

1

2

3

4

5

6

7

alter database NEWDBNAME set emergency

declare @databasename varchar(255)

set @databasename='NEWDBNAME'

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'

第三步:以上代码请同时运行,可能会出现“数据库其他多个文件与数据库主文件不匹配”错误,请多次重试执行以上代码 。

麻烦了,很多DBA不太清楚,数据库的日志装的其实是真正的数据(归档前改变的数据),所以日志文件也是非常重要的。

至于有些数据库的日志文件过大,主要是DBA没有正确的对数据库进行调优设置造成的。

下面的方法也许对你是有用的。

0备份数据文件'xxzx_discuz_LogMDF'

1新建一个同名的数据库'xxzx_discuz'

2再停掉sqlserver服务(注意不要分离数据库)

3用原数据库的数据文件'xxzx_discuz_LogMDF' 覆盖掉新建的数据库

4再重启sqlserver服务

5此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6完成后一般就可以访问数据库中的数据了。这时,数据库本身一般还有问题,解决办法是:利用数据库的脚本创建一个新的数据库,然后通过DTS将数据导进去就行了

SQL代码

use master

go

sp_configure 'allow updates',1 reconfigure with override

go

update sysdatabases set status =32768 where name='置疑的数据库名'

go

sp_dboption '置疑的数据库名', 'single user', 'true'

go

dbcc checkdb('置疑的数据库名')

go

update sysdatabases set status =28 where name='置疑的数据库名'

go

sp_configure 'allow updates', 0 reconfigure with override

go

sp_dboption '置疑的数据库名', 'single user', 'false'

go

特别注意最后一步中的说明“这时,数据库本身一般还有问题,解决办法是:利用数据库的脚本创建一个新的数据库,然后通过DTS将数据导进去就行

以上就是关于sql 2000 数据库附加失败 提示823全部的内容,包括:sql 2000 数据库附加失败 提示823、Sql Server 2008 附加数据库时出现错误,提示版本相关信息不对怎么办、我在附加数据库时出现这样的问题,是什么原因等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9291711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存