04_DMHS数据同步dm8_dm8

一、环境说明

操作系统

  • 源端:CentOS7.5
  • 目的端:CentOS7.5

数据库版本:

  • 源端:DM8
  • 目的端:DM8

dmhs 版本:

  • 源端:dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin
  • 目的端:dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin
A服务器(源端)192.168.1.16:5230
B服务器(目的端)192.168.1.17:5230

二、环境部署

01| 源端配置

1. 数据库配置

# 建库
dminit PATH=/home/dmdba/dm8/data LOG_SIZE=2048 EXTENT_SIZE=32 PAGE_SIZE=32  CHARSET=1 DB_NAME=dmhs PORT_NUM=5230
# 注册服务
cd $DM_HOME/script/root 
sudo sh dm_service_installer.sh -t dmserver -p dmhs -dm_ini /home/dmdba/dm8/data/dmhs/dm.ini
DmServicedmhs start
disql sysdba/SYSDBA@127.0.0.1:5230
# 开归档,开附加日志
alter database mount;
alter database add archivelog 'DEST=/arch,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=51200';
alter database archivelog;
alter database open;

-- 改参数-开启附加日志
select PARA_VALUE from v$dm_ini where para_name='RLOG_APPEND_LOGIC';


-- PARA_VALUE=0时执行
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);

-- 创建同步用户
create user dmhs identified by dmhs123456;
grant dba to dmhs;
alter user dmhs  limit failed_login_attemps unlimited;

2. 源端DMHS安装

# 安装UnixODBC,这里是为了防止后边出现库文件缺失问题,不需要配置odbc文件
yum install unixODBC unixODBC-devel -y

# 安装DMHS工具,使用dmdba安装,安装目录/home/dbmdab/dmhs
sudo chmod o+x /opt/dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin 

cd /opt
# Linux服务器
./dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin -i

配置hmhs.hs

# 安装程序虽然给配置了$DM_HOME,但是却没有使配置生效,需要手动生效
source ~/.bash_profile
cd $DMHS_HOME/bin
cat > $DMHS_HOME/bin/dmhs.hs <<-EOF
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
  <base><!-- 管理模块的基本配置 -->
    <lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
    <mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->	
    <chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->		
    <ckpt_interval>10</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
    <siteid>1</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
    <version>2.0</version>
  </base>
  <cpt><!-- 这项配置可以配置多个,也就是可以配置多个捕获模块,如果该节点只作为执行端,该节点需要删除 -->
    <db_type>dm8</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7,dm8,mysql -->
    <db_server>192.168.1.16</db_server><!-- 数据库服务名或IP,默认为127.0.0.1 -->
    <db_port>5230</db_port><!-- 数据库端口号,默认为5236 -->
    <db_name></db_name><!-- 数据库名,默认空 -->
    <db_user>dmhs</db_user><!-- 数据库用户名,默认为SYSDBA -->
    <db_pwd>dmhs123456</db_pwd><!-- 数据库口令,默认为SYSDBA -->
    <idle_time>300</idle_time><!-- 分析线程空闲睡眠时间,默认值为300ms,最小值0ms,最大值65536ms -->
    <parse_thr>1</parse_thr><!-- 分析线程个数,默认为1,最小值1,最大值32,多线程分析时,不支持ALTER TABLE操作同步 -->	
    <ddl_mask>op:obj</ddl_mask><!-- 分析端DDL同步支持的对象和操作,可选项参见手册4.2.1 CPT,需要将安装脚本中对应的DDL脚本在源端执行 -->
    <arch>
      <clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
      <clear_flag>0</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
      <dir>/home/dmdba/dm8/dm_home/bin/arch</dir><!--归档文件或binlog文件路径,用于离线归档分析-->
    </arch>
    <send><!-- 发送模块配置 -->
      <ip>192.168.1.17</ip><!-- 目的端IP,默认127.0.0.1 -->
      <mgr_port>5345</mgr_port><!-- 目的端管理端口,和目的端dmhs保持一致,默认为5345,最小值1000,最大值65535 -->
      <data_port>5346</data_port><!-- 目的端数据接收端口号,和目的端dmhs保持一致,默认为5346,最小值1000,最大值65535 -->
      <level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
      <trigger>1</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
      <constraint>1</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
      <identity>1</identity><!-- 是否忽略自增列,默认为0,限定值0(不忽略,插入同步过来的值),1(忽略,插入自增列自身的值) -->
      <net_turns>0</net_turns><!-- 是否开启网闸模式,默认为0,限定值0(关闭),1(开启),网匝模式下,主机看不到备机的统计信息 -->
      <filter><!-- 过滤,必须指定,一定要注意大小写,要跟源库中的对像名大小写保持一致 -->
        <enable><!-- 白名单,所有允许同步的表,黑名单白名单必须有内容(只有白名单:只同步白名单描述的对象,其余对象不同步,只有黑名单:同步除了黑名单中对象以外的所有对象)-->
          <!-- 格式 <item>实例名.模式名.表名</item> -->
          <!-- 实例名中除DM6为库名外,其它库为实列名 -->
          <!-- 配置过滤时,支持使用*号模糊匹配,例如: -->
          <!-- <item>SYS*.*</item> 所有模式名为sys打头的表允许同步 -->
          <!-- <item>SYSDBA.S*</item> 模式SYSDBA下以S打头的表才允许同步 -->
          <!-- <item>SYSDBA.TEST</item> 模式SYSDBA下表TEST才允许同步 -->
          <item>*.*</item><!-- 过滤项,可以配置N个该项,样例 <item>SYSDBA.*</item> 主机SYSDBA模式下的表才允许同步 -->
        </enable>
        <disable><!-- 黑名单,不允许被同步的表,该项可选,执行流程是:当通过了白名单的验证以后,再来定位黑名单单,如果在黑名单中命中,则不允许同步,配置参照白名单 -->
          <!-- 字段过滤格式 <item>实例名.模式名.表名(列名 == 列值,列值...),或者(列名 != 列值,列值...)</item> -->
          <!-- 操作过滤格式 <item>实例名.模式名.表名=操作类型名,操作类型名...,或者!= 操作类型名,操作类型名...</item> -->
        </disable>
      </filter>
      <map><!-- 表名映射,可选, 一定要注意大小写,要跟源库和目的库中的对像名大小写保持一致 -->
        <!-- 格式 <item>实例名.模式名.表名 ==> 实列名.模式名.表名</item> -->
        <!-- 实例名中除DM6为库名外,其它库为实列名 -->
        <!-- 配置映射时,支持使用*号模糊映射,例如: -->
        <!-- <item>SYS*.* == TES*.*</item> 把所有模式名为SYS打头的模式下的表映射到目的端,目的端的模式名改成以TES打头 -->
        <!-- <item>SYSDBA.S* == TEST.T*</item> 把所有模式SYSDBA下以S打头的表映射到目的端,目的端的表名改成以T打头 -->
        <!-- <item>SYSDBA.TEST == TEST.XXX</item> 把所有模式SYSDBA下的表TEST映射到目的端,目的端的表名改成XXX -->
        <item></item><!-- 映射项,可以配置N个该项,样例 <item>SYSDBA.* == TEST.*</item> 把主机SYSDBA模式下的表同步到备机TEST模式下 -->
      </map>
    </send>
  </cpt>
</dmhs>
EOF

02| 目的端配置

1. 数据库配置

dminit PATH=/home/dmdba/dm8/data LOG_SIZE=2048 EXTENT_SIZE=32 PAGE_SIZE=32  CHARSET=1 DB_NAME=dmhs PORT_NUM=5230
initdb V8


cd $DM_HOME/script/root 
sudo sh dm_service_installer.sh -t dmserver -p dmhs -dm_ini /home/dmdba/dm8/data/dmhs/dm.ini
DmServicedmhs start
disql sysdba/SYSDBA@127.0.0.1:5230
--开归档,开附加日志
alter database mount;
alter database add archivelog 'DEST=arch,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=51200';
alter database archivelog;
alter database open;

-- 改参数-开启附加日志
select * from v$dm_ini where para_name='RLOG_APPEND_LOGIC';

--PARA_VALUE=0时执行
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);

--创建同步用户
create user dmhs identified by dmhs123456;
grant public,resource,soi,vti to dmhs;
alter user dmhs  limit failed_login_attemps unlimited;

2. 配置UnixODBC

UnixODBC配置用于和目的端数据库连接

yum install unixODBC unixODBC-devel -y


# 配置odbc
cat >/usr/local/etc/odbc.ini <<-EOF
[dm8]
Driver=DM8 ODBC DRIVER
DESCRIPTION=DM8 ODBC DRIVER
SERVER=192.168.1.17:5230
UID=dmhs
PWD=dmhs123456
EOF
cat >/usr/local/etc/odbcinst.ini <<-EOF
[DM8 ODBC DRIVER]
Driver=/home/dmdba/dm8/dm_home/bin/libdodbc.so
UsageCount=1
EOF

3. 安装dmhs

# 安装DMHS工具,使用dmdba安装,安装目录/home/dbmdab/dmhs
sudo chmod o+x /opt/dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin 

cd /opt
# Linux服务器
./dmhs_V4.1.93_dm8_rev103852_rh6_64_veri_20211216.bin -i

4. 配置目的端dmhs.hs文件

source /home/dmdba/.bash_profile

cd $DMHS_HOME/bin
cat >  $DMHS_HOME/bin/dmhs.hs <<-EOF
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
  <base><!-- 管理模块的基本配置 -->
    <lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
    <mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->	
    <ckpt_interval>45</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
    <chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->		
    <siteid>2</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
    <version>2.0</version>
  </base>
  <exec>
    <recv><!-- 接收模块的基本配置,如果该节点只作为分析端,该节点需要删除 -->
      <data_port>5346</data_port><!-- 数据接收端口号,默认为5346,最小值1000,最大值65535 -->
    </recv>
    <db_type>dm8</db_type><!-- 数据库类型 -->
    <db_server>192.168.1.17</db_server>
    <db_port>5230</db_port>
    <db_user>dmhs</db_user>
    <db_pwd>dmhs</db_pwd>
    <db_name></db_name><!-- 默认数据库名,默认为空串(只针对dm6有用) -->
    <exec_mode>1</exec_mode><!-- 执行模式, 1(多线程执行),2(ETL模式),3(消息中转模式,跨网段级联时使用) -->
    <exec_thr>4</exec_thr><!-- 执行线程个数,只有当exec_mode为1时才会生效!默认为1,最小值1,最大值64 -->
    <exec_sql>1024</exec_sql><!-- SQL缓存大小,默认为512M,最小值32M,最大值4096M -->
    <exec_trx> 5000 </exec_trx><!-- 事务缓存个数,默认为5000,最小值,1000,最大值10000 -->
    <exec_rows>1000</exec_rows><!-- 批量绑定行数,默认为250,最小值1,最大值2000 -->
    <exec_policy>2</exec_policy><!--执行策略:0 出错后忽略继续。1 出错后停止执行。2 出错后部分执行继续-->
    <msg_col_size>8000</msg_col_size><!-- 保存缓存消息列的大小,这取决于目的库的块大小, 默认为8000,最小值1000,最大值8000 -->
    <level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
  </exec>
</dmhs>
EOF

03| 开启同步

1. 目的端操作

# 拷贝库文件(DM8的DMHS包都需要这步)
cd $DMHS_HOME/bin
cp /opt/dm8_20210818_x86_rh7_64_ent_8.1.2.18_pack13_dmdci/dmoci/libdmoci.so $DMHS_HOME/bin
chmod +x $DMHS_HOME/bin/libdmoci.so
# 确认库文件完整
ldd $DMHS_HOME/bin/libdmhs_exec.so

# 启动MGR(DMHS的管理模块)
./dmhs_server dmhs.hs 


# 开启新session执行
cd $DMHS_HOME/bin
./dmhs_console
start exec

2. 源端操作

# 拷贝库文件(DM8的DMHS包都需要这步)
cd $DMHS_HOME/bin
cp /opt/dm8_20210818_x86_rh7_64_ent_8.1.2.18_pack13_dmdci/dmoci/libdmoci.so $DMHS_HOME/bin
chmod +x $DMHS_HOME/bin/libdmoci.so

# 启动dmhs_server
./dmhs_server dmhs.hs 


# 开启新session执行,启动dmsh_console(也可以在之前的session继续执行)
cd $DMHS_HOME/bin
./dmhs_console
clear exec lsn
load 0   "sch.name='DMHS'" CREATE|INSERT|DICT
start cpt

三、同步测试

# 源端执行
create table dmhs.test1(a int);
insert into dmhs.test1 values(10);
commit;

# 目的端查询
SQL> select * from dmhs.test1;

行号     A          
---------- -----------
1          10

附:友情链接链接:

达梦技术社区:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值