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 metalin文档得知,出现这个报错主要有以下原因: 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’; 这个方法将数据库强行打开。 |