源端:DM8
CPU:Intel x86
OS:Kylin V10
version:dmhs_V4.3.10_dm8_rev129468_rh6_64_veri_20230504_sp6
Charset:UTF-8
IP:192.168.123.12
目标端:PG
CPU:Intel x86
OS:Redhat 7.6
version:dmhs_V4.3.10_pg_rev128943_rh6_64_veri_20230424_sp3
Charset:UTF-8
IP:192.168.123.17
源端DM数据库:
源端执行码:
dmhs_V4.3.10_dm8_rev129468_rh6_64_veri_20230504_sp6.bin
安装路径:/home/dmdba/dmhs
启动脚本:
cd /home/dmdba/dmhs/bin
. /DmhsServicebook start
目的端PG:
目的端执行码:
dmhs_V4.3.10_pg_rev128943_rh6_64_veri_20230424_sp3.bin
安装路径:/home/postgres/dmhs_05
启动脚本:
cd /home/postgres/dmhs_05
./DmhsServicePG13 start
本次测试环境中达梦和PG分别放置不同的服务器,均为单机。
[dmdba@cesdb20dmhs]$ ./dmhs_V4.3.10_dm8_rev129468_rh6_64_veri_20230504_sp6.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.手册
所需磁盘空间:541 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.123.12](192.168.123.12):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:192.168.123.12
内置数据库端口[15236](1000-65535):5239
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/dmdba/dmhs/log/install.log
DM8源端需要开启附加日志参数"RLOG_APPEND_LOGIC"以支持数据实时同步,使用如下语句查询DM8数据库中该参数是否启用:
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的归档日志量比不启用该参数会有所增加,需要知悉。
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进行沟通。
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/db/dmdata/dmhs/scripts/ddl_sql_dm8.sql
查看源端是否已配置以下环境变量(dmhs软件安装完成后自动添加如下两条环境变量):
export DMHS_HOME=/home/db/dmdba/dmhs
export LD_LIBRARY_PATH="LD_LIBRARY_PATH:$DMHS_HOME/bin:$DM_HOME/bin"
将libdmoci.so放置$DM_HOME/bin下
注:本次使用安装包为:dm8_20230426_x86_kylin10_64_ent_8.1.3.12_pack3_dmdci.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/
若dci文件已放入$DM_HOME/bin下,则以下检测不会出现缺包现象,否则会显示libdmoci.so缺包
cd $DMHS_HOME/bin
[dmdba@cesdb20 bin]$ ldd ./libdmhs_ld_dm8.so
linux-vdso.so.1 (0x00007fff748ca000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f2d380fa000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f2d37f77000)
librt.so.1 => /usr/lib64/librt.so.1 (0x00007f2d37f6c000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f2d37f4b000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f2d37f46000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00007f2d37c2c000)
libdmhs_net.so => ./libdmhs_net.so (0x00007f2d379e2000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f2d37488000)
libdmoci.so => /dm8/dmdbms_0426/bin/libdmoci.so (0x00007f2d3695b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2d38530000)
libdmhs_bool_parse.so => ./libdmhs_bool_parse.so (0x00007f2d3674e000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f2d3659b000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f2d36580000)
[postgres@cesdb dmhs]$ ./dmhs_V4.3.10_pg_rev128943_rh6_64_veri_20230424_sp3.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.手册
所需磁盘空间:546 MB
安装目录: [/home/postgres/dmhs]
该路径不为空,是否继续安装?[Y or N]n
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:546 MB
安装目录: [/home/postgres/dmhs]/home/postgres/dmhs_05
该路径不为空,是否继续安装?[Y or N]y
安装路径可能存在覆盖安装
安装目录无写入权限
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:546 MB
安装目录: [/home/postgres/dmhs]
该路径不为空,是否继续安装?[Y or N]n
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:546 MB
安装目录: [/home/postgres/dmhs]/home/postgres/dmhs_05
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.123.17](192.168.123.17):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:192.168.123.17
内置数据库端口[15236](1000-65535):
内置数据库用户名[SYSDBA]:postgres
内置数据库密码[SYSDBA]:sys
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/postgres/dmhs_05/log/install.log
在安装PostgreSQL ODBC前需要首先安装UnixODBC。
tar -zxvf unixODBC-2.3.1tar.gz
cd unixODBC-2.3.0
./configure
make && make install
安装完成后:
[root@cesdb ~]# odbcinst -j
unixODBC 2.3.1
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
tar -zxvf psqlodbc-13.02.0000.tar.gz
cd psqlodbc-13.02.0000
./configure --with-unixodbc --with-libpq=/usr/pgsql-13
make && make install
注:
使用rpm包安装pg时,需要安装postgresql-devel,否则在执行configure操作时会出错。
本次安装pg包为:
postgresql13-13.3-1PGDG.rhel7.x86_64.rpm
postgresql13-contrib-13.3-1PGDG.rhel7.x86_64.rpm
postgresql13-libs-13.3-1PGDG.rhel7.x86_64.rpm
postgresql13-server-13.3-1PGDG.rhel7.x86_64.rpm
postgresql13-devel-13.3-1PGDG.rhel7.x86_64.rpm
安装地址:
https://yum.postgresql.org/common/redhat/rhel-7-x86_64/repoview/
[root@cesdb ~]# cat /etc/odbc.ini
[POSTGRESQL]
Description = PostgresSQLODBC
Driver = /usr/local/lib/psqlodbcw.so
Database = postgres
Servername = 192.168.123.17
UserName = postgres
Password = postgres
Port = 5432
ReadOnly = 0
ConnSettings = set client_encoding to UTF8
root@cesdb ~]# cat /etc/odbcinst.ini
# Example driver definitions
# Driver from the mysql-connector-odbc package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/local/lib/psqlodbcw.so
Setup = /usr/lib64/libodbcpsqlS.so
Driver64 = /usr/local/lib/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
在$DMHS_HOME/bin下添加dmhs.hs文件:
vi 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.123.12</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5239</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.123.17</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter>
<enable>
<item>*.*</item>
</enable>
</filter>
<map>
<item>SYSDBA.*==postgres.*</item>
</map>
</send>
</cpt>
</dmhs>
在$DMHS_HOME/bin下添加dmhs.hs文件:
vi dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<name>exec_pg</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>POSTGRES</db_type>
<db_server>192.168.123.17</db_server>
<db_user>postgres</db_user>
<db_pwd>postgres</db_pwd>
<db_port>5432</db_port>
<char_mode>PG_UTF8</char_mode>
<db_name>postgres</db_name>
<driver>PostgreSQL</driver>
<need_convert>1</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>
前台启动目标端dmhs服务:
[postgres@cesdb bin]$ cd /home/postgres/dmhs_05/bin
[postgres@cesdb bin]$ pwd
/home/postgres/dmhs_05/bin
[postgres@cesdb bin]$ ./dmserver
另开窗口,登录DMHS的控制台:
[postgres@cesdb bin]$ ./dmhs_console
DMHS console tool: V4.3.10-Build(2023.04.24-128943trunc)_D64_2304_sp3
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.10-Build(2023.04.24-128943trunc)_D64_2304_sp3
DMHS> start exec
前台启动脚本:
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;
创建测试表:
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(10000000);
目标端查看数据量:
[root@cesdb ~]# su - postgres
Last login: Tue May 16 13:41:24 CST 2023 on pts/2
[postgres@cesdb ~]$ psql -U postgres -h192.168.123.17 -p5432 -dpostgres
psql (9.2.24, server 13.3)
WARNING: psql version 9.2, server version 13.0.
Some psql features might not work.
Type "help" for help.
postgres=#
postgres=# select count(*) from postgres."T3";
1)cd $DMHS_HOME/bin/service_template
2) cp –r DmhsService ../
3) mv DmhsService DmhsServicesbook
4) vi DmhsServicebook
#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)./DmhsServicesbook start
1)cd $DMHS_HOME/bin/service_template
2) cp –r DmhsService ../
3) mv DmhsService DmhsServicesPG13
4) vi DmhsServicebook
#REPLACE DMHS_HOME path
DMHS_HOME=/home/postgres/dmhs_05 --DMHS_HOME
#REPLACE program dir
PROG_DIR=/home/postgres/dmhs_05/bin --DMHS_HOME执行bin目录
#REPLACE program config path
CONF_PATH=/home/postgres/dmhs_05/bin/dmhs.hs --配置文件dmhs.hs 绝对路径
(5)./DmhsServicesPG13 start
文章
阅读量
获赞