其数据导入后,用 datastudio 进行数据查询的结果。根据查询结果集的对比可知数据已经完全迁移过来。
图 5:DB2 中 Table Partition 表的数据查询结果集
Oracle 的 Hash partition 到 DB2 的 DPF
假设在一个 Oracle 数据库中有一个 Hash Partition 的表定义如下:
清单 13. Oracle 中 Hash table 的表定义
CREATE TABLE hash_sales ( salesdate date, protype varchar2(20), proname varchar2(20) ) PARTITION BY HASH(salesdate) ( partition p0 tablespace tbhash, partition p1 tablespace tbhash );
该表以 hash_part 字段按照 HASH 算法分区,创建了两个分区 p1 和 p2 分别在表空间 tbsp1 和 tbsp2 中。用 select 语句查询出其数据结果集:
图 6.Oracle 中 Hash Partition 表的数据查询结果集
根据前面所说,我们可以把该 table 映射到 DB2 的 DPF 上。如果当前 DB 已经创建好了 DPF,那么我就直接创建 table 即可,但是做 migration 很多时候都需要自己创建逻辑分区,我们将按照下面的步骤创建 DPF、Table space 以及 Table。
- 用 db2start 添加 partition
我们可以用 db2start 来创建 partition,其命令格式如下:
db2start dbpartitionnum PARTITIONNUM add dbpartitionnum hostname
port without tablespaces 这里我们已经有了一个 partition 0,我们再创建一个 partition 1。
db2start dbpartitionnum 1 add dbpartitionnum n4shost port 1 withoust tablespaces
- 创建 partition group
partition 添加完成之后,下面就需要为 partition 创建 partition group。其命令格式如下:
create database partition group
on dbpartitionnums( , … ) 这里我们创建的 group 为 grouphash。
Create database partition group grouphash on dbpartitionnums(0,1) - 创建 tablespace
在该 partition group 中创建 tablespace。其命令格式如下:
Create tablespace
in database partition group 这里我们创建表空间 tphash:
Create tablespace tphash in database partition group grouphash
- 创建 table
在 tbptest 中创建与 oracle 对应的 table,其 sql 语句如下:
清单 14. DB2 中与之映射的 DPF table
create table hash_sales( salesdate date, protype varchar(20), proname varchar(20) ) in tphash distribute by hash(salesdate)
完成了表的创建,下面就是数据的导出与导入,与上一节相同我们同样可以采用工具 IDMT 来实现。但是在本次实验中的数据很少,因此这里我们就直接用 import 来实现数据的导入。数据导入完成之后通过 clp 查询的数据结果如下图所示。
图 7.db2 中映射的 DPF 表查询结果集
总结
本文分别对 Oracle 和 DB2 的分区模式进行了概述,并且对两种数据的分区方式进行对比,介绍了 Oracle 中的简单分区在 DB2 中我们可以采用什么样的分区方式与之映射。对于 Oracle 中的复合分区,本文也对 Range-list 和 Range-hash 进行了介绍以及提出了在 DB2 中与之映射的方案。同时我们也对 oracle 中的 range partition 和 hash partition 的表如何迁移到 db2 中进行了简单的描述,并且提供了相应的方法。
总之,本文对 oracle 的 partition 迁移到 db2 提供了一个整体的映射方案并且提供了一些简单的数据迁移方法,对于复杂的复合分区还有待于完善