之前用数据泵来来回回也用了不少次,自以为对数据泵了解还ok的时候,昨天却惨遭打脸...
很简单的业务需求,表A和表B是具有相同表结构的,且分区结构都相同的两个表,旨在将表 A 中 a 分区迁移到表 B 中 b 分区中。
由于表 A 为测试表,表 A 的分区数量只有两个,在导出dmp的时候,直接指定 A 用户下的表 A 的 a 分区 进行导出,然后...在导入得时候就发现很奇葩的问题,按照之前的经验,SQL并无问题,
impdp icds/*** directory = data1 dumpfile=***.DMP tables=icds_smp_trade_record:sys8441 table_exists_action=append
一直抛这样的问题
注意红线中的sys_p8441是表B的b分区,表B中b分区是存在的。
查了很多资料,最后在metalink找到了一些思路。
SOLUTION 2中发现该SQL中 TABLES=old.user.TABLEA:TABLE_PARITION1
导入的时候指定表A的a分区。
于是将导入SQL优化为:
这里简单解释一下参数的作用:
remap_schema=icds:icds ==》 将A用户中的数据迁移到B用户中
TABLE_EXISTS_ACTION=append ==》 导入数据追加到原数据中
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS ==> 跳过序列化ID
至此。坑已填平...
不过,在昨日翻阅资料发现另一个有意思的参数,只不过这次填坑没有用到。这里还是介绍一下。
PARTITION_OPTIONS 参数控制数据泵分区表的导入。
从取值上看,PARTITION_OPTIONS参数包括三个可选值,Depatition、Merge和None,用于指定导入分区表的转换方式。
介绍一下,这三个可选值的实际含义:
默认情况下,该参数取值为NONE,表示不进行任何转换,如果是分区数据表,导入之后依然为分区数据表。
Departtion为分表操作,也就是将每个分区作为一个独立的数据表进行导入,导入之后可见与原数据表分区对应的数据表集合。
Merge参数是取消分区设置,将数据导入到一个非分区表的转换动作。
PARTITION_OPTIONS是11g数据泵提出的新功能选项,在一些特殊场景下,可以方便帮助我们解决实际问题。从本质上看,这部分转换应该是元数据导入过程中进行的转换转化。这样提供了一定的灵活性。
欢迎关注微信公众号,“珏衫的博客”
交流QQ群: