ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [2662], [3543], [5685940], [3543], [5685970], [4194432], [], [], [], [], [], []
Process ID: 3157
Session ID: 1 Serial number: 3
ora-600 [2662]参数说明:
ORA-00600: internal error code, arguments: [2662], [a], [b], [c], [d], [e], [], []
a–CRUUENT SCN WRAP
b–CURRENT SCN BASE
c–DEPENDENT SCN WRAP
d–DEPENDENT SCN BASE
e–where present this is the dba where the dependent scn came from.
SCN组成:
SCN占6字节,由SCN_WRAP和SCN_BASE组成
SCN =(SCN_WRAP << 32)+ SCN_BASE
SCN是一个6字节(6*8=48bit)的数字,其值最大为281,474,976,710,656(2^48),SCN分为2个部分:
SCN_BASE是一个4字节(4 * 8=32bit)的数字
SCN_WRAP是一个2字节(2 * 8=16bit)的数字
每当SCN_BASE达到其最大值(2^32 = 4294967296)时,SCN_WRAP增加1,SCN_BASE将被重置为0,一直持续到SCN_WRAP达到其最大值,即2^16 = 65536
数据库在mount状态下执行
alter session set events ‘10015 trace name adjust_scn level n’;(不适用11g版本数据库,本次错误发生在11.2.0.1数据库,将level n修改成1万多,scn也增加不了多少)
设置隐含参数_minimum_giga_scn=n,提升SCN(不适用11g版本数据库,本次错误发生在11.2.0.1数据库,将n修改成1万多,scn也增加不了多少)
oradebug工具,提升SCN
本次出现问题的数据库是11.2.0.1(该方法适用于所有版本),由于异常断电导致数据库不能启动的案例(无归档,无备份),错误日志如上,处理方法:
首先启动数据库至mount状态
oradebug增加scn
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [060019360, 060019390) = 00000000 00000000 00000000 00000000 00089F7B 00000000 00000000 00000000 00000000 00000000 60019040 00000000
注意:Little Endian平台SCN BASE在前,SCN WRAP在后
1、SCN BASE修改为 0x0056C2D2,该值是错误日志中的参数d(5685970)的十六进制
SQL> oradebug poke 0x060019360 4 0x0056C2D2
BEFORE: [060019360, 060019364) = 00000000
AFTER: [060019360, 060019364) = 0056C2D2
SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [060019360, 060019390) = 0056C2D2 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 60019040 00000000
2、SCN WRAP修改为0x00000DD7,该值是错误日志中的参数c(3543)的十六进制
SQL> oradebug poke 0x060019364 4 0x00000DD7
BEFORE: [060019360, 060019364) = 00000000
AFTER: [060019360, 060019364) = 00000DD7
SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [060019360, 060019390) = 0056C2D2 00000DD7 00000000 00000000 00089F7B 00000000 00000000 00000000 00000000 00000000 60019040 00000000
3、SQL>alter database open;
4、重建undo表空间、临时表空间等
另外:通过bbed修改对应的数据文件头也可以增加scn。