注册
DMDRS数据转换配置方案
技术分享/ 文章详情 /

DMDRS数据转换配置方案

温文稳问 2024/11/08 466 1 0

1、实现条件筛选同步
1)创建CVT脚本目录

mkdir -p /home/dmdba/dmdrs5/bin/drs_cvt

2)配置源端CVT脚本配置文件
清洗行,此处过滤了DMDRS1.TABLE1中ID列的列值为’1’的行。

[dmdba@localhost drs_cvt]$ vi drs.cvt 
TABLE "DMDRS1"."*"	#用户名
BEGIN
  IF op.#tab = 'TABLE1' AND op.HAS_COL('ID') AND op.ID.value = '1' THEN	#TABLE1为表名、ID为列名、op.ID.value中间值应与列名对应。
    return ;
  END IF;
  op.exec();
END;

3)配置源端配置文件

[dmdba@localhost bin]$ cat cpt.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>     
        <siteid>1</siteid>
    </base>
    <cpt>
        <name>cpt_dm8</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.40.128</server>
            <user>SYSDBA</user>
            <pwd>SYSDBA</pwd>
            <port>5236</port>
        </login>
        <cvt_dir>/home/dmdba/dmdrs5/bin/drs_cvt</cvt_dir>	#添加此行
        <send>
            <ip>192.168.40.128</ip>
            <port>5355</port>
            <target_name>exec_dm8</target_name>
            <map>
                <item>DMDRS1.*==DMDRS2.*</item>
            </map>
        </send>
    </cpt>
</drs>

4)重启源端进程

[dmdba@localhost bin]$ ./DrsServicecpt restart
Stopping DrsServicecpt:                                    [ OK ]
Starting DrsServicecpt:                                    [ OK ]

2、实现分区表指定分区同步
1)创建测试表

CREATE TABLE "DMDRS1"."TABLE2"
(
"ID" VARCHAR2(100),
"NAME" VARCHAR2(100))
PARTITION BY RANGE("ID")
(
PARTITION  "PART1"  VALUES EQU OR LESS THAN('10') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION  "PART2"  VALUES EQU OR LESS THAN('20') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION  "PART3"  VALUES EQU OR LESS THAN('30') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION  "PARTMAX"  VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN", CLUSTERBTR) 
) STORAGE(ON "MAIN", CLUSTERBTR) ;

COMMENT ON TABLE "DMDRS1"."TABLE2" IS 'DMDRS分区表同步测试';

2)创建CVT脚本目录

mkdir -p /home/dmdba/dmdrs5/bin/drs_cvt

3)配置源端CVT脚本配置文件
此处过滤了DMDRS1.TABLE2中ID列的列值小于等于’10’的行和大于’20’的行。

[dmdba@localhost drs_cvt]$ vi drs.cvt 
TABLE "DMDRS1"."*"
BEGIN
  IF op.#tab = 'TABLE2' AND op.HAS_COL('ID') AND op.ID.value <= '10' THEN #TABLE2为表名、ID为列名、op.ID.value中间值应与列名对应。
    return ;
  END IF;
  IF op.#tab = 'TABLE2' AND op.HAS_COL('ID') AND op.ID.value > '20' THEN #TABLE2为表名、ID为列名、op.ID.value中间值应与列名对应。
    return ;
  END IF;
  op.exec();
END;

4)配置源端配置文件

[dmdba@localhost bin]$ cat cpt.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>     
        <siteid>1</siteid>
    </base>
    <cpt>
        <name>cpt_dm8</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.40.128</server>
            <user>SYSDBA</user>
            <pwd>SYSDBA</pwd>
            <port>5236</port>
        </login>
        <cvt_dir>/home/dmdba/dmdrs5/bin/drs_cvt</cvt_dir>	#添加此行
        <send>
            <ip>192.168.40.128</ip>
            <port>5355</port>
            <target_name>exec_dm8</target_name>
            <map>
                <item>DMDRS1.*==DMDRS2.*</item>
            </map>
        </send>
    </cpt>
</drs>

5)启动源端进程

[dmdba@localhost bin]$ ./DrsServicecpt start
Starting DrsServicecpt:                                    [ OK ]
[dmdba@localhost bin]$ ./drcsl cpt.xml
CSL[INFO]:  CONSOLE TOOL DRS5: V5.0.4.2-Build(2024.08.23-168340_trunc_sp9)_64
CSL[WARN]:  mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 1G
CSL[WARN]:  License 即将过期 expire on 2024-11-23
CSL> connect
CSL[INFO]:  [INPUT CMD: connect]
CSL> show
CSL[INFO]:  [INPUT CMD: show]
+-------------------------------------------------+
|                   【模块列表】                  |
+-------------------------------------------------+
|  模块名 | 类型 | 运行状态 | 启动时间 | 节点状态 |
+---------+------+----------+----------+----------+
| cpt_dm8 |  CPT |  已停止  |     -    |     -    |
+---------+------+----------+----------+----------+
命令执行成功 
CSL> alter cpt_dm8 set lsn
CSL[INFO]:  [INPUT CMD: alter cpt_dm8 set lsn]
MGR[INFO]:  成功获取模块的起始SCN cpt name: cpt_dm8, LSN: 139715
命令执行成功 
CSL> start
CSL[INFO]:  [INPUT CMD: start]
MGR[INFO]:  模块正在启动 module: cpt_dm8 
MGR[INFO]:  CPT准备就绪 type: dm8 cpt
MGR[INFO]:  模块已经处于运行状态 module: cpt_dm8 
命令执行成功 
CSL> alter cpt_dm8 add table "sch.name='DMDRS1' "
CSL[INFO]:  [INPUT CMD: alter cpt_dm8 add table "sch.name='DMDRS1' "]
MGR[INFO]:  获取到装载掩码组合 mask: |CREATE|INSERT|INDEX|TABLE|CHECK|GROUP
命令执行成功 
CSL> show
CSL[INFO]:  [INPUT CMD: show]
+------------------------------------------------------------+
|                        【模块列表】                        |
+------------------------------------------------------------+
|  模块名 | 类型 | 运行状态 |       启动时间      | 节点状态 |
+---------+------+----------+---------------------+----------+
| cpt_dm8 |  CPT |  运行中  | 2024-10-21 22:19:06 |     -    |
+---------+------+----------+---------------------+----------+
命令执行成功 

6)测试

SQL> insert into "DMDRS1"."TABLE2" ("ID", "NAME") values ('10', '1');
SQL> insert into "DMDRS1"."TABLE2" ("ID", "NAME") values ('11', '1');
SQL> insert into "DMDRS1"."TABLE2" ("ID", "NAME") values ('21', '1');

SQL> select * from "DMDRS1"."TABLE2_PART1";

行号     ID NAME
---------- -- ----
1          10 1

已用时间: 0.422(毫秒). 执行号:15101.
SQL> select * from "DMDRS1"."TABLE2_PART2";

行号     ID NAME
---------- -- ----
1          11 1

已用时间: 0.671(毫秒). 执行号:15102.
SQL> select * from "DMDRS1"."TABLE2_PART3";

行号     ID NAME
---------- -- ----
1          21 1

已用时间: 0.776(毫秒). 执行号:15103.
SQL> select * from "DMDRS1"."TABLE2";

行号     ID NAME
---------- -- ----
1          10 1
2          11 1
3          21 1

已用时间: 1.128(毫秒). 执行号:15104.
SQL> select * from "DMDRS2"."TABLE2";

行号     ID NAME
---------- -- ----
1          11 1

已用时间: 1.016(毫秒). 执行号:15105.

3、实现根据条件分类同步
1)停源端同步
image.png
2)配cvt
image.png
参考以上方式配置B C链路
3)测试

SQL> insert into "DMDRS1"."MXKJ_ACC_CHECK_CONFIG" ("ID", "CITY", "NAME") values ('210000000', '辽宁省本级', 'B');
影响行数 1

已用时间: 0.988(毫秒). 执行号:42301.
SQL> insert into "DMDRS1"."MXKJ_ACC_CHECK_CONFIG" ("ID", "CITY", "NAME") values ('210100000', '沈阳市本级', 'B');
影响行数 1

已用时间: 1.747(毫秒). 执行号:42302.
SQL> insert into "DMDRS1"."MXKJ_ACC_CHECK_CONFIG" ("ID", "CITY", "NAME") values ('210181000', '本溪市本级', 'B');
影响行数 1

已用时间: 1.159(毫秒). 执行号:42303.
SQL> commit;
操作已执行
已用时间: 3.939(毫秒). 执行号:42304.
SQL> select * from "DMDRS1"."MXKJ_ACC_CHECK_CONFIG";

行号     ID        CITY            NAME
---------- --------- --------------- ----
1          210000000 辽宁省本级 A
2          210100000 沈阳市本级 A
3          210181000 本溪市本级 A
4          210000000 辽宁省本级 B
5          210100000 沈阳市本级 B
6          210181000 本溪市本级 B

6 rows got

已用时间: 0.951(毫秒). 执行号:42305.
SQL> select * from "DMDRS2"."MXKJ_ACC_CHECK_CONFIG_A";

行号     ID        CITY            NAME
---------- --------- --------------- ----
1          210000000 辽宁省本级 A
2          210000000 辽宁省本级 B

已用时间: 1.136(毫秒). 执行号:42306.
SQL> select * from "DMDRS2"."MXKJ_ACC_CHECK_CONFIG_B";

行号     ID        CITY            NAME
---------- --------- --------------- ----
1          210100000 沈阳市本级 A
2          210100000 沈阳市本级 B

已用时间: 1.369(毫秒). 执行号:42307.
SQL> select * from "DMDRS2"."MXKJ_ACC_CHECK_CONFIG_C";

行号     ID        CITY            NAME
---------- --------- --------------- ----
1          210181000 本溪市本级 A
2          210181000 本溪市本级 B

已用时间: 2.023(毫秒). 执行号:42308.
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服