sql - 避免在编译 Oracle 包时挂起

标签 sql oracle plsql oracle11g

我们有一种情况,包的编译需要永远!
如果我们用新名称编译包,那么它就可以工作了!

据我了解,由于包上的锁,编译挂起!

这样的事情可能有助于确定问题!

    SELECT s.sid,
       l.lock_type,
       l.mode_held,
       l.mode_requested,
       l.lock_id1,
    FROM   dba_lock_internal l,
       v$session s
    WHERE s.sid = l.session_id
    AND UPPER(l.lock_id1) LIKE '%PROCEDURE_NAME%'
    AND l.lock_type = 'Body Definition Lock';

还有这个
select 
   x.sid 
from 
   v$session x, v$sqltext y
where 
   x.sql_address = y.address
and 
   y.sql_text like '%PROCEDURE_NAME%';

是不是只有 ' body 定义锁' 阻止编译?
是否有任何其他锁定类型阻止编译?

如何避免锁定并进行编译?仅通过杀死 session ?还有别的吗?

最佳答案

您可能想查看 Edition-based Redefinition这将允许您创建新修订版,编译新版本而不会被当前使用包的其他 session 阻止,并在以后启用新修订版。

关于sql - 避免在编译 Oracle 包时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045604/

相关文章:

php - 限制对特定页面的访问

sql - 无重复的多列联合查询

sql - 用通配符替换值(解析文本数据)

oracle - Oracle PL/SQL 中的存储过程

database - 如何在实体-属性-值设计中处理不同的数据类型(例如,具有多列的单个表或每种数据类型的多个表)?

java - 表数据覆盖

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 甲骨文 - 将日期分成几个季度

c# - 有没有更好的方法将对象从数据库查询映射到对象?

Oracle 11g - 阶乘不适用于大数