技术开发 频道

将DB2 UDB从非分区迁移到分区环境

    步骤 9. 在节点 0 和节点 1 上创建表空间

    执行下列命令在节点上创建表空间:

    create regular tablespace TBS_BIGTBL_4K in database partition group pgr01
    pagesize 4096 managed by database
    using (DEVICE ' /dbvols/tbs_bigtbl_4k/p0cont1' 38G) on dbpartitionnum (0)
    using (DEVICE ' /dbvols/tbs_bigtbl_4k/p1cont1' 38G) on dbpartitionnum (1)
    extentsize 16 prefetchsize 32 bufferpool BP4K
    create regular tablespace TBS_BIGTBL_IDX in database partition group pgr01
    pagesize 16384 managed by database
    using (DEVICE ' /dbvols /tbs_bigtbl_idx/p0cont1' 58G) on dbpartitionnum (0)
    using (DEVICE ' /dbvols/tbs_bigtbl_idx/p1cont1' 58G) on dbpartitionnum(1)
    extentsize 32 prefetchsize 64 bufferpool BP16K

    步骤 10. 在 DPF 环境中创建和装入您的表

    注意:请参阅 步骤 3. 生成表 DDL,以查看如何获得 S_OPTY_POSTN_tbl.sql、S_OPTY_POSTN_idx.sql 和 S_OPTY_POSTN_vw.sql。

    例如:我们通过列 OPTY_ID 上的分区键划分了 S_OPTY_POSTN 表。

    可以按照下列方式修改 S_OPTY_POSTN_tbl.sql:
    CREATE TABLE "V8INST1"."S_OPTY_POSTN"(
    "ROW_ID" VARGRAPHIC(15) NOT NULL ,
    "CREATED" TIMESTAMP NOT NULL WITH DEFAULT CURRENT TIMESTAMP ,
    "OPTY_ID" VARGRAPHIC(15) NOT NULL ,
    "OPTY_NAME" VARGRAPHIC(100) NOT NULL WITH DEFAULT gx'0078' ,
    "POSITION_ID" VARGRAPHIC(15) NOT NULL WITH DEFAULT gx'0078' ,
    "EST_CMPNS_AMT" DECIMAL(22,7) ,
    "OPTY_INACTIVE_FLG" GRAPHIC(1) NOT NULL WITH DEFAULT gx'0078' ,
    "DOCK_FLG" GRAPHIC(1) WITH DEFAULT gx'004E' )
    PARTITIONING KEY ("OPTY_ID")
    IN "TBS_BIGTBL_4K" INDEX IN "TBS_BIGTBL_IDX" NOT LOGGED INITIALLY

    在 DPF 环境中创建该表:
    connect to ABCDB;
    drop table V8INST1. S_OPTY_POSTN;
    db2 –tvf S_OPTY_POSTN_tbl.sql > S_OPTY_POSTN_tbl.out
    -- run script to create table in DPF environment
        
    在 DPF 环境中载入来自导出文本文件的表:
    db2 connect to ABCDB
    load from /dpf_staging/EXPORT_DPF/V8INST1.
    S_OPTY_POSTN of del insert into V8INST1.S_OPTY_POSTN CPU_PARALLELISM 4
        
    创建索引:
    db2 –tvfS_OPTY_POSTN_idx.sql > S_OPTY_POSTN_idx.sql.out

    创建视图:
    db2 –tvfS_OPTY_POSTN_vw.sql >S_OPTY_POSTN_vw.sqlout

    在表上执行 runstats:
    runstats on table V8INST1. S_OPTY_POSTN with distribution and detailed indexes all 

    步骤 11. 在 DPF 环境中检查表的分布

    执行下列 SQL,以找到跨节点的表的分布: 

    select dbpartitionnum(OPTY_ID) as PARTITIONNUM_NUM, count(*)
    as ROWS from V8INST1.S_OPTY_POSTN
    group by dbpartitionnum(OPTY_ID)
    order by dbpartitionnum (OPTY_ID) 

    结果将如下所示:
    PARTITIONNUM_NUM ROWS
    ---------------- -----------
    01663171
    11668886

    注意:如果您没有看到数据均匀分布在多个节点上,那就说明您没有指定正确的分区键。在不均匀的分布中,应用程序的执行性能较差。请停止执行,并返回绘图板(drawing board),通过正确的分区键指定要进行划分的正确的表。

    步骤 12. 新节点上的数据库配置参数

    注意:我们不推荐使用默认的数据库配置参数。您可以基于数据库活动,将它们设置为与节点 0 相关,并在需要时进行调优。

    步骤 13. 备份数据库 — DPF 环境

    创建脚本来备份 DPF 数据库 —— vi backup.sh。

    db2_all '<<+0<db2 backup db ABCDB to dpf_backup/dpf_1,
    /dpf_backup/dpf_2, /dpf_backup/dpf_3, /dpf_backup/dpf_4'
    db2_all '<<-0<db2 backup db ABCDB to dpf_backup/dpf_1,
    /dpf_backup/dpf_2, /dpf_backup/dpf_3, /dpf_backup/dpf_4'
    db2stop force
    db2start
    ./backup.sh < backup.out-- run script to backup database offline

     结束语

    我们已经展示了如何划分一个表。您需要根据应用程序的业务流程,确定用正确的分区键划分哪些表。使用我们所描述的步骤,可以很容易地将数据库从 DB2 ESE 环境迁移到 DB2 ESE DPF(逻辑节点)环境。

0
相关文章