Oracle Data Pump导入至不同表名报错‘表不存在’,求解决方案
Oracle Data Pump导入报错“表不存在”的解决方法
错误原因
你编写的导入脚本中,tables参数指定的是目标表STG_CDR.MSC_CDR_2的分区,但Data Pump会先在dump文件中查找这些对象——而dump文件仅包含原导出表STG_CDR.MSC_CDR的内容,因此触发“表不存在”的错误。REMAP_TABLE是导入时的表名映射规则,但tables参数的作用是指定dump文件中存在的源对象,而非目标对象。
解决方法
根据你的需求,分两种场景提供修正方案:
场景1:将原表全量数据导入目标表的对应分区
如果目标表MSC_CDR_2的分区键与原表MSC_CDR一致,且希望所有数据自动路由到对应分区,修改脚本如下:
directory=IMP_TBS_BK2 dumpfile=TBS_TS_STG_CDR_M_3M201907_01.dmp,TBS_TS_STG_CDR_M_3M201907_02.dmp,TBS_TS_STG_CDR_M_3M201907_03.dmp logfile=IMP_MSC_CDR_2_201907_1.log REMAP_SCHEMA=STG_CDR:STG_CDR REMAP_TABLE=STG_CDR.MSC_CDR:MSC_CDR_2 # 指定dump文件中的原表,而非目标表 tables=STG_CDR.MSC_CDR # 跳过分区键验证(若确认数据符合目标分区规则可省略) PARTITION_OPTIONS=NO_VALIDATION parallel=4 table_exists_action=append job_name=IMP_MSC_CDR_2_201907_1
场景2:仅导入原表中对应目标分区的数据
如果原表MSC_CDR本身也是分区表,且dump文件包含对应分区的数据,可以指定原表的分区,再通过REMAP_TABLE映射到目标表:
directory=IMP_TBS_BK2 dumpfile=TBS_TS_STG_CDR_M_3M201907_01.dmp,TBS_TS_STG_CDR_M_3M201907_02.dmp,TBS_TS_STG_CDR_M_3M201907_03.dmp logfile=IMP_MSC_CDR_2_201907_1.log REMAP_SCHEMA=STG_CDR:STG_CDR REMAP_TABLE=STG_CDR.MSC_CDR:MSC_CDR_2 # 指定dump文件中原表的对应分区 tables=STG_CDR.MSC_CDR:P_20190701, STG_CDR.MSC_CDR:P_20190702, STG_CDR.MSC_CDR:P_20190703, STG_CDR.MSC_CDR:P_20190704, STG_CDR.MSC_CDR:P_20190705, STG_CDR.MSC_CDR:P_20190706 parallel=4 table_exists_action=append job_name=IMP_MSC_CDR_2_201907_1
若原表不是分区表,需通过QUERY参数过滤出对应目标分区的数据,例如:
# 需替换为实际分区键字段和条件 QUERY=STG_CDR.MSC_CDR:"WHERE partition_key_column >= '20190701' AND partition_key_column <= '20190706'"
内容的提问来源于stack exchange,提问作者Godwin
相关产品推荐
相关产品推荐

