C/C++教程

编辑oracle对象的时候被锁的检查 ora-04021

本文主要是介绍编辑oracle对象的时候被锁的检查 ora-04021,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

编辑数据库包或者object的时候被锁了,但是检查锁的时候没有查到原因

纠结了一下,后来想到是否是因为依赖对象的锁导致的连环锁,做追踪检查,最终确认了问题

第一步,检查对象被锁的代码,未找到相关锁

SELECT a.Sid
      ,a.Serial#
      ,b.Sql_Fulltext
      ,a.Machine
      ,a.Status
      ,a.Blocking_Session
      ,a.Blocking_Session_Status
  FROM V$session a
      ,V$sql     b
 WHERE a.Sql_Id = b.Sql_Id
   AND b.Sql_Fulltext LIKE '%XXINTERFACE_PAGE%';

第二步,检查该对象的依赖关系

说明:Dba_Dependencies表的referenced_name表名被依赖对象,及如果对象“XXINTERFACE_PAGE”被修改,会影响那些对象,如果这些对象在锁,则XXINTERFACE_PAGE不能被修改
SELECT *
  FROM Dba_Dependencies Dd
 WHERE Dd.referenced_name = 'XXINTERFACE_PAGE';

第三步,参照第一步的代码,检查依赖对象的锁,果然,有被锁的对象,解开锁就可以正常编译了
SELECT a.Sid
      ,a.Serial#
      ,b.Sql_Fulltext
      ,a.Machine
      ,a.Status
      ,a.Blocking_Session
      ,a.Blocking_Session_Status
  FROM V$session a
      ,V$sql     b
 WHERE a.Sql_Id = b.Sql_Id
   AND (b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM_BOM%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM_GTS%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM_BOM%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM_GTS%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_MESSAGE%'
or b.Sql_Fulltext LIKE '%XXCUS_ITEMSYNC_NEW_PKG%'
or b.Sql_Fulltext LIKE '%XXCUS_GTS_ITEMS_PKG%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_MESSAGE_GTS%'
or b.Sql_Fulltext LIKE '%XXCUS_INT_MESSAGE_NEW_UTL%'
or b.Sql_Fulltext LIKE '%XXCUS_INT_MESSAGE_NEW_UTL%'
or b.Sql_Fulltext LIKE '%XXCUS_INT_MESSAGE_INFO_UTL%'
or b.Sql_Fulltext LIKE '%XXCUS_BOM_EXPAND_PKG%'
or b.Sql_Fulltext LIKE '%XXCUS_INT_MESSAGE_INFO_UTL%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_SYSTEM%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_MESSAGE%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_PAGE%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_PAGES%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_MESSAGE_GTS%'
or b.Sql_Fulltext LIKE '%XXINTERFACE_PAGE%');

注意:这次的原因是因为,一个发送报文的程序,写在了一个对象中,一旦这个调用这个对象的发送报文程序,则其依赖的对象都会被锁定,直到事物结束。

程序设计的时候,一些核心的和被频繁调用的程序要单独成包,降低耦合,避免过度的依赖造成无意义的锁。

这篇关于编辑oracle对象的时候被锁的检查 ora-04021的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!