sybase数据库掉电后启动Recover失败解决方法
上一篇 / 下一篇  2009-03-09 20:06:53
查看( 67 ) / 评论( 0 ) / 评分( 0 / 0 )
在使用Sybase过程中,有一次发现某个库用不了,一查看日志才知道是Recover失败.这下可好,重启N次还是老样子,用不了.

于上上网,功夫不负有心人,在网上到高人的解决方法,现转如下:

错误日志:


你按照下面的方法作一下,看是否能够正常启动起来。
1. 使用 install目录下 RUN 文件启动数据库服务器(如果服务已经启动,可跳过此步骤)
2. 使用isql连接进入数据库服务器
   isql -Usa -Ppasswd -S server_name
   1>;sp_configure 'allow update',1
   2>;go

   1>;use master
   2>;go
   1>;sp_helpdb DB_NAME
   2>;
   记下此处查询出的数据库选项 (例如:select into/bulkcopy等)
   
   1>;begin tran
   2>;go
   1>;update sysdatabases set status = -32768 where name = 'DB_NAME'   (注意:一定要加上数据库名称条件,切记,最好使用事务)sql连接不上服务器
   2>;go
如果显示 (1 row affected),commit,否则 rollback
   1>;commit   
   2>;go

   1>;shutdown with nowait
   2>;go

3. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 recovery database DB_NAME 时使用bypass状态,如果正常,这种情况下,数据库服务器应该能够完全启动

4. 使用isql连接进入数据库服务器
   isql -Usa -Ppasswd -S server_name
   1>;use master
   2>;go
   1>;dump tran DB_NAME with no_log ( dbcc rebuild_log(DBNAME,1,1) )
   2>;go

   1>;update sysdatabases set status = 0 where name = 'DB_NAME'   (注意:一定要加上数据库名称条件,切记)
   2>;go
   
   1>;shutdown with nowait
   2>;go

5. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 recovery database DB_NAME 成功,DB_NAME数据库online

6. 恢复数据库选项
使用isql连接进入数据库服务器
   isql -Usa -Ppasswd -S server_name
   1>;use master
   2>;go
   1>;sp_dboption DB_NAME,'select into',true
   2>;go
   1>;use DB_NAME
   2>;go
   1>;checkpoint
   2>;go

如果有其他选项,依法处理

先试步骤四中的 dump tran with no_log 如果不行就用后面括号中那个命令 dbcc rebuild_log(DBNAME,1,1)
dbcc rebuild_log,如果还不行,只有恢复备份了

如果没有备份,只能在重新做13步骤,然后使用bcp将数据库中所有数据备份出来,然后重新创建数据库了。
强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdbdbcc checkalloc等)以确保正常运行。
相关阅读:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。