SQL Server 版的牛人快来帮我看看!

comrdliyang 2011-07-04 08:05:48
我的数据库文件MDF,初步认为已损坏,出现问题之服务器突然关机,当打开Sql server企业管理时,看到数据已变灰,且有置疑字样,在网上找了各种方法都于事无补!错误表现为:
用网上众多人介绍的方法,执行到以下代码报错:
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test_Log.LDF')

-------------------------------------------------------------------------------
服务器: 消息 946,级别 14,状态 1,行 1
无法打开数据库 'test'(版本 0)。请将该数据库升级为最新版本。


之后就一筹莫展了,不知如何是好。

test_data.MDF文件刚开始是无法复制到别的地方的,后来进行一次磁盘扫描修复才可以复制。所以就怀疑是不是MDF文件损坏了。




...全文
227 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
mibbadman 2011-07-05
  • 打赏
  • 举报
回复
comrdliyang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qianjin036a 的回复:]

我觉得,既然达思软件能读出数据,那MSSQL也应该能读得出,你可以考虑再用DBCC检查索引试试.
[/Quote]
请问能具体一点吗?急!Boss 给脸色看了!如果用用DBCC检查索引???
comrdliyang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 public0011 的回复:]

可以考虑一下数据恢复了...其实数据恢复没有那么难..用一个简单的软件在计算机售后服务就能挣大钱...
杏雨梨云U盘系统2011 SP1104 自带的一个数据恢复软件..是个绿色版本的..你把pe系统做到优盘里..启动时从优盘启动...点击里面的数据恢复软件...后缀名写.mdf 就算你格式化的硬盘都能找到里面的数据..低格也能找到...不过找出来的文件有的有一小部分是打不开的状态...……
[/Quote]
谢谢你!
大力水手 2011-07-05
  • 打赏
  • 举报
回复
可以考虑一下数据恢复了...其实数据恢复没有那么难..用一个简单的软件在计算机售后服务就能挣大钱...
杏雨梨云U盘系统2011 SP1104 自带的一个数据恢复软件..是个绿色版本的..你把pe系统做到优盘里..启动时从优盘启动...点击里面的数据恢复软件...后缀名写.mdf 就算你格式化的硬盘都能找到里面的数据..低格也能找到...不过找出来的文件有的有一小部分是打不开的状态....我以前在笔记本售后做系统...祝你好运...恢复回来之后..记得替我骂你老板一句...我日他妹...硬盘坏了还怪我...让他买固态硬盘
comrdliyang 2011-07-05
  • 打赏
  • 举报
回复
有MDF和ldf文件,用log Explorer可以起什么作用吗??
comrdliyang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qianjin036a 的回复:]

引用 15 楼 comrdliyang 的回复:
引用 13 楼 qianjin036a 的回复:

我觉得,既然达思软件能读出数据,那MSSQL也应该能读得出,你可以考虑再用DBCC检查索引试试.

请问能具体一点吗?急!Boss 给脸色看了!如果用用DBCC检查索引???

BOSS 凭什么给脸色!
磁盘坏了,又不是你弄坏的!
[/Quote]

有什么办法可以取出MDF文件的数据吗?
-晴天 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 comrdliyang 的回复:]
引用 13 楼 qianjin036a 的回复:

我觉得,既然达思软件能读出数据,那MSSQL也应该能读得出,你可以考虑再用DBCC检查索引试试.

请问能具体一点吗?急!Boss 给脸色看了!如果用用DBCC检查索引???
[/Quote]
BOSS 凭什么给脸色!
磁盘坏了,又不是你弄坏的!
--小F-- 2011-07-04
  • 打赏
  • 举报
回复
只有mdf文件的恢复技术 

  由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。

  如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息

  设备激活错误。物理文件名 ’C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF’ 可能有误。

  已创建名为 ’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF’ 的新日志文件。

  但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息

服务器: 消息 1813,级别 16,状态 2,行 1

  未能打开新数据库 ’test’。CREATE DATABASE 将终止。

  设备激活错误。物理文件名 ’d:\test_log.LDF’ 可能有误。

  应该怎么办呢?下面我们举例说明恢复办法。

  A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server EntERPrise Manager里面建立。

  B.停掉数据库服务器。

  C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。

  D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。

  E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。


  use master
  go
  sp_configure ’allow updates’,1
  go
  reconfigure with override
  go


  F.设置test为紧急修复模式

  update sysdatabases set status=-32768 where dbid=DB_ID(’test’)

  此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表

  G.下面执行真正的恢复操作,重建数据库日志文件

  dbcc rebuild_log(’test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)

  执行过程中,如果遇到下列提示信息:

  服务器: 消息 5030,级别 16,状态 1,行 1

  未能排它地锁定数据库以执行该操作。

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

  说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

  正确执行完成的提示应该类似于:
告: 数据库 ’test’ 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。

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

  此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

  H.验证数据库一致性(可省略)

  dbcc checkdb(’test’)

  一般执行结果如下:

  CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 ’test’ 中)。

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

  I.设置数据库为正常状态

  sp_dboption ’test’,’dbo use only’,’false’

  假如没有出错,现在你就可以正常的使用恢复后的数据库啦。

  J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成


  sp_configure ’allow updates’,0
  go
  reconfigure with override
  go
-晴天 2011-07-04
  • 打赏
  • 举报
回复
我觉得,既然达思软件能读出数据,那MSSQL也应该能读得出,你可以考虑再用DBCC检查索引试试.
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
现在只想用什么工具读数据出来就行了,不敢想顺利地附加到sql server管理器上了,在网上找到一个收费的读MDF文件的工具(D-Recvoery(For MS SQL Server))是可以读到数据表、存储过程和视图的,但太贵了,吃不消,除这个之外还有什么工具或方法读mdf文件吗??
-晴天 2011-07-04
  • 打赏
  • 举报
回复
磁盘介质有问题时,数据修复软件试着多次读取坏磁道,然后把读出来的东西比较,得到最近似的,写到好磁道上,但不能保证文件与原文件完全一致.
以前用软盘,经常会干这种事情,在软驱吱吱的声音中度过了多少个不眠之夜......
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cd731107 的回复:]

SQL code
先启动到安全模式下试着备份,再按下面的操作
--先备份一下要修复的数据库,再执行下面的操作(此方法曾修复过2000的数据库)

--把下面的数据库名blpsjxc_fzgt改成你自己的数据库名
use master
go
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
go
update sysdat……
[/Quote]

执行到:

DBCC REBUILD_LOG ('blpsjxc_fzgt','D:\Microsoft SQL Server\MSSQL\Data\blpsjxc_fzgt.LDF')
go

出现以下错误:
-------------------------------------------------------------------------------
服务器: 消息 946,级别 14,状态 1,行 1
无法打开数据库 'test'(版本 0)。请将该数据库升级为最新版本。
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qianjin036a 的回复:]

引用 3 楼 comrdliyang 的回复:
最惨的是原来还挂在sql server 上的数据库不知道怎么不见了,即连带置疑字样的数据库没有附加在sql server管理器上。

不明白...
好好的数据库,怎么会不见了呢?
[/Quote]
带着置疑字样的那种数据库,即我现在所以的有可能被损坏的MDF这个文件的数据库。只是在企业管理器上不见踪影了,物理路径上还是有的!记得用网上说的方法操作了一下,刷新就不见了!
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianjin036a 的回复:]

不停止服务,把数据库分离后,也可以复制,分离后的数据库要附加了才能运行.
把自制的数据库文件拿到其他机器上附加一下看.
[/Quote]

显示置疑字样的数据库已经试过,无法分离,照网上的方法做,说不能分离:
请看如下:(邹建)

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 ', 'false '
Go
-晴天 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 comrdliyang 的回复:]
最惨的是原来还挂在sql server 上的数据库不知道怎么不见了,即连带置疑字样的数据库没有附加在sql server管理器上。
[/Quote]
不明白...
好好的数据库,怎么会不见了呢?
cd731107 2011-07-04
  • 打赏
  • 举报
回复
先启动到安全模式下试着备份,再按下面的操作
--先备份一下要修复的数据库,再执行下面的操作(此方法曾修复过2000的数据库)

--把下面的数据库名blpsjxc_fzgt改成你自己的数据库名
use master
go
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
go
update sysdatabases set status=32768 where name='blpsjxc_fzgt'
go
DBCC REBUILD_LOG ('blpsjxc_fzgt','D:\Microsoft SQL Server\MSSQL\Data\blpsjxc_fzgt.LDF')
go
update sysdatabases set status=0 where name='blpsjxc_fzgt'
go
restore database blpsjxc_fzgt WITH RECOVERY
go
exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
-晴天 2011-07-04
  • 打赏
  • 举报
回复
停掉服务,还不能拷贝数据库,这说明你的磁盘介质有问题.
经过磁盘扫描修复,操作系统已经将你的数据库文件在好的磁道上重写了一下,但不能保证所有的字节都读自原来的文件.
所以,你的数据库文件貌似已经损坏.或许得让了解数据库文件结构的专业数据恢复公司帮忙了.
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qianjin036a 的回复:]

关键是你的那次"磁盘扫描修复"!
数据库文件不是不可以复制,先将数据库服务停止,就能复制了.
现在,已经说不清你对数据库文件做了些什么,有备份吗?
[/Quote]

惨就惨在没备份,我停了N次数据库了,反复操作好多遍才去磁盘扫描的!正常在说停掉服务就可以随便拷数据库文件了,但我这个不行。
comrdliyang 2011-07-04
  • 打赏
  • 举报
回复
最惨的是原来还挂在sql server 上的数据库不知道怎么不见了,即连带置疑字样的数据库没有附加在sql server管理器上。
-晴天 2011-07-04
  • 打赏
  • 举报
回复
不停止服务,把数据库分离后,也可以复制,分离后的数据库要附加了才能运行.
把自制的数据库文件拿到其他机器上附加一下看.
加载更多回复(1)

22,210

社区成员

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

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