DMHS是一个功能强大的数据同步工具,它可以完成DM、Oracle、MySQL和SQL Server等主流数据库间的实时数据同步。
本文指引如何搭建 DMHS , 实现 Oracle to DM8 的数据实时同步。
1.源端执行安装
./dmhs_V4.3.18_oracle12c_rev136078_rh6_64_20230802.bin -i
2.目的端执行安装
./dmhs_V4.3.18_dm8_rev136078_rh6_64_20230802.bin -i
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
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>
cd bin
./dmhs_server dmhs.hs
start exec
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
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>
clear exec lsn #初始化归档日志起始位置
#初始化装载数据
COPY 0 " SCH.NAME='TEST' " CREATE|INSERT|DICT
#存量数据装载完成后可以开启实时同步
start cpt
在源端Oracle 创建表、修改数据,观察目的端是否自动同步数据
文章
阅读量
获赞