You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle导入报错ORA-39002与ORA-39166的原因排查

解决ORA-39002和ORA-39166的导入错误

从你的导出和导入日志来看,问题的根源非常明确——导入命令没有正确指定导出表的所属schema,导致Oracle找不到要导入的对象。

错误原因分析

你用expdp导出的是BANK用户下的4张表:BANK.EMPLOYEE、BANK.TRANSACTION、BANK.BRANCH、BANK.ACCOUNT,但执行impdp时用的是DWH用户,并且直接写了tables=employee,transaction,branch,account。这时候Oracle会默认去查找DWH用户名下的这些表,而dump文件里根本没有DWH的这些表,自然就抛出了ORA-39166(对象未找到),进而触发ORA-39002(无效操作)。

解决方案

根据你的需求,分两种情况处理:

情况1:要把表导入到DWH用户下(变更所属schema)

需要用REMAP_SCHEMA参数将原schema(BANK)映射到目标schema(DWH),同时明确指定dump文件中的表所属schema:

impdp dwh/d123 tables=BANK.employee,BANK.transaction,BANK.branch,BANK.account directory=my_dir dumpfile=tables_dump.dmp logfile=tables_import.log remap_schema=BANK:DWH
  • REMAP_SCHEMA=BANK:DWH:告诉Oracle把dump文件里BANK的对象全部导入到DWH用户下
  • 明确写BANK.employee:避免Oracle误解为当前用户(DWH)的表

情况2:要把表导入回原BANK用户下

直接用BANK用户执行导入命令即可,不需要额外参数:

impdp bank/b123 tables=employee,transaction,branch,account directory=my_dir dumpfile=tables_dump.dmp logfile=tables_import.log

如果必须用DWH用户来导入到BANK schema,需要确保DWH用户拥有IMP_FULL_DATABASE角色,并且命令中指定原schema的表:

impdp dwh/d123 tables=BANK.employee,BANK.transaction,BANK.branch,BANK.account directory=my_dir dumpfile=tables_dump.dmp logfile=tables_import.log

额外验证步骤

如果你不确定dump文件里的对象归属,可以用SQLFILE参数先导出dump文件中的DDL,查看表的所属schema:

impdp dwh/d123 directory=my_dir dumpfile=tables_dump.dmp sqlfile=dump_content.sql

打开dump_content.sql就能看到所有对象的完整名称,确认它们属于BANK用户。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:17:45