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 过程中找不到正在调用的程序单元

从 Java 应用程序调用时,Oracle PL/SQL 包错误(ORA-04063 和 ORA-06508)

程序有啥问题?

警告:在 plsql 中创建包体时出现编译错误...

创建包的问题

什么是RFC