EBS adpatch的时候报ORA-03113: end-of-file on communication channel

解决EBSadpatch时报ORA-03113错误的方法
本文详细介绍了在使用EBSadpatch时遇到ORA-03113错误的排查步骤及解决方案。通过检查RDBMSalert_<SID>.log文件并调整initparameterfile中的_disable_logging参数,最终成功解决了问题。

EBS adpatch的时候报ORA-03113: end-of-file on communication channel

从adpatch的日志中看到

================adpatch.log======================================
Running utl_recomp.recomp_parallel(4), if it exists


OWNER			       NUM_INVALID
------------------------------ -----------
SERVICES				24
PROJMFG 				24
PSBEXCEL				 1
DLD					 4
RE					 1
MOBILEADMIN				 4
CA					 2
DGRAY					24
MJORDAN 				 1
PSTOCKMAN				 1
PUBLIC				      1102
RALFRED 				 1
HERMAN					 1
APPS				      5132
FEDERAL 				 1
JPALMER 				 1
FLOWS_010500				 2

17 rows selected.

Elapsed: 00:00:00.15

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01

STATUS_MESSAGE
------------------------------------------------------------------------------
Running UTL_RECOMP.RECOMP_PARALLEL...

declare
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


ERROR:
ORA-03114: not connected to ORACLE
================adpatch.log======================================

根据NOTE:1125213.1的说法需要查看<RDBMS ORACLE_HOME>/admin/<SID_HOST>/diag/rdbms/prod/<SID>/trace/alert_<SID>.log

The first recommended action to take when investigating these errors is to check the RDBMS alert_<SID>.log. This log will help to identify if the problem is with the RDBMS or with something else, such as the application code. Open the alert<SID>.log, possible locations of that log file are:

R12 on 11g database: <RDBMS ORACLE_HOME>/admin/<SID_HOST>/diag/rdbms/prod/<SID>/trace/alert_<SID>.log

===============alert_instance.log==============================
Errors in file /u01/oracle/mc3yd213/db/tech_st/11.1.0/admin/mc3yd213_bej301441/diag/rdbms/mc3yd213/mc3yd213/trace/mc3yd213_pmon_13565.trc:
ORA-00470: LGWR process terminated with error
PMON (ospid: 13565): terminating the instance due to error 470
===============alert_instance.log==============================
关于ORA-00470: LGWR process terminated with error,根据 http://www.itpub.net/thread-502105-1-1.html
需要edit the init parameter file in the database(Using 11gR1 follow doc.761570.1),

/d01/oracle/VIS/db/tech_st/11.1.0/dbs/initVIS.ora

增加

_disable_logging=false
重启数据库
addbctl.sh stop
addbctl.sh start

sqlplus / as sysdba
SQL> show parameter _disable_logging

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_disable_logging                     boolean     FALSE

再重新打patch就没有问题了

相关的文章

http://msutic.blogspot.jp/2009/03/be-aware-of-disablelogging-true.html

http://kevinclosson.wordpress.com/2007/07/21/manly-men-only-use-solid-state-disk-for-redo-logging-lgwr-io-is-simple-but-not-lgwr-processing/


转载请注明出处:http://blog.youkuaiyun.com/pan_tian/article/details/7612482
======EOF======

<think>我们正在处理一个Oracle数据库错误:ORA-06575,该错误指出包或函数OA_INSERT_ITEM_STATUS处于无效状态。这意味着该数据库对象无效,可能是由于依赖对象的变化或编译错误导致的。 根据Oracle数据库的经验,我们可以采取以下步骤来解决这个问题: 1. **检查对象状态**:首先,我们需要确认该包(或函数)的状态。可以查询`dba_objects`视图(如果权限足够)或`all_objects`视图来获取状态。 ```sql SELECT status FROM all_objects WHERE object_name = 'OA_INSERT_ITEM_STATUS'; ``` 2. **重新编译无效对象**:如果状态为`INVALID`,则尝试重新编译它。 ```sql ALTER PACKAGE OA_INSERT_ITEM_STATUS COMPILE; -- 如果是独立的函数,则使用: -- ALTER FUNCTION OA_INSERT_ITEM_STATUS COMPILE; ``` 注意:这里假设`OA_INSERT_ITEM_STATUS`是一个包。如果它是一个包体,则需要指定包体: ```sql ALTER PACKAGE OA_INSERT_ITEM_STATUS COMPILE BODY; ``` 3. **检查编译错误**:如果编译失败,我们需要查看具体的错误信息。可以通过以下查询获取错误信息: ```sql SHOW ERRORS PACKAGE OA_INSERT_ITEM_STATUS -- 或者 SELECT * FROM USER_ERRORS WHERE NAME = 'OA_INSERT_ITEM_STATUS'; ``` 4. **解决依赖问题**:如果错误是由于依赖的对象(如表、视图、其他包等)无效或缺失,我们需要先修复这些依赖对象。 5. **重新编译依赖对象**:有时候,重新编译无效对象后,可能还需要重新编译依赖它的其他对象。 6. **考虑权限问题**:确保当前用户有权限访问该包以及它所依赖的对象。 7. **如果以上步骤无法解决**:可能需要查看包的源代码(如果有权限),检查是否有逻辑错误或环境变化导致的问题。 注意:这个包名`OA_INSERT_ITEM_STATUS`看起来像是Oracle E-Business Suite (EBS)中的一个自定义包(因为前缀`OA_`常用于EBS的自定义扩展)。在EBS环境中,可能需要运行特定的脚本来重新生成无效对象,或者使用AD工具(如adadmin)来编译整个应用。 因此,如果是在EBS环境中,可以尝试: - 使用adadmin工具重新编译无效对象。 - 或者运行以下脚本(在EBS环境中): ```sql EXEC ad_zd_sys.compile('PACKAGE', 'OA_INSERT_ITEM_STATUS'); ``` 但是,请注意,在非EBS环境中,上述方法可能不适用。 总结步骤: - 确认对象状态并重新编译。 - 检查编译错误并解决。 -EBS环境中使用专门的工具或脚本。 如果问题仍然存在,可能需要联系DBA或应用支持人员进行深入排查。 §§相关问题§§ 1. 如何查询Oracle中无效对象? 2. 在Oracle E-Business Suite中,如何批量重新编译无效对象? 3. ORA-06575错误的常见原因有哪些? </think>### 解决ORA-06575错误的方法 当遇到 **ORA-06575: Package or function OA_INSERT_ITEM_STATUS is in an invalid state** 错误时,表明Oracle数据库中的对象 `OA_INSERT_ITEM_STATUS` 处于无效状态。以下是系统性的解决步骤: --- ### 📌 步骤1:确认对象状态 ```sql SELECT owner, object_type, status FROM all_objects WHERE object_name = 'OA_INSERT_ITEM_STATUS'; ``` - 检查返回结果中的 `status` 列: - **`VALID`** 👉 可能是权限问题(跳到步骤4) - **`INVALID`** 👉 继续步骤2[^1] --- ### 📌 步骤2:重新编译无效对象 根据对象类型执行编译命令: ```sql -- 如果是包规范(PACKAGE) ALTER PACKAGE OA_INSERT_ITEM_STATUS COMPILE; -- 如果是包体(PACKAGE BODY) ALTER PACKAGE OA_INSERT_ITEM_STATUS COMPILE BODY; -- 如果是独立函数(FUNCTION) ALTER FUNCTION OA_INSERT_ITEM_STATUS COMPILE; ``` --- ### 📌 步骤3:检查编译错误 若编译失败,查看具体错误: ```sql SHOW ERRORS PACKAGE OA_INSERT_ITEM_STATUS; -- 包错误 SHOW ERRORS FUNCTION OA_INSERT_ITEM_STATUS; -- 函数错误 ``` 常见修复场景: - **依赖对象失效** 👉 重新编译被依赖的表/视图/包 - **代码语法错误** 👉 修正源码中的SQL/PLSQL语法 - **权限缺失** 👉 检查 `GRANT EXECUTE` 权限 --- ### 📌 步骤4:验证权限问题 ```sql -- 检查执行权限 SELECT * FROM dba_tab_privs WHERE table_name = 'OA_INSERT_ITEM_STATUS' AND grantee = '<您的用户名>'; -- 授权示例 GRANT EXECUTE ON OA_INSERT_ITEM_STATUS TO <用户名>; ``` --- ### 📌 步骤5:重建对象(最后手段) 若上述步骤无效,尝试重建: 1. 导出对象DDL: ```sql SELECT dbms_metadata.get_ddl('PACKAGE_BODY', 'OA_INSERT_ITEM_STATUS') FROM dual; ``` 2. 删除并重建对象(⚠️ 备份优先) ```sql DROP PACKAGE OA_INSERT_ITEM_STATUS; @/path/to/recreate_script.sql ``` --- ### 🔍 根本原因分析 | 原因 | 发生场景 | |---------------------|----------------------------------| | 依赖对象变更 | 表结构修改后未重新编译依赖包 | | 无效权限 | 用户缺少`EXECUTE`权限或角色未启用 | | 编译错误 | 源码存在语法/逻辑错误 | | 数据库不一致状态 | Oracle数据字典异常 | > ✅ **预防建议**:定期运行 `UTL_RECOMP` 重新编译无效对象,重要变更前备份源码[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值