注册
DMHS数据同步配置
培训园地/ 文章详情 /

DMHS数据同步配置

杨鹏程 2023/07/21 1618 1 0

目录

单机同构DM-DM 3

1、修改dm.ini参数 3
2、安装dmhs 4
3、配置DDL 6
4、验证触发器与辅助表是否有效 7
5、编辑dmhs.hs配置文件 7
6、检查dmhs运行环境 9
7、启动dmhs 10
8、启动控制台 10
9、开启CPT日志捕获模块,开启同步 14
10、注册服务 16

DMHS多对一单机同构DM-DM 17

1、修改dm.ini参数 20
2、安装dmhs 20
3、配置DDL 22
4、验证触发器与辅助表是否有效 23
5、编辑dmhs.hs配置文件 23
6、检查dmhs运行环境 26
7、启动dmhs 26
8、启动控制台 26
9、源端开启CPT日志捕获模块,开启同步 28
10、注册服务: 29

DMHS双向同步DM-DM 30

1、修改dm.ini参数 33
2、安装dmhs 33
3、配置DDL 35
4、验证触发器与辅助表是否有效 36
5、编辑dmhs.hs配置文件 36
6、检查dmhs运行环境 40
7、启动dmhs 41
8、启动控制台 41
9、两端均开启CPT日志捕获模块,开启同步 42
10、注册服务 43

单机同构DM-DM

两台服务器均安装DM8数据库
DM01 --源端 数据库版本:dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso
--2023的版本暂不支持
192.168.16.90
10.10.10.90
DMDB01
DMSERVER01
5236
UTF-8
DMHS表空间
DMHST用户
开启归档

DM02 --目的端 数据库版本:版本不限
192.168.16.91
10.10.10.91
DMDB02
DMSERVER02
5237
UTF-8
DMHS表空间
DMHST用户
开启归档

==
./dminit PATH=/dm8/data EXTENT_SIZE=16 PAGE_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD=Dameng123 DB_NAME=DMDB01 INSTANCE_NAME=DMSERVER01 PORT_NUM=5236
./dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm8/data/DMDB01/dm.ini

==

1、修改dm.ini参数
FAST_COMMIT 值为0,否则会导致逻辑日志不全影响同步。
RLOG_APPEND_LOGIC 值1,开启逻辑日志。
select SF_GET_PARA_VALUE(1,'FAST_COMMIT');
select SF_GET_PARA_VALUE(1,'RLOG_APPEND_LOGIC');
select SF_GET_PARA_VALUE(1,'ARCH_INI');
SP_SET_PARA_VALUE(1,'FAST_COMMIT',0);
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
image.png

重启数据库

2、安装dmhs
root用户安装
源端和目的端一样

上传包并授权 /opt/dmhs
chmod 755 dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin
安装
./dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin -i
本次安装路径/opt/dmhs
image.png

默认的直接回车即可
远程部署工具名称[HsAgent]:默认即可
主机Ip(外网):192.168.16.90
远程部署工具管理端口:默认5456
内置数据库轮询间隔[3]:默认3
内置数据库IP:10.10.10.90
内置数据库端口[15236]:默认15236
内置数据库用户名[SYSDBA]:默认
内置数据库密码[SYSDBA]:默认
依赖库路径:/dm8/bin:/opt/dmhs/bin --配置dm数据库和dmhs的bin(依赖库)目录
手动
手动
手动
image.png
安装完成

3、配置DDL
源端和目的端一样
su - dmdba
disql SYSDBA/Dameng123:5236
start /opt/dmhs/scripts/ddl_sql_dm8.sql
在执行脚本过程中,会出现如下图所示现象,是由于DEFINE本地变量开启的原因,直接回车即可。
image.png
image.png

4、验证触发器与辅助表是否有效
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
image.png
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
image.png

5、编辑dmhs.hs配置文件
/opt/dmhs/bin
源端:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>1</siteid>
<version>4.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>192.168.16.90</db_server><!-- 源端IP或者主备服务器上配置服务名dmhs,默认127.0.0.1 本机。。 -->
<db_user>SYSDBA</db_user>
<db_pwd>Dameng123</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<ddl_mask>obj:op</ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>1</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
</arch>
<send>
<ip>192.168.16.91</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter>
<enable><!-- 白名单,允许同步的表-->
<item>DMHST.DEPT</item>
</enable>
<disable>
</disable>
</filter>
<map><!-- 映射配置-->
<item>DMHST.DEPT==DMHST.DEPT</item>
</map>
</send>
</cpt>
</dmhs>

目的端:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>2</siteid>
<version>4.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.16.91</db_server><!--目的端数据库服务名或IP 本机。。 -->
<db_user>SYSDBA</db_user><!--数据库用户名,默认为SYSDBA  -->
<db_pwd>Dameng123</db_pwd><!--数据库口令,默认为SYSDBA  -->
<db_port>5237</db_port><!--数据库端口号,默认为5236 -->
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>250</exec_rows>
<exec_policy>2</exec_policy>
</exec>
</dmhs>

6、检查dmhs运行环境
echo $LD_LIBRARY_PATH
image.png
这里为啥没有dm数据库bin路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin
上面是临时的,直接修改root的环境变量
cd ~
vim .bash_profile
添加数据库bin目录
image.png
source .bash_profile
image.png

7、启动dmhs
源端,目的端均启动
cd /opt/dmhs/bin
./dmhs_server
image.png

8、启动控制台
源端,目的端均启动
先启动目的端,再启动源端

目的端:
cd /opt/dmhs/bin
./dmhs_console
connect
或者
connect 192.168.16.91:5345

start exec --启动exec数据入库模块
image.png
报错:缺少 libdmoci.so
image.png
cp /opt/dmhs/bin/stat/libdmoci.so /opt/dmhs/bin/ --DM8目前(4月份版本)不能使用这个
报错:
image.png
上传 麒麟v10系统对应的oci包
可以了、、、
image.png

还有点小报错:
image.png
libodbcinst.so odbc的包没找到,直接修改root的环境变量即可,将odbc依赖包路径添加即可
image.png
image.png
image.png

目的端启动正常

源端:
cd /opt/dmhs/bin
./dmhs_console
connect 192.168.16.90:5345
image.png

源端数据库dmhst用户下新建表测试
create table dmhst.dept(id int,name varchar2(30)) tablespace dmhs;
insert into dmhst.dept values (1,'dd'),(2,'源端数据');
commit;

注:dmhs中要求源端与目标端同步数据之前保持数据一致,如果源端已有数据输入以下命令,此命令为拉平目标端与源端数据,保持数据一致,仅执行一次即可,多次执行会造成目的端数据混乱。

copy 0 "sch.name='DMHST'" insert | reg
报错:
image.png

更换数据库
使用:dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso 这个版本
卸载原库:
DmServiceDMSERVER01 stop
cd /dm8
./uninstall.sh -i
rm -rf * --清空dm8目录

上传安装包安装
./DMInstall.bin -i
初始化实例
./dminit PATH=/dm8/data EXTENT_SIZE=16 PAGE_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD=Dameng123 DB_NAME=DMDB01 INSTANCE_NAME=DMSERVER01 PORT_NUM=5236
注册服务root
./dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm8/data/DMDB01/dm.ini

su - dmdba
vim .bash_profile
添加PATH和依赖包路径(使用root启动dmhs路径可以不用添加,odbc的加上)
image.png

启动数据库
DmServiceDMSERVER01 start

创建表空间及用户
create tablespace dmhs DATAFILE '/dm8/data/DMDB01/DMHS01.DBF' size 128 autoextend on,'/dm8/data/DMDB01/DMHS02.DBF' size 128 autoextend on;
create user dmhst identified by Dameng123 default tablespace dmhs;
创建测试表
create table dmhst.dept(id int,name varchar2(30)) tablespace dmhs;
insert into dmhst.dept values (1,'dd'),(2,'源端数据');
commit;

修改dm.ini参数,并开启归档
重启数据库

配置DDL

启动dmhs
cd /opt/dmhs/bin
./dmhs_console
connect 192.168.16.90:5345

执行
copy 0 "sch.name='DMHST'" insert | reg
image.png
修改dmhs.hs配置文件
image.png

再次执行
copy 0 "sch.name='DMHST'" insert | reg
image.png
目标端91服务器查询验证:
select * from dmhst.dept;
image.png
源数据已有数据已同步。

9、开启CPT日志捕获模块,开启同步
start cpt
报错: --需要重新初始化字典
image.png

重新执行
copy 0 "sch.name='DMHST'" insert | reg
image.png
执行成功,但是有重复数据了
image.png

目标库:
delete from dmhst.dept;
commit;

源库重新执行初始化:
stop cpt
copy 0 "sch.name='DMHST'" insert | reg
image.png

启动数据同步:
start cpt
image.png

源库插入数据验证:
insert into dmhst.dept values (3,'dd3'),(4,'源端数据4');
commit;
目标库查询: --数据已同步
image.png

10、注册服务
源端与目标端一致
cd /opt/dmhs/bin/service_template
cp DmhsService /opt/dmhs/bin/
cd /opt/dmhs/bin
vim DmhsService

添加 (上方添加)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin:/opt/dmhs/bin
image.png

修改路径
image.png

执行
cp /opt/dmhs/bin/DmhsService /etc/init.d/DmhsService
ln -s /etc/init.d/DmhsService /etc/rc0.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc6.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc3.d/S98DmhsService
ln -s /etc/init.d/DmhsService /etc/rc5.d/S98DmhsService
image.png

授权
chown -R dmdba:dinstall /opt/dmhs
/opt/dmhs/bin/DmhsService restart
image.png

数据同步配置完成!!

DMHS多对一单机同构DM-DM

三台服务器均安装DM8数据库
DMHS版本:dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin
DM01 --源端 数据库版本:dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso --2023的版本目前(dmhs4月份的版本)好像都不支持
192.168.16.95
10.10.10.95
DMDB05
DMSERVER05
5235
UTF-8
DMHS表空间
DMHST用户
开启归档

DM02 --源端
192.168.16.96
10.10.10.96
DMDB06
DMSERVER06
5236
UTF-8
DMHS表空间
DMHST用户
开启归档

DM03 --目的端 目的端数据库版本:没要求
192.168.16.97
10.10.10.97
DMDB07
DMSERVER07
5237
UTF-8
DMHS表空间
DMHST用户
开启归档
安装odbc --目的端需要安装odbc 版本:unixODBC-2.3.11.tar.gz 和 unixODBC-2.3.0.tar.gz 都行
image.png

==
./dminit PATH=/dm8/data EXTENT_SIZE=16 PAGE_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD=Dameng123 DB_NAME=DMDB01 INSTANCE_NAME=DMSERVER01 PORT_NUM=5236
./dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm8/data/DMDB01/dm.ini

归档开启
alter database mount;
alter database add archivelog 'DEST=/dm8/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
alter database archivelog;
alter database open;
select arch_mode from v$database;

创建表空间及用户
create tablespace dmhs DATAFILE '/dm8/data/DMDB01/DMHS01.DBF' size 128 autoextend on,'/dm8/data/DMDB01/DMHS02.DBF' size 128 autoextend on;
create user dmhst identified by Dameng123 default tablespace dmhs;

源端数据库dmhst用户下新建表测试
create table dmhst.dept(id int,name varchar2(30)) tablespace dmhs;
insert into dmhst.dept values (95,'dd95'),(951,'源端数据951');
commit;
image.png
image.png

ODBC安装 root安装
yum install gcc

tar xzvf unixODBC-2.3.11.tar.gz
cd unixODBC-2.3.11
./configure
make
make install

odbcinst -j
vim odbcinst.ini
[dm8 driver]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so

vim odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = dm8 driver
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5237

测试:
su - dmdba
isql dm8

==

1、修改dm.ini参数
FAST_COMMIT 值为0,否则会导致逻辑日志不全影响同步。
RLOG_APPEND_LOGIC 值1,开启逻辑日志。
select SF_GET_PARA_VALUE(1,'FAST_COMMIT');
select SF_GET_PARA_VALUE(1,'RLOG_APPEND_LOGIC');
select SF_GET_PARA_VALUE(1,'ARCH_INI');
SP_SET_PARA_VALUE(1,'FAST_COMMIT',0);
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);

重启数据库

2、安装dmhs
root用户安装
源端和目的端一样

上传包并授权 /opt/dmhs
chmod 755 dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin
安装
./dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin -i
本次安装路径/opt/dmhs
image.png
默认的直接回车即可
远程部署工具名称[HsAgent]:默认即可
主机Ip(外网):192.168.16.90
远程部署工具管理端口:默认5456
内置数据库轮询间隔[3]:默认3
内置数据库IP:10.10.10.90
内置数据库端口[15236]:默认15236
内置数据库用户名[SYSDBA]:默认
内置数据库密码[SYSDBA]:默认
依赖库路径:/dm8/bin:/opt/dmhs/bin --配置dm数据库和dmhs的bin(依赖库)目录
手动
手动
手动
image.png
安装完成
上传适配的OCI包及key 至 /opt/dmhs/bin 并授权
chmod 755 libdmoci.so
image.png
image.png
mv dmhsC401088303.key dmhs.key
image.png

3、配置DDL
源端和目的端一样
su - dmdba
disql SYSDBA/Dameng123:5236
start /opt/dmhs/scripts/ddl_sql_dm8.sql
在执行脚本过程中,会出现如下图所示现象,是由于DEFINE本地变量开启的原因,直接回车即可。
image.png
image.png

4、验证触发器与辅助表是否有效
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
image.png
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
image.png

5、编辑dmhs.hs配置文件
--只有这里和一对一同构有区别
/opt/dmhs/bin
源端:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>5</siteid><!-- siteid 为站点号是同步节点在同步链路中的唯一标识,要保证其唯一性-->
<version>4.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>192.168.16.95</db_server><!-- 源端IP或者主备服务器上配置服务名dmhs,默认127.0.0.1 本机。。 -->
<db_user>SYSDBA</db_user>
<db_pwd>Dameng123</db_pwd>
<db_port>5235</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<ddl_mask>obj:op</ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>1</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
</arch>
<send>
<ip>192.168.16.97</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter>
<enable><!-- 白名单,允许同步的表-->
<item>DMHST.DEPT</item>
</enable>
<disable>
</disable>
</filter>
<map><!-- 映射配置-->
<item>DMHST.DEPT==DMHST.DEPT</item>
</map>
</send>
</cpt>
</dmhs>

目的端:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>2</siteid>
<version>4.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.16.97</db_server><!--目的端数据库服务名或IP 本机。。 -->
<db_user>SYSDBA</db_user><!--数据库用户名,默认为SYSDBA  -->
<db_pwd>Dameng123</db_pwd><!--数据库口令,默认为SYSDBA  -->
<db_port>5237</db_port><!--数据库端口号,默认为5236 -->
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>250</exec_rows>
<exec_policy>2</exec_policy>
</exec>
</dmhs>

6、检查dmhs运行环境
echo $LD_LIBRARY_PATH
image.png
这里为啥没有dm数据库bin路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin
上面是临时的,直接修改root的环境变量
cd ~
vim .bash_profile
添加数据库bin目录
image.png
source .bash_profile
image.png

7、启动dmhs
源端,目的端均启动
cd /opt/dmhs/bin
./dmhs_server
image.png

8、启动控制台
源端,目的端均启动
先启动目的端,再启动源端

目的端:(97)
cd /opt/dmhs/bin
./dmhs_console
connect
或者
connect 192.168.16.95:5345

start exec --启动exec数据入库模块
image.png

还有点小报错: --需要开启exec模块(目的端)就需要配置ODBC的依赖路径
image.png
libodbcinst.so odbc的包没找到,直接修改root的环境变量即可,将odbc依赖包路径添加即可
image.png
image.png
image.png

目的端启动正常

源端:(95和96)
cd /opt/dmhs/bin
./dmhs_console
connect

copy 0 "sch.name='DMHST'" insert | reg
注:dmhs中要求源端与目标端同步数据之前保持数据一致,如果源端已有数据输入以下命令,此命令为拉平目标端与源端数据,保持数据一致,仅执行一次即可,多次执行会造成目的端数据混乱。

目标端97服务器查询验证:--同步成功
select * from dmhst.dept;
image.png

目标端有这个报错:不影响,因为两个源端创建用户和表空间相同,重复了(这里路径输入也不是很对。。)
image.png

9、源端开启CPT日志捕获模块,开启同步
start cpt
image.png

源库插入数据验证:
95库
insert into dmhst.dept values (955,'dd955'),(956,'源端数据956');
commit;

96库
insert into dmhst.dept values (966,'dd966'),(967,'源端数据967');
commit;

目标库查询: --数据已同步 --乱码!!
image.png

查询字符集
select '字符集', decode(UNICODE,0,'GB18030',1,'UTF-8'); --3库均为utf-8
乱码解决:
源端dmhs.hs添加配置<char_code>PG_UTF8</char_code>
启动后目的端直接显示
image.png
验证:
image.png
正常传输

10、注册服务:
源端与目标端一致
cd /opt/dmhs/bin/service_template
cp DmhsService /opt/dmhs/bin/
cd /opt/dmhs/bin
vim DmhsService

添加 (上方添加) --本次不添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin:/opt/dmhs/bin
image.png

修改路径
image.png

执行
cp /opt/dmhs/bin/DmhsService /etc/init.d/DmhsService
ln -s /etc/init.d/DmhsService /etc/rc0.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc6.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc3.d/S98DmhsService
ln -s /etc/init.d/DmhsService /etc/rc5.d/S98DmhsService
image.png

授权
chown -R dmdba:dinstall /opt/dmhs
/opt/dmhs/bin/DmhsService restart
image.png

数据同步配置完成!!
image.png

DMHS双向同步DM-DM

两台服务器:
DMHS版本: dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin
数据库版本:dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso --2023的版本目前(dmhs4月份的版本)都不支持
DM01
192.168.16.95
10.10.10.95
DMDB05
DMSERVER05
5235
UTF-8
DMHS表空间
DMHST用户
开启归档
安装odbc

DM02
192.168.16.96
10.10.10.96
DMDB06
DMSERVER06
5236
UTF-8
DMHS表空间
DMHST用户
开启归档
安装odbc

==
./dminit PATH=/dm8/data EXTENT_SIZE=16 PAGE_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD=Dameng123 DB_NAME=DMDB06 INSTANCE_NAME=DMSERVER06 PORT_NUM=5236
./dm_service_installer.sh -t dmserver -p DMSERVER06 -dm_ini /dm8/data/DMDB06/dm.ini

归档开启
alter database mount;
alter database add archivelog 'DEST=/dm8/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
alter database archivelog;
alter database open;
select arch_mode from v$database;

创建表空间及用户
create tablespace dmhs DATAFILE '/dm8/data/DMDB06/DMHS01.DBF' size 128 autoextend on,'/dm8/data/DMDB06/DMHS02.DBF' size 128 autoextend on;
create user dmhst identified by Dameng123 default tablespace dmhs;

两端数据库dmhst用户下新建表测试
create table dmhst.dept(id int,name varchar2(30)) tablespace dmhs;
insert into dmhst.dept values (95,'dd95'),(951,'源端数据951');
commit;
image.png

ODBC安装 root安装
yum install gcc

tar xzvf unixODBC-2.3.11.tar.gz
cd unixODBC-2.3.11
./configure
make
make install

odbcinst -j
vim odbcinst.ini
[dm8 driver]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so

vim odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = dm8 driver
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5237

测试:
su - dmdba
isql dm8

1、修改dm.ini参数
FAST_COMMIT 值为0,否则会导致逻辑日志不全影响同步。
RLOG_APPEND_LOGIC 值1,开启逻辑日志。
select SF_GET_PARA_VALUE(1,'FAST_COMMIT');
select SF_GET_PARA_VALUE(1,'RLOG_APPEND_LOGIC');
select SF_GET_PARA_VALUE(1,'ARCH_INI');
SP_SET_PARA_VALUE(1,'FAST_COMMIT',0);
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
重启数据库

2、安装dmhs
root用户安装
源端和目的端一样

上传包并授权 /opt/dmhs
chmod 755 dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin
安装
./dmhs_V4.3.08_dm8_rev127399_rh6_64_veri_20230407_sp8.bin -i
本次安装路径/opt/dmhs
image.png
默认的直接回车即可
远程部署工具名称[HsAgent]:默认即可
主机Ip(外网):192.168.16.90
远程部署工具管理端口:默认5456
内置数据库轮询间隔[3]:默认3
内置数据库IP:10.10.10.90
内置数据库端口[15236]:默认15236
内置数据库用户名[SYSDBA]:默认
内置数据库密码[SYSDBA]:默认
依赖库路径:/dm8/bin:/opt/dmhs/bin --配置dm数据库和dmhs的bin(依赖库)目录
手动
手动
手动
image.png
安装完成
上传适配的OCI包及key 至 /opt/dmhs/bin 并授权
chmod 755 libdmoci.so
image.png
image.png
mv dmhsC401088303.key dmhs.key
image.png

3、配置DDL
源端和目的端一样
su - dmdba
disql SYSDBA/Dameng123:5236
start /opt/dmhs/scripts/ddl_sql_dm8.sql
在执行脚本过程中,会出现如下图所示现象,是由于DEFINE本地变量开启的原因,直接回车即可。
image.png
image.png

4、验证触发器与辅助表是否有效
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
image.png
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
image.png

5、编辑dmhs.hs配置文件
只有这里和一对一同构有区别
/opt/dmhs/bin
95服务器:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>5</siteid><!-- siteid 为站点号是同步节点在同步链路中的唯一标识,要保证其唯一性-->
<version>4.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.16.95</db_server><!--目的端数据库服务名或IP 本机。。 -->
<db_user>SYSDBA</db_user><!--数据库用户名,默认为SYSDBA  -->
<db_pwd>Dameng123</db_pwd><!--数据库口令,默认为SYSDBA  -->
<db_port>5235</db_port><!--数据库端口号,默认为5236 -->
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>250</exec_rows>
<msg_col_size>3000</msg_col_size>
<exec_policy>0</exec_policy>
</exec>
<cpt>
<db_type>dm8</db_type>
<db_server>192.168.16.95</db_server><!-- 源端IP或者主备服务器上配置服务名dmhs,默认127.0.0.1 本机。。 -->
<db_user>SYSDBA</db_user>
<db_pwd>Dameng123</db_pwd>
<db_port>5235</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<idle_time>300</idle_time>
<ddl_mask>obj:op</ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>1</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
</arch>
<send>
<ip>192.168.16.96</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter>
<enable><!-- 白名单,允许同步的表-->
<item>DMHST.DEPT</item>
</enable>
<disable>
</disable>
</filter>
<map><!-- 映射配置-->
<item>DMHST.DEPT==DMHST.DEPT</item>
</map>
</send>
</cpt>
</dmhs>

96服务器:
vim dmhs.hs

<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>6</siteid><!-- siteid 为站点号是同步节点在同步链路中的唯一标识,要保证其唯一性-->
<version>4.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.16.96</db_server><!--目的端数据库服务名或IP 本机。。 -->
<db_user>SYSDBA</db_user><!--数据库用户名,默认为SYSDBA  -->
<db_pwd>Dameng123</db_pwd><!--数据库口令,默认为SYSDBA  -->
<db_port>5236</db_port><!--数据库端口号,默认为5236 -->
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>250</exec_rows>
<msg_col_size>3000</msg_col_size>
<exec_policy>1</exec_policy> <!--这里两台服务器策略竟然不一样,不知道这个参数影响什么。。  -->
</exec>
<cpt>
<db_type>dm8</db_type>
<db_server>192.168.16.96</db_server><!-- 源端IP或者主备服务器上配置服务名dmhs,默认127.0.0.1 本机。。 -->
<db_user>SYSDBA</db_user>
<db_pwd>Dameng123</db_pwd>
<db_port>5236</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<idle_time>300</idle_time>
<ddl_mask></ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>1</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
</arch>
<send>
<ip>192.168.16.95</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter>
<enable><!-- 白名单,允许同步的表-->
<item>DMHST.DEPT</item>
</enable>
<disable>
</disable>
</filter>
<map><!-- 映射配置-->
<item>DMHST.DEPT==DMHST.DEPT</item>
</map>
</send>
</cpt>
</dmhs>

6、检查dmhs运行环境
echo $LD_LIBRARY_PATH
若没有dm数据库bin路径,直接修改root的环境变量
cd ~
vim .bash_profile
添加数据库bin目录
image.png
source .bash_profile
image.png

7、启动dmhs
两端均启动
cd /opt/dmhs/bin
./dmhs_server
image.png

8、启动控制台
两端均启动
cd /opt/dmhs/bin
./dmhs_console
connect

start exec --启动exec数据入库模块
image.png

两端启动正常

两端均装载字典(两端均没有数据可以这样)
copy 0 "sch.name='DMHST'" insert | reg
image.png

两端均装载字典(两端均有数据,需要一端拉平后清空另一端,再拉平)
95服务器装载字典,使96服务器拉平数据
copy 0 "sch.name='DMHST'" insert | reg
image.png
创建备份表dept_bak并清空95数据库dept表
create table dmhst.dept_bak as select * from dmhst.dept;
delete from dmhst.dept;
commit;

96服务器装载字典,使95服务器拉平数据
copy 0 "sch.name='DMHST'" insert | reg
image.png

9、两端均开启CPT日志捕获模块,开启同步
start cpt

输入start启动所有服务

源库插入数据验证:
select * from dmhst.dept;

95库
insert into dmhst.dept values (959,'dd959'),(959,'源端数据959');
commit;

96库
insert into dmhst.dept values (969,'dd969'),(969,'源端数据969');
commit;
image.png

10、注册服务
源端与目标端一致
cd /opt/dmhs/bin/service_template
cp DmhsService /opt/dmhs/bin/
cd /opt/dmhs/bin
vim DmhsService

修改路径
image.png

执行
cp /opt/dmhs/bin/DmhsService /etc/init.d/DmhsService
ln -s /etc/init.d/DmhsService /etc/rc0.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc6.d/K02DmhsService
ln -s /etc/init.d/DmhsService /etc/rc3.d/S98DmhsService
ln -s /etc/init.d/DmhsService /etc/rc5.d/S98DmhsService
image.png

授权
chown -R dmdba:dinstall /opt/dmhs
/opt/dmhs/bin/DmhsService restart
image.png

数据同步配置完成!!
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服