ORA-7445(kdodpm)错误

本文记录了一次使用Oracle LogMiner过程中遇到的ORA-03113错误及其解决过程。通过分析发现错误与特定环境配置相关,并通过切换日志解决了问题。

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

在进行LogMiner操作时碰到了这个错误。下面描述一下错误的起因及解决的过程。

由于要查看被程序删除的一些记录,因此对重做日志进行了LogMiner的操作:

  1. SQL>altersessionsetnls_date_format='yyyy-mm-dd
  2. hh24:mi:ss';
  3. 会话已更改。
  4. SQL>select*fromv$log;
  5. GROUP#THREAD#SEQUENCE#BYTESMEMBERSARC
  6. STATUSFIRST_CHANGE#FIRST_TIME
  7. ------------------------------------------
  8. -----------------------------------------
  9. 1132851073741824
  10. 2YESINACTIVE1.1124E+122009-07-28
  11. 00:00:08
  12. 2132861073741824
  13. 2YESINACTIVE1.1124E+122009-07-28
  14. 00:02:20
  15. 3132871073741824
  16. 2NOCURRENT1.1124E+122009-07-28
  17. 01:00:13
  18. 4132841073741824
  19. 2YESINACTIVE1.1124E+122009-07-27
  20. 01:00:30
  21. 5214571073741824
  22. 2NOCURRENT1.1124E+122009-07-27
  23. 23:53:27
  24. 62145410737418242
  25. YESINACTIVE1.1124E+122009-07-2600:25:45
  26. 72145510737418242
  27. YESINACTIVE1.1124E+122009-07-2600:26:39
  28. 82145610737418242
  29. YESINACTIVE1.1124E+122009-07-2623:53:34
  30. 已选择8行。

检查日志信息后发现要处理的是当前的日志文件:

  1. SQL>selectmemberfromv$logfilewheregroup#in(3,5);
  2. MEMBER
  3. --------------------------------------------------
  4. /dev/vx/rdsk/datadg/tradedb_redo1_3_1_1g
  5. /dev/vx/rdsk/datadg/tradedb_redo1_3_2_1g
  6. /dev/vx/rdsk/datadg/tradedb_redo2_1_1_1g
  7. /dev/vx/rdsk/datadg/tradedb_redo2_1_2_1g
  8. SQL>exec
  9. dbms_logmnr.add_logfile('/dev/vx/rdsk/datadg/tradedb_redo1_3
  10. _1_1g',dbms_logmnr.new)
  11. PL/SQL过程已成功完成。
  12. SQL>exec
  13. dbms_logmnr.add_logfile('/dev/vx/rdsk/datadg/tradedb_redo2_1
  14. _1_1g',dbms_logmnr.addfile)
  15. PL/SQL过程已成功完成。
  16. SQL>execdbms_logmnr.start_logmnr(options=>
  17. dbms_logmnr.dict_from_online_catalog)
  18. PL/SQL过程已成功完成。
  19. SQL>createtablet_logminertablespacesysaux
  20. 2asselect*fromv$logmnr_contentswhereseg_owner=
  21. 'ZHEJIANG'andseg_name='LP_PRICE_PROCESS';
  22. createtablet_logminertablespacesysaux
  23. *
  24. 第1行出现错误:
  25. ORA-03113:通信通道的文件结束
  26. SQL>execdbms_logmnr.end_logmnr
  27. ERROR:
  28. ORA-03114:未连接到ORALCE

本来一个很简单的操作,没想到遇到了错误。一般前台出现ORA-3113错误,后台多半出现ORA-7445或ORA-600错误,下面检查alert文件:

  1. TueJul2816:04:242009
  2. Errorsinfile
  3. /opt/oracle/admin/tradedb/udump/tradedb1_ora_10798.trc:
  4. ORA-07445:出现异常错误:核心转储[kdodpm()+2068][SIGSEGV]
  5. [Invalidpermissionsformappedobject][0xFFFFFFFF79270002]
  6. [][]
  7. 在alert文件中果然出现了ORA-7445错误,错误参数为kdodpm。检查
  8. 这个错误对应的trace文件:
  9. ***2009-07-2815:59:15.046
  10. ***SERVICENAME:(SYS$USERS)2009-07-2815:59:15.027
  11. ***SESSIONID:(282.47827)2009-07-2815:59:15.027
  12. *kjdrpkey2hv:calledwithpkey207480,optionsx8
  13. ***2009-07-2816:04:24.179
  14. Exceptionsignal:11(SIGSEGV),code:2(Invalidpermissions
  15. formappedobject),addr:0xffffffff79270002,PC:
  16. [0x10285aa34,kdodpm(
  17. )+2068]
  18. ***2009-07-2816:04:24.186
  19. ksedmp:internalorfatalerror
  20. ORA-07445:出现异常错误:核心转储[kdodpm()+2068][SIGSEGV]
  21. [Invalidpermissionsformappedobject][0xFFFFFFFF79270002]
  22. [][]
  23. CurrentSQLstatementforthissession:
  24. createtablet_logminertablespacesysaux
  25. asselect*fromv$logmnr_contentswhereseg_owner=
  26. 'ZHEJIANG'andseg_name='LP_PRICE_PROCESS'
  27. -----CallStackTrace-----
  28. callingcallentry
  29. argumentvaluesinhex
  30. locationtypepoint
  31. (?meansdubiousvalue)
  32. ------------------------------------------------
  33. ----------------------------
  34. ksedmp()+744CALLksedst()
  35. 000000300?1066DE17C?
  36. 000000000?1066DAC70?
  37. 1066D99D8?1066DA3D8?

显然问题是LogMiner操作造成的。Oracle从9i开始就提供了LogMiner功能,到10g已经比较稳定了,再加上平时使用LogMiner很少出现错误,那么此次出错应是由于一些特殊的操作或配置导致的。如果说当前这个LogMiner操作与其他普通的操作有什么不同的话,那么主要是两点:一个是当前为RAC环境,LogMiner要同时对两个实例的日志进行分析;另一个就是当前分析的日志是ONLINE日志。

由于RAC环境的日志对于任何一个实例都是可以访问的,理论上不大可能出现上面的问题,可见多半是当前日志造成的问题。切换当前日志,然后再次执行同样的操作:

  1. SQL>conn/assysdba
  2. 已连接。
  3. SQL>altersessionsetnls_date_format='yyyy-mm-dd
  4. hh24:mi:ss';
  5. 会话已更改。
  6. SQL>selectgroup#,statusfromv$logwherestatus=
  7. 'CURRENT';
  8. GROUP#STATUS
  9. --------------------------
  10. 3CURRENT
  11. 5CURRENT
  12. 已选择2行。
  13. SQL>selectmemberfromv$logfilewheregroup#in(3,5);
  14. MEMBER
  15. --------------------------------------------------
  16. /dev/vx/rdsk/datadg/tradedb_redo1_3_1_1g
  17. /dev/vx/rdsk/datadg/tradedb_redo1_3_2_1g
  18. /dev/vx/rdsk/datadg/tradedb_redo2_1_1_1g
  19. /dev/vx/rdsk/datadg/tradedb_redo2_1_2_1g
  20. 已选择4行。
  21. SQL>altersystemarchivelogcurrent;
  22. 系统已更改。
  23. SQL>selectgroup#,statusfromv$logwherestatus=
  24. 'CURRENT';
  25. GROUP#STATUS
  26. --------------------------
  27. 4CURRENT
  28. 6CURRENT
  29. 已选择2行。
  30. SQL>exec
  31. dbms_logmnr.add_logfile('/dev/vx/rdsk/datadg/tradedb_redo1_3
  32. _1_1g',dbms_logmnr.new)
  33. PL/SQL过程已成功完成。
  34. SQL>exec
  35. dbms_logmnr.add_logfile('/dev/vx/rdsk/datadg/tradedb_redo2_1
  36. _1_1g',dbms_logmnr.addfile)
  37. PL/SQL过程已成功完成。
  38. SQL>execdbms_logmnr.start_logmnr(options=>
  39. dbms_logmnr.dict_from_online_catalog)
  40. PL/SQL过程已成功完成。
  41. SQL>createtablet_logminertablespacesysaux
  42. 2asselect*fromv$logmnr_contents
  43. 3whereseg_owner='ZHEJIANG'
  44. 4andseg_name='LP_PRICE_PROCESS';
  45. 表已创建。

切换日志后LogMiner分析的日志不再是ONLINE日志文件,问题不再出现。

在出现错误时不要着急,如能冷静地思考当前的操作有何特殊之处,往往可以迅速地定位并解决问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值