【问题标题】:ALTER COMPILE of Package Body Does Not Populate DBA_ERRORS table包主体的 ALTER COMPILE 不填充 DBA_ERRORS 表
【发布时间】:2025-12-22 22:40:16
【问题描述】:

我有一个数据库包 MAINLOAD,它是从架构 A 导入到架构 B。

在模式 A 中,此对象有效。在模式 B 中,此对象因 DB Link 错误而失效。

此对象在导入后出现在DBA_OBJECTS 表中,但其错误消息未出现在DBA_ERRORS 表中。

现在,当我尝试通过发出命令:ALTER PACKAGE MAINLOAD COMPILE BODY 来编译这个对象时,由于 DBLink 错误,这个包编译失败,但它仍然没有出现在DBA_ERRORS 表下。

但是,当我通过SQLDEVELOPER 工具/任何其他开发工具手动编译该对象时,该对象开始出现在DBA_ERRORS 表下。

我也尝试通过发出命令 - DBMS_UTILITY.COMPILE_SCHEMA,但没有运气。

我有一个实用程序,它编译 DBA_OBJECTS 表下存在的所有无效对象,然后使用 DBA_ERRORS 表在屏幕上打印错误消息。

我无法理解为什么这两个过程都存在这种差异。

另外,想知道是否有任何选项可以在不手动编译的情况下填充此 DBA_ERRORS 表。

非常感谢任何帮助。

感谢和问候, 阿希斯·萨海

【问题讨论】:

    标签: database oracle11g


    【解决方案1】:

    我假设您从 SqlDeveloper 执行 ALTER PACKAGE MAINLOAD COMPILE BODY

    执行此命令后,SqlDeveloper 很可能在连接上发出提交或回滚,因此您的数据消失了。尝试从 sqlplus 中执行相同的操作,您会看到。

    【讨论】:

    • 我还记得,当你执行alter session set current_schema=...时,它并不能很好地工作。当您切换会话模式时,sqlplus 命令show errors 不显示任何内容。或者尝试从SELECT Line,Text FROM sys.All_Errors中选择
    • 错误未出现在 DBA_ERRORS/USER_ERRORS/ALL_ERRORS 中。我收到此错误 - SQL> alter package MAINLOAD compile body; alter package MAINLOAD compile body * ERROR at line 1: ORA-04052: error occurred when looking up remote object MAINLOAD@MCC ORA-00604: error occurred at recursive SQL level 1 ORA-02020: too many database links in use