ora-600 2252

来源:这里教程网 时间:2026-03-03 21:04:40 作者:

情况说明:
今天客户报告,数据库无法启动,登陆客户环境检查后发现:
数据库启动在mount状态,alter database open;失败,相关报错日志信息如下:
Fri Jan 05 02:08:43 2001
alter database open
Errors in file d:\app\administrator\diag\rdbms\ycyl\ycyl\trace\ycyl_ora_3640.trc  (incident=78162):
ORA-00600: 内部错误代码, 参数: [2252], [3543], [2531780980], [], [], [], [], [], [], [], [], []
Incident details in: d:\app\administrator\diag\rdbms\ycyl\ycyl\incident\incdir_78162\ycyl_ora_3640_i78162.trc
Errors in file d:\app\administrator\diag\rdbms\ycyl\ycyl\trace\ycyl_ora_3640.trc:
ORA-00600: 内部错误代码, 参数: [2252], [3543], [2531780980], [], [], [], [], [], [], [], [], []
ORA-600 signalled during: alter database open..
可以看到数据库启动失败,报错出现600信息。
trace日志信息:
检查数据库的trace日志,未发现除上述报错外的有用信息,因此搜索了mos文档:
发现1:
ORA-600 [2252] (Doc ID 138701.1)
根据mos提示,这个报错经常出现在系统时间和数据块记录时间差距特别大的情况下.
发现2:
ORA-600 [2252] Occurs During Alter Database Open (Doc ID 253977.1)
给出的解决方案是:
将系统时间设置为等于或者高于系统时间
因此再次检查:
发现我们的系统时间是2001 年,这应该就是问题原因,修改后数据库正常启动。
相关信息:
ORA-600 [2252] [A] [B] [] [] []
原因:Oracle将给定的SCN值与基于系统日期,如果Oracle检测到提供的SCN太大,则会引发ORA-600[2252]。
ARGS:
参数A:SCN WRAP
参数B:SCN BASE
ORA-00600的参数[2252]表示Oracle为事务计算的系统更改号(SCN)是一个不合理的数字。SCN部分基于主机系统日期进行计算。
如果系统日期相差很远,则为SCN计算的最大可能值可能不可能大,这将导致ORA-600[2252]。
数据库当前的请求SCN大于当前最大允许SCN时会提示ORA-600[2252],最大允许SCN是有本地系统时间决定。
我们当前scn计算
SQL> select to_char(3543*power(2,32)+2531780980) from dual;
TO_CHAR(3543*P
--------------
15219600910708
查询   SCN Headroom  16k情况下:
select
  version,
  to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') DATE_TIME,
  ((((
   ((to_number(to_char(sysdate,'YYYY'))-1988)*12*31*24*60*60) +
   ((to_number(to_char(sysdate,'MM'))-1)*31*24*60*60) +
   (((to_number(to_char(sysdate,'DD'))-1))*24*60*60) +
   (to_number(to_char(sysdate,'HH24'))*60*60) +
   (to_number(to_char(sysdate,'MI'))*60) +
   (to_number(to_char(sysdate,'SS')))
   ) * (16*1024)) - dbms_flashback.get_system_change_number)
  / (16*1024*60*60*24) 
  ) indicator    --day
from v$instance;
32k情况下:
SELECT VERSION,
TO_CHAR(CURRENT_SCN),
DATE_TIME,
TO_CHAR(ROUND(HEADROOM, 2))
FROM (SELECT VERSION,
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER CURRENT_SCN,
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') DATE_TIME,
case
when replace(version, '.', '') < 112020 then
((((((TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - 1988) * 12 * 31 * 24 * 60 * 60) +
((TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) - 1) * 31 * 24 * 60 * 60) +
(((TO_NUMBER(TO_CHAR(SYSDATE, 'DD')) - 1)) * 24 * 60 * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')) * 60 * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'MI')) * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'SS')))) * (16 * 1024)) -
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) /
(16 * 1024 * 60 * 60 * 24))
else
((((((TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - 1988) * 12 * 31 * 24 * 60 * 60) +
((TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) - 1) * 31 * 24 * 60 * 60) +
(((TO_NUMBER(TO_CHAR(SYSDATE, 'DD')) - 1)) * 24 * 60 * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')) * 60 * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'MI')) * 60) +
(TO_NUMBER(TO_CHAR(SYSDATE, 'SS')))) * (32 * 1024)) -
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) /
(32 * 1024 * 60 * 60 * 24))
end HEADROOM
FROM V$INSTANCE);

相关推荐