企业无法启动数据库,手动启动数据库可以装载完毕,但在打开时候出现:
ora-00313.ora-00312.ora-27041.OSD-04002.OS-ERROR:
数据库版本为oracle 8i,windows平台
首先备份数据文件和参数文件,以便能够恢复到最初的情况.
查询v$log和logfile内容,确定当前的日志文件名和日志组的数目,以及当前联机日志是哪个.询问企业之前进行的操作,多数说是使用360曾经清除过log文件. 远程查看企业的数据库,发现所有联机日志文件都已经丢失.
现场处理方式:
一、启动oracle到mount状态
sqlplus /nolog
startup mount
二、清除日志
经查询group 1对应文件为redo03.log是当前的日志文件,清除非当前日志组:
alter database clear unarchived logfile group 2;
数据库已更改
alter database clear unarchived logfile group 3;
数据库已更改
alter database clear unarchived logfile group 1;
出错,当前日志不允许清除
三、在本地测试完毕后,决定使用隐含参数进行处理
1、修改参数文件,修改前请备份该文件
c:\oracle\admin\ora8i\pfile\init.ora,在最后增加一行
# add 2006/10/08
_allow_resetlogs_corruption=TRUE
2、在ms-dos状态下输入sqlplus /nolog
SQL>connect internal;
SQL>startup mount;
3、输入recover database until cancel;
第一次输入auto
SQL>recover database until cancel;
第二次输入cancel
忽略出现的错误
3、alter database open resetlogs
出现ora-00603错误
4、察看alert文件,发现提示是ora-600 [2662],[0],[219940997],[0],[219941104],[8388610],[],[]
里头有resetlogs after incomplete recovery until change 219940984
查看一下v$datafile的scn
(哦, 应该跟datafile没关吧,是block的scn;查查v$datafile_header、
v$datafile,看看差多少)
使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库后,我们说很多时候你会遇到ORA-00600 2662号错误,这个错误的含义是:
A data block SCN is ahead of the current SCN.
The ORA-600 [2662] occurs when an SCN is compared to the dependent SCN
stored in a UGA variable.
If the SCN is less than the dependent SCN then we signal the ORA-600 [2662]
internal error.
这是因为SCN不一致的问题。
如果SCN相差不多,可以通过多次重起数据库解决。
5、因为数据库不能打开,所以使用如下语句增进SCN 1billion次
SQL>alter session set events '10015 trace name adjust_scn level 1';
系统显示会话已更改
因为使用_allow_resetlogs_corruption=TRUE参数,打开数据库时候出现ora-600 [2662]错误的相关处理方式,参见eygle的文章:http://www.eygle.com/archives/2005/12/oracle_diagnostics_howto_deal_2662_error.html
6、alter database open;出现ora-356 353 312的错误.
7、查询alert,仍然是ora-600 [2662]的错误,去除隐含参数重新启动数据库
shutdown immediate关闭的时候出现[kcsgsscn2],再连接不允许我联接了,出现ora-01089:immediate shutdown in progress - no operations are permitted正在进行中,已经不允许我联接了,再联接也不行,尝试了几次,最后重新启动机器;
sqlplus /nolog
connect internal;
startup :
竟然成功了,所以exp备份其他系统的数据,然后恢复数据。到oradata路径下察看已经自动生成了三个redo*.log文件.