启动时数据库不能回滚
解决方法:第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' (注意:一定要加上数据库名称条件,切记,最好使用事务)
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,如果还不行,只有恢复备份了
如果没有备份,只能在重新做1到3步骤,然后使用bcp将数据库中所有数据备份出来,然后重新创建数据库了。
强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,
所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdb、 dbcc checkalloc等)以确保正常运行。 |