关于Oracle数据库Schema导入导出缺失表及ORA-39166报错的求助
Oracle Schema导入导出缺失表问题排查与解决
1. 检查源端表的核心状态
先确认源端缺失表的属性,执行以下SQL:
SELECT status, temporary, partitioned, owner FROM all_tables WHERE owner = 'SCHEMA1' AND table_name IN ('TABLE1', 'TABLE2');
- 若
temporary='Y':expdp默认不导出临时表,需在导出命令中显式加INCLUDE=TABLE:"IN ('TABLE1','TABLE2')",仅能导出表结构,无法导出临时表数据。 - 若
status='INVALID':先修复表状态,如重新编译表或解决依赖对象异常。
2. 核查原导入日志细节
打开impdp_Schema_Schema1.log,搜索缺失表名,重点看:
- 是否存在
ORA-39152(表已存在)、ORA-39083(对象创建失败)等警告:默认TABLE_EXISTS_ACTION=SKIP会导致已存在的表被跳过,未完成导入。 - 日志中是否有关于这些表的跳过、错误记录,“操作成功”仅代表job正常结束,不代表所有对象都导入完成。
3. 单独导出缺失表的正确命令
注意Oracle对象名默认大写(除非创建时加双引号),执行以下expdp命令:
expdp '/ as sysdba' directory=MIGEXPORT dumpfile=missing_tables.dmp logfile=exp_missing.log tables=SCHEMA1.TABLE1,SCHEMA1.TABLE2
- 若为分区表,确保未指定不存在的分区;若为嵌套表,需同步导出关联存储表。
- 旧版exp命令语法:
exp '/ as sysdba' file=missing_tables.dmp log=exp_missing.log tables=SCHEMA1.TABLE1,SCHEMA1.TABLE2
4. 导入缺失表的关键参数设置
导入到Schema2时,需指定映射规则并处理表存在的情况:
impdp '/ as sysdba' directory=MIGEXPORT dumpfile=missing_tables.dmp logfile=imp_missing.log remap_schema=SCHEMA1:SCHEMA2 table_exists_action=REPLACE
table_exists_action=REPLACE:删除目标端现有表并重建,适合无需保留目标表数据的场景;需保留数据可改用APPEND或TRUNCATE。
5. 分析跟踪日志定位深层问题
原PAR文件启用了TRACE=1ff0300,前往数据库trace目录找到对应的跟踪文件,搜索缺失表名,查看是否有依赖对象缺失、权限限制等更详细的报错信息。
内容的提问来源于stack exchange,提问作者user18224164
相关产品推荐
相关产品推荐

