超高度疑难问题!!sqlserver2005数据库(可疑),试了众多办法,无法恢复!!

imerak 2012-08-04 08:45:52
由于突然断电,服务器关闭了。来电后开机后,公司OA不能使用了。登录sqlserver2005客户端,发现数据库后面多了(可疑)。
从网上找了4种办法,都不行,我试过的如下:

----------------------------------
重启服务
--------------------------------------------------
日志文件丢了,建一个日志文件
--------------------------------------------------
SQL SERVER 2005 数据库状态为“可疑”的解决方法
--MyDB为修复的数据名
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE MyDB SET EMERGENCY
GO
sp_dboption 'MyDB', 'single user', 'true'
GO
DBCC CHECKDB('MyDB','REPAIR_ALLOW_DATA_LOSS')
GO
ALTER DATABASE MyDB SET ONLINE
GO
sp_configure 'allow updates', 0 reconfigure with override
GO
sp_dboption 'MyDB', 'single user', 'false'
GO
-------------------------------------------------
当数据库发生这种操作故障时,可以按如下操作步骤可解决此方法,打开数据库里的Sql 查询编辑器窗口,运行以下的命令。

  1、修改数据库为紧急模式

  ALTER DATABASE Zhangxing SET EMERGENCY

  2、使数据库变为单用户模式

  ALTER DATABASE Zhangxing SET SINGLE_USER

  3、修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。

  DBCC CheckDB (Zhangxing, REPAIR_ALLOW_DATA_LOSS)

  4、使数据库变回为多用户模式

  ALTER DATABASE Zhangxing SET MULTI_USER

  也可以这样做:

  1:重新建立一个,一样的数据库,路径名称,文件都一样。

  2:关掉SQL Server服务;

  3:把源文件COPY过来;

  4:开启SQL Server服务,这样问题同样就解决了。


这4种办法都不行。其中我用第三种试过之后数据库的可疑俩字没有了,数据库能在客户端中打开了,但是好几个表都不正常。
比如其中一个表中共有24417条数据,但是只能用select top 23405 * from t1_1 order by id查询到第23405条,如果改成23406则报错:消息 824,级别 24,状态 2,第 1 行
SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:26791,但实际为 1:8933)。在文件 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\dsc010207.mdf' 中、偏移量为 0x0000000d14e000 的位置对数据库 ID 5 中的页 (1:26791) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。


而且,该数据库在OA系统中不能访问,提示:无法打开登录所请求的数据库 "dsc010207_db"。登录失败。很奇怪!

在刚出现问题后,我在操作之前备份了mdf和ldf文件。
请问我该怎么办呢?谁能帮我弄下呢?
...全文
377 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinLiu 2012-08-05
  • 打赏
  • 举报
回复
遇到这种情况一般是用数据库恢复(如果损坏页面少的话用页面恢复),如果没有备份,可以尝试DBCC CHECK修复(可能导致数据丢失,而且数据逻辑一致性可能会有问题)。如果是LOG文件损坏才尝试用Rebuild Log(也会出现数据丢失,一致性问题,因为新建的Log是空的,只能保证结构的一致性,如果Log中有没有提交或者需要UNDO的信息,新建Log后这一部分就会丢掉了).
以学习为目的 2012-08-05
  • 打赏
  • 举报
回复
先找最近备份恢复下,如果确认是你说的那种情况,那没多少可能找回丢失的数据了。记得做一个每日备份的JOB
imerak 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
很正常的,数据库在突然断电的情况下,关机很容易出现写不一致,因为内部很多东西都是放在内存的,没来的急及时写到数据文件中,突然断电就会出现文件页与参数中的不一致,无法启动的,还有可能是文件损坏了。sql server相对好点,oracle突然断电就很悲催了,找备份,尽量恢复最近的吧
[/Quote]
可是说是没有备份。。
imerak 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
先找最近备份恢复下,如果确认是你说的那种情况,那没多少可能找回丢失的数据了。记得做一个每日备份的JOB
[/Quote]

我们经常要添加或修改数据库结构,这样以前备份的文件就用不了了。这种情况怎么办?每天都完整备份吗?
luckings 2012-08-05
  • 打赏
  • 举报
回复
很正常的,数据库在突然断电的情况下,关机很容易出现写不一致,因为内部很多东西都是放在内存的,没来的急及时写到数据文件中,突然断电就会出现文件页与参数中的不一致,无法启动的,还有可能是文件损坏了。sql server相对好点,oracle突然断电就很悲催了,找备份,尽量恢复最近的吧
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
你办法都试过以后那应该是没有什么办法了。 只能把可以用的数据倒出来。 如果你有备份的话就可以直接用页面恢复将出现错误的PAGE修复。 记住以后要备份啊。
[/Quote]
一个都没备份过。。。呜呜呜
haitao 2012-08-04
  • 打赏
  • 举报
回复
它自己检测到坏了,如果没有其他备份,是比较悲观的了

如果不是正在写的时候突然掉电,硬盘缓存基本都能及时写入的,所以mssql这种现象是比较少的了
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
它如果明确说哪些部分坏了,应该是没办法的了

只能以后加上 每晚自动备份 的功能
[/Quote]
这岂不完蛋了嘛。。
haitao 2012-08-04
  • 打赏
  • 举报
回复
它如果明确说哪些部分坏了,应该是没办法的了

只能以后加上 每晚自动备份 的功能
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
出问题之前的备份 有没有?
如果能利用旧备份单独恢复坏掉的表,也不错了
[/Quote]
没有备份了。。现在倒是有一个办法能最大限度恢复数据,但最近10天的数据也没有了。有没有办法完全恢复呢?
haitao 2012-08-04
  • 打赏
  • 举报
回复
出问题之前的备份 有没有?
如果能利用旧备份单独恢复坏掉的表,也不错了
KevinLiu 2012-08-04
  • 打赏
  • 举报
回复
你办法都试过以后那应该是没有什么办法了。 只能把可以用的数据倒出来。 如果你有备份的话就可以直接用页面恢复将出现错误的PAGE修复。 记住以后要备份啊。
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
首先备份数据库,然后用Dbcc checkdb 命名,其中有repair模式,你试试修复看看.
[/Quote]

你说的跟网上的一样吧,这命令我也试过了,运行完了就丢了10天的数据。而且数据库还不正常。
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
把能查询出的数据备案先。。节哀,呵
[/Quote]
真的不行了吗?
imerak 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
它自己检测到坏了,如果没有其他备份,是比较悲观的了

如果不是正在写的时候突然掉电,硬盘缓存基本都能及时写入的,所以mssql这种现象是比较少的了
[/Quote]
光让我赶上这种问题。之前也停电过,都没事啊。
zhazhuzhao 2012-08-04
  • 打赏
  • 举报
回复
首先备份数据库,然后用Dbcc checkdb 命名,其中有repair模式,你试试修复看看.
Q315054403 2012-08-04
  • 打赏
  • 举报
回复
把能查询出的数据备案先。。节哀,呵

22,209

社区成员

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

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