IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    ORA-600 4194/ORA-600 4193/ORA-600 4137故障解决

    惜分飞发表于 2016-08-04 06:04:29
    love 0

    联系:手机(+86 13429648788) QQ(107644445)QQ咨询惜分飞

    标题:ORA-600 4194/ORA-600 4193/ORA-600 4137故障解决

    作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

    对于常见的undo异常错误,ORA-600 4193,ORA-600 4194,ORA-600 4137等错误的处理一般步骤.
    适用版本

    Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.2.0.4 [Release 9.2 to 11.2]
    Information in this document applies to any platform.

    报错现象

    The following error is occurring in the alert.log right before the database crashes.
    
    ORA-00600: internal error code, arguments: [4194], [#], [#], [], [], [], [], []
    
    This error indicates that a mismatch has been detected between redo records and rollback (undo) records.
    
    ARGUMENTS:
    
    Arg [a] - Maximum Undo record number in Undo block
    Arg [b] - Undo record number from Redo block
    
    Since we are adding a new undo record to our undo block, we would expect that the new record number
     is equal to the maximum record number in the undo block plus one. Before Oracle can add 
    a new undo record to the undo block it validates that this is correct. If this validation fails,
     then an ORA-600 [4194] will be triggered.
    

    报错原因

    This also can be cause by the following defect
    
    Bug 8240762 Abstract: Undo corruptions with ORA-600 [4193]/ORA-600 [4194] or ORA-600 [4137] after SHRINK
    
    Details: 
    Undo corruption may be caused after a shrink and the same undo block may be used 
    for two different transactions causing several internal errors like:
    ORA-600 [4193] / ORA-600 [4194] for new transactions
    ORA-600 [4137] for a transaction rollback
    

    处理步骤

    Best practice to create a new undo tablespace.
    This method includes segment check.
    
    Create pfile from spfile to edit
    >create pfile from spfile;
    
    1. Shutdown the instance
    
    2. set the following parameters in the pfile
        undo_management = manual
        event = '10513 trace name context forever, level 2'
    
    3. >startup restrict pfile=<initsid.ora>
    
    4. >select tablespace_name, status, segment_name from dba_rollback_segs where status != 'OFFLINE';
    
    This is critical - we are looking for all undo segments to be offline - System will always be online.
    
    If any are 'PARTLY AVAILABLE' or 'NEEDS RECOVERY' - Please open an issue with Oracle Support or update the current SR.
    
    If all offline then continue to the next step
    
    5. Create new undo tablespace - example
    >create undo tablespace <new undo tablespace> datafile <datafile> size 2000M;
    
    6. Drop old undo tablespace
    >drop tablespace <old undo tablespace> including contents and datafiles;
    
    7. >shutdown immediate;
    
    8 >startup nomount;  --> Using your Original spfile
    
    9 modify the spfile with the new undo tablespace name
    
      Alter system set undo_tablespace = '<new tablespace created in step 5>' scope=spfile;
    
    10. >shutdown immediate;
    
    11. >startup;  --> Using spfile
     
    
    
    The reason we create a new undo tablespace first is to use new undo segment numbers
     that are higher then the current segments being used.
    This way when a transaction goes to do block clean-out 
    the reference to that undo segment does not exist and continues with the block clean-out.

    参考:tep by step to resolve ORA-600 4194 4193 4197 on database crash (Doc ID 1428786.1)

    • ORA-600 4193 错误说明和解决
    • ORA-600[4194]/[4193]解决
    • undo异常处理步骤(9i)
    • undo损坏恢复–无事务
    • ORACLE在线切换undo表空间
    • undo异常处理步骤(10g)
    • undo损坏恢复–有事务
    • How to resolve ORA-600 [4194] errors
    • ORACLE 8.1.7 数据库ORA-600 4000故障恢复
    • 找出11g undo 回滚段名称
    • ORA-00600[4194]故障解决
    • undo segment header坏块异常恢复


沪ICP备19023445号-2号
友情链接