ORA-04021-错误的再现及解决方法_第1页
ORA-04021-错误的再现及解决方法_第2页
ORA-04021-错误的再现及解决方法_第3页
ORA-04021-错误的再现及解决方法_第4页
ORA-04021-错误的再现及解决方法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ORA-04021 错误的再现及解决方法 = 编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法: 1.可能被锁住 查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,gram,cess,b.status from v$lock a , v$session b where a.SID = b.SID 得到死锁session的SID,SERIAL#参看这个是否为你自己用户下的,然后kill掉session 2.可能被挂起 查看v$session_waitselect b.serial#,a.* from v$session_wait a,v$session bwhere a.sid = b.sid得到等待的session的sid和serial#3.查看dba_ddl_locksselect session_id sid, owner, name, type, mode_held held, mode_requested request from dba_ddl_locks where name = &your_package_name- 我们系统中,又产生了一次ORA-04021错误。该错误的产生,一般是在你试图更新一个存储过程的时候。具体现象就是:你试图更新一个存储过程,编译时会一直等待,当超过一定时间后,提示这个错误。Oracle对这个错误的解释如下ORA-04021 timeout occurred while waiting to lock object stringstringstringstringstringCause: While waiting to lock a library object, a timeout is occurred.Action: Retry the operation later.这很有可能是因为其他会话在调用该后台包,此时该包在共享池中被锁住。查询v$session_wait时会发现你的会话处于“library cache pin”等待。下面我们先再现一下该错误:session1:创建一个长期执行的过程(死循环),并执行。此时该过程被pin到library cache中。请输入用户名: yuechaotian/test连接到:Oracle9i Enterprise Edition Release .0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release .0 - ProductionSQL select distinct sid from v$mystat;SID-11SQL CREATE OR REPLACE PROCEDURE prc_test_lock2 IS3 BEGIN4 WHILE TRUE LOOP5 NULL;6 END LOOP;7 END;8 /过程已创建。SQL exec prc_test_lock;.-处于死循环中.请输入用户名: yuechaotian/test连接到:Oracle9i Enterprise Edition Release .0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release .0 - ProductionSQL select distinct sid from v$mystat;SID-12SQL CREATE OR REPLACE PROCEDURE prc_test_lock2 IS3 v_temp VARCHAR2(10);4 BEGIN5 WHILE TRUE LOOP6 NULL;7 END LOOP;8 END;9 /.- 处于等待中,一段时间后,出现如下错误:CREATE OR REPLACE PROCEDURE prc_test_lock*ERROR 位于第 1 行:ORA-04021: 等待锁定对象 TEST.PRC_TEST_LOCK 时发生超时SQL SQL conn / as sysdba已连接。SQL select distinct sid from v$mystat;SID-19SQL select EVENT from v$session_wait where sid=12;EVENT -library cache pin 这就需要我们在更新存储过程之前先查询一下,确定没有会话执行该过程。然后再更新。我们接着在session3中查询(显示结果中的SYS为本次会话,可以排除):SQL SELECT DISTINCT ( | s.sid | ) - | username AS (session) - username2 FROM V$SESSION s, sys.x$kglob o, sys.x$kglpn p3 WHERE upper(o.kglnaobj) LIKE upper(%prc_test_lock%)4 AND p.kglpnhdl = o.kglhdadr5 AND s.SADDR = p.kglpnuse;(session) - username-(11) - TEST(19) - SYS这样,我们就知道过程“prc_test_lock”被11号会话调用,此时不能更新该过程。若是由于Oracle的错误造成过程被pin到内存中一直都不能释放,则可以根据上面查询的SID,尝试kill掉11号进程。当然,之前你应该确定11号会话对你的系统来说已经没用了。对于我的测试,当kill掉11号进程后,12号进程就可以更新该存储过程了。而11号进程的界面显示如下:SQL exec prc_test_lock;BEGIN prc_test_lock; END;*ERROR 位于第 1 行:ORA-00028: 您的会话己被删去SQLsys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论