【发布时间】:2018-08-29 11:00:59
【问题描述】:
在我正在处理的一个 Oracle 数据库实例上,我在重新编译包时观察到与正常行为不同的行为。
通常,(如问题 Frequent error in Oracle ORA-04068: existing state of packages has been discarded)在 PL/SQL 包重新编译后预期会在第一次调用时出现以下错误:
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "PACKAGE.NAME" has been
invalidated
ORA-06508: PL/SQL: could not find program unit being called:
"PACKAGE.NAME"
ORA-06512: at line 1
但第二次调用应该可以正常工作,假设包当然没有错误。此行为以前存在于该环境中。与此同时,我们从 11g R2 升级到 12c R1,并启用了基于版本的重新定义。
现在我遇到的问题是我一直只是:
ORA-04061: existing state of package body "PACKAGE.NAME" has been
invalidated
ORA-06508: PL/SQL: could not find program unit being called:
"PACKAGE.NAME"
ORA-06512: at line 1
所以不再存在 ORA-04068,唯一的解决方法是重新连接会话或手动调用 DBMS_SESSION.RESET_PACKAGE()(但我不控制所有可能受到影响的代码),否则问题仍然存在每次通话。
是否有任何可以调整的数据库参数来控制这个?该问题并非特定于任何特定的 PL/SQL 包,它似乎可以在其引用的内容发生更改时由正常的包失效触发。
提前谢谢你。
【问题讨论】:
标签: oracle plsql oracle11g oracle12c