数据库发生附加错误,怎样修复?

BenyMo 2014-03-23 11:39:27


按照网上的方法
1.新建一个同名的数据库
2.再停掉sql server(注意不要分离数据库)
3.用原数据库的数据文件覆盖掉这个新建的数据库
4.再重启sql server
5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
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', 'true'
Go
----------------------------------------------
执行后,数据库会显示 数据库名(单个用户),重启电脑后数据库又不行了。
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2014-03-24
  • 打赏
  • 举报
回复
一个很重要的步骤你没有操作,重建日志! 先分离数据库   企业管理器--右键cyls1的数据库--所有任务--分离数据库   然后备份你的cyls1数据库的文件,再按下面的步骤处理:   1.新建一个同名的数据库   2.再停掉sql server   3.用cyls1数据库的文件覆盖掉这个新建的同名数据库   4.再重启sql server   5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)    USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑数据库' Go --此时需要重建日志 dbcc rebuild_log('cyls1','d:\cyls1.ldf') --日志文件路径自己根据需要修改 --执行重建日志时,如果在指定路径已存在cyls1.ldf,会报错,先删掉那个cyls1.ldf,再执行重建日志的语句 update sysdatabases set status =28 where name='置疑数据库' Go sp_configure 'allow updates', 0 reconfigure with override Go 上面的执行完成后,需要对数据进行检查和修复,执行下面的脚本,直到没有错误为止,如果有某个表总是报同样的错误,需要单独处理这个表的数据 exec sp_dboption 'cyls1', N'single', N'true' --将目标数据库置为单用户状态 dbcc checkdb('cyls1',REPAIR_ALLOW_DATA_LOSS) dbcc checkdb('cyls1',REPAIR_REBUILD) exec sp_dboption 'cyls1', N'single', N'false'--将目标数据库置为多用户状态 如果总是结果是同样的表有错误,应该针对表做dbcc checktable
KeepSayingNo 2014-03-24
  • 打赏
  • 举报
回复
有可能是日志的问题,我曾经还原或者附加数据库的时候就因为日志文件被损坏导致还原或者附加不成功,然后让现场把数据库再备份一遍以后才可以了。
Cideason 2014-03-23
  • 打赏
  • 举报
回复
有可能 建的 原文件名与之前的原文件名不对应 或 文件本身已经存在损坏。
BenyMo 2014-03-23
  • 打赏
  • 举报
回复
唐诗三百首 2014-03-23
  • 打赏
  • 举报
回复
步骤5,执行的SQL语句改为如下,看能否读取其中的数据,若能则手工转移数据到新库中..

use master
go

alter database [置疑的数据库名] set emergency  --> 将数据库设为紧急状态.
LongRui888 2014-03-23
  • 打赏
  • 举报
回复
引用 4 楼 BenyMo 的回复:
现在也是这情况,如果这样手工导出,再导入,就工作量大了
在sql server 2008中,有一个导出脚本的功能,可以导出脚本,和数据的,不知道2000上有没有
BenyMo 2014-03-23
  • 打赏
  • 举报
回复
现在也是这情况,如果这样手工导出,再导入,就工作量大了
LongRui888 2014-03-23
  • 打赏
  • 举报
回复
你恢复后,别重启,直接把数据都导出来把。 之前帮一个网友看了一个问题,就是能恢复,但是只要一设置状态为online,就又不行了。 最后,把表定义,还有数据,全部导出来了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧