ORA-39126错误求助:impdp导入生产数据库至开发库失败
解决ORA-39126 Data Pump导入错误的实操方案
1. 校验并修复目标函数状态
- 查询目标库中
ABC.GETSYSDATE函数的有效性:SELECT status, object_name FROM user_objects WHERE object_name = 'GETSYSDATE' AND object_type = 'FUNCTION'; - 若函数状态为
INVALID,尝试重新编译:ALTER FUNCTION ABC.GETSYSDATE COMPILE; - 编译失败时查看具体错误:
根据错误提示修复依赖问题(例如缺失的基表、权限不足等)后再次编译。SHOW ERRORS FUNCTION ABC.GETSYSDATE;
2. 清理Data Pump残留作业
断电可能导致导入作业残留锁或无效元数据,需彻底清理:
- 列出未完成的Data Pump作业:
SELECT owner_name, job_name, state FROM dba_datapump_jobs WHERE state NOT IN ('COMPLETED', 'FAILED'); - 终止并删除残留作业(替换占位符为实际作业信息):
DECLARE v_job_handle NUMBER; BEGIN v_job_handle := DBMS_DATAPUMP.ATTACH('YOUR_JOB_NAME', 'YOUR_IMPORT_USER'); DBMS_DATAPUMP.STOP_JOB(v_job_handle, 1, 0); END; /
3. 重新生成可靠的导出源文件
若原导出文件因断电损坏,从生产库重新导出目标函数:
expdp prod_user/prod_pwd@prod_db schemas=ABC include=function:\"GETSYSDATE\" dumpfile=abc_getsysdate.dmp logfile=expdp_abc.log
使用新导出文件重新执行导入操作。
4. 检查并修复数据库一致性
断电可能引发数据库逻辑损坏,执行一致性校验:
ANALYZE TABLE ALL_TABLES VALIDATE STRUCTURE CASCADE;
若发现损坏,通过RMAN执行介质恢复(需开启归档模式):
rman target / RUN { RECOVER DATABASE; }
5. 拆分导入流程规避问题
先跳过故障函数完成其他对象导入,再单独处理函数:
impdp dev_user/dev_pwd@dev_db schemas=ABC exclude=function:\"GETSYSDATE\" dumpfile=original_dump.dmp logfile=impdp_skip.log
导入完成后,手动创建或从生产库同步ABC.GETSYSDATE函数的定义。
内容的提问来源于stack exchange,提问作者biramani thangjam
相关产品推荐
相关产品推荐

