今天公司的Oracle数据库突然当掉了,这可是我们最核心的数据库,非常紧张。先尝试shutdown,可以正常shutdown,但是执行startup的时候报错,报错信息如下:
Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_29602.trc:
ORA-00314: log 1 of thread 1, expected sequence# 1394 doesn't match 1018
ORA-00312: online log 1 thread 1: '/var/oracle/redolog/redo01a.log'
Sun Nov 3 01:21:43 2013
Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_29602.trc:
ORA-00600: internal error code, arguments: [ksfdchkfobrerr1], [0x000000000], [0x000000000], [], [], [], [], []
ORA-600 signalled during: ALTER DATABASE OPEN...
Sun Nov 3 10:48:35 2013
Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_1561.trc:
ORA-27037: unable to obtain file status
HP-UX Error: 2: No such file or directory
刚开始觉得是重做日志的问题,就想clear掉重做日志,结果是当前日志出了问题,还没有归档不能clear掉,后来尝试startup force,还是有问题,如是启用recover database until cancel,等待输入的时候因为没有搞明白是什么问题就选择了auto,结果照样报错,后来咨询负责公司oracle数据库技术支持的工程师,工程师要我把那几个报错文件发给他,他说挺严重的,就让我把数据库当掉,然后将数据库、控制文件、重做日志文件和配置文件备份,然后执行rman恢复(前天晚上做了rman全备份,并且备份成功了。)200多G的数据文件,拷贝了一天,等到晚上终于拷贝完了,我回家总觉得不对劲,觉得是归档文件丢失了,就想看看归档日志丢失怎么恢复,然后就找到下面的方法,试了一下果然就恢复了,早知道如此就不用停掉业务一天了。
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
估计应该是日志的问题,又试了下:
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 669109 generated at 09/12/2009 18:47:00 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_09_13/o1_mf_1_10_%u_.ar
c
ORA-00280: change 669109 for thread 1 is in sequence #10
Specify log: {=suggested | filename | AUTO | CANCEL}
根据上面提示的内容,注意到 ‘change 669109 ’ 和 ‘sequence #10’
从网上看到一条语句,可以查出redo logs ,注意要用sys:
SQL> conn sys/oracle as sysdba
Connected.
SQL> select v1.group#, member, sequence#, first_change#
2 from v$log v1, v$logfile v2
3 where v1.group# = v2.group#;
从结果里根据 sequence# 和 first_change# 找到了要用到的log file name:
/u01/app/oracle/oradata/orcl/redo03.log
在 Specify log: {=suggested | filename | AUTO | CANCEL} 下面输入:
/u01/app/oracle/oradata/orcl/redo03.log
提示:
Log applied.
Media recovery complete.
接着:
SQL> alter database open resetlogs;
Database altered.
这样,就吧问题解决了。