当前位置: 首页 > news >正文

达梦数据库 单机部署dmhs同步复制(DM8—>DM8)

 

主要流程:

本文讨论了达梦数据实时同步软件DMHS的单机部署同步复制(dm8->dm8)相关内容,涵盖其概念、原理、环境模拟、部署步骤及配置讲解等。关键要点包括:

1.DMHS系统概述

是高性能、高可靠性的数据库实时同步系统,支持秒级实时数据同步、主备同步,确保事务级数据完整性和一致性,组件包含MGR、CPT等多个模块。

2.环境模拟

分别在源端([192.168.52.20](192.168.52.20))和目的端([192.168.52.21](192.168.52.21))创建用户和组、安装目录,调整系统资源限制,安装达梦数据库并创建数据。

3.部署步骤

源端检查数据库日志开启情况并做相应操作;源端和目的端关闭防火墙,上传并安装dmhs服务;源端配置DDL;两端分别配置并启动dmhs.hs,初始化装载后启动相应模块;最后配置服务启动dmhs。

4.配置讲解

目的端和源端的dmhs.hs配置文件均包含base等部分,各部分有具体参数设置,如管理端口、站点号等,不同模块参数作用不同 。

一、概念总结


达梦数据实时同步软件 DMHS 是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。
DMHS 的基础实现原理如下图所示:

这是一个描述数据从源数据库(SOURCE DB)迁移到目标数据库(TARGET DB)的过程。以下是详细解析:

  1. 源数据库(SOURCE DB)
    • 包含两个主要部分:tableslogs
    • tables 表示数据库中的表结构和数据。
    • logs 表示数据库的操作日志。
  1. 加载(LOAD)
    • 步骤①:源数据库的表数据被加载到一个临时存储区域或缓冲区中,准备进行传输。
  1. 变更数据捕获(CPT)
    • 步骤③:源数据库的日志信息通过变更数据捕获(CPT)处理,提取出需要同步的数据变更信息。
  1. 管理器(MGR)
    • 步骤②和步骤④:管理和协调数据的传输过程。它接收来自LOAD和CPT的数据,并通过网络发送给目标端的管理器。
  1. 网络传输
    • 数据通过网络从源端的管理器传输到目标端的管理器。
  1. 消息操作(Message operation)
    • 目标端接收到数据后,进行消息操作,将数据分配给多个线程(Thread 1, Thread 2, ..., Thread n)进行并行处理。
  1. 执行(EXEC)
    • 各个线程处理完数据后,将结果写入目标数据库(TARGET DB)。

整个流程是一个典型的数据库迁移或同步过程,涉及数据加载、变更数据捕获、网络传输、多线程处理和最终写入目标数据库等步骤。


二、环境模拟


需求192.168.52.25机器上有一个SOURCE的数据库,数据库里面有个APP的模式,里面存放着项目的表数据,现在需要把这些表数据实时同步到192.168.52.26机器上的DEST数据库里面的APP模式。
192.168.52.25(源数据库)的SOURCE数据库中的APP模式---->>192.168.52.26(目的数据库)的DEST数据库中的APP模式
下面的操作模拟环境:


1、模拟192.168.52.25(源)环境

1.1、创建达梦数据库对应的用户和组

groupadd dinstall
useradd -g dinstall dmdba
echo "Dameng123" |passwd --stdin dmdba

1.2、创建达梦数据库安装目录

mkdir -p /dm8/{dminstall,dmdata,dmarch,dmback}
chown -R dmdba:dinstall /dm8
chmod -R 755 /dm8

1.3、调整系统资源限制

vim /etc/security/limits.conf

dmdba   soft    nofile  65536
dmdba   hard    nofile  65536
dmdba   soft    nproc   65536
dmdba   hard    nproc   65536

###soft软连接,hard硬连接,nofile打开文件,nproc打开的进程

1.4、关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.5、下载镜像

达梦数据库镜像,官方下载:

产品下载 | 达梦在线服务平台

1.6、挂载镜像:

 mount -o loop dm8_20230925_x86_rh6_64.iso /mnt/

1.7、切换dmdba用户,安装数据库

su - dmdba
/mnt/DMInstall.bin -i

root用户下执行命令

/dm8/dminstall/script/root/root_installer.sh

root用户下执行命令 (关闭自启服务)

systemctl disable DmAPService.service --now
systemctl status DmAPService.service

数据库创建完毕!!!

1.8、初始化实例

su - dmdba
/dm8/dminstall/bin/dminit path=/dm8/dmdata db_name=DEST instance_name=DEST port_num=5236

1.9、编写启动脚本

cd /dm8/dminstall/bin
cp service_template/DmService DmServiceDEST

vim DmServiceDEST

1.10、修改内容如下

INI_PATH=%INI_PATH% 修改为 INI_PATH=/dm8/dmdata/DEST/dm.ini

1.11、启动数据库实例

./DmServiceDEST start


1.12、创建数据

切换到dmdba用户执行

su - dmdba
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.52.25:5236

执行下面的命令创建表空间、用户

CREATE TABLESPACE  TEST DATAFILE 'TEST.DBF' SIZE 256;
CREATE USER APP IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE TEST;
grant "DBA" to "APP";
exit

1.13、使用新建的APP用户登录数据库,创建表和插入数据

./disql APP/Dameng123@192.168.52.25:5236

CREATE TABLE STUDENTS(STUDENT_ID INTEGER PRIMARY KEY IDENTITY(1,1),NAME VARCHAR(50) NOT NULL,BIRTH_DATE DATE NOT NULL,GENDER CHAR(1) CHECK (GENDER IN ('M','F')) NOT NULL,EMAIL VARCHAR(100) UNIQUE NOT NULL,PHONE_NUMBER VARCHAR(15));

INSERT INTO STUDENTS (NAME, BIRTH_DATE, GENDER, EMAIL, PHONE_NUMBER) VALUES ('张三', '2000-03-01', 'M', 'zhangsan@djl.com', '13243253257'),('李四', '1999-05-21', 'F', 'lisi@djl.com', '13312345678'),('王五', '2001-07-11', 'M', 'wangwu@djl.com', '13423456789'),('赵六', '1998-08-15', 'F', 'zhaoliu@djl.com', '13534567890'),('钱七', '2002-12-12', 'M', 'qianqi@djl.com', '13645678901'),('孙八', '2000-10-10', 'F', 'sunba@djl.com', '13756789012'),('周九', '1997-11-22', 'M', 'zhoujiu@djl.com', '13867890123'),('吴十', '2001-04-05', 'F', 'wushi@djl.com', '13978901234'),('郑十一', '1999-06-18', 'M', 'zhengshiyi@djl.com', '14089012345'),('王十二', '1998-09-09', 'F', 'wangshier@djl.com', '14190123456');
commit;
exit


2、模拟192.168.52.26(目的库)环境

2.1、安装数据库

该步骤省略,可参考上方 1.1--1.7部分

2.2、初始化实例

su - dmdba
cd /dm8/dminstall/bin/
./dminit path=/dm8/dmdata db_name=DEST1 instance_name=DEST1 port_num=5236

2.3、编写启动脚本

cd /dm8/dminstall/bin
cp service_template/DmService DmServiceDEST1

vim DmServiceDEST1

2.4、修改内容如下

INI_PATH=%INI_PATH% 修改为 INI_PATH=/dm8/dmdata/DEST1/dm.ini

2.5、启动数据库实例

./DmServiceDEST1 start

2.6、创建数据

# 切换到dmdba用户执行
su - dmdba
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.52.26:5236
# 执行下面的命令创建表空间、用户
CREATE TABLESPACE  TEST DATAFILE 'TEST.DBF' SIZE 256;
CREATE USER APP IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE TEST;
grant "DBA" to "APP";
exit

环境模拟完成!!

三、部署dmhs,实现同步复制

1、环境检查(源端 ,192.168.52.25)

需要检查源端的数据库是否开启了归档日志和逻辑日志,如果有开启,忽略下面的操作

1.1、检查归档日志和逻辑日志是否开启

su - dmdba 
cd /dm8/dminstall/bin
./disql APP/Dameng123@192.168.52.25:5236

1.2、检查归档配置的正确性,如果能查询到结果就是开启了

SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL'  AND ARCH_IS_VALID='Y'; 

1.3、检查逻辑日志配置的正确性,查询出来的结果是1或者2是开启了

SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC'; 

exit

2、如果上面的查询结果显示没有开启,执行下面的操作开启

vim /dm8/dmdata/DEST/dm.ini

2.1、ARCH_INI和RLOG_APPEND_LOGIC设置成1,表示开启

ARCH_INI = 1
RLOG_APPEND_LOGIC = 1 

2.2、添加归档配置文件

vim /dm8/dmdata/DEST/dmarch.ini
##内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/dmarch #归档目录 
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制

2.3、重启数据库

cd /dm8/dminstall/bin
./DmServiceDEST restart


3、安装dmhs服务(源端和目的端都操作)

3.1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3.2、上传dmhs的bin、key文件

把下载好的bin、key文件上传到服务器的/opt目录下,并给bin文件授予执行权限。

chmod +x /opt/dmhs_V4.3.20_dm8_rev140201_rh6_64_20230916.bin

3.3、开始安装dmhs

su - dmdba
mkdir /dm8/dmhs
/opt/dmhs_V4.3.20_dm8_rev140201_rh6_64_20230916.bin -i

注:Key文件路径必须填 ,免费试用版目前无法用

如果不用Key文件到后方会报错

安装完成

/dm8/dminstall/bin:/dm8/dmhs/bin

4、配置 DDL (源端 52.25)

如果要求 DDL 同步,那么需要创建 DDL 触发器和辅助表。创建的脚本参见 DMHS 安装目录下 scripts 子目录中"ddl_sql_dm8.sql",注意创建时需要使用 SYSDBA 用户。 建议是使用达梦数据库的管理工具去执行这个sql脚本。

4.1、检查创建的触发器和辅助表是否有效,辅助表有9张,

select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';

4.2、检查创建的触发器有4个

select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';


5、配置dmhs.hs

目的端配置dmhs.hs

5.1、目的端配置并启动:

su - dmdba
cd /dm8/dmhs

5.2、制一份bin目录,单独配置,当同一个服务上需要部署多个dmhs,可以方便区分

cp -r bin exec01
cd exec01

5.3、如果是测试dmhs,在使用的过程中可能会缺少libdmoci.so动态库文件报错,执行下面的命令复制一份到数据库的bin目录下,如果是生产中,需要去达梦官方申请

cp -r stat/libdmoci.so /dm8/dminstall/bin

5.4、编辑dmhs.hs文件

vim dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs><base><lang>en</lang><mgr_port>5345</mgr_port><ckpt_interval>60</ckpt_interval><siteid>2</siteid><version>2.0</version>
</base><exec><recv><data_port>5346</data_port></recv><char_code>PG_GB18030</char_code><db_type>dm8</db_type><db_server>192.168.52.26</db_server><db_user>APP</db_user><db_pwd>Dameng123</db_pwd><db_port>5236</db_port><exec_thr>4</exec_thr><exec_sql>1024</exec_sql><exec_trx> 5000 </exec_trx><exec_rows>1000</exec_rows></exec>
</dmhs>

目的端:解析文件内容

<?xml version="1.0" encoding="GB2312"?> # 文件头,这个是XML文件的声明,用来指定文档使用的XML版本和字符编码。

<dmhs> # 根元素,表示dmhs配置文件的开始。

<base> # MGR的配置,配置同步服务的 DMHS 服务器管理模块,如同客户端通讯的监听端口、语言项、站点号等基本配置信息的元素

<lang>en</lang> # 语言选项,ch 代表 gb18030 编码简体中文,ch-utf8 代表 utf8 编码简体中文;en 代表英文,默认值 ch,说明:该参数不仅会影响 dmhs_server 的输出,同样会影响到 dmhs_console 客户端的语言输出。

<mgr_port>5345</mgr_port> # dmhs的管理端口,说明:同步服务起动以后,会监听该端口上的连接,用于执行客户端工具发过来的命令和接收统计信息。

<ckpt_interval>60</ckpt_interval> # 检查点间隔时间,说明:当同步服务中存在 EXEC 模块时,该参数表示 EXEC 模块检查点刷新的时间间隔,单位为秒,默认为60秒。

<siteid>2</siteid> # 同步节点站点号,说明:站点号是同步节点在同步链路中的唯一标识,配置时请确保它的唯一性,如果重复,那会造成链路中数据同步的混乱。

<version>2.0</version> # 配置文件的版本号,可选 1.0 或 2.0,默认值 1.0。说明:如果指定为 1.0,兼容旧版本配置格式。如果指定为 2.0,则按最新的配置格式解析。旧版本配置格式仅支持网络直连模式下源端到目标端的同步配置,如果要使用高级功能,如一对多、转发和路由等,则需要使用 2.0 的版本格式。

</base>

<exec> # 执行模块配置

<recv> # 数据来源配置,说明:路由功能的数据来源只能通过网络端口,所以该 RECV 配置项只允许指定 mgr_port 和 data_port 参数。

<data_port>5346</data_port> # 数据来自本地监听的数据端口号,说明:远端的 CPT 模块通过它自身的 NET 模块发送消息到该端口,路由服务收到消息以后再根据映射配置发到远端的 NET 模块,实现数据路由。

</recv>

<char_code>PG_GB18030</char_code> # 连接数据库的客户端字符集,说明:该参数在目标库为 MYSQL 时起作用,表明 CPT 解析出来的日志数据字符集编码。目标库为 Kafka 时,表示当前客户端数据的字符集编码,用于大字段数据的转码,默认为 GB18030。

<db_type>dm8</db_type> # 数据入库的数据库类型,说明:该参数指明了 EXEC 模块关联的数据库类型。

<db_server>192.168.52.25</db_server> # 数据库的服务名,说明:该参数会被填入 ODBC 连接串,用来跟数据库建立连接。ORACLE 数据库要填服务名、SQL SERVER 需要填机器名、DM 则需要填服务名或 IP、ORACLE 需要监听地址端口实例名“<HOST>: <PORT>/<SID_NAME>”。

<db_user>APP</db_user> # 登录数据库的用户名,说明:该参数会被填入 ODBC 连接串,用来跟数据库建立连接。DM6 同步时目标端必须使用 SYSDBA 登录。

<db_pwd>Dameng123</db_pwd> # 登录数据库的用户口令,说明:该参数跟 db_user 对应,如果配置了 pwd_encipher 参数,则需要填写加密后的口令。

<db_port>5236</db_port> # 登录数据库的端口号,说明:如果数据库是以默认端口号启动的,则不用配置该参数,否则请配置相应的端口号。

<exec_thr>4</exec_thr> # EXEC 模块用来数据入库的工作线程数,说明:数据入库是由工作线程来完成的,每个工作线程对应一个事务,单个工作线程时,事务按提交顺序先后入库,如果配置了多个工作线程,那么需要按照提交策略来决定事务之间如何并行入库。

<exec_sql>1024</exec_sql> # EXEC 模块缓存事务 SQL 语句的内存大小,说明:EXEC 模块从 NET 接收模块中获取到 CPT 模块发送过来的消息以后,按事务ID 对这些消息进行归类,缓存到本机内存中。如果是提交的事务,则交给工作线程进行入库处理,而没有提交的事务则一直会在内存中缓存。当缓存的内存总数达到该参数的设定值时,EXEC 模块会对没有提交的事务存盘,以便释放内存空间来接收新的消息。存盘操作就涉及到大量的 IO,从而影响同步的性能,所以需要合理的配置该参数,以适应当前的同步环境。

<exec_trx> 5000 </exec_trx> # 允许缓存事务的个数,说明:EXEC 模块缓存事务个数的最大限制,当超过这个限制值时将不再接收消息,需要等现有的事务入库完毕后,事务个数降到限定值以下时才会重新开始接收。当停止消息接收时,整个同步链路会处在阻塞状态,通过查看统计信息可以获取到这一状态。

<exec_rows>1000</exec_rows> # 数据入库时允许的最大批量行数,说明:工作线程在对事务进行入库时,采取的是参数批量绑定的方式,这个参数指定了批量的最大行数,该参数对性能会有一定影响。取值小时,可以减少 EXEC 模块对内存的占用,但是会降低入库性能;取值大时虽然有助于提升入库性能,但是会加剧 EXEC 模块对内存的消耗。

</exec>

</dmhs>

5.5、启动dmhs,并启动exec模块

cd /dm8/dmhs/exec01
./dmhs_server

5.6、启动exec模块

start exec



6、源端配置dmhs.hs并启动:

su - dmdba
cd /dm8/dmhs

6.1、复制一份bin目录,单独配置,当同一个服务上需要部署多个dmhs,可以方便区分

cp -r bin cpt01
cd cpt01

6.2、如果是测试dmhs,在使用的过程中可能会缺少libdmoci.so动态库文件报错,执行下面的命令复制一份到数据库的bin目录下,如果是生产中,需要去达梦官方申请

cp -r stat/libdmoci.so /dm8/dminstall/bin

6.3、编辑文件

vim dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs><base><lang>en</lang><mgr_port>5345</mgr_port><ckpt_interval>60</ckpt_interval><siteid>1</siteid><version>2.0</version></base><cpt><db_type>dm8</db_type><db_server>192.168.52.25</db_server><db_user>APP</db_user><db_pwd>Dameng123</db_pwd><db_port>5236</db_port><parse_thr>1</parse_thr><ddl_mask>op:obj</ddl_mask><arch><clear_interval>600</clear_interval><clear_flag>0</clear_flag></arch><send><ip>192.168.52.26</ip><mgr_port>5345</mgr_port><data_port>5346</data_port><trigger>1</trigger><constraint>1</constraint><identity>1</identity><net_turns>0</net_turns><filter><enable><item>APP.*</item></enable></filter><map><item>APP.*==APP.*</item></map></send></cpt>
</dmhs>

源库 配置文件内容解析

<?xml version="1.0" encoding="GB2312"?> # 文件头,这个是XML文件的声明,用来指定文档使用的XML版本和字符编码。

<dmhs> # 根元素,表示dmhs配置文件的开始。

<base> # MGR的配置,配置同步服务的 DMHS 服务器管理模块,如同客户端通讯的监听端口、语言项、站点号等基本配置信息的元素

<lang>en</lang> # 语言选项,ch 代表 gb18030 编码简体中文,ch-utf8 代表 utf8 编码简体中文;en 代表英文,默认值 ch,说明:该参数不仅会影响 dmhs_server 的输出,同样会影响到 dmhs_console 客户端的语言输出。

<mgr_port>5345</mgr_port> # dmhs的管理端口,说明:同步服务起动以后,会监听该端口上的连接,用于执行客户端工具发过来的命令和接收统计信息。

<ckpt_interval>60</ckpt_interval> # 检查点间隔时间,说明:当同步服务中存在 EXEC 模块时,该参数表示 EXEC 模块检查点刷新的时间间隔,单位为秒,默认为60秒。

<siteid>1</siteid> # 同步节点站点号,说明:站点号是同步节点在同步链路中的唯一标识,配置时请确保它的唯一性,如果重复,那会造成链路中数据同步的混乱。

<version>2.0</version> # 配置文件的版本号,可选 1.0 或 2.0,默认值 1.0。说明:如果指定为 1.0,兼容旧版本配置格式。如果指定为 2.0,则按最新的配置格式解析。旧版本配置格式仅支持网络直连模式下源端到目标端的同步配置,如果要使用高级功能,如一对多、转发和路由等,则需要使用 2.0 的版本格式。

</base>

<cpt> # 日志分析模块配置

<db_type>dm8</db_type> # 捕获源端的数据库类型,说明:目前源端支持的数据库有 DM6、DM7、ORACLE9i 以上版本、MYSQL、POSTGRES、DB2、SQLSERVER、ORACLE RAC、DM7 MPP。

<db_server>192.168.52.25</db_server> # 源端数据库的服务名,如果数据库不支持服务名,也可以填写 IP,说明:通常源为 ORACLE 数据库时,需要配置服务名,其它类型的数据库可以配置实际的 IP。当 DM6 或 DM7 作为源时,如果数据库的启动端口不是默认端口,可以使用服务名的方式进行配置。

<db_user>APP</db_user> # 连接源端数据库的登录名或用户名,说明:当源是 DM6 或 SQLSERVER 时,该参数需要配置为相应的登录名,其它类型数据库请配置用户名。由于 CPT 分析时需要查询系统表或系统提供的动态视图,请确保配 置的登录或用户拥有相关的权限。当搭建同步工具的主备时(比如 DM7 主备或是ORACLE RAC 主备),该用户还需要对 DMHS_DICT 表拥有 CREATE、INSERT、DELETE 和 UPDATE 权限, ORACLE 需要对连接用户表空间的配额权限。

<db_pwd>Dameng123</db_pwd> #源端数据库登录口令,说明:db_user 参数对应的口令,默认为明文,如需配置密文,请配合 pwd_encipher 参数。

<db_port>5236</db_port> # 源端数据库的监听端口号,说明:如果配置为 0,则忽略该参数,使用默认的端口号登录。DM6 和 DM7 也可以在服务名中指定端口号,不用在此配置。

<parse_thr>1</parse_thr> # 日志分析线程数,说明:该参数仅对源端数据为 DM7、DM8 和 Oracle 时有效。CPT 允许使用多线程对日志进行解析,从而提升日志解析的速度。

<ddl_mask>op:obj</ddl_mask> # DDL 操作功能掩码,说明:如果需要同步 DDL 操作,那么就需要配置该掩码,该掩码默认值为TABLE:OP。该配置项以掩码自由组合的方式进行配置,以:号作为分隔符。

<arch> # 归档信息配置,该标签是一个功能标签,需要配置它的子项,说明:该标签用来指定 CPT 如何处理归档日志。

<clear_interval>600</clear_interval> # 归档日志清理间隔,说明:每次清理归档的时间间隔,如果归档不需要清理,可以把该值设置大些。

<clear_flag>0</clear_flag> # 单节点同步时,dmhs4.0 中间层数据库的清理标志,说明:配置为 0 时,不清理数据;为 1 时,清理缓存库的数据。如同步配置为多节点时,log_db 下 clear_flag 应配置为 0,不清理;同时 arch 标签下的 clear_flag 设置为默认值0,不清理;由 dmhs_log_db_clear 工具综合各个节点的最小 LSN 来清理(hs4)缓存库。

</arch>

<send> # CPT 投递信息配置,该标签是一个功能标签,需要配置它的子项,说明:CPT 分析出的日志需要投递到下一级,投递时需要对数据进行过滤,对象进行映射,以及一些属性约束,需要在它的子项里进行设置,该功能的实现依赖于 NET 模块。

<ip>192.168.52.26</ip> # 投递到下一级的 ip 地址。说明:DMHS 下一级数据接收的备用 IP 地址,下一级可以为远程机器,也可以是本地机器。

<mgr_port>5345</mgr_port> # 下一级的管理端口

<data_port>5346</data_port> # 下一级的 NET 模块监听端口

<trigger>1</trigger> # 是否忽略触发器,默认为 0,限定值 0,1

<constraint>1</constraint> # 是否忽略约束,默认为 0,限定值 0,1

<identity>1</identity> # 指示下一级数据入库时,自增列处理方式,0(启用)或 1(忽略),默认值为0。

<net_turns>0</net_turns> # 是否启用网闸模式,0(禁用)或 1(启用)。

<filter> # 归档过滤条件,NET 模块对投递消息的过滤配置,该标签是一个功能标签,需要配置它的子项,说明:NET 模块可以针对待投递的消息进行一系列的筛选过滤。该功能标签包含 enable 和 disable 子标签,分别对应白名单和黑名单。

<enable> # 白名单,说明:过滤规则白名单设置,只有符合该标签中某个条件的,数据才允许被投递。

<item>APP.*</item> # NET 模块过滤规则白名单设置项,支持模糊匹配符“*”和“%”,其中通配符 “*”用在最后进行模糊匹配;“%”通配符用在表名之前或之间,每项仅支持一个模糊匹配符的使用。对于模式名或者对象名本身包含特殊的“.”点字符,在配置过滤时,需要将对象名称使用双引号括起来,以支持正确的对象名称解析。说明:白名单设置项,它的格式为:模式名.对象名,每项支持且仅支持一个模糊匹配符。

</enable>

</filter>

<map> # NET 模块对投递对象名进行映射,该标签是一个功能标签,需要配置它的子项,说明:NET 模块在把对象消息投递到下一级时,允许对消息中的模式名和表名进行映射,比如把 A 模式映射成 B 模式,A 表映射到 B 表等,这些条件设置是在这里设置,但真正的映射操作则是由 EXEC 模块完成。映射配置这些配置以后,NET 模块会把这些配置发送给 EXEC 模块,由它来完成映射操作。除了模式名和表名的映射,NET 模块还支持列名映射,列名映跟表名映射不同,它是在 NET 模块自身完成的,具体配置方式请参考相关章节。如果同步不需要映射,那么不用配置该项参数

<item>APP.*==APP.*</item> # NET 模块对象名进行映射项,支持模糊匹配符*。说明:NET 模块基本的模式名和表名映射配置格式为:模式名.表名==模式名.表名,左边是 CPT 分析出的表名,右边则是 EXEC 模块入库时需要映射成的表名。例如 SYSDBA.*==TEST.*,源库 SYSDBA 模式下的表都映射到了目标 TEST 模式下。

</map>

</send>

</cpt>

</dmhs>

7、启动dmhs,并装载数据,也就是把源端的数据同步到目的端,源APP-->>目的APP

./dmhs_server
clear exec lsn

clear exec lsn 的含义

  • Clear: 清除的意思。
  • Exec: 执行状态或执行信息。
  • LSN: 日志序列号。

综合起来,clear exec lsn 可以理解为清除执行状态中的日志序列号信息。这通常意味着重置同步进程的状态,使其忘记之前已经处理到的日志位置,以便重新开始同步过程或者解决某些同步异常问题。

COPY 0 "SCH.NAME='APP'" CREATE|INSERT|INDEX|COMMENT

命令解析

COPY 0:

COPY 是一个操作类型,表示要执行的数据复制操作。

0 表示使用的通道编号为0。在DMHS中,不同的通道可以配置不同的同步任务。

"SCH.NAME='APP'":

这是一个过滤条件,用来限定只对名为 APP 的模式(schema)进行操作。

在这里,它指定了仅处理 APP 模式下的对象。

CREATE|INSERT|INDEX|COMMENT:

这是指示了需要执行的操作类型:

CREATE: 创建表结构。这包括创建表、视图等对象的DDL语句。

INSERT: 插入数据。即把源数据库中的数据复制到目标数据库中。

INDEX: 创建索引。这意味着不仅会复制表结构和数据,还会复制相关联的索引定义。

COMMENT: 复制注释信息。这通常涉及到表、列等数据库对象上的注释内容。

执行成功示例:

初始化装载数据,把数据同步到目标库,保持数据一致;

8、执行完上面的装载操作后,去目的端的APP模式里面看看是否有源端同步过来的STUDENTS表

上图可见,数据同步完毕!


9、初始化装载完成后,需要启动cpt模块,让dmhs做增量同步复制,操作命令如下:

启动cpt模块

start cpt


10、在源端数据库的APP模式的STUDENTS表中增加一条数据,然后去目的端的APP模式的STUDENTS表中查看数据是否已经同步过来

10.1、源端随意添加一条数据

INSERT INTO APP.STUDENTS (NAME, BIRTH_DATE, GENDER, EMAIL, PHONE_NUMBER) VALUES ('卡拉米', '2001-11-09', 'M', 'shuaige@djl.com', '13243253252');

COMMIT;

10.2、查看目的端的表数据


11、看到目的端有数据之后,说明dmhs同步复制是正常工作,没有什么问题了,下面分别退出源端和目的端的dmhs,配置以服务的方式启动dmhs

11.1、源端退出dmhs

stop cpt
exit

11.2、目的端退出dmhs

stop exec
exit


四、配置服务启动dmhs


1、目的端配置

su - dmdba
cd /dm8/dmhs/exec01
cp service_template/DmhsService ./DmhsServiceexec01

1.1修改配置

vim DmhsServiceexec01

DMHS_HOME=_REPLACE_SELF_DMHS_HOME 修改 DMHS_HOME=/dm8/dmhs
PROG_DIR=_REPLACE_SELF_DMHS_PROG_DIR 修改 PROG_DIR=/dm8/dmhs/exec01
CONF_PATH=_REPLACE_SELF_DMHS_CONF_PATH 修改 CONF_PATH=/dm8/dmhs/exec01/dmhs.hs

1.2、启动dmhs

./DmhsServiceexec01 start

1.3、进入dmhs_console中启动dmhs实例的exec模块

./dmhs_console
start exec


2、源端配置

su - dmdba
cd /dm8/dmhs/cpt01
cp service_template/DmhsService ./DmhsServicecpt01

2.1、修改配置

vim DmhsServicecpt01
DMHS_HOME=_REPLACE_SELF_DMHS_HOME 修改成 DMHS_HOME=/dm8/dmhs
PROG_DIR=_REPLACE_SELF_DMHS_PROG_DIR 修改成 PROG_DIR=/dm8/dmhs/cpt01
CONF_PATH=_REPLACE_SELF_DMHS_CONF_PATH 修改成 CONF_PATH=/dm8/dmhs/cpt01/dmhs.hs

2.2、启动dmhs

./DmhsServicecpt01 start

2.3、进入dmhs_console中启动dmhs实例的cpt模块,开启增量同步

./dmhs_console
start cpt


配置好服务并启动后,可以再去源端新增一条数据,然后到目的端看看是否同步成功

3、源端添加一条数据

INSERT INTO APP.STUDENTS (NAME, BIRTH_DATE, GENDER, EMAIL, PHONE_NUMBER) VALUES ('美女', '2002-4-25', 'F', 'meinv@djl.com', '13243253549');
COMMIT;

4、目的端查看

实验成功!!
 

达梦数据库社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

相关文章:

  • 高频面试之6Hive
  • Redis: List类型
  • Redis免费客户端工具推荐
  • Github月度新锐热门工具 - 202506
  • [HarmonyOSNext鸿蒙开发]11.ArkUI框架:Swiper、Grid布局与代码复用实战指南
  • Spring Boot 集成 Redis 实战教程
  • spring boot源码和lib分开打包
  • AWS CloudFormation实战:构建可复用的ECS服务部署模板
  • AWS TAM行为面试模拟题
  • onnx 模型转 rknn 部署 rk3588 开发板
  • Centos与RockLinux设置静态ip
  • TripGenie:畅游济南旅行规划助手:团队工作纪实(十四)
  • 26-Oracle 23 ai Automatic Transaction Rollback(行锁终结者)
  • 如何正确的用Trae 打开 Unity 3D 项目
  • 神经网络全景图:五大核心架构详解与本质区别
  • QB/T 8103-2024 氯化聚氯乙烯板材检测
  • java并发包中的ReentrantLock锁详解篇
  • Java Collection接口解析
  • C++与C有什么不同
  • 数据集-目标检测系列- 狮子 数据集 lion >> DataBall
  • wordpress 显示页面标题/搜索引擎优化方法
  • 连云港做网站建设/优化营商环境心得体会
  • 做牛津纺衬衫的网站/关键字排名查询工具
  • wordpress的Portfolio/官网seo优化找哪家做
  • 一级建设造师网站/seo站长查询
  • 河南建设工程信息网电话/seo待遇