ORA-04061: existing state of package/procedure has been invalidated(包/过程的现有状态已失效)
Oracle含义
由于被调用的 PL/SQL 对象(包、过程、函数)所依赖的对象发生了变化,其现有状态已失效。这是伴随 ORA-04068 出现的状态丢失情形的一种变体;会话持有的包状态已不再有效。
原因
在会话使用某个包期间,对该包或其依赖对象执行了 DDL(表结构更改、重新编译、授权更改)。结果会话现有的包状态失效。在部署频繁、应用运行期间进行架构更改的环境中出现。
解决方法
同一调用通常第二次就会成功(因为状态已被重置);在应用中捕获此错误并安全重试。在应用流量较低时/维护窗口内进行架构更改。批量编译无效对象:EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); 尽量减少包状态(全局变量)的设计可以降低此影响。
同一数据库的其他条目
- ORA-19804cannot reclaim N bytes disk space from M bytes limit(无法从 M 字节的限制中回收 N 字节磁盘空间)
- ORA-00494enqueue held for too long by 'inst N, osid M'(enqueue 被 'inst N, osid M' 持有时间过长)
- ORA-04021timeout occurred while waiting to lock object(等待锁定对象时超时)
- ORA-01466unable to read data - table definition has changed(无法读取数据 —— 表定义已更改)
- ORA-08176consistent read failure; rollback data not available(一致性读失败;回滚数据不可用)
- ORA-00020maximum number of processes (N) exceeded(超出最大进程数 N)
- ORA-01113file N needs media recovery(文件 N 需要介质恢复)