ORACLE 迁移到 DB2:如何把 Oracle partition 转化到 DB2(4)
- Range-list
Range-list:该复合分区就是 Range partition 和 list partition 相结合的分区方法,前面已经介绍了 oracle 的 Range 分区和 List 分区在 DB2 中的实现方法,那么这种复合分区对应到 DB2 中,我们只需综合使用上述非复合分区的方法。
例如在 ORACLE 数据库有一张表 store,该表以字段 sales_date 作 range partition 以字段 store_distrct 作为 list partition,该表的定义如下 :
清单 7. Oracle 中 Range-list 表示例
p class="codesection">create table store( store_id varchar2(10), store_district varchar2(20), sales_date date, revenue number(10) ) partition by range(sales_date) subpartition by list(store_distrct) subpartition template( subpartition subpar1 values ('haidian') tablespace tbsp1, subpartition subpar2 values ('chaoyang') tablespace tbsp1, subpartition subpar3 values ('dongcheng') tablespace tbsp1, subpartition subpar4 values ('xicheng') tablespace tbsp1, subpartition subpar5 values ('fengtai') tablespace tbsp1, subpartition subpar1 values ('shijingshan') tablespace tbsp1) ( partition par1 vales less than (to_date('01/04/2012','DD/MM/YYYY')), partition par2 vales less than (to_date('01/07/2012','DD/MM/YYYY')), partition par3 vales less than (to_date('01/10/2012','DD/MM/YYYY')), partition par4 vales less than (MAXVALUE) );
我们如何将该 oracle 的 range-list 的表映射到 db2 中呢?前面我们以说明可以把 Range partition 映射到 db2 的 table partition,list partition 可以映射到带生成列的 table partition。然而 db2 中没有复合分区的概念,因此我们可以考虑映射到 db2 中以 table partition 加 MDC 来与之映射。那么在 db2 中与之相对应的表定义如下:
清单 8. Db2 中 table-MDC 表示例
p class="codesection">create table store( store_id varchar(10), store_distric varchar(20), sales_date date, revenue number(10) ) in tbsp1, tbsp2, tbsp3, tbsp4 partition by range(sales_date) (starting from ('01/01/2012') ending ('31/12/2012') every (3 month)) organize by dimension(store_district);
和 oracle 一样以 sales_date 字段作为 range 分区字段,以 store_district 字段做 MDC。
- Range-hash
该分区方法就是 Range partition 和 hash partition 相结合的分区方法,就是先安一个字段进行 range partition 然后再按照 hash partition 进行子分区。考虑到 DB2 在分区数据库(DPF)中使用的 hash 方法,那么要在 DB2 中模拟这种复合分区,我们用到了 DPF 及表分区:我们建立了一个分区组,这个分区组包含多个数据库分区,然后在这个分区组下创建一个表空间,再在这个表空间下创建一张表,这样,我们就能够保证这个表中的数据将被分布到所有包含在内的分区上;同时我们用到了 DB2 的 Range 表分区,这样,在任何一个数据库分区内,数据也能够按照范围分区。
清单 9. Oracle 中 Range-hash 表示例
p class="codesection">Create table car( Car_id varchar2(10), Sales_date date, Sales_const number(10) ) Partition by range(sales_date) Subpartition by hash(car_id) (partition s1 values less than (to_date( ‘ 01/04/2012 ’ , ’ DD/MM/YYYY ’ )), partition s2 values less than (to_date( ‘ 01/07/2012 ’ , ’ DD/MM/YYYY ’ )), partition s3 values less than (to_date( ‘ 01/10/2012 ’ , ’ DD/MM/YYYY ’ )), partition s4 values less than (MAXVALUE))
相关新闻>>
- 发表评论
-
- 最新评论 更多>>