如何检查 user/session 是否正在使用包?

How to check if a user/session is using a package ?

我有一个包裹 ARG_AP_INVOCE_PKG 已进入 INVAILD 状态。 编译后还没有进入VAILD状态。

所以我与我的开发人员进行了交叉核对,发现其中一位正在开发它。

在这种情况下如何找到另一个正在使用的包 user/session?

请向我提供查询。

谢谢!

您可以检查 V$SESSION 并找到 idinstance 来检测谁阻止了您

check this link

您可以查询 v$locked_object 例如

select  /*+ RULE */
  s.sid,
  s.serial#,
  p.spid "OS SID",
  s.sql_hash_value "HASH VALUE",
  s.username "ORA USER",
  s.status,
  s.osuser "OS USER",
  s.machine,
  s.terminal,
  s.type,
  s.program,
  s.logon_time,
  s.last_call_et,
  s.sql_id,
  l.process,
  decode(L.locked_mode,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Share Row Exclusive', 
                6,'Exclusive','NONE') "Lock Mode",
  o.OWNER,
  o.OBJECT_NAME,
  o.OBJECT_TYPE    
from 
  v$session s,v$locked_object l, dba_objects o, v$process p
where 
  p.addr = s.paddr and
  s.sid=l.session_id and
  l.object_id=o.object_id
order by sid

或者如果没有锁,这将在游标中找到所有被访问的对象

select  /*+ RULE */
  s.sid,
  s.serial#,
  p.spid "OS SID",
  s.sql_hash_value "HASH VALUE",
  s.username "ORA USER",
  s.status,
  s.osuser "OS USER",
  s.machine,
  s.terminal,
  s.type,
  s.program,
  s.logon_time,
  s.sql_id,
  a.owner,
  a.object,
  a.type "OBJ TYPE"
from 
  v$session s,v$process p, v$access a
where 
  p.addr = s.paddr and
  a.sid=s.sid
order by sid