知识大全 ORA-600(17069)错误的解决过程
Posted 过程
篇首语:聪明在于勤奋,天才在于积累。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORA-600(17069)错误的解决过程相关的知识,希望对你有一定的参考价值。
ORA-600(17069)错误的解决过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
今天在一个报表数据库后台发现了这个错误 简单描述一下问题的解决过程
详细的错误信息为
Fri Feb : : Errors in file /u /oracle/admin/repdb /bdump/repdb _j _ trc:ORA : internal error code arguments: [ ] [ x A DEE E ] [] [] [] [] [] []Fri Feb : : Errors in file /u /oracle/admin/repdb /bdump/repdb _j _ trc:ORA : internal error code arguments: [ ] [ x A DEE E ] [] [] [] [] [] []
进一步检查对应的trace文件
bash $ more /u /oracle/admin/repdb /bdump/repdb _j _ trc/u /oracle/admin/repdb /bdump/repdb _j _ trcOracle i Enterprise Edition Release bit ProductionWith the Partitioning OLAP and Oracle Data Mining optionsJServer Release ProductionORACLE_HOME = /data/oracle/product/ System name: SunOSNode name: newreportRelease: Version: Generic_ Machine: sun uInstance name: repdb Redo thread mounted by this instance: Oracle process number: Unix process pid: image: oracle@newreport (J )
*** SESSION ID:( ) : : *** : : ksedmp: internal or fatal errorORA : internal error code arguments: [ ] [ x A DEE E ] [] [] [] [] [] []Current SQL statement for this session:DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate; broken BOOLEAN := FALSE; BEGIN P_GENERATE_REPDATA( FR T ); :mydate := next_date; IF broken THEN :b := ; ELSE :b := ; END IF; END; Call Stack Trace calling call entry argument values in hex location type point (? means dubious value) ksedmp()+ CALL ksedst()+ FFFFFFFF FFF ? ? ? E ?FFFFFFFF FFF CC ? D C ?kgeriv()+ PTR_CALL ? ? D ? C ? D ? D C ?kgesiv()+ CALL kgeriv()+ D E ? C ? ? C ?FFFFFFFF FFF ? DB ?kgesic ()+ CALL kgesiv()+ D E ? C ? AD ? ?FFFFFFFF FFF ? ?kglgob()+ CALL kgesic ()+ D E ? C ? AD ? ? A DEE E ? A ?kgldpo()+ CALL kglgob()+ ? ? A DEE E ?FFFFFFFF FFF A ? ? ?kgldon()+ CALL kgldpo()+ ? ? A DA ? ? ?FFFFFFFF FFF BEE ?pkldon()+ CALL kgldon()+ D E ?FFFFFFFF FFF DE ? A DA ? ? ?FFFFFFFF FFF D E ?pkloud()+ CALL pkldon()+ FFFFFFFF FFFA A ?FFFFFFFF FFF DE ? A DA ? ? ?FFFFFFFF FFF D E ?phnnrl_name_resolve CALL pkloud()+ FCA ?_by_loading()+ FFFFFFFF FFF E C ? ? ? ? A CE ?phngdl_get_defining CALL phnnrl_name_resolve ? ?_libunit()+ _by_loading()+ FFFFFFFF FFF ?FFFFFFFF FFF ? ? ?phnrpls_resolve_pre CALL phngdl_get_defining FFFFFFFF FFF ?fix_libscope()+ _libunit()+ FFFFFFFF FFF A ?FFFFFFFF FFF C ? ? ? ?
无论是从trace文件对应的名称 还是从trace文件中对应的语句都可以确定 引起问题的是一个JOB 检查metalink Oracle在文档Doc ID 中对这个错误的已知bug 进行了汇总 不过这些bug的描述似乎没有和当前十分相符的
查看文档的描述 发现ORA 错误的第二个参数 这里是 x A DEE E 代表Library Cache Object Handle 看来问题可能和LATCH有关
但是根据信息在V$LATCH和V$LATCH_CHILDREN视图中 没有找到有价值的信息
这个JOB由于失败会自动再次执行 检查JOB运行时的V$LOCK信息
SQL> SELECT ADDR TYPE ID ID LMODE REQUEST BLOCK FROM V$LOCK WHERE SID = ;
ADDR TY ID ID LMODE REQUEST BLOCK CU E+ F JQ
从V$LOCK中看不到什么特别有价值的信息 接着检查V$SESSION_WAIT 看看这个JOB在等待什么
SQL> SELECT EVENT P TEXT P RAW P TEXT P RAW STATE FROM V$SESSION_WAIT WHERE SID = ;
EVENT P TEXT P RAW P TEXT P RAW STATE library cache pin handle address A DEE E pin address B A A WAITING
这次的信息就明显了 ORA 错误的第二个参数就是V$SESSION_WAIT视图的P RAW的值 而且从等待事件上也可以看到 问题就是出现在LIBRARY CACHE PIN的过程中
重新查看METALINK的信息 这个错误可能发生在一个长时间运行的进程 在其运行过程中 所依赖的对象被编译或者删除了
检查JOB调用的过程的状态
SQL> SELECT OWNER OBJECT_NAME OBJECT_TYPE STATUS FROM DBA_OBJECTS WHERE OWNER = FUJIANREP AND OBJECT_NAME = P_GENERATE_REPDATA ;
OWNER OBJECT_NAME OBJECT_TYPE STATUS FUJIANREP
果然问题过程处于不正常的状态
将JOB至于BROKEN状态 避免JOB再次运行
SQL> EXEC DBMS_JOB BROKEN( TRUE)
PL/SQL procedure successfully pleted
SQL> MIT;
Commit plete
杀掉JOB对应的PROCESS
SQL> SELECT SPID FROM V$PROCESS WHERE ADDR IN (SELECT PADDR FROM V$SESSION WHERE SID = );
SPID
SQL> HOST kill
下面用重新编译该过程
SQL> ALTER PROCEDURE P_GENERATE_REPDATA PILE;ALTER PROCEDURE P_GENERATE_REPDATA PILE*ERROR at line :ORA : timeout occurred while waiting to lock object FUJIANREP P_GENERATE_REPDATA由于从V$LOCK和V$LATCH无法得到信息 只能看看有没有其他人当前在访问P_GENERATE_REPDATA所依赖的对象
SQL> SELECT * FROM V$ACCESS WHERE (OWNER OBJECT) IN (SELECT REFERENCED_OWNER REFERENCED_NAME FROM DBA_DEPENDENCIES WHERE OWNER = FUJIANREP AND NAME = P_GENERATE_REPDATA );
SID OWNER OBJECT TYPE FUJIANREP CAT_BUYER SYNONYM FUJIANREP CAT_CATEGORY SYNONYM FUJIANREP CAT_DOSEAGE_FORM SYNONYM FUJIANREP CAT_DRUG SYNONYM FUJIANREP CAT_ENTERPRISE SYNONYM FUJIANREP CAT_METRIC SYNONYM FUJIANREP CAT_ORG SYNONYM FUJIANREP CAT_PRODUCT SYNONYM FUJIANREP CAT_QUALITY_DEFINE SYNONYM FUJIANREP GOV_CAT_BUYER TABLE FUJIANREP GOV_CAT_ENTERPRISE TABLE FUJIANREP GOV_S_MO_BU TABLE FUJIANREP GOV_S_MO_BU_EN TABLE FUJIANREP GOV_S_MO_BU_PR TABLE FUJIANREP GOV_S_MO_EN TABLE FUJIANREP GOV_S_MO_ME TABLE FUJIANREP GOV_S_MO_ME_CA TABLE FUJIANREP GOV_S_MO_ME_PR TABLE FUJIANREP GOV_S_MO_ORDER TABLE FUJIANREP GOV_S_YE_ORDER TABLE FUJIANREP GRP_HOSPITAL TABLE FUJIANREP GRP_LEVEL TABLE FUJIANREP ORD_ORDER TABLE FUJIANREP ORD_ORDER_ITEM TABLE FUJIANREP ORD_ORDER_ITEM_REP CURSOR FUJIANREP ORD_ORDER_RECEIVE TABLE FUJIANREP ORD_ORDER_RECEIVE_REP SYNONYM FUJIANREP ORD_ORDER_REP CURSOR FUJIANREP ORD_ORDER_RETURN TABLE FUJIANREP ORD_ORDER_RETURN_REP CURSOR FUJIANREP PLT_PLAT CURSOR FUJIANREP USER_TAB_PARTITIONS CURSOR NDMAIN CAT_BUYER TABLE NDMAIN CAT_CATEGORY TABLE NDMAIN CAT_DOSEAGE_FORM TABLE NDMAIN CAT_DRUG TABLE NDMAIN CAT_ENTERPRISE TABLE NDMAIN CAT_METRIC TABLE NDMAIN CAT_ORG TABLE NDMAIN CAT_PRODUCT TABLE NDMAIN CAT_QUALITY_DEFINE TABLE NDMAIN ORD_ORDER VIEW NDMAIN ORD_ORDER_ITEM VIEW NDMAIN ORD_ORDER_RECEIVE VIEW NDMAIN ORD_ORDER_RETURN VIEW NDMAIN PLT_PLAT TABLE PUBLIC USER_TAB_PARTITIONS SYNONYM SYS STANDARD PACKAGE SYS STANDARD PACKAGE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE SYS USER_TAB_PARTITIONS VIEW
rows selected
对象果然被其他人所访问 看看这个会话在做什么
SQL> SELECT SID SERIAL# USERNAME PROGRAM TERMINAL FROM V$SESSION WHERE SID = ;
SID SERIAL# USERNAME PROGRAM TERMINAL FUJIANREP PlSqlDev exe LIBY
没想到是同事的连接的会话 看看他在干什么
SQL> SELECT SQL_TEXT FROM V$SQL WHERE ADDRESS IN (SELECT SQL_ADDRESS FROM V$SESSION WHERE SID = );
SQL_TEXT ALTER TABLE GOV_S_MO_EN TRUNCATE PARTITION P
居然是TRUNCATE分区操作 难怪会导致过程处于INVALID状态 不过这个操作应该不会持续很长时间的 难道这个操作一直没有完成吗
SQL> SELECT EVENT P TEXT P P TEXT P P TEXT P SECONDS_IN_WAIT FROM V$SESSION_WAIT WHERE SID = ;
EVENT P TEXT P P TEXT P P TEXT P SECONDS_IN_WAIT db file sequential read file# block# blocks
这个等待已经发生了几十天了 显然这是一个僵死的会话
从后台kill掉对应的进程
SQL> SELECT SPID FROM V$PROCESS WHERE ADDR IN (SELECT PADDR FROM V$SESSION WHERE SID = );
SPID
SQL> HOST kill
切换为FUJIANREP用户 再次编译过程
SQL> ALTER PROCEDURE P_GENERATE_REPDATA PILE;
Procedure altered
至此 问题解决 将JOB重新设置BROKEN即可
SQL> EXEC DBMS_JOB BROKEN( FALSE)
PL/SQL procedure successfully pleted
SQL> MIT;
Commit plete
cha138/Article/program/Oracle/201311/17705相关参考
知识大全 编译存储过程时出现Ora-04021错误的解决方法
编译存储过程时出现Ora-04021错误的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 SQL Server 2008安装过程中出现1608错误的解决办法
SQLServer2008安装过程中出现1608错误的解决办法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
简单描述了解决过程对类似错误起一个抛砖引玉的作用 一问题现象 在报警文件中从早上开始一直到处理问题时出现大量的ORA错误通过TRC文
知识大全 解决js数据包含加号+通过ajax传到后台时出现连接错误
测试过程中发现js数据包含加号+通过ajax传到后台时出现连接错误删除+链接畅通了果然是这块问题对加号进行转义 昨天有人提出一个bug说“B+侦探”和"C+侦探"不能看我当时很郁闷因为其他资源是
从最古老的程序设计语言开始错误控制一直都是设计者们需要解决的一个大问题由于很难设计出一套完美的错误控制方案许多语言干脆将问题简单地忽略掉将其转嫁给库设计人员对大多数错误控制方案来说最主要的一个问题
ORA-006002662错误解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果我们的当前
ORA-12714错误解决总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目前数据库升级到了
ORA-04098错误解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据库版本平台SO
如何解决ORA-04031错误(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当我们在共享
Eclipse导入工程错误的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n