eygle Eygle.
Backup&Recovery 2011-03-08

参数_smon_internal_errlimit与数据库恢复

前一段时间,在帮助用户恢复一个数据库时,用到了_smon_internal_errlimit参数。

客户数据库遭受存储损坏无法打开,数据文件存在大量坏块,我们强制打开数据库后遇到了如下错误:
Tue Feb 22 17:22:59 2011
Errors in file d:\programfiles\oracle\admin\agzt\bdump\agzt_smon_7512.trc:
ORA-00600: internal error code, arguments: [25012], [0], [16], [], [], [], [], []

Tue Feb 22 17:28:13 2011
Non-fatal internal error happenned while SMON was doing IOT PMO transient table cleanup.
SMON encountered 1 out of maximum 100 non-fatal internal errors.
Tue Feb 22 17:28:13 2011
Errors in file d:\programfiles\oracle\admin\agzt\bdump\agzt_smon_7512.trc:
ORA-00600: internal error code, arguments: [25012], [0], [16], [], [], [], [], []

Non-fatal internal error happenned while SMON was doing IOT PMO transient table cleanup.
SMON encountered 2 out of maximum 100 non-fatal internal errors.
Tue Feb 22 17:32:06 2011
Errors in file d:\programfiles\oracle\admin\agzt\udump\agzt_ora_8040.trc:

这里Oracle提示,SMON遇到了内部错误,最大允许100次,不断计数增长。
基于对Oracle的信任,我想一定是有一个内部参数用于控制这个次数,于是就查询一下内部视图:
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
  FROM SYS.x$ksppi x, SYS.x$ksppcv y
  WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%'
/
Enter value for par: smon
old   3:  WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%'
new   3:  WHERE x.indx = y.indx AND x.ksppinm LIKE '%smon%'

NAME                           VALUE    DESCRIB
------------------------------ -------- -----------------------------------------------
_smon_internal_errlimit        100      limit of SMON internal errors
_smon_undo_seg_rescan_limit    10       limit of SMON continous undo segments re-scan

可以将_smon_internal_errlimit这个值调高,这样就可以保证数据库能在较多非致命错误下,不要崩溃。

这个参数在这个Case里对我有效,记录于此。


By eygle 2011-03-08 08:43 评论 (0)
eygle
eygle

前Oracle ACE Director,云和恩墨创始人。技术为骨,历史为脉,人文为魂。

返回首页