sybase数据库掉电后启动Recover失败解决方法
上一篇 / 下一篇 2009-03-09 20:06:53
查看( 67 ) / 评论( 0 ) / 评分( 0 / 0 )
在使用Sybase过程中,有一次发现某个库用不了,一查看日志才知道是Recover失败.这下可好,重启N次还是老样子,用不了.
于上上网,功夫不负有心人,在网上到高人的解决方法,现转如下:
错误日志:
你按照下面的方法作一下,看是否能够正常启动起来。
1. 使用 install目录下 的 RUN 文件启动数据库服务器(如果服务已经启动,可跳过此步骤)
2. 使用isql连接进入数据库服务器
于上上网,功夫不负有心人,在网上到高人的解决方法,现转如下:
错误日志:
你按照下面的方法作一下,看是否能够正常启动起来。
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>;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) )
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>;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,如果还不行,只有恢复备份了
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,如果还不行,只有恢复备份了
如果没有备份,只能在重新做1到3步骤,然后使用bcp将数据库中所有数据备份出来,然后重新创建数据库了。
强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdb、dbcc checkalloc等)以确保正常运行。
强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdb、dbcc checkalloc等)以确保正常运行。
相关阅读:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论