您的位置:首页 > 数据库 > Oracle

一则Oracle EXP导出报错的解决办法

2014-07-22 15:19 309 查看
前段时间上海某保险客户IT主管打电话过来,说他们的开发人员在开发环境中执行EXP报错,让我过去检查下。本着“客户为本,服务为根”的宗旨,第一时间赶到客户现场。
和客户开发人员沟通下,查看EXP报错的具体信息:
正在导出 pre-schema 过程对象和操作
EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body
"DMSYS.DBMS_DM_IMP_INTERNAL" has errors
ORA-06508: PL/SQL: could not find program unit
being called: "DMSYS.DBMS_DM_IMP_INTERNAL"
ORA-06512: at "DMSYS.DBMS_DM_MODEL_EXP", line
303
ORA-06512: at line 1
EXP-00083: 调用
DMSYS.DBMS_DM_MODEL_EXP.schema_info_exp 时出现前一问题
第一时间怀疑是不是因为DMSYS用户下面的DBMS_DM_IMP_INTERNAL对象无效导致EXP报错的,通过PL/SQL
Develop连接到数据库,查看该对象,结果证实的我的猜测。
 

DMSYS用户下面存在部分编译失败的package,包含这个与EXP操作有关DBMS_DM_IMP_INTERNAL的package,
(至于为什么系统存在编译失败的package,他们也不清楚是什么原因导致的,现在也无法追溯了)由于系统DMSYS(这个用户是DATA
MINING组件使用的)下的package是加密的,无法对其下面的package进行重新编译。我尝试下了下,编译不成功。
解决方案: 用户删除后重建
删除DMSYS用户:
SQL>drop user dmsys cascade;
用户重建:通过以下脚本重建用户
SQL>@?/rdbms/admin/dminst.sql
 

用户建好后,果然该用户下面所有的package对象都是有效的,于是让开发人员测试EXP导出,悲剧继续发生了,原先的错误解决了,但出现新的错误:
EXP-00008: ORACLE error 4063 encountered
ORA-04063: package body "EXFSYS.DBMS_EXPFIL_EXP"
has errors
ORA-06508: PL/SQL: could not find program unit
being called: "EXFSYS.DBMS_EXPFIL_EXP"
ORA-06512: at "EXFSYS.DBMS_EXPFIL_DEPASEXP", line
61
ORA-06512: at line 1
EXP-00083: The previous problem occurred when
calling EXFSYS.DBMS_EXPFIL_DEPASEXP.schema_info_exp
. exporting statistics
报错信息里面报的是EXFSYS(Oracle Expression Filter
组件)用户下面的package又存在无效的,继续采用上述解决方案,对该用户进行重建,
解决方案:删除DMSYS用户:
SQL>drop user exfsys cascade;
用户重建:通过以下脚本重建用户
SQL>@?/rdbms/admin/catexf.sql
上述工作完成后,让开发人员测试EXP导出,EXP导出正常,问题解决。
总结:

通过Oracle自带脚本对系统用户进行重建,将该系统用户下面的失效对象(这些对象是加密的)进行重新编译,从而解决EXP报错。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐