数据文件
SCN
不一致恢复(
ORA-00600: internal error code, arguments: [2662], [0]
)
参考 eygle 老师的 BLOG !在此再次感谢各位大师愿意分享的经验!!
http://www.eygle.com/archives/2005/10/ora_600_2662_error.htm l
http://www.eygle.com/archives/2005/12/oracle_diagnostics_howto_deal_2662_error.html
1 、恢复,开启数据库报错及 alert 日志
SQL> startup
ORACLE instance started.
Total System Global Area 457179136 bytes
Fixed Size 1219976 bytes
Variable Size 146801272 bytes
Database Buffers 306184192 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> startup mount;
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
Alert 日志:
ORA-00600: internal error code, arguments: [2662], [0], [558703], [0], [558891], [4194313], [], []
2 、尝试在 rman 中 startup 竟然可以启动,心有余悸,肯定还有问题。
最有可能是的就是 SCN 不一致,于是看了一下。结果 SCN 真的不一致! (突然梦醒,我使用了 _allow_resetlogs_corruption=true 隐含参数出现的问题)
[ora@dg-pp doudou]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Thu Apr 5 23:15:31 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database (not started)
RMAN> startup
Oracle instance started
database mounted
database opened
Total System Global Area 457179136 bytes
Fixed Size 1219976 bytes
Variable Size 146801272 bytes
Database Buffers 306184192 bytes
Redo Buffers 2973696 bytes
SQL> conn /as sysdba
Connected.
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 578703
2 578703
3 578703
4 578703
5 0
6 0
7 578703
7 rows selected.
3 、关闭数据库,进行强制推进 SCN ,达到一致!
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 457179136 bytes
Fixed Size 1219976 bytes
Variable Size 146801272 bytes
Database Buffers 306184192 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter session set events '10015 trace name adjust_scn level 1';
Session altered.
SQL> alter database open;
Database altered.
4 、启动参数之后竟然没有被恢复。
想了一下最有可能就是恢复的时候把文件 OFFLINE ,结果一参数还真是 OFFLINE 状态,这也说明了强制推进 SCN 只对在线文件起作用
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 598838
2 598838
3 598838
4 598838
5 0
6 0
7 598838
7 rows selected.
SQL> select checkpoint_change#,name,status from v$datafile;
CHECKPOINT_CHANGE# NAME STATUS
------------------ --------------------------------------------- --------------
598838 /opt/oracle/oradata/doudou/system01.dbf SYSTEM
598838 /opt/oracle/oradata/doudou/undotbs01.dbf ONLINE
598838 /opt/oracle/oradata/doudou/sysaux01.dbf ONLINE
598838 /opt/oracle/oradata/doudou/users01.dbf ONLINE
0 /opt/oracle/oradata/doudou/doudou.dbf OFFLINE
0 /opt/oracle/oradata/doudou/test.dbf OFFLINE
598838 /opt/oracle/oradata/doudou/doudou_test.dbf ONLINE
5 、 OFFLINE 的文件修改成 ONLINE 文件,然后执行强制推进 SCN ,达到 SCN 一致。
OK 恢复成功了!
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 457179136 bytes
Fixed Size 1219976 bytes
Variable Size 146801272 bytes
Database Buffers 306184192 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database datafile 5 online;
Database altered.
SQL> alter database datafile 6 online;
Database altered.
SQL> alter session set events '10015 trace name adjust_scn level 10';
Session altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01190: control file or data file 5 is from before the last RESETLOGS
ORA-01110: data file 5: '/opt/oracle/oradata/doudou/doudou.dbf'
SQL> alter database open resetlogs;
Database altered.
SQL> select checkpoint_change#,name,status from v$datafile;
CHECKPOINT_CHANGE# NAME STATUS
------------------ --------------------------------------------- --------------
598911 /opt/oracle/oradata/doudou/system01.dbf SYSTEM
598911 /opt/oracle/oradata/doudou/undotbs01.dbf ONLINE
598911 /opt/oracle/oradata/doudou/sysaux01.dbf ONLINE
598911 /opt/oracle/oradata/doudou/users01.dbf ONLINE
598911 /opt/oracle/oradata/doudou/doudou.dbf ONLINE
598911 /opt/oracle/oradata/doudou/test.dbf ONLINE
598911 /opt/oracle/oradata/doudou/doudou_test.dbf ONLINE
7 rows selected.
SQL>
总结:
一、各位同学,如果我们使用隐含参数恢复成功之后,一定要导出数据,重新建库然后导入。 不然会有很多异常的问题出现,不可控的风险是不允许在我们生产库的!
二、增进 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';
附表:
盖老师解决 SCN 的方法
通过正常方式启动数据库时,从 alert 文件中,我们可以看到 ora-00600 2662 号错误。
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
此时我们可以通过 Oracle 的 内部事件 来调整 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) (1024*1024*1024), 通常 Level 1 已经足够。也可以根据实际情况适当调整。
本例由于数据库无法打开,只能使用的二种方法。
[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.
Total System Global Area 97588504 bytes Fixed Size 451864 bytes Variable Size 33554432 bytes Database Buffers 62914560 bytes Redo Buffers 667648 bytes 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 ,稍后我们可以验证。
[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.
Total System Global Area 97588504 bytes Fixed Size 451864 bytes Variable Size 33554432 bytes Database Buffers 62914560 bytes Redo Buffers 667648 bytes Database mounted.
SQL> alter session set events '10015 trace name adjust_scn level 10';
Session altered.
SQL> alter database open;
Database altered.
此时数据库可以打开,从 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 * (1024*1024*1024) = 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; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started.
Total System Global Area 97588504 bytes Fixed Size 451864 bytes Variable Size 33554432 bytes Database Buffers 62914560 bytes Redo Buffers 667648 bytes Database mounted. Database opened. SQL> select file#,CHECKPOINT_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1.0737E+10 2 1.0737E+10 3 1.0737E+10
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. 这要是账户上的钱该有多好:)
盖老师还是一个风趣的人,哇哈!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26442936/viewspace-739617/ ,如需转载,请注明出处,否则将追究法律责任。