【问题标题】:ORA-06508 when calling procedure which is on remote dbORA-06508 调用远程数据库上的过程时
【发布时间】: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 是您应该调查的错误...

标签: oracle plsql


【解决方案1】:

我认为当有人在堆栈中编译一个包时,您的麻烦就变成了。您可以尝试在dba_dependencies 中进行层次结构select 查询以进行检查。

关于重新启动服务器,我认为这是因为来自 db-link 外部的代码在调用时会回滚。直到他们不重置状态包,在第一个错误后每次都会重复错误。有两种方法可以解决(我的观点):
1. 用代码ORA-06508捕获异常
2. 包装特殊pragma 的函数/过程,允许忽略对包状态的检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2013-05-31
    • 2012-11-24
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多