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 附加数据库时出现错误,提示版本相关信息不对怎么办、我在附加数据库时出现这样的问题,是什么原因等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)