CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

sql server 数据库状态(置疑)的解决办法!邹大哥救命啊!

楼主pweixing(幸运星)2005-03-03 14:27:59 在 MS-SQL Server / 应用实例 提问

一次忽然停电,开机后,数据库文件变成灰色,无法访问。查询网上资料,重新建立一个相同名字的数据库,然后停止sql   server服务,将原来的数据库文件覆盖掉新生成的,然后重新启动sql   server服务,但是问题没有解决,现在的现象是:  
  在查询分析器中可以访问表里面的数据,使用select   *   form   table     可以读出表中的数据,但是在企业管理器中无法访问表,提示处于     suspect   状态,不可访问,也不能进行备份操作。  
  使用脚本生成的时候,也会出错,使用导出数据到一个新建库的操作也出错。  
   
  使用     SELECT   DATABASEPROPERTYEX(table',   'Status')   命令,显示为   ONLINE  
   
  使用     DBCC   CHECKDB('table',   REPAIR_ALLOW_DATA_LOSS)命令,显示为:  
  服务器:   消息   7919,级别   16,状态   2,行   1  
  未处理修复语句。数据库需要处于单用户模式下。  
  DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
   
  使用   sp_resetstatus   table   命令,显示:  
  在   sysdatabases   中更新数据库   table'   的条目之前,模式   =   0,状态   =   28(状态   suspect_bit   =   0),没有更新   sysdatabases   中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。  
   
  使用   BACKUP   DATABASE   命令备份数据,显示:  
  服务器:   消息   3033,级别   16,状态   1,行   1  
  BACKUP   DATABASE   不能用于以紧急模式打开的数据库。  
  服务器:   消息   3013,级别   16,状态   1,行   1  
  BACKUP   DATABASE   操作异常终止。  
   
  我该怎么办????请各位路过的大侠救命,请邹大哥救命啊!!!  
   
  问题点数:100、回复次数:35Top

1 楼zjcxc(邹建)回复于 2005-03-03 14:32:49 得分 10

--设置看看能否进入单用户模式  
   
  alter   database   [table]   set   single_user  
   
  DBCC   CHECKDB('table',   REPAIR_ALLOW_DATA_LOSS)Top

2 楼dxhdxh(anyduan)回复于 2005-03-03 14:35:59 得分 5

停服务器   把数据库文件copy出来   启动服务器   删除置疑数据库   然后附加数据库Top

3 楼631799(杭州工人)回复于 2005-03-03 14:38:45 得分 35

 
  .新建一个同名的数据库  
   
  2.再停掉sql   server  
   
  3.用suspect数据库的文件覆盖掉这个新建的同名数据库  
   
  4.再重启sql   server  
   
  5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)  
   
   
  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  
   
  6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用  
  数据库的脚本创建一个新的数据库,并将数据导进去就行了.  
   
   
   
  转贴:  
  问题:  
  Sql2000数据的附加时出错:  
   
  错误   3624  
  location:recovery.c:1996  
  express:curr->lon_length>0  
  spdi:51  
  process   id:768  
  最后提示附加失败  
   
  服务器:   消息   5105,级别   16,状态   4,行   1  
  设备激活错误。物理文件名   'f:\database\fdzz1204_Data.ldf'   可能有误。  
   
  解决:  
  新建一同名数据库(文件名,文件组都和原来的一样),然后停止数据库服务,用原来文件替换新建的数据库文件,启动数据库,该数据库被设未suspect  
   
  然后把数据库改成紧急模式:  
  sp_configure   'allow',   1  
  reconfigure   with   override  
  update   sysdatabases   set   status   =   32768   where   name   =   '数据库名'  
   
  把LDF文件改名,再执行  
  DBCC   REBUILD_LOG   ('数据库名',   'E:\fdzz\database\fdzz1204_Log.LDF'   )  
   
  恢复数据库紧急模式  
  update   sysdatabases   set   status   =   0   where   name   =   '数据库名'  
  执行  
  restore   database   数据库名   WITH   RECOVERY  
  sp_configure   'allow',   0  
  reconfigure   with   override  
   
  然后用DBCC   CHECKDB   ('数据库名')看看有没有错误  
   
  如果上面还是不行,试试吧数据库设为紧急模式,应该可以看到数据了,在把数据导出到一个新的数据库Top

4 楼pweixing(幸运星)回复于 2005-03-03 15:19:34 得分 0

//--设置看看能否进入单用户模式  
  alter   database   [table]   set   single_user  
  DBCC   CHECKDB('table',   REPAIR_ALLOW_DATA_LOSS)  
   
  执行前一个语句,返回消息为:  
  命令已成功完成。  
   
  执行后一个语句,返回消息为:  
  服务器:   消息   7919,级别   16,状态   2,行   1  
  未处理修复语句。数据库需要处于单用户模式下。  
  DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
   
  请邹大哥继续帮忙!!谢谢!Top

5 楼Softlee81307(孔腎)回复于 2005-03-03 16:02:47 得分 5

upTop

6 楼cemma(佩)回复于 2005-03-03 16:11:54 得分 5

MARKTop

7 楼zjcxc(邹建)回复于 2005-03-03 17:09:03 得分 10

试  
  执行第一个语句   alter   database   [table]   set   single_user  
  重新启动sql服务,再修复Top

8 楼pweixing(幸运星)回复于 2005-03-04 09:34:24 得分 0

前一个命令执行结果:  
  命令已成功完成。  
   
  重新启动sql   server服务后执行第二个命令,结果为:  
   
  服务器:   消息   8966,级别   16,状态   1,行   1  
  未能读取并闩锁页   (1:2446)(用闩锁类型   SH)。sysindexes   失败。  
  DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
   
  再使用命令   SELECT   DATABASEPROPERTYEX('table',   'Status')   ,返回结果为  
  SUSPECT  
  和昨天不一样,昨天是online,估计是因为重新启动后状态又变了!!  
  怎么办??  
   
  请邹大哥继续指导!  
   
  Top

9 楼pweixing(幸运星)回复于 2005-03-04 13:05:09 得分 0

自己顶!Top

10 楼TigerSuper(菜鸟(鸟吃菜吗?))回复于 2005-03-04 13:09:18 得分 5

UP  
  Top

11 楼huazf(huazf)回复于 2005-03-04 17:32:17 得分 0

专业提供Sql   Server   数据库修复服务  
  http://www.xunxin.cn  
  Eamil:xxkj@china.com.cn  
  Tel:0576-2454863  
  QQ:386999  
  Hotmail:huazf@hotmail.comTop

12 楼pweixing(幸运星)回复于 2005-03-04 17:57:57 得分 0

楼上的哥们,我在武汉,你来不来啊???Top

13 楼LoveLwn(小P)回复于 2005-03-04 18:08:40 得分 5

upTop

14 楼yangys(杨杨)回复于 2005-03-04 18:34:34 得分 5

顶Top

15 楼huazf(huazf)回复于 2005-03-04 23:49:59 得分 0

to   pweixing(幸运米,幸运得米!)    
  不需要到武汉,具体你可以QQ与我联系Top

16 楼pweixing(幸运星)回复于 2005-03-07 17:09:08 得分 0

自己顶!大侠快帮忙!Top

17 楼tdy1977(懂一点电脑的小唐)回复于 2005-03-07 17:24:29 得分 0

我也经常遇到某个实例置疑,一般都可以解决:先脱机,再联机。Top

18 楼skeeterLa(英俊的大米虫)回复于 2005-03-07 21:12:57 得分 5

我也遇到过   不知怎么弄的就弄好了     流汉ing!Top

19 楼Leftie(左手,为人民币服务)回复于 2005-03-07 21:49:01 得分 5

先分离数据库,再附加数据库Top

20 楼real_name(*真名)回复于 2005-03-07 21:52:50 得分 0

先删除   再附加Top

21 楼pweixing(幸运星)回复于 2005-03-08 09:15:38 得分 0

分离数据库:该数据库实例不存在!到master库的sysdatabase表里面看根本就没有这个表的信息。  
  附加数据库:错误823Top

22 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-08 11:56:45 得分 0

唉哟哟,我的数据库现在也是这个样子,我用的631799(杭州工人)   的方法,可是也解决不了问题,今天本来要发帖子问大家的,结果就看到这个了,还有什么方法没有?Top

23 楼deyangwangyu(wangyu)回复于 2005-03-08 13:55:52 得分 0

值得学习Top

24 楼pweixing(幸运星)回复于 2005-03-08 14:45:09 得分 0

//唉哟哟,我的数据库现在也是这个样子,我用的631799(杭州工人)   的方法,可是也解决不了问题,今天本来要发帖子问大家的,结果就看到这个了,还有什么方法没有?  
   
  哥们,同情你!我的数据库可是非常重要啊!郁闷…………Top

25 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-08 15:18:52 得分 0

不是哥位,我是女的:)Top

26 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-09 16:37:27 得分 5

SQL   Server数据库文件恢复技术  
  yzhshi(yzhshi@etang.com)  
   
  SQL   Server数据库备份有两种方式,一种是使用BACKUP   DATABASE将数据库文件备份出去,  
  另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。  
  本文假定您能熟练使用SQL   Server   Enterprise   Manager(SQL   Server企业管理器)和  
  SQL   Server   Quwey   Analyser(SQL   Server查询分析器)  
   
  1、正常的备份、恢复方式  
  正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,  
  然后复制文件。  
  卸下数据库的命令:Sp_detach_db   数据库名  
  连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db  
  s_attach_db   [@dbname   =]   ′dbname′,   [@filename1   =]   ′filename_n′   [,...16]  
  sp_attach_single_file_db   [@dbname   =]   ′dbname′,   [@physname   =]   ′physical_name′  
  使用此方法可以正确恢复SQL   Sever7.0和SQL   Server   2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件  
  都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。  
  例子:  
  假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。  
  卸下数据库:sp_detach_db   'test'  
  连接数据库:sp_attach_db   'test','C:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\test_data.mdf','C:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\test_log.ldf'  
  sp_attach_single_file_db   'test','C:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\test_data.mdf'  
   
  2、只有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   输出了错误信息,请与系统管理员联系。[brown]  
  说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL   Server   Enterprise   Manager打开了test库的系统表,  
  那么退出SQL   Server   Enterprise   Manager就可以了。  
  正确执行完成的提示应该类似于:  
  [brown]警告:   数据库   '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  
  goTop

27 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-09 16:38:40 得分 0

按上面方法一步一步做,我的现在已经好了:)Top

28 楼sky125(http://ms_sql.home4u.china.com/ )回复于 2005-03-09 17:19:26 得分 0

这类问题很多Top

29 楼wyb0026(小小)回复于 2005-03-09 17:25:45 得分 0

留个脚印以后用的着Top

30 楼pweixing(幸运星)回复于 2005-03-10 11:30:51 得分 0

继续等待!Top

31 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-11 09:40:58 得分 0

不会吧,楼主你怎么还在等待啊?我给你这个办法是我自己验证过的,我的置疑数据库就按这样修好了,你试一下,不要告诉我你只是看过啊Top

32 楼gx(gx)回复于 2005-03-11 13:11:49 得分 0

gzTop

33 楼pweixing(幸运星)回复于 2005-03-11 14:31:31 得分 0

如果上面的可以成功的话,我早修复好了!Top

34 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-22 15:14:30 得分 0

那就怪了,我的好了一直到现在都没有问题Top

35 楼pweixing(幸运星)回复于 2005-04-04 09:53:32 得分 0

最终也没有解决,好在有一个月以前的备份,找几个人重新录入了数据.  
  唉,结贴Top

相关问题

  • 邹大哥帮帮忙,怎样改SQL Server默认的时间格式?
  • 请问邹大哥,请问Excel导入Sql Server,要读取Excel的行号用什么函数
  • SQL Server中导出Excel新问题,非常麻烦,希望邹建大哥来看看
  • 请邹大哥,帮我写个不常用到的SQL语句
  • 那位大哥用过MS SQL Server的JDBC?
  • 请问各位大哥,在SQL Server中如何存图片
  • 哪位大哥推荐一本经典的SQL SERVER的书啊
  • 邹建大哥和各位高手请进!高分求一SQL语句
  • 哪位大哥能帮我介绍以下,delphi的SQL SERVER 2000编程。
  • 请问边位大哥有关于vb程序访问sql server的电子书?

关键词

  • 数据库
  • 文件
  • 服务器
  • 执行
  • 语句
  • 数据
  • 模式
  • 解决
  • 文件名
  • dbcc

得分解答快速导航

  • 帖主:pweixing
  • zjcxc
  • dxhdxh
  • 631799
  • Softlee81307
  • cemma
  • zjcxc
  • TigerSuper
  • LoveLwn
  • yangys
  • skeeterLa
  • Leftie
  • ccxxiaoxia

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo