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)停源端同步
2)配cvt
参考以上方式配置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.
文章
阅读量
获赞