jon*_*ita 10 sql oracle oracle10g
我们每天在每两个小时运行一次的脚本上收到此错误,但是在一天的不同时间.
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
Run Code Online (Sandbox Code Playgroud)
有人可以列出哪些条件可能导致此错误,以便我们可以调查?
谢谢.
更新:执行'ALTER SESSION CLOSE DATABASE LINK DBLINK'会使包的状态无效吗?
Chr*_*467 14
该包具有公共或私有变量.(对吗?)这个变量构成了包的状态.如果您在第3个会话中编译包.下一次访问此程序包将抛出ORA-04068.
程序包的构建时间戳必须早于程序包会话状态.
如果脚本运行不需要包状态,则DBMS_SESSION.RESET_PACKAGE在脚本开头调用.这将清除会话的所有包状态.
jon*_*ita 13
这一个班轮实际上解决了一切:
PRAGMA SERIALLY_REUSABLE;
Run Code Online (Sandbox Code Playgroud)
确保您的全局变量是无状态的,以避免任何问题.
您也可以检查dba_dependencies或user_dependencies。
select *
from dba_dependencies
where name = 'YOUR_PACKAGE'
and type = 'PACKAGE' --- or 'PACKAGE_BODY'
and owner = USER --- or USERNAME
Run Code Online (Sandbox Code Playgroud)
这将为您提供包所依赖的对象。检查那里发生了什么。
| 归档时间: |
|
| 查看次数: |
41180 次 |
| 最近记录: |