|
【赛迪网-it技术报道】在许多情况下,在使用隐含参数_allow_resetlogs_corruption后,用resetlogs打开数据库将会由于scn不一致出现ora-00600 2662错误,下文中将针对这一问题的解决过程进行详细的介绍。
首先,在正常启动数据库后,大家可以从alert文件中发现ora-00600 2662号错误。
sun dec 11 18:02:25 2005errors 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 2005errors 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 2005error 600 happened during db open, shutting down databaseuser: 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 2005copyright (c) 1982, 2002, oracle corporation. all rights reserved.connected to an idle instance.sql> startup mount pfile=initconner.oraoracle instance started.total system global area 97588504 bytesfixed size 451864 bytesvariable size 33554432 bytesdatabase buffers 62914560 bytesredo buffers 667648 bytesdatabase 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 2005copyright (c) 1982, 2002, oracle corporation. all rights reserved.connected to an idle instance.sql> startup mount pfile=initconner.oraoracle instance started.total system global area 97588504 bytesfixed size 451864 bytesvariable size 33554432 bytesdatabase buffers 62914560 bytesredo buffers 667648 bytesdatabase 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 2005smon: enabling cache recoverysun dec 11 18:27:05 2005debugging 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 writesql> select file#,checkpoint_change# from v$datafile; file# checkpoint_change#---------- ------------------ 1 547783998 2 547783998 3 547783998sql> shutdown immediate;database closed.database dismounted.oracle instance shut down.sql> startuporacle instance started.total system global area 97588504 bytesfixed size 451864 bytesvariable size 33554432 bytesdatabase buffers 62914560 bytesredo buffers 667648 bytesdatabase 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+10sql> col checkpoint_change# for 99999999999999999sql> select file#,checkpoint_change# from v$datafile; file# checkpoint_change#---------- ------------------ 1 10737418447 2 10737418447 3 10737418447
至此,大家可以发现checkpoint_change#最后被增进了10 billion。
|