DBAtlas · 数据库运维图谱

ORA-04061: existing state of package/procedure has been invalidated(包/过程的现有状态已失效)

Oracle

含义

由于被调用的 PL/SQL 对象(包、过程、函数)所依赖的对象发生了变化,其现有状态已失效。这是伴随 ORA-04068 出现的状态丢失情形的一种变体;会话持有的包状态已不再有效。

原因

在会话使用某个包期间,对该包或其依赖对象执行了 DDL(表结构更改、重新编译、授权更改)。结果会话现有的包状态失效。在部署频繁、应用运行期间进行架构更改的环境中出现。

解决方法

同一调用通常第二次就会成功(因为状态已被重置);在应用中捕获此错误并安全重试。在应用流量较低时/维护窗口内进行架构更改。批量编译无效对象:EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); 尽量减少包状态(全局变量)的设计可以降低此影响。

在 DBAtlas 中打开 →

同一数据库的其他条目