重现ORA-600[4000]异常

本文通过实验重现ORA-600[4000]错误,深入查询数据库obj$.con$记录,并使用bbed修改数据块来揭示错误原因。详细介绍了数据库启动过程中的关键步骤,以及如何通过调整数据块信息来触发ORA-600[4000]错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于数据库恢复感兴趣的人,一定对于ORA-600[4000]这个著名的错误记忆犹新,这里通过试验重现ORA-600[4000]
查询数据库obj$.con$记录

[oracle@xifenfei ~]$ sqlplus / as sysdba
  
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov 4 06:32:36 2011
  
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
  
Connected to an idle instance.
  
SQL> startup
ORACLE instance started.
  
Total System Global Area  318767104 bytes
Fixed Size                  1219160 bytes
Variable Size              92276136 bytes
Database Buffers          218103808 bytes
Redo Buffers                7168000 bytes
Database mounted.
Database opened.
SQL> select OBJ#,dbms_rowid.rowid_relative_fno(rowid) rel_fno,
   2  dbms_rowid.rowid_block_number(rowid) block_num from obj$
   where name = 'CON$' ;
  
       OBJ#    REL_FNO  BLOCK_NUM
---------- ---------- ----------
         28          1        122
  
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

bbed修改数据块
根据催华的研究,当OBJ$中部分数据块中的csc和itl的scn都大于header scn的时候,数据库启动就会报ORA-600[4000]

[oracle@xifenfei ~]$ bbed listfile=list mode=edit password=blockedit
  
BBED: Release 2.0.0.0.0 - Limited Production on Fri Nov 4 06:47:09 2011
  
Copyright (c) 1982, 2011, Oracle and /or its affiliates.  All rights reserved.
  
************* !!! For Oracle Internal Use only !!! ***************
  
BBED> info
  File #  Name                                                        Size(blks)
  -----  ----                                                        ----------
      /u01/oracle/oradata/XFF/system01 .dbf                                 0
      /u01/oracle/oradata/XFF/undotbs01 .dbf                                0
      /u01/oracle/oradata/XFF/sysaux01 .dbf                                 0
      /u01/oracle/oradata/XFF/users01 .dbf                                  0
      /u01/oracle/oradata/XFF/datfttuser .dbf                               0
  
BBED> set block 1
         BLOCK #          1
  
BBED> set file 1 block 1
         FILE #           1
         BLOCK #          1
  
BBED>  p kcvfhckp.kcvcpscn
struct kcvcpscn, 8 bytes                    @484
    ub4 kscnbas                              @484      0x00210f97
    ub2 kscnwrp                              @488      0x0000
  
BBED> set block 122
         BLOCK #          122
  
BBED> p ktbbh
struct ktbbh, 48 bytes                      @20
    ub1 ktbbhtyp                             @20       0x01 (KDDBTDATA)
    union ktbbhsid, 4 bytes                  @24
       ub4 ktbbhsg1                          @24       0x00000012
       ub4 ktbbhod1                          @24       0x00000012
    struct ktbbhcsc, 8 bytes                 @28         <==csc(SCN of the last block cleanout)
       ub4 kscnbas                           @28       0x0020770d
       ub2 kscnwrp                           @32       0x0000
    sb2 ktbbhict                             @36       1
    ub1 ktbbhflg                             @38       0x02 (NONE)
    ub1 ktbbhfsl                             @39       0x00
    ub4 ktbbhfnx                             @40       0x00000000
    struct ktbbhitl[0], 24 bytes             @44
       struct ktbitxid, 8 bytes              @44
          ub2 kxidusn                        @44       0x0005  <==回滚段序号
          ub2 kxidslt                        @46       0x0029
          ub4 kxidsqn                        @48       0x0000029a
       struct ktbituba, 8 bytes              @52
          ub4 kubadba                        @52       0x00802381
          ub2 kubaseq                        @56       0x01f9
          ub1 kubarec                        @58       0x03
       ub2 ktbitflg                          @60       0x2001 (KTBFUPB)
       union _ktbitun, 2 bytes               @62
          sb2 _ktbitfsc                      @62       0
          ub2 _ktbitwrp                      @62       0x0000
       ub4 ktbitbas                          @64       0x0020770e <==itl commit scn
  
BBED> set count 16
         COUNT           16
  
BBED> m /x 0d772010 offset 28
Warning: contents of previous BIFILE will be lost. Proceed? (Y /N ) y
  File: /u01/oracle/oradata/XFF/system01 .dbf (1)
  Block: 122              Offsets:   28 to  60           Dba:0x0040007a
------------------------------------------------------------------------
  0d772010 00000000 01000200 00000000 
  
  <32 bytes per line>
  
BBED> m /x 0e772010 offset 64
  File: /u01/oracle/oradata/XFF/system01 .dbf (1)
  Block: 122              Offsets:   64 to  96           Dba:0x0040007a
------------------------------------------------------------------------
  0e772010 00016c00 ffffea00 53046903 
  
  <32 bytes per line>
  
BBED> p ktbbh
struct ktbbh, 48 bytes                      @20
    ub1 ktbbhtyp                             @20       0x01 (KDDBTDATA)
    union ktbbhsid, 4 bytes                  @24
       ub4 ktbbhsg1                          @24       0x00000012
       ub4 ktbbhod1                          @24       0x00000012
    struct ktbbhcsc, 8 bytes                 @28
       ub4 kscnbas                           @28       0x1020770d
       ub2 kscnwrp                           @32       0x0000
    sb2 ktbbhict                             @36       1
    ub1 ktbbhflg                             @38       0x02 (NONE)
    ub1 ktbbhfsl                             @39       0x00
    ub4 ktbbhfnx                             @40       0x00000000
    struct ktbbhitl[0], 24 bytes             @44
       struct ktbitxid, 8 bytes              @44
          ub2 kxidusn                        @44       0x0005
          ub2 kxidslt                        @46       0x0029
          ub4 kxidsqn                        @48       0x0000029a
       struct ktbituba, 8 bytes              @52
          ub4 kubadba                        @52       0x00802381
          ub2 kubaseq                        @56       0x01f9
          ub1 kubarec                        @58       0x03
       ub2 ktbitflg                          @60       0x2001 (KTBFUPB)
       union _ktbitun, 2 bytes               @62
          sb2 _ktbitfsc                      @62       0
          ub2 _ktbitwrp                      @62       0x0000
       ub4 ktbitbas                          @64       0x1020770e
  
BBED> sum apply
Check value for File 1, Block 122:
current = 0xc902, required = 0xc902

启动数据库

SQL> startup
ORACLE instance started.
  
Total System Global Area  318767104 bytes
Fixed Size                  1219160 bytes
Variable Size              92276136 bytes
Database Buffers          218103808 bytes
Redo Buffers                7168000 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced

查看日志

Fri Nov  4 06:50:38 2011
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT
Fri Nov  4 06:50:38 2011
ALTER DATABASE OPEN
Fri Nov  4 06:50:38 2011
LGWR: STARTING ARCH PROCESSES
ARC0 started with pid=16, OS id =7048
Fri Nov  4 06:50:38 2011
ARC0: Archival started
ARC1: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC1 started with pid=17, OS id =7050
ARC1: STARTING ARCH PROCESSES
Fri Nov  4 06:50:38 2011
ARC0: Becoming the 'no FAL' ARCH
ARC0: Becoming the 'no SRL' ARCH
Fri Nov  4 06:50:38 2011
Thread 1 opened at log sequence 38
   Current log # 3 seq# 38 mem# 0: /u01/oracle/oradata/XFF/redo03.log
Successful open of redo thread 1
Fri Nov  4 06:50:38 2011
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Fri Nov  4 06:50:38 2011
SMON: enabling cache recovery
Fri Nov  4 06:50:38 2011
ARC2: Archival started
ARC1: STARTING ARCH PROCESSES COMPLETE
ARC1: Becoming the heartbeat ARCH
ARC2 started with pid=18, OS id =7052
Fri Nov  4 06:50:38 2011
Errors in file /u01/oracle/admin/XFF/udump/xff_ora_7046 .trc:
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov  4 06:50:40 2011
Errors in file /u01/oracle/admin/XFF/udump/xff_ora_7046 .trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov  4 06:50:40 2011
Error 704 happened during db open , shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 7046
ORA-1092 signalled during: ALTER DATABASE OPEN...

在ORACL 11.2的版本中,同样的方法无法重新该错误,数据库依然能够正常打开,所以如果要测试的朋友请选择11G以下版本进行.

 

 

转载:http://www.xifenfei.com/

### 关于ORA-39014错误的原因及解决方法 #### 错误描述 ORA-39014表示在Oracle Data Pump操作过程中,一个或多个worker进程提前退出。这种错误通常发生在数据泵导出(expdp)或导入(impdp)期间,可能由多种因素引起。 --- #### 可能原因分析 1. **DMP文件损坏** 如果用于导入的dump文件存在损坏或者不完整,则可能导致worker进程读取失败并提前终止[^2]。例如,在传输大容量dmp文件时如果网络中断或其他意外情况发生,可能会造成部分文件丢失或大小不符。 2. **资源不足** 当系统内存、CPU或磁盘空间不足以支持Data Pump作业所需的并发度时,也可能引发此问题。特别是当设置了较高的PARALLEL参数而硬件配置无法满足需求时更容易出现问题[^5]。 3. **内部错误** ORA-39014有时会与其他更底层的技术性错误一起出现,比如ORA-00600(指示了一个严重的内部程序逻辑错误)。这表明可能存在软件缺陷或者是特定版本中的Bug[^1]。 4. **权限问题** 若执行import/export命令账户缺乏必要权限(如READ/WRITE目录对象),也有可能间接影响到workers正常运行从而触发该告警[^4]. --- #### 解决方案建议 针对上述提到的各种可能性,可以采取以下措施来尝试解决问题: 1. **验证Dump File完整性** - 使用`ls –l`命令确认目标服务器上的所有分割后的dmp文件大小与源端一致。 - 对比MD5校验值以确保文件无损转移成功[^2]. 2. **调整Parallel Degree设置** - 减少PARALLEL选项指定的数量至较低水平甚至关闭它(`PARALLEL=1`)重新测试整个流程看是否仍然重现同样状况. ```sql impdp username/password DIRECTORY=data_pump_dir DUMPFILE=file_name.dmp PARALLEL=1 LOGFILE=job_log.log; ``` 3. **增加系统资源配置** - 检查当前实例所在主机是否有足够的可用RAM/CPU核心数以及临时表空间剩余量可供分配给data pump jobs使用. - 如有必要可考虑升级物理设备规格或是优化现有环境部署架构. 4. **应用补丁更新** - 查询My Oracle Support(MOS)网站获取对应数据库发行版是否存在修复此类场景下表现出来的bug的相关patch集合,并按照官方指导说明安装实施[^3]. 5. **修改初始化参数规避冲突** - 尝试通过alter session/system语句禁用某些复杂查询改写机制降低潜在风险: ```sql ALTER SESSION SET "_complex_view_merging" = FALSE; ALTER SESSION SET "_optimizer_cost_based_transformation" = OFF; ``` 或者永久生效需加入init<sid>.ora/spfile中保存更改. 6. **清理共享池缓存重启服务** - FLUSH SHARED POOL释放陈旧元数据结构体后再重试业务操作;极端情况下完全停启instance亦不失为一种有效手段之一: ```sql ALTER SYSTEM FLUSH SHARED_POOL; ``` --- ### 总结 综上所述,ORA-39014通常是由于worker子线程未能顺利完成其预定任务所造成的复合型异常现象。实际排查过程往往需要结合具体现场日志记录深入挖掘根本诱因才能制定针对性强的有效应对策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值