暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

ORA-600 2662错误报告的应对,重启数据库的自动SCN增进或手工增进SCN

原创 eygle 2019-11-27
2128

在损失了日志,进行基于损坏的恢复时,可能会因为_allow_resetlogs_corruption参数的使用而收到ORA-600 2662的错误报告。

2662错误是指: A data block SCN is ahead of the current SCN,也就是说数据块的SCN大于了系统的最大SCN,这意味着数据库出现了异常。

从alert文件中,可以看到ora-00600 2662号错误的信息,这其中2662之后的参数分别是SCN Wrap,SCN Base,很明显,后面的SCN值898092653高于了547743994:

Sun Dec 11 18:02:25 2005
Errors in file /opt/oracle/admin/conner/udump/conner_ora_13349.trc:
ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
Sun Dec 11 18:02:27 2005
Errors in file /opt/oracle/admin/conner/udump/conner_ora_13349.trc:
ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
Sun Dec 11 18:02:27 2005
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600

遇到这种情况,如果SCN相差不大,通过重启数据库的自动SCN增进可能可以解决这个问题,如果两个SCN差异过大,就需要手工增进SCN来消除这个差异。

增进SCN有三种方法:

1.通过immediate trace name方式(在数据库Open状态下)
alter session set events ‘IMMEDIATE trace name ADJUST_SCN level x’;

2.通过10015事件(在数据库无法打开,mount状态下)
alter session set events ‘10015 trace name adjust_scn level x’;

注:level 1为增进SCN 10亿 (1 billion) (102410241024),通常Level 1已经足够。也可以根据实际情况适当调整。

3.通过_minimum_giga_scn参数设置
该参数与10015事件等类似,1即为将SCN推进到1 billion.

本例由于数据库无法打开,只能使用的二种方法。

[oracle@jumper dbs]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sun Dec 11 18:26:18 2005
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup mount pfile=initconner.ora
ORACLE instance started.
Database mounted.

SQL> alter session set events '10015 trace name adjust_scn level 10';
Session altered.

SQL> alter database open;
Database altered.

注意,由于我使用了10015事件,使得SCN增进到了10 billion,此时数据库可以打开,从alert文件中我们可以看到如下提示:

Sun Dec 11 18:27:04 2005
SMON: enabling cache recovery
Sun Dec 11 18:27:05 2005
Debugging event used to advance scn to 10737418240

SCN被增进到了10 billion,即 10 * (102410241024) = 10737418240,正好是日志里记录的数量。

我们从数据库内部看一下检查点的增进情况:

SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE

SQL> select file#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1          547783998
         2          547783998
         3          547783998

SQL> shutdown immediate;
SQL> startup
SQL> col CHECKPOINT_CHANGE# for 99999999999999999
SQL>  select file#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1        10737418447
         2        10737418447
         3        10737418447

我们看到CHECKPOINT_CHANGE# 最终被增进了10 Billion.

在Oracle 10g以后,参数_minimum_giga_scn参数可以帮助我们进行SCN推进,以下是一个Oracle 10g数据库2662错误处理的案例:

    Errors in file /ORCL/udump/orcl_ora_4792.trc:
    ORA-00600: internal error code, arguments: [2662], [1], [1574405318], [1], [1574541355], [8388617], [], []

    Errors in file /ORCL/udump/orcl_ora_4792.trc:
    ORA-00600: internal error code, arguments: [2662], [1], [1574405318], [1], [1574541355], [8388617], [], []

这里我设置了_minimum_giga_scn参数来推进SCN
_minimum_giga_scn=6

增进这个参数后,启动数据库可以在ALERT文件中看到:

Advancing SCN to 6442450944 according to _minimum_giga_scn

Oracle将SCN增进到 6 * 1024 * 1024 * 1024 = 6442450944.
这里的SCN增进可以精确计算出来的,在这个案例中,通过如下方式就可以计算出来:

SQL> select (1*4294967296+1574541355)/(1024*1024*1024) from dual;
(1*4294967296+1574541355)/(102
------------------------------
5.46640590857714
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论