ITPub博客

首页 > 数据库 > Oracle > ORA-00600 kcratr_nab_less_than_odr ORA-00600 [4194]

ORA-00600 kcratr_nab_less_than_odr ORA-00600 [4194]

原创 Oracle 作者:abstractcyj 时间:2019-07-02 12:46:52 0 删除 编辑

    7月1日, 客户告知我,一个数据库打不开了,他的描述是控制文件丢失

    登录主机,尝试启动, 在告警日志中出现了如下错误:


   

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc  (incident=26610):

  • ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

  • Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_26610\orcl_ora_7456_i26610.trc

  • Aborting crash recovery due to error 600

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc:

  • ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc:

  • ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

 

   此错误是说,数据库需要恢复rba至19063, 但是因为某种原因,只能利用sequence#为46799的redo log恢复至18672, 从而出错。

   解决的方法是重建控制文件并recover database。

   操作之前,最好先备份原来的数据文件,redo与控制文件。 首先尝试了用resetlogs选项重建控制文件,数据库不能打开。最后报错:

   

Database Characterset is ZHS16GBK

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_smon_6528.trc  (incident=28964):

ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []

Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_28964\orcl_smon_6528_i28964.trc

Doing block recovery for file 3 block 174711

Resuming block recovery (PMON) for file 3 block 174711

Block recovery from logseq 46800, block 104 to scn 125738712


Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_8284.trc  (incident=29016):

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []


   启动数据库至nomount, 执行以下脚本

      

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 4672
LOGFILE
  GROUP 1 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF',
CHARACTER SET ZHS16GBK

并执行recover database, 数据库可以打开,但是出现了新的问题, 打开之后直接抛错, 实例中止.

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6184.trc  (incident=30226):

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-01092: ORACLE 实例终止。强制断开连接

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 内部错误代码, 参数: [4194], [], [], [], [], [], [], [], [], [], [], []


这里是数据库的UNDO段出现了问题,需要通过将UNDO_MANAGEMENT设置为manual, 如下:

*.undo_management='MANUAL'

*.undo_tablespace='UNDOTBS1'


创建pfile, 修改之后,可以打开数据库.此时, 数据库告警日志中出现坏块的告警:

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_mmon_4624.trc  (incident=32607):

ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []

Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_32607\orcl_mmon_4624_i32607.trc

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_smon_1528.trc  (incident=32592):

ORA-01578: ORACLE data block corrupted (file # 2, block # 2)

ORA-01110: data file 2: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF'



此后将需要的业务数据通过exp导出, 并重建数据库, 问题最终解决


Best practice to create a new undo tablespace.
This method includes segment check.

1. Create pfile from spfile to edit
SQL> Create pfile='/tmp/initsid.ora' from spfile;

2. Shutdown the instance

3. set the following parameters in the pfile /tmp/initsid.ora
    undo_management = manual
    event = '10513 trace name context forever, level 2'

4. SQL>>startup restrict pfile='/tmp/initsid.ora'

5. SQL>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.  There are many options from this moment and Oracle Support Analyst can offer different solutions for the bad undo segments.

If all offline then continue to the next step

6. Create new undo tablespace - example
SQL>create undo tablespace <new undo tablespace> datafile <datafile> size 2000M;

7. Drop old undo tablespace
SQL>drop tablespace <old undo tablespace> including contents and datafiles;

8. SQL>shutdown immediate;

9 SQL>startup nomount;  --> Using your Original spfile

10. Modify the spfile with the new undo tablespace name

SQL> Alter system set undo_tablespace = '<new tablespace created in step 6>' scope=spfile;

11. SQL>shutdown immediate;

12. SQL>startup;  --> Using spfile


参考:  https://www.cnblogs.com/kerrycode/p/6085447.html  (ORA-00600 4194)

         http://www.xifenfei.com/2012/01/ora-00600kcratr_nab_less_than_odr%E6%95%85%E9%9A%9C%E8%A7%A3%E5%86%B3.html  (ora-00600

kcratr_nab_less_than_odr)

        


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-2649286/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    555
  • 访问量
    837582