SqlServer数据库置疑的解决办法

导读:
  /*--重置置疑状态
  1.系统方法:
  如果 sql server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,
  那么 microsoft® sql server™ 2000 会返回错误 1105
  并且将 sysdatabases 中的 status 列设为置疑。按下面的步骤解决这个问题:
  执行 sp_resetstatus。
  语法为:
  sp_resetstatus '数据库名'
  用 alter database 向数据库添加一个数据文件或日志文件。
  停止并重新启动 sql server。
  用新的数据文件或日志文件所提供的额外空间,sql server 应该能完成数据库的恢复。
  释放磁盘空间并且重新运行恢复操作。
  sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
  --*/
  --2.手工重置置疑状态
  use master
  go
  sp_configure 'allow updates',1 reconfigure with override
  go
  declare @dbname varchar(30)
  set @dbname='你要处理的数据库名'
  if @@trancount >0
  print '正在进行事务处理,操作不能进行'
  else if suser_id()!=1
  print '你不是系统管理员(sa),不能进行此操作'
  else if not exists(select 1 from master..sysdatabases where name=@dbname)
  print '你要操作的数据库不存在'
  else if not exists(select 1 from master..sysdatabases where name= @dbname and status &256 = 256)
  print '你的数据库没有被置疑'
  else
  begin
  begin tran
  update master..sysdatabases set status = status ^ 256 where name = @dbname
  if @@error != 0 or @@rowcount != 1
  rollback tran
  else
  begin
  commit tran
  print '操作成功,请重新启动SQL'
  end
  end
  go
  sp_configure 'allow updates', 1 reconfigure with override
  go
  --------------------------
  如果上面的方法不能解决问题.
  就有点麻烦,首先分离你的数据库,备份数据文件
  如果不能分离,则停止SQL服务,再备份数据文件,然后启动SQL服务,删除置疑的数据库
  接下来按下面的步骤处理:
  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
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=42006

还有一种方法:

随便记录---------

 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  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值