ORA-06508 调用远程数据库上的过程时
Posted
技术标签:
【中文标题】ORA-06508 调用远程数据库上的过程时【英文标题】:ORA-06508 when calling procedure which is on remote db 【发布时间】:2018-11-26 14:13:59 【问题描述】:在我们的应用程序 (ADF) 中,应用程序团队正在使用 dblink 调用一个过程。在此过程中,正在调用包中的另一个过程。它工作正常,但有时会出错
ORA-06508: PL/SQL: could not find program unit being called
当我检查远程数据库时,我发现那个对象的状态是VALID。
当我重新启动应用程序服务器时,它再次工作。每次我需要重新启动应用程序服务器(Weblogic)。
我无法找到此问题的主要原因。为什么这种情况在几天后一次又一次地发生。请帮忙。
谢谢!
【问题讨论】:
查看远程数据库上的DBA_OBJECTS
并检查CREATED, LAST_DDL_TIME
以查看包是否已更新。检查this答案。
嗨 Marmite,我已经检查过包装和程序没有任何变化。我还检查了 DBA_OBJECTS,状态为 VALID,已创建,LAST_DDL_TIME 相同。
尝试获取完整的错误堆栈。如果您看到ORA-04068: existing state of packages has been discarded
this 是您应该调查的错误...
【参考方案1】:
我认为当有人在堆栈中编译一个包时,您的麻烦就变成了。您可以尝试在dba_dependencies
中进行层次结构select
查询以进行检查。
关于重新启动服务器,我认为这是因为来自 db-link 外部的代码在调用时会回滚。直到他们不重置状态包,在第一个错误后每次都会重复错误。有两种方法可以解决(我的观点):
1. 用代码ORA-06508
捕获异常
2. 包装特殊pragma 的函数/过程,允许忽略对包状态的检查。
【讨论】:
以上是关于ORA-06508 调用远程数据库上的过程时的主要内容,如果未能解决你的问题,请参考以下文章
ORA-06508: PL/SQL: 在包 AR_RECEIPT_API_PUB 过程中找不到正在调用的程序单元