一、环境信息
1.1硬件信息
源端DM8 目标端MSS
CPU Intel x86 Intel x86
OS Kylin V10 Redhat 8.1
version dmhs_V3.3.14_dm8_rev133910_rh6_64_20230705_sp9.bin dmhs_V4.3.12_mss_rev130108_rh6_64_veri_20230511.bin
Charset GB18030 GBK
IP 192.168.48.8 192.168.48.11
1.2安装部署规划
源端DM数据库
源端执行码:
dmhs_V3.3.14_dm8_rev133910_rh6_64_20230705_sp9.bin安装路径:/home/dmdba/dmhs
启动脚本:
cd /home/dmdba/dmhs/bin
./DmhsServicetest start
数据库端口:5286
账号及密码:SYSDBA/SYSDBA
数据库版本:1-3-26-2023.06.21-193718-20046-ENT
目的端mss
目的端执行码:
dmhs_V4.3.12_mss_rev130108_rh6_64_veri_20230511.bin安装路径:/opt/dmhs/bin
启动脚本:
cd /opt/dmhs/bin
./DmhsServicemss start
数据库端口:1433
账号及密码:sa/Wa202307
数据库版本:Microsoft SQL Server 2019 (RTM-CU21) (KB5025808) - 15.0.4316.3
1.3 实施架构说明
本次测试环境中达梦和SQLSERVER分别放置不同的服务器,均为单机。
二、DMHS源端安装
2.1 dmhs软件安装
[dmdba@localhost media]$ ./dmhs_V3.3.14_dm8_rev133910_rh6_64_20230705_sp9.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:551 MB
安装目录: [/home/dmdba/dmhs]
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.48.8](192.168.48.8):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:192.168.48.8
内置数据库端口[15236](1000-65535):5286
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/dmdba/dmhs/log/install.log
三、DM源端配置
3.1开启逻辑附加日志
DM8源端需要开启附加日志参数"RLOG_APPEND_LOGIC"以支持数据实时同步,使用如下语句查询DM8数据库中该参数是否启用:
[dmdba@localhost media]$ disql sysdba:5286
密码:
服务器[LOCALHOST:5286]:处于普通打开状态
登录使用时间 : 47.345(ms)
disql V8
SQL> SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='RLOG_APPEND_LOGIC';
行号 PARA_VALUE
---------- ----------
1 2
已用时间: 12.834(毫秒). 执行号:10000.
PARA_VALUE结果大于0,则说明该功能已开启。如果取值为0,需要启用该参数功能。调用系统过程开启该参数或者手动更改dm.ini配置文件中的‘RLOG_APPEND_LOGIC’参数值。目前该参数支持动态修改,具体可参考管理员手册说明。
SQL> call sp_set_para_value(1, 'RLOG_APPEND_LOGIC', 2);
PL/SQL executed successfully
used time: 6.362(ms). Execute id is 127.
以上sp_set_para_value调用表示修改dm.ini文件中的’RLOG_APPEND_LOGIC’参数值为1。该系统过程的定义可参见《DM8_SQL语言使用手册》。
(1) 该参数取值说明如下:
取值为1:如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息;若没有主键列则包含所有列信息;
取值为2:不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息;
取值为3::记录UPDATE时包含更新列的信息以及ROWID,记录DELETE时只有ROWID。
在Kafka执行端,对于主键表,如果在更新和删除时需要显示全列信息,则需要设置该值为2,保证源端日志中记录有全列信息,否则无法显示全列。
(2)启用该参数后,源端DM8的归档日志量比不启用该参数会有所增加,需要知悉。
3.2开启数据库归档
DMHS同步源端数据库需要开启归档模式,使用如下语句检查DM8归档是否开启:
SQL> select arch_mode from v$database;
LINEID ARCH_MODE
---------- ---------
1 Y
used time: 3.236(ms). Execute id is 123.
如果ARCH_MODE字段查询结果为“N”,则DM8数据库归档未开启,使用如下系列命令开启归档模式。开启归档模式,需要确定归档类型、归档路径、归档文件大小、归档空间大小限制参数,根据实际情况进行设置。具体可参阅《DM8系统管理员手册》。
SQL> alter database mount;
executed successfully
used time: 00:00:01.144. Execute id is 0.
SQL> alter database add archivelog 'DEST= /dm8/arch,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=2048';
executed successfully
used time: 7.437(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 10.277(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 00:00:01.262. Execute id is 0.
注意:
在数据库运行过程中,若需要开启归档模式,需要与DBA进行沟通。
3.3DDL同步配置
DMHS支持DDL同步功能,但是默认不启用该功能。对于同步源端为DM8数据库,有两种方式启用DDL同步功能:
(1)无触发器方式:启用DM8数据库系统参数“RLOG_APPPEND_SYSTAB_LOGIC”,该参数启用在日志中记录系统表逻辑操作功能。该参数默认取值为0,即不启用;设置为1时,启用该功能。
select * from v$dm_ini where para_name='RLOG_APPEND_SYSTAB_LOGIC';
call sp_set_para_value(1,'RLOG_APPEND_SYSTAB_LOGIC',0);
call sp_set_para_value(1,'RLOG_APPEND_SYSTAB_LOGIC',1);
(2)触发器方式:在源端DM8数据库中以SYSDBA用户执行DDL同步脚本,在SYSDBA模式下创建相关DMHS系统表及触发器。
同步脚本位于DMHS安装目录的scripts子目录下,命名为:ddl_sql_dm8.sql
--进入数据库执行以下脚本,如遇到需要输入值,可直接回车继续:
start /home/dmdba/dmhs/scripts/ddl_sql_dm8.sql
3.4源端环境变量
查看源端是否已配置以下环境变量(dmhs软件安装完成后自动添加如下两条环境变量):
export DMHS_HOME=/home/dmdba/dmhs
export LD_LIBRARY_PATH="LD_LIBRARY_PATH:$DMHS_HOME/bin:$DM_HOME/bin"
3.5dci文件导入
将libdmoci.so放置 D M H O M E / b i n 下注:本次使用安装包为: d m 8 2 023042 6 x 8 6 k y l i n 1 0 6 4 e n t 8 . 1.3.1 2 p a c k 3 d m d c i . z i p ,解压后将 d m o c c i 文件夹下的 l i b d m o c i . s o 放置 DM_HOME/bin下 注:本次使用安装包为:dm8_20230426_x86_kylin10_64_ent_8.1.3.12_pack3_dmdci.zip,解压后将dmocci文件夹下的libdmoci.so放置 DMHOME/bin下注:本次使用安装包为:dm820230426x86kylin1064ent8.1.3.12pack3dmdci.zip,解压后将dmocci文件夹下的libdmoci.so放置DM_HOME/bin下
unzip dm8_20230426_x86_kylin10_64_ent_8.1.3.12_pack3_dmdci.zip
cd dmocci
cp libdmoci.so $DM_HOME/bin/
3.6检查dmhs是否缺少so包
若dci文件已放入$DM_HOME/bin下,则以下检测不会出现缺包现象,否则会显示libdmoci.so缺包
cd $DMHS_HOME/bin
[dmdba@localhost bin]$ ldd ./libdmhs_ld_dm8.so
linux-vdso.so.1 (0x00007fffe6797000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f7c5733a000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f7c571b7000)
librt.so.1 => /usr/lib64/librt.so.1 (0x00007f7c571ac000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f7c5718b000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f7c57186000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00007f7c56e6e000)
libdmhs_net.so => ./libdmhs_net.so (0x00007f7c56c21000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f7c566c7000)
libdmoci.so => /home/dmdba/dmdbms/bin/libdmoci.so (0x00007f7c55b9a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7c57771000)
libdmhs_bool_parse.so => ./libdmhs_bool_parse.so (0x00007f7c5598d000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f7c557da000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f7c557bf000)
四、DMHS目标端安装
4.1 dmhs安装
[root@localhost media]# ./dmhs_V4.3.12_mss_rev130108_rh6_64_veri_20230511.bin -i
Extract install files.........
1.English(English)
2.Simplified Chinese(简体中文)
Select the language to install[2.Simplified Chinese(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:545 MB
安装目录: [/opt/dmhs]
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.122.1](192.168.122.1,192.168.48.11):192.168.48.11
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:192.168.48.11
内置数据库端口[15236](1000-65535):1433
内置数据库用户名[SYSDBA]:sa
内置数据库密码[SYSDBA]:Wa202307
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/opt/dmhs/log/install.log
五、MSS目的端配置
5.1安装Microsoft ODBC
5.1.1 安装Microsoft ODBC 18
#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version
#RHEL 8 and Oracle Linux 8
curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
#to avoid conflicts
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo ACCEPT_EULA=Y yum install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo yum install -y unixODBC-devel
5.1.2 ISQL连接测试
[root@localhost bin]# odbcinst -j
unixODBC 2.3.11
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
配置驱动:
[root@localhost bin]# cat /etc/odbcinst.ini
[ODBC Driver 18 for SQL Server]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.2.1
UsageCount=1
TrustServerCertificate=yes
Encrypt=1
注:配置TrustServerCertificate=yes,使用TLS加密通信层时自动信任SQL Server TLS/SSL证书。
配置数据源:
[root@localhost bin]# cat /etc/odbc.ini
[mssql2]
Description = sqlserver connection
Driver = ODBC Driver 18 for SQL Server
TDS_Version = 7.3
Trace = On
TraceFile = stderr
Server = 192.168.48.11
Port = 1433
TrustServerCertificate=yes
[root@localhost bin]# isql -v mssql2 sa Wa202307
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| echo [string] |
| quit |
| |
+---------------------------------------+
SQL> select @@version;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Microsoft SQL Server 2019 (RTM-CU21) (KB5025808) - 15.0.4316.3 (X64)
Jun 1 2023 16:32:31
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Linux (Red Hat Enterprise Linux 8.1 (Ootpa)) <X64> |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 0
1 rows fetched
SQL>
六、配置文件准备
6.1 dm源端
在$DMHS_HOME/bin下添加dmhs.hs文件:
6.1.1 dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<name>cpt</name>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<enable>1</enable>
<name>cpt</name>
<db_type>DM8</db_type>
<db_server>192.168.48.8</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5286</db_port>
<ddl_mask>op:obj:rec</ddl_mask>
<idle_time>300</idle_time>
<char_mode>PG_UTF8</char_mode>
<constraint>1</constraint>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.48.11</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter>
<enable>
<item>*.*</item>
</enable>
</filter>
<map>
<item>SYSDBA.*==dbo.*</item>
</map>
</send>
</cpt>
</dmhs>
6.2 MSS目标端
在$DMHS_HOME/bin下添加dmhs.hs文件:
6.2.1 dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<name>exec_mss</name>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
</recv>
<enable>1</enable>
<name>exec</name>
<db_type>SQLSERVER</db_type>
<db_server>192.168.48.11</db_server>
<db_user>sa</db_user>
<db_pwd>Wa202307</db_pwd>
<db_port>1433</db_port>
<char_mode>PG_UTF8</char_mode>
<db_name>master</db_name>
<driver>DSN=mssql2</driver>
<need_convert>0</need_convert>
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<ddl_continue>1</ddl_continue>
<affect_row>0</affect_row>
<exec_policy>2</exec_policy>
<enable_rowid>0</enable_rowid>
<clear_trx_file>1</clear_trx_file>
<trx_max_file>8</trx_max_file>
</exec>
</dmhs>
七、启动增量同步
7.1 启动目的端exec
前台启动目标端dmhs服务:
[root@localhost bin]# cd $DMHS_HOME/bin
[root@localhost bin]# pwd
/opt/dmhs/bin
[root@localhost bin]# ./dmhs_server
另开窗口,登录DMHS的控制台:
[root@localhost bin]# ./dmhs_console
DMHS console tool: V4.3.12-Build(2023.05.11-130108trunc)_D64_2305
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
Connected to DMHS: 127.0.0.1:5345
execute success
Dameng HS Server V4.3.12-Build(2023.05.11-130108trunc)_D64_2305
DMHS> start exec
7.2 启动源端cpt
前台启动脚本:
cd /home/dmdba/dmhs/bin
./dmhs_server
启动控制器:
cd /home/dmdba/dmhs/bin
./dmhs_console
DMHS>connect
Connect successful
DMHS>copy 0 "SCH.NAME='SYSDBA'" DICT (装载字典)
DMHS>COPY 0 "SCH.NAME='SYSDBA'" INSERT|THREAD|8
DMHS>clear exec lsn
DMHS>start cpt (开启增量同步)
注:
(1)connect连接的是目的端DMHS服务的地址以及目的端DMHS配置文件中的管理端口号(BASE中的MGR_PORT)。
(2)start cpt后会在dmhs/bin目录下生成dmhs_cpt.tmp文件。下次启动dmhs服务会根据该文件判断是否需要启动捕获服务,如果存在该文件,则直接启动dmhs捕获器;如果该文件不存在,则需要执行start cpt命令启动捕获器。
(3)装载字典或者装载数据只能在cpt停止的时候进行,因此,hs同步过程中如果需要进行字典或者数据的装载,要先执行stop cpt后再进行copy装载。
(4)初始数据装载时,如果目标端已建立相应的同步表,则使用:COPY 0 “SCH.NAME=‘SYSDBA’” INSERT|THREAD|8;如果目标端需要使用DMHS创建初始表,则使用:COPY 0 “SCH.NAME IN (‘XXX1’,‘XXX2’,‘XXX3’)” CREATE|INSERT|THREAD|8,如果同步表有分区表,加入PARTITION选项:COPY 0 “SCH.NAME=‘XXX1’” CREATE|INSERT|THREAD|8|PARTITION;
7.3 数据同步验证
创建测试表:
create table T3(c1 int,c2 int,c3 int,c4 varchar(20),c5 varchar(20),c6 varchar(20),c7 varchar(20),c8 varchar(20),c9 varchar(20));
创建存储过程:
create or replace PROCEDURE p_in(num int)
as
begin
for i in 1..num loop
insert into t3 values(i,
DBMS_RANDOM.RANDOM(),
DBMS_RANDOM.RANDOM(),
DBMS_RANDOM.RANDOM_STRING('U',4),
DBMS_RANDOM.RANDOM_STRING('U',5),
DBMS_RANDOM.RANDOM_STRING('U',6),
DBMS_RANDOM.RANDOM_STRING('U',7),
DBMS_RANDOM.RANDOM_STRING('U',8),
DBMS_RANDOM.RANDOM_STRING('U',9));
if (i%10000 = 0)
then commit;
end if;
end loop;
end;
/
根据需求进行数据同步添加1W…10W…100W
call p_in(1000);
目标端查看数据量:
[root@localhost ~]# sqlcmd -S localhost -U sa -P 'Wa202307' -No
1> select count(*) from dbo.t3;
2> go
-----------
1000
(1 rows affected)
1>
八、后台服务启动
8.1 源端
1)cd $DMHS_HOME/bin/service_template
2) cp –r DmhsService ../
3) mv DmhsService DmhsServicetest
4) vi DmhsServicetest
#REPLACE DMHS_HOME path
DMHS_HOME=/home/dmdba/dmhs --DMHS_HOME
#REPLACE program dir
PROG_DIR=/home/dmdba/dmhs/bin --DMHS_HOME执行bin目录
#REPLACE program config path
CONF_PATH=/home/dmdba/dmhs/bin/dmhs.hs --配置文件dmhs.hs 绝对路径
(5)./DmhsServicetest start
8.2 目的端
1)cd $DMHS_HOME/bin/service_template
2) cp –r DmhsService ../
3) mv DmhsService DmhsServicemss
4) vi DmhsServicemss
#REPLACE DMHS_HOME path
DMHS_HOME=/opt/dmhs --DMHS_HOME
#REPLACE program dir
PROG_DIR=/opt/dmhs/bin --DMHS_HOME执行bin目录
#REPLACE program config path
CONF_PATH=/opt/dmhs/bin/dmhs.hs --配置文件dmhs.hs 绝对路径
(5)./DmhsServicemss start
更多技术分享,见达梦社区:https://eco.dameng.com