【发布时间】:2023-01-27 11:03:52
【问题描述】:
程序无法编译?它只是在运行,什么也没发生。 并且我已经尝试使用以下代码来检查是否有任何块会话可以做到这一点。但我没有发现任何被阻止的会话。 选择 * 从 v$会话 在哪里 blocking_session 不为空 订购方式 阻塞会话;
【问题讨论】:
标签: plsql
程序无法编译?它只是在运行,什么也没发生。 并且我已经尝试使用以下代码来检查是否有任何块会话可以做到这一点。但我没有发现任何被阻止的会话。 选择 * 从 v$会话 在哪里 blocking_session 不为空 订购方式 阻塞会话;
【问题讨论】:
标签: plsql
您不会发现它是阻塞会话,也不会在 gv$lock 中发现它,因为它是库对象锁而不是数据对象锁。相反,请查看gv$access 和/或dba_ddl_locks。您还可以在 gv$session 中查找与 dba_objects 或 dba_procedures 中过程的 object_id 匹配的 plsql_object_id 或 plsql_entry_object_id。但是,如果您有链式 PL/SQL 调用,这并不是捕获所有内容的万无一失的方法……但是 gv$access 和/或 dba_ddl_locks 肯定会满足您的需要。
如果有东西正在执行你的程序,你将不得不等待它们完成,或者终止它们的会话,然后才能编译它。这是 Oracle 中的一个弱点,它阻止我们在不首先将所有人踢出的情况下推送代码更改。但事情就是这样。
【讨论】: