一、DMHS原理介绍
1.DMHS介绍
达梦数据实时同步软件 DMHS 是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。该产品可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发和多业务中心等业务领域。
达梦数据实时同步软件 DMHS,通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、影子表等对业务系统带来的性能影响;通过实时的数据同步,构建“双活”的主备系统,解决传统基于数据库自身的主备系统中备机只读而无法对外提供写服务的问题。
DMHS 的组成原理框图中包含源端数据库、目标端数据库、源端 DMHS 服务以及目标端 DMHS 服务,其中源端 DMHS 服务主要由装载模块(LOAD)、日志捕获分析模块(CPT)以及管理服务模块(MGR)组成;目标端 DMHS 服务则由执行模块(EXEC)和管理服务模块(MGR)组成。
在源端,DMHS 的 CPT 模块采用优化的日志扫描算法实现增量日志数据的快速捕获分析,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端DMHS 服务;
在目标端, DMHS 服务接收到源端的日志消息后,对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。
2.DMHS 系统组成
DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输 模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。
管理模块(MGR)是DMHS 同步服务的启动框架,根据配置文件加载并启动相关的功能模块:
捕获模块(CPT)
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
装载模块(LOAD)
DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。
传输模块(NET)
1) NET 消息发送子模块
经过CPT捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。
2) NET 消息接收子模块
经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。而上一级 NET 消息发送子模块保存消息的本地文件目录,既可以是一般的本地文件目录,也可以是提供 FTP 服务的 FTP 文件目录。当上一级 NET 消息发送子模块将消息保存在一般本地文件目录时,NET 消息接收子模块读取本地文件并发送给 EXEC 模块;当上一级 NET 消息发送子模块将消息保存在 FTP 文件目录时,NET 消息接收子模块可通过 FTP 服务器下载数据,并发送给 EXEC 模块。
执行模块(EXEC)
DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行。
二、安装前准备环境
1.DMHS安装环境
源端环境:达梦8 ip:192.168.1.104 主机名:centos-04 操作系统版本:ky10
目的端环境:达梦8 ip:192.168.1.105 主机名:centos-05 操作系统版本:ky10
2.安装环境检查
1)检查系统信息
源端192.168.1.104:
[root@centos-04 ~]# lsb_release -a
LSB Version: :core-5.0-amd64:core-5.0-noarch
Distributor ID: KylinAdvancedServer
Description: Kylin Linux Advanced Server release V10 (Sword)
Release: V10
Codename: Sword
[root@centos-04 ~]# getconf LONG_BIT
64
[root@centos-04 ~]# lsb_release -a
LSB Version: :core-5.0-amd64:core-5.0-noarch
Distributor ID: KylinAdvancedServer
Description: Kylin Linux Advanced Server release V10 (Sword)
Release: V10
Codename: Sword
[root@centos-04 ~]# cat /etc/issue
Authorized users only. All activities may be monitored and reported.
[root@centos-04 ~]# uname -a
Linux centos-04 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Mon May 24 12:14:55 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
目的端192.168.1.105:
[root@centos-05 ~]# getconf LONG_BIT
64
[root@centos-05 ~]# lsb_release -a
LSB Version: :core-5.0-amd64:core-5.0-noarch
Distributor ID: KylinAdvancedServer
Description: Kylin Linux Advanced Server release V10 (Sword)
Release: V10
Codename: Sword
[root@centos-05 ~]# cat /etc/issue
Authorized users only. All activities may be monitored and reported.
[root@centos-05 ~]# uname -a
Linux centos-05 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Mon May 24 12:14:55 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
2)检查系统内存与存储空间
源端192.168.1.104:
[root@centos-04 ~]# free -m
total used free shared buff/cache available
Mem: 2915 485 1168 10 1261 2229
Swap: 4095 0 4095
[root@centos-04 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 9.0M 1.5G 1% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/mapper/klas-root 46G 12G 35G 25% /
tmpfs 1.5G 4.0K 1.5G 1% /tmp
/dev/sda1 495M 200M 295M 41% /boot
tmpfs 292M 0 292M 0% /run/user/993
tmpfs 292M 0 292M 0% /run/user/0
/dev/sr0 4.1G 4.1G 0 100% /media/Kylin10-repo-iso
目的端192.168.1.105:
[root@centos-05 ~]# free -m
total used free shared buff/cache available
Mem: 2915 814 859 10 1241 1857
Swap: 4095 0 4095
[root@centos-05 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 9.0M 1.5G 1% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/mapper/klas-root 46G 15G 32G 32% /
tmpfs 1.5G 4.0K 1.5G 1% /tmp
/dev/sda1 495M 200M 295M 41% /boot
tmpfs 292M 0 292M 0% /run/user/993
tmpfs 292M 0 292M 0% /run/user/0
/dev/sr0 4.1G 4.1G 0 100% /media/kylin10-repo-iso
注意:DMHS 安装程序在安装时将产生临时文件,临时文件需要 1GB 的存储空间,临时文件目录默认为/tmp。如果/tmp 目录不能保证 1GB 的存储空间,用户可以扩展/tmp 目录存储空间。
3)检查系统环境变量 LD_LIBRARY_PATH 中是否设置了 DM8 的安装路径。
LINUX 平台:echo $LD_LIBRARY_PATH
源端192.168.1.104:
[dmdba@centos-04 ~]$ echo $LD_LIBRARY_PATH
:/dm/dmdbms/dm8/bin
目的端192.168.1.105:
[dmdba@centos-05 ~]$ echo $LD_LIBRARY_PATH
:/dm8/dmdbms/bin
三、DMHS部署安装
源端和目的端创建DMHS安装目录:
mkdir -p /dm/dmhs
chown -R dmdba.dinstall /dm/dmhs/
将安装程序目录授权给dmdba用户和dinstall组
chown -R dmdba.dinstall /soft
chmod 755 -R /soft
源端192.168.1.104::
[dmdba@centos-04 soft]$ ./dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:2
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件客户端
4.内置数据库
5.实时同步软件配置助手
6.手册
所需磁盘空间:866 MB
安装目录: [/home/dmdba/dmhs]/dm/dmhs
该路径不为空,是否继续安装?[Y or N]Y
安装路径可能存在覆盖安装
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
webmanager start ... webmanager finished.
db start ... db finished.
hsca start ... hsca finished.
doc start ... doc finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.1.105](192.168.1.105):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[192.168.1.105]:
内置数据库端口[15236]:
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:dameng123
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
内置数据库服务
1.自动
2.手动
启动方式:[2.手动]
正在创建内置数据库服务
初始化内置数据库
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
web服务
1.自动
2.手动
启动方式:[2.手动]
正在创建web服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/dm/dmhs/log/install.log
目的端192.168.1.105:
[dmdba@centos-04 soft]$ ./dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:2
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件客户端
4.内置数据库
5.实时同步软件配置助手
6.手册
所需磁盘空间:866 MB
安装目录: [/home/dmdba/dmhs]/dm/dmhs
该路径不为空,是否继续安装?[Y or N]Y
安装路径可能存在覆盖安装
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
webmanager start ... webmanager finished.
db start ... db finished.
hsca start ... hsca finished.
doc start ... doc finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.1.105](192.168.1.105):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[192.168.1.105]:
内置数据库端口[15236]:
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:dameng123
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
内置数据库服务
1.自动
2.手动
启动方式:[2.手动]
正在创建内置数据库服务
初始化内置数据库
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
web服务
1.自动
2.手动
启动方式:[2.手动]
正在创建web服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/dm/dmhs/log/install.log
四、DMHS目的执行端配置
1.创建同步的业务用户
create user "TEST" identified by "Dameng123" default tablespace "MAIN";
2.配置执行端 dmhs.hs
cd /dm/dmhs/bin
示例目的端的机器 IP 为:192.168.1.105,配置文件 vi 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>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>dameng123</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
</exec>
</dmhs>
根据具体的 DM8 数据库账号配置用户名和密码以及端口。
3.开启执行 DMHS 服务
作为系统服务启动,在 dmhs_serverd 配置完成的情况下,可以使用如下命令启动:
cd /dm/dmhs/bin
[dmdba@centos-05 bin]$ ./dmhs_server dmhs.hs start
MGR[INFO]: DMHS start up, current version: V4.3.08-Build(2023.03.31-127399trunc)_64_2303_sp8 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2023-07-01
MGR[INFO]: load config file successful,site no:2, manager port :5345, poll interval:3, max mem size:64(GB)
MGR[INFO]: manager listening port:5345
DMHS 的搭建过程中,目的端都会是优先启动并执行 start exec。
start exec
MGR[INFO]: loading the execute module...
MGR[ERROR]: lib libdmhs_exec.so can not found,error code 2, libdmoci.so: cannot open shared object file: No such file or directory
MGR[ERROR]: log exec start fail
[dmdba@centos-05 bin]$ ldd libdmhs_exec.so
linux-vdso.so.1 (0x00007ffc0edda000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f485df9f000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f485de1c000)
librt.so.1 => /usr/lib64/librt.so.1 (0x00007f485de11000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f485ddf0000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f485ddeb000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00007f485dae0000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f485d586000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00007f485d375000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x00007f485d107000)
libdodbc.so => /dm8/dmdbms/bin/libdodbc.so (0x00007f485d0d6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f485e4e7000)
libdmhs_exp.so => ./libdmhs_exp.so (0x00007f485cd47000)
libdmhs_xml.so => ./libdmhs_xml.so (0x00007f485cb38000)
libdmoci.so => not found --找不到libdmoci.so文件
libdmdpi.so => /dm8/dmdbms/bin/libdmdpi.so (0x00007f485c027000)
libdmfldr.so => /dm8/dmdbms/bin/libdmfldr.so (0x00007f485bf30000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f485bd7d000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f485bd64000)
[root@centos-05 ~]# find / -name libdmoci.so;
/dm/dmdbms/dm8/bin/libdmoci.so
报错段错误 (核心已转储)
将数据库安装目录下向原厂申请的libdmoci.so文件拷贝(其他目录的测试无用)到DMHS安装目录bin下面,或配置。
[dmdba@centos-05 bin]$ cp /dm/dmdbms/dm8/bin/libdmoci.so ./
[dmdba@centos-05 bin]$ ldd libdmhs_exec.so|grep oci
libdmoci.so =>/dm/dmhs/bin/libdmoci.so (0x00007f7af5917000)
五、DMHS源端配置
1.开启归档和逻辑日志
1) 设置归档标记和逻辑日志标记。vi /dm/dmdata/cbdb/dm.ini,设置如下值:
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
注意:dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响同步。
SQL> select * from v$parameter where NAME='FAST_COMMIT';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- ----------- ----------- ---- ----- --------- ---------- ------------------------------------------------------------------------------
1 289 FAST_COMMIT SYS 0 0 0 0 or 1 means normal commit; other may speed up commit, but may not assure ACID
2) 添加归档配置文件。
vi /dm/dmdata/cbdb/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch #归档目录
ARCH_FILE_SIZE = 256 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制
3) 重启DM8 数据库,使配置参数生效。
DmServicecbdb restart
4) 验证配置的正确性
a) 检查归档配置的正确性
SQL> SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
行号 ARCH_DEST ARCH_FILE_SIZE
---------- ---------- --------------
1 /dm/dmarch 256
如果存在以上的查询表示配置归档是正确的。
b) 检查逻辑日志配置的正确性
SQL> SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
行号 PARA_VALUE
---------- ----------
1 1
c) 检查在线日志
SQL> SELECT PATH FROM SYS.V$RLOGFILE;
行号 PATH
---------- --------------------------
1 /dm/dmdata/cbdb/cbdb01.log
2 /dm/dmdata/cbdb/cbdb02.log
d) 检查 FAST_COMMIT 参数是否为 0
SQL> select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
行号 PARA_VALUE
---------- ----------
1 0
2.配置 DDL
1)方式一:辅助表方式(推荐)
如果要求 DDL 同步,那么需要创建 DDL 触发器和辅助表。创建的脚本参见 DMHS 安装目录下 scripts 子目录中“ddl_sql_dm8.sql”。注意创建时需要使用 SYSDBA 用户。
[dmdba@centos-04 scripts]$ pwd
/dm/dmhs/scripts
[dmdba@centos-04 scripts]$ ls -rlt ddl_sql_dm8.sql
-rwxr-xr-x 1 dmdba dinstall 35043 6月 12 10:58 ddl_sql_dm8.sql
在源端数据库中执行ddl_sql_dm8.sql
start /dm/dmhs/scripts/ddl_sql_dm8.sql
检查创建的触发器和辅助表是否有效,检查辅助表的语句:
SQL> select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
行号 OWNER TABLE_NAME
---------- ------ ----------------
1 SYSDBA DMHS_DDL_COL
2 SYSDBA DMHS_DDL_SQL
3 SYSDBA DMHS_DDL_CONS
4 SYSDBA DMHS_DDL_IDX
5 SYSDBA DMHS_DDL_RENAME
6 SYSDBA DMHS_DDL_SEQ
7 SYSDBA DMHS_DDL_PART
8 SYSDBA DMHS_DDL_COMMENT
9 SYSDBA DMHS_DDL_LOG
9 rows got
检查触发器的语句:
SQL> select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
行号 OWNER TRIGGER_NAME
---------- ------ -----------------------
1 SYSDBA DMHS_DDL_TRIGGER_AFTER
2 SYSDBA DMHS_DDL_TRIGGER_BEFORE
3 SYSDBA DMHS_DDL_TRIGGER_GRANT
4 SYSDBA DMHS_DDL_TRIGGER_REVOKE
3.配置 dmhs.hs
dmhs.hs 是 DMHS 默认的配置文件名,如果需要 DDL 同步,那么基本的配置示例如下:
<?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>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>dameng123</db_pwd>
<db_port>5236</db_port>
<db_ssl_path></db_ssl_path>
<db_ssl_pwd></db_ssl_pwd>
<parse_thr>1</parse_thr>
<ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
<arch><!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send><!-- 发送模块配置 -->
<ip>192.168.1.105</ip> <!—执行端 IP-->
<mgr_port>5345</mgr_port><!—执行端 mgr_port -->
<data_port>5346</data_port><!—执行端 data_port -->
<trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->
<constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->
<identity>1</identity>
<net_turns>0</net_turns>
<filter><!--过滤配置项-->
<enable><!-- 白名单,所有允许同步的表 -->
<item>TEST.*</item>
</enable>
</filter>
<map><!--映射配置项-->
<item>TEST.*==TEST.*</item>
</map>
</send>
</cpt>
</dmhs>
现对以上的基本配置作如下几点说明:
1) siteid 全局唯一,即 DMHS 同步系统涉及的所有节点的 siteid 必须全局唯一,不允许有重复值。
2) DDL 配 置 项 , 如 果 不 需 要 DDL 同 步 , 那 么 就 配 置 为 空 , 即<ddl_mask></ddl_mask>,相应地 DMHS DDL 触发器和辅助表也不需要创建。
3) 归档清理配置项,clear_flag 为 1 表示清除,即 DMHS 将同步完成的归档文件删除;为 2,表示将同步完成的归档移到 bak_dir 目录下;为 0,表示不作任何操作。
4) 过滤配置项,本示例配置了白名单,即 enable,也可以配置黑名单,详见 DMHS
用户手册。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么也是会被过滤的。
5) 映射配置项,表示存在不同模式之间的表同步,例如本示例中源端的 SYSDBA 模式下的表映射成目的端的 DMHS 模式下同名的表。
4.初始装载
1)开启源端 DMHS 服务:
[dmdba@centos-04 bin]$ dmhs_server dmhs.hs start
MGR[INFO]: DMHS start up, current version: V4.3.08-Build(2023.03.31-127399trunc)_64_2303_sp8 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2023-07-01
MGR[INFO]: load config file successful,site no:1, manager port :5345, poll interval:3, max mem size:64(GB)
MGR[INFO]: manager listening port:5345
clear exec lsn#为了初始化日志的起始位置。
PUB[INFO]: set enable_directio = 0
MGR[INFO]: loading DM8 log analysis...
CPT[INFO]: DM8_V4.3.08_64
CPT[INFO]: send_lst is 3
CPT[INFO]: DM8 IS SUPPORT UNICODE: FALSE
CPT[INFO]: DM8 parameter LENGTH_IN_CHAR: 0
CPT[INFO]: DM8 RLOG_APPEND_SYSTAB_LOGIC = 0, then using DMHS auxiliary table and triggers for DDL sync.
CPT[INFO]: DM8 log format is RLOG_PKG, arch: /dm/dmarch/ARCHIVE_LOCAL1_0x7A353119[0]_2023-06-19_21-04-56.log, db_magic: 2050306329 - 2050306329
CPT[INFO]: DM8 archive directory: /dm/dmarch archive file size:256 M
CPT[INFO]: dm8 log version flag is : 2, old: 0
CPT[INFO]: [0]Searched archived file number: 1, START_ARCH_LSN: 0, START_FILE: null, VER: 1
CPT[INFO]: DM8 CPT is created.
CPT[INFO]: DM8 CPT is free.
SND[INFO]: Loading filter info:
SND[INFO]: ENABLE: TEST.*
SND[INFO]: Loading col map:
SND[INFO]: Analysis module 192.168.1.105:5346 's log sending thread created successfully
SND[INFO]: Analysis module 1 are connecting to site 192.168.1.105:5346...
SND[INFO]: the analysis module 1 are resetting 192.168.1.105:5346 site 's execute module...
PUB[WARN]: user env lang:PG_UTF8 is conflict with char_code:PG_GB18030
PUB[WARN]: use char_code:PG_GB18030
SND[INFO]: Analysis module 1 are sending the map rules...
SND[INFO]: TEST.*==TEST.*...
SND[INFO]: The analysis module 1 are getting the min LSN from site 192.168.1.105:5346...
SND[INFO]: analysis module 1 get LSN:0 LFS:0 successfully
SND[INFO]: Analysis module are checking the execute module complete all transactions...
SND[INFO]: 192.168.1.105:5346 to site 1 's sending thread has quited
MGR[INFO]: setting destion 192.168.1.105:5345 net lock mode:DISABLE
MGR[INFO]: send commnd to site 192.168.1.105:5345 success
command exec finish
2)初始装载:
./dmhs_console
DMHS> copy 0 "sch.name='TEST'" DICT|LSN|CREATE|INSERT|INDEX
CSL[WARN]: Detect the LSN mask, the mask will be ignored in the log is less than the current LSN all operations, please confirm whether to continue?(Y/N)
Y
copy mask is : |CREATE|INSERT|INDEX|TABLE|DICT|LSN|PARTITION|OBJID|REP
execute finish, please look up log file of exec module to check data load result
5.开启同步
初始装载完成后,则可以开启同步:
源端 DMHS 开启CPT模块:
dmhs_console
DMHS> start cpt
execute success
6.配置dmhs服务方式启动
[dmdba@centos-05 ~]$ cd /dm/dmhs/bin
[dmdba@centos-05 bin]$ cp TemplateDmhsService DmhsService
修改DMHS_HOME、PROG_DIR、CONF_PATH路径
sed -i 's/\/opt\/dmhs/\/dm\/dmhs/g' DmhsService
[dmdba@centos-05 bin]$ grep "/dm/dmhs" DmhsService
DMHS_HOME=/dm/dmhs
PROG_DIR=/dm/dmhs/bin
CONF_PATH=/dm/dmhs/bin/dmhs.hs
[dmdba@centos-05 bin]$ DmhsService start
(ORACLE NLS_LANG) is not set in this script, starting failed!!!
启动报错需要设置HS_NLS_LANG
[dmdba@centos-05 bin]$ grep "HS_NLS_LANG=" DmhsService
HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
启动dmhs服务:
[dmdba@centos-05 bin]$ DmhsService start
Starting DmhsService: [ OK ]
[dmdba@centos-05 bin]$ ps -ef|grep dmhs
dmdba 5152 1 0 11:23 pts/0 00:00:00 /dm/dmhs/bin/dmhs_server /dm/dmhs/bin/dmhs.hs -noconsole
dmdba 5225 4561 0 11:23 pts/0 00:00:00 grep --color=auto dmhs
[dmdba@centos-05 bin]$
六、验证数据
源端:
DMHS> exit
[dmdba@centos-04 ~]$ disql sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 8.385(毫秒)
disql V8
SQL> insert into test.TAB_CB values(101,'test101',SYSDATE);commit;
DMSQL 过程已成功完成
已用时间: 7.729(毫秒). 执行号:398.
SQL> select COUNT(*) from test.TAB_CB;
行号 COUNT(*)
---------- --------------------
1 101
目的端:
[dmdba@centos-05 bin]$ disql TEST/Dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 6.057(毫秒)
disql V8
SQL> select COUNT(*) from test.TAB_CB;
行号 COUNT(*)
---------- --------------------
1 101
达梦在线服务平台:https://eco.dameng.com