今天早晨来到公司打开自己的虚拟机,启动虚拟oracle RAC数据库竟然报错,无语了,集群是正常启动,但是数据库里怎么也起不来,于是查看alter的日志进行具体的分析和判断
查看alter日志
Sun Sep 06 18:03:07 2015
alter database recover datafile list clear
Completed: alter database recover datafile list clear
alter database recover if needed
datafile 1
Media Recovery Start
Serial Media Recovery started
Recovery of Online Redo Log: Thread 1 Group 1 Seq 21 Reading mem 0
Mem# 0: +DATA/test/onlinelog/group_1.261.889231401
Recovery of Online Redo Log: Thread 2 Group 4 Seq 18 Reading mem 0
Mem# 0: +DATA/test/onlinelog/group_4.260.889231861
Errors in file /u01/app/oracle/diag/rdbms/test/test1/trace/test1_ora_8767.trc (incident=14638):
ORA-00600: internal error code, arguments: [krr_read_5], [21], [43526], [], [], [], [], [], [], [], [], [] --------------alter 的报错
Incident details in: /u01/app/oracle/diag/rdbms/test/test1/incident/incdir_14638/test1_ora_8767_i14638.trc -----详细在查看test_ora_8767_i14638.trc这个文件
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
查看test1_ora_8767_i14638.trc 文件
WARNING! Crash recovery of thread 1 seq 21 is
ending at redo block 43526 but should not have ended before
redo block 43531
Incident 14661 created, dump file: /u01/app/oracle/diag/rdbms/test/test1/incident/incdir_14661/test1_ora_7962_i14661.trc
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [21], [43526], [43531], [], [], [], [], [], [], []
结合ALERT里的错误ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [21], [43526], [43531], 和TRACE里的错误提示WARNING! Crash recovery of thread 1 seq 21 is ending at redo block 43526 but should not have ended before redo block 43531 以及查询MetaLink文档ID 1299564.1获取的指导性信息,应该是由于服务器异常断电,导致LGWR写联机日志文件时失败,下次重新启动数据库时,需要做实例级恢复,而又无法从联机日志文件里获取到这些redo信息,因为上次断电时,写日志失败了。
那么ORA-00600的错误里,那几个参数 [1], [21], [43526], [43531]又表示什么呢? 结合本故障场景分析,原来是1代表是线程号,实例需要恢复日志序列号为21的联机日志文件,需要恢复到编号为43531的日志块,而实际上只能恢复到第43526个日志块儿,所以库就启不来了。不过,从当前日志文件信息,可以看到,当前日志组的确是21:
select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 21 52428800 512 1 NO CURRENT 1445236 06-SEP-15 2.8147E+14
2 1 20 52428800 512 1 YES UNUSED 0 0
3 2 18 52428800 512 1 YES INACTIVE 1445969 06-SEP-15 1452593 06-SEP-15
4 2 19 52428800 512 1 NO CURRENT 1452610 06-SEP-15 2.8147E+14 06-SEP-15
select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
2 ONLINE +DATA/test/onlinelog/group_2.262.889231403 NO
1 ONLINE +DATA/test/onlinelog/group_1.261.889231401 NO
3 ONLINE +DATA/test/onlinelog/group_3.263.889231859 NO
4 ONLINE +DATA/test/onlinelog/group_4.260.889231861 NO
解决方法:
sql>recover database until cancel using backup controlfile;
Specify log: {=suggested | filename | AUTO | CANCEL}
+DATA/test/onlinelog/group_1.261.889231401
sql>alter database open resetlogs;
稍等一会数据库open了
SQL> select status from v$instance;
STATUS
------------
OPEN
另一个节点也可以startup了
成功解决
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30345407/viewspace-1792170/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30345407/viewspace-1792170/