oracle 11g package body "SYS.DBMS_APPLICATION_INFO" does not exist

本文详细介绍了在SQL Plus环境中遇到DBMS_APPLICATION_INFO包体不存在的错误时,通过重新生成和创建公共同义词的步骤来解决问题的过程。包括使用特定SQL脚本来生成包体和创建同义词,以及遇到的错误处理。

测试环境,sqlplus登录后提示如下:

package body "SYS.DBMS_APPLICATION_INFO" does not exist


检查一下,package确实在,没有package body。


重新生成,执行:$ORACLE_HOME/rdbms/admin/dbmsapin.sql


SQL> @dbmsapin.sql

Package created.

create public synonym dbms_application_info for sys.dbms_application_info
                      *
ERROR at line 1:
ORA-00955: name is already used by an existing object


Grant succeeded.

SQL>


OK.


<think>我们正在处理一个Oracle数据库错误,具体是关于PACKAGEBODYSYS.DBMS_LOGMNR_INTERNAL出现错误(可能状态为INVALID)的问题。根据用户提供的信息,之前有类似的问题是关于DBMS_LOGSTDBY的,我们可以参考类似的解决思路。首先,我们需要确认这个包的状态。可以通过查询数据字典视图`DBA_OBJECTS`来检查对象的状态:```sqlSELECTobject_name,statusFROMdba_objectsWHEREowner='SYS'ANDobject_name='DBMS_LOGMNR_INTERNAL'ANDobject_type='PACKAGEBODY';```如果状态为`INVALID`,说明包体无效,需要重新编译。重新编译包体的命令是:```sqlALTERPACKAGESYS.DBMS_LOGMNR_INTERNALCOMPILEBODY;```如果重新编译失败,我们需要查看错误信息。可以通过以下查询获取编译错误:```sqlSELECT*FROMall_errorsWHEREowner='SYS'ANDname='DBMS_LOGMNR_INTERNAL'ANDtype='PACKAGEBODY';```根据错误信息进一步分析原因。常见原因及解决方案:1.**依赖对象失效**:如果这个包依赖的其他对象(如其他包、视图、表等)无效,那么编译也会失败。需要先确保所有依赖对象都是有效的。-可以尝试重新编译依赖对象,或者重新编译整个数据库无效对象(使用`utlrp.sql`脚本)。2.**权限问题**:有时可能需要以SYS用户执行编译,并且需要相应的权限。3.**数据库版本问题**:如果这个包是Oracle内部的,可能由于升级或补丁问题导致。考虑运行`catbundle.sql`或`catupgrd.sql`等脚本来重新构建数据字典。4.**数据字典损坏**:极端情况下,可能需要重建数据字典,但这通常需要Oracle支持人员的协助。步骤总结:1.确认包体状态。2.尝试重新编译包体。3.如果失败,查看错误信息。4.根据错误信息解决依赖问题或运行数据库字典维护脚本。另外,根据参考信息[^1]中提到的类似问题,我们可以运行`utlrp.sql`脚本来重新编译所有无效对象。该脚本位于`$ORACLE_HOME/rdbms/admin`目录下。在SQL*Plus中以SYS用户执行:```sql@?/rdbms/admin/utlrp.sql```如果问题依然存在,可能需要应用相关的补丁或联系Oracle支持。§§相关问题§§1.如何查询Oracle中所有无效对象?2.重新编译Oracle无效对象的常用方法有哪些?3.运行`utlrp.sql`脚本有什么注意事项?4.Oracle数据字典维护的常见脚本有哪些?</think>### PACKAGE BODY SYS.DBMS_LOGMNR_INTERNAL 错误解决方案 该错误通常由以下原因引起: 1. **对象失效**:Oracle数据字典对象在升级/迁移后失效 2. **权限问题**:SYSDBA权限不足或脚本执行环境错误 3. **版本冲突**:Oracle版本与脚本不兼容 4. **数据字典损坏**:核心数据字典表异常 #### 解决步骤: 1. **检查对象状态**: ```sql SELECT object_name, status FROM dba_objects WHERE owner = 'SYS' AND object_name = 'DBMS_LOGMNR_INTERNAL' AND object_type = 'PACKAGE BODY'; ``` 若状态为`INVALID`则需重新编译 2. **重新编译无效对象**: ```sql ALTER PACKAGE SYS.DBMS_LOGMNR_INTERNAL COMPILE BODY; ``` 3. **运行字典维护脚本**(需SYSDBA权限): ```sql CONNECT / AS SYSDBA @?/rdbms/admin/catlogmnr.sql @?/rdbms/admin/dbmslogmnr.sql @?/rdbms/admin/prvtlogmnr.plb ``` 4. **全局对象编译**: ```sql EXEC UTL_RECOMP.recomp_serial('SYS'); ``` 5. **验证修复结果**: ```sql SELECT text FROM dba_source WHERE name = 'DBMS_LOGMNR_INTERNAL' AND type = 'PACKAGE BODY' AND line = 1; ``` #### 注意事项: 1. 操作前**必须备份数据库** 2. 脚本路径中的`?`代表`ORACLE_HOME` 3. 若问题持续,检查`alert.log`获取详细错误堆栈 4. Oracle 12c+ 需在PDB级别执行时开启`ALTER SESSION SET CONTAINER=CDB$ROOT` > **重要提示**:这些操作直接影响数据字典,生产环境建议先联系Oracle支持[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值