Oracle数据库ORA-00600[2662]报错的几种处理方法
Oracle数据库ORA-00600: internal error code, arguments: [2662]报错的几种处理方法
在一次数据库恢复过程中,使用_ALLOW_RESETLOGS_CORRUPTION = TRUE这个隐含参数来强行打开数据库,这行遇到ORA-00600: internal error code, arguments: [2662]的报错,日志如下:
Errors in file /app/oracle/admin/rac/udump/rac1_ora_3997860.trc:ORA-00600: internal error code, arguments: [2662], [3186], [3707069194], [3186], [3707142625], [29580553], [], []
关于ORA-00600: internal error code, arguments: [2662]这个报错的解释如下:
ORA-600 [2662] “Block SCN is ahead of Current SCN”,说明当前数据库的数据块的SCN早于当前的SCN,主要是和存储在UGA变量中的dependent SCN进行比较,如果当前的SCN小于它,数据库就会产生这个ORA-600 [2662]的错误了。这个错误一共有五个参数,分别代表不同的含义
ORA-600 [2662] [a] {c} [d] [e]
Arg [a] Current SCN WRAP
Arg Current SCN BASE
Arg {c} dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
我们分析错误中的提示,它的参数b=3707069194,d=3707142625,表明当前的SCN确实是小于dependent SCN,所以产生了这个600的错误。
通过查阅oracle metalink文档得知,出现这个报错主要有以下原因:
1.使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库2.恢复了控制文件但是没有使用recover database using backup controlfile进行恢复
3.数据库crash后设置了_DISABLE_LOGGING隐含参数
4.在并行服务器环境中DLM存在问题
5.硬件错误引起数据库没法写控制文件和重做日志文件
6.错误的部分恢复数据库
解决ORA-00600: internal error code, arguments: [2662]这个报错的方法如下:
1、如果SCN相差不多,可以通过多次重起数据库解决(每次加1)2、通过10015 ADJUST_SCN事件来增进current SCN
1)计算level
1.1) Arg {c}* 4得出一个数值,假设为V_Wrap
1.2) 如果Arg [d]=0,则V_Wrap值为需要的level
Arg [d] < 1073741824,V_Wrap+1为需要的level
Arg [d] < 2147483648,V_Wrap+2为需要的level
Arg [d] < 3221225472,V_Wrap+3为需要的level
1.3)SCN被增进了1024*1024*1024*level(level*10 billion)
2)执行内部事件
alter session set events ’10015 trace name adjust_scn level N’;
注:mount状态下执行(open下无效)
本次就是通过alter session set events ’10015 trace name adjust_scn level N’;这个方法将数据库强行打开。