注册
搭建DMHS(Oracle to DM8)
专栏/技术分享/ 文章详情 /

搭建DMHS(Oracle to DM8)

夜未央丶 2023/09/08 1311 0 0
摘要

前言

DMHS是一个功能强大的数据同步工具,它可以完成DM、Oracle、MySQL和SQL Server等主流数据库间的实时数据同步。
本文指引如何搭建 DMHS , 实现 Oracle to DM8 的数据实时同步。

源端和目的端安装DMHS软件

1.源端执行安装
./dmhs_V4.3.18_oracle12c_rev136078_rh6_64_20230802.bin -i
2.目的端执行安装
./dmhs_V4.3.18_dm8_rev136078_rh6_64_20230802.bin -i

目的端(DM8)安装ODBC

1.目的端执行安装odbc

yum -y install unixODBC

2.修改odbc 配置
vim /etc/odbcinst.ini

[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /data01/dmdbms/bin/libdodbc.so

3.修改odbc 配置
vim /etc/odbc.ini

[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236

目的端(DM8)搭建HS

1.配置 dmhs.hs
vim dmhs/bin/dmhs.hs

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>en</lang>
        <mgr_port>8000</mgr_port>  <!-- 管理端口 -->
        <chk_interval>3</chk_interval>
        <ckpt_interval>60</ckpt_interval>
        <siteid>61</siteid>
        <log_policy>2</log_policy>
        <version>2.0</version>
        <group>1</group>
        <name>HS_DM_DEST</name>
    </base>
    <exec>
        <recv>
          <data_port>8001</data_port> <!-- 数据传输端口 -->
        </recv>
        <db_type>dm8</db_type>
        <db_server>192.168.25.11</db_server>
        <db_user>SYSDBA</db_user>
        <db_pwd>SYSDBA_PWD</db_pwd>
        <char_code>PG_GBK</char_code>
        <db_port>5237</db_port>
        <exec_mode>1</exec_mode>
        <exec_thr>128</exec_thr>
        <exec_sql>4096</exec_sql>
        <exec_trx>10000</exec_trx>
        <exec_rows>1000</exec_rows>
        <exec_policy>2</exec_policy>
        <stat_tab>26</stat_tab>
        <level>0</level>
        <enable_merge>0</enable_merge>
        <enable_depended>0</enable_depended>
        <recv_caches>32</recv_caches>
        <trx_max_file>2</trx_max_file>
        <clear_trx_file>1</clear_trx_file>
        <trx_split>1</trx_split>
        <direct_exec>1</direct_exec>
        <commit_wait>0</commit_wait>
        <commit_prepare>1</commit_prepare>
        <commit_compress>1</commit_compress>
        <preload_threads>8</preload_threads>
    </exec>
</dmhs>

启动目的端DMHS

cd bin
./dmhs_server dmhs.hs

start exec 

源端(Oracle)安装ODBC

1.源端执行安装odbc

yum -y install unixODBC

2.修改odbc 配置
vim /etc/odbcinst.ini

[Oracle ODBC Driver]
Description     = ODBC for Oracle
Driver          = /data01/oracle/product/19c/db_1/lib/libsqora.so.19.1 --> 根据实际修改

3.修改odbc 配置
vim /etc/odbc.ini

[test_orcl]
Description=Oracle
Driver=Oracle ODBC Driver
ServerName=orcl  --->填上 /data01/oracle/product/19c/db_1/network/admin/tnsnames.ora 配置的服务名
UserID=test
Password=test

3.验证,要求用oracle 用户
isql -v test_orcl

源端(Oracle)搭建HS

1.开启附加日志

SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data (all) columns;
SQL> select supplemental_log_data_min,supplemental_log_data_all from v$database;

2.开启归档
sqlplus / as sysdba

SQL> archive log list
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter system set db_recovery_file_dest=’’;
SQL> alter system set log_archive_dest_1='location=/arch';
SQL> alter database open;
SQL> archive log list

3.请确保迁移使用的用户有以下权限

grant connect to dmhs;
grant select any table to dmhs;
grant select any dictionary to dmhs;
grant create session to dmhs;
grant lock any table to dmhs;
grant execute on dbms_flashback to dmhs;
grant all on sys.dmhs_ddl_sql to dmhs
grant all on sys.col$ to dmhs;
grant all on sys.cdef$ to dmhs;
grant all on sys.lobfrag$ to dmhs;
grant all on sys.obj$ to dmhs;
grant all on sys.user$ to dmhs;
grant all on sys.ntab$ to dmhs;
grant all on sys.external_tab$ to dmhs;
grant all on sys.coltype$ to dmhs;
grant all on sys.tabsubpart$ to dmhs;
grant all on sys.tabcompart$ to dmhs;
grant all on sys.tab$ to dmhs;
grant all on sys.partobj$ to dmhs;
grant all on sys.lob$ to dmhs;
grant all on sys.ccol$ to dmhs;
grant all on sys.con$ to dmhs;
grant all on sys.dba_cons_columns to dmhs;
grant select on sys.V_$instance to dmhs;
grant select on sys.V_$database to dmhs;

4.编辑开启DDL同步。源端数据库必须允许 DDL 触发器的触发动作,即数据库参数 _system_trig_enabled 为 TRUE 或者未设置。查看该参数的命令如下:

SQL> show parameter "_system_trig_enabled";
SQL> alter system set "_system_trig_enabled"=true;

5.在oracle 创建触发器,用sys 执行。

SQL>start dmhs/scripts/ddl_sql_ora.sql

6.配置 dmhs.hs

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
        <base><!-- 管理模块的基本配置 -->
                <lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
                <mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
                <name>DMHS_HA_TEST</name>
                <chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
                <ckpt_interval>45</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
                <siteid>1</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
                <version>2.0</version>
                <group>1</group>
        </base>
        <cpt><!-- 这项配置可以配置多个,也就是可以配置多个捕获模块,如果该节点只作为执行端,该节点需要删除 -->
            <db_type>oracle12c</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
            <db_server>192.168.25.20/orcl</db_server><!-- 数据库服务名或IP,默认为127.0.0.1 -->
            <db_user>test</db_user><!-- 数据库用户名,默认为SYSDBA -->
            <db_pwd>test</db_pwd><!-- 数据库口令,默认为SYSDBA -->
            <db_port>1521</db_port><!-- 数据库端口号,默认为5236 -->
            <idle_time>300</idle_time><!-- 分析线程空闲睡眠时间,默认值为300ms,最小值0ms,最大值65536ms -->
            <ddl_mask>op:obj</ddl_mask><!-- 分析端DDL同步支持的对象和操作,可选项参见手册4.2.1 CPT,需要将安装脚本中对应的DDL脚本在源端执行 -->
            <parse_thr>1</parse_thr><!-- 分析线程个数,默认为1,最小值1,最大值32,多线程分析时,不支持ALTER TABLE操作同步 -->
            <arch>
                <clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
                <clear_flag>0</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
                <bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
            </arch>            
            <send>
                <ip>192.168.25.11</ip>
                <mgr_port>8000</mgr_port>
                <data_port>8001</data_port>
                <trigger>1</trigger>
                <constraint>1</constraint>
                <identity>1</identity>
                <net_turns>0</net_turns>
                <filter>
					<enable>
						<item>TEST.*</item> <!-- 填上你要迁移的schema -->
					</enable>
					<disable>
					</disable>
                </filter>
                <map>
					<item>TEST.*==TEST.*</item> <!-- 填上你要迁移的schema -->
                </map>
           </send>
        </cpt>
   <cpt> <!-- 这里可以配多个CPT -->

  
   </cpt>
</dmhs>

7.修改dmhs.hs的 ddl_mask,让cpt 采集所有DDL对象

<ddl_mask>op:obj</ddl_mask>

启动源端dmhs

clear exec lsn #初始化归档日志起始位置
#初始化装载数据
COPY 0 " SCH.NAME='TEST' " CREATE|INSERT|DICT
#存量数据装载完成后可以开启实时同步
start cpt

测试

在源端Oracle 创建表、修改数据,观察目的端是否自动同步数据

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服