DMHS单向同步
DMHS是一款基于日志分析的数据库实时同步系统,DMHS的捕获功能(捕获器)是对源端的在线日志或归档日志进行解析并发送出去;DMHS的转发功能(转发器)是对基于本地文件、网络、FTP的数据进行过滤机应用层传输;DMHS的路由功能(路由器)是对跨网关的数据进行网络层传输;DMHS的执行功能(执行器)是通过ODBC接口连接目的端的数据库管理系统并接受数据。
1、DMHS工具特点
(1)捕获器将源端数据库日志读取解析后发送出去,它必须与源端数据库在同一台机器上
(2)即使源数据库中断了服务,也不会影响日志分析。
(3)执行器将接收到的数据入库执行,它可以与目标端数据库处于不同机器
(4)路由是 N 对 N 网络链路的映射,它不能对链路中的数据进行
修改,而转发功能则可以针对每个下一级配置不同的过滤和映射
(5)并行处理体系,以源数据库的事务为单位同步,TCP/IP协议传输,断电续传,备机可读写,备机可以在主机故障接管,
- 可以支持一对一,一对多,多对一,多对多,级联同步
2、DMHS安装配置过程
环境准备:
DMHS支持的操作系统平台:Windows系列(包括XP、Win2003、Win7/8/10、WinServer2008等),Linux(Redhat、Ubuntu、CentOS、Kylin、Rocky等)、Aix、Solaris等。
内存要求:DMHS 需要的内存总量取决于执行的分析线程以及执行线程的并发数,最少需要 1G 内存。
磁盘需求:DMHS 安装文件占用 277M,包括了管理工具以及管理界面占用的空间,另外需要一些额外的空间存储 DMHS 运行的日志文件。
操作系统权限:在 Windows 安装时,安装和执行 DMHS 的用户必须是管理员身份;在 Linux 平台下安装,安装用户必须有权限读写 DMHS 安装目录,将涉及的数据库接口动态库添加到系统共享库环境变量中。
TCP/IP:配置系统支持 TCP/IP 服务(DMHS 安装的所有机器必须配置主机名或者 IP 地址)。DMHS需要使用以下 TCP/IP 端口:管理进程间通信的默认端口 5345;发送和执行子系统之间通信的默认端口 5346;用户可以自行定义这些端口。
1、打开dm.ini 添加如下参数
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
dm.ini 配置参数中“FAST_COMMIT”必须为 0
2、添加归档配置文件。在“dm.ini”同目录下创建文件“dmarch.ini”
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmarch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限
3、重启数据库,使其配置生效
bin目录下:
restart
4、验证配置的正确性
SQL>SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
SQL>SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
SQL>SELECT PATH FROM SYS.V$RLOGFILE;
5、需要在源端和目的端分别安装dmhs软件。
1) 将安装包上传至服务器,并授予可执行权限
chmod 775 dmhs_V4.1.2_dm8_rev100195_rh6_64_veri_20210618_pack2.bin -i
2) 运行安装程序(命令行安装)
./dmhs_V4.1.2_dm8_rev100195_rh6_64_veri_20210618_pack2.bin
- 输入key文件路径
- 选择安装的组件
- 选择安装的路径(默认路径为/opt/dmhs)
- 服务器配置
- 完成安装(此目录中查看安装的日志)
6、DDL同步触发器配置
如果需要配置文件中配置DDL同步,那么需要创建DDL触发器和辅助表。创建时需要使用SYSDBA操作。具体操作步骤如下:
1)通过管理工具连接数据库
2)进入到dmhs如下目录中,找到ddl_sql_dm8.sql
cd /opt/dmhs/scripts/
把此脚本中的内容,在数据库管理工具中执行.
查创建的触发器和辅助表是否有效,检查辅助表的语句。
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
查询结果如下:
行号 OWNER TABLE_NAME
---------- ------ ---------------
1 SYSDBA DMHS_DDL_COL
2 SYSDBA DMHS_DDL_SQL
3 SYSDBA DMHS_DDL_CONS
4 SYSDBA DMHS_DDL_IDX
5 SYSDBA DMHS_DDL_RENAME
6 SYSDBA DMHS_DDL_SEQ
7 SYSDBA DMHS_DDL_PART
7 rows got
已用时间: 197.302(毫秒). 执行号:7.
如果存在以上的查询结果,表示DMHS辅助表创建有效。
检查触发器的语句:
查询结果如下:
行号 OWNER TRIGGER_NAME
---------- ------ -----------------------
1 SYSDBA DMHS_DDL_TRIGGER_AFTER
2 SYSDBA DMHS_DDL_TRIGGER_BEFORE
3 SYSDBA DMHS_DDL_TRIGGER_GRANT
4 SYSDBA DMHS_DDL_TRIGGER_REVOKE
已用时间: 12.147(毫秒). 执行号:16.
如果存在以上的查询结果,表示DMHS触发器创建有效。
7、配置dmhs.hs
dmhs.hs是DMHS默认的配置文件名,如果需要DDL同步,那么基本的配置示例如下:
源端:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server> 192.168.184.139</db_server><!-- 源端数据库IP -->
<db_user>SYSDBA</db_user><!-- 使用用户 -->
<db_pwd>SYSDBA</db_pwd><!-- 用户密码 -->
<db_port>5236</db_port>
<db_ssl_path></db_ssl_path>
<db_ssl_pwd></db_ssl_pwd>
<parse_thr>1</parse_thr>
<ddl_mask>op:obj</ddl_mask> <!--DDL 配置项 -->
<arch><!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send><!-- 发送模块配置 -->
<ip>192.168.184.140</ip><!-- 目的端IP地址 -->
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->
<constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->
<identity>1</identity>
<net_turns>0</net_turns>
<filter><!--过滤配置项-->
<enable><!-- 白名单,所有允许同步的表 -->
<item>SYSDBA.CITY</item>
<item>SYSDBA.TEST</item>
</enable>
</filter>
<map><!--映射配置项-->
<item>SYSDBA.*==SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
目的端:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
</exec>
</dmhs>
8、开启目的端的DMHS服务
1)注册启动脚本(在root用户下)
./dmhs_service_installer.sh -t dmhs_server -a true -p HS_01 -x /home/dmdba/dmhs/bin/dmhs.hs -d /home/dmdba/dmhs/bin
2)启动脚本(切回dmdba用户下)
cd /opt/dmhs/bin
./DmhsServiceHS_01 start
9、开启源端的DMHS服务
- 注册启动脚本(在root用户下)
./dmhs_service_installer.sh -t dmhs_server -a true -p HS_02 -x /home/dmdba/dmhs/bin/dmhs.hs -d /home/dmdba/dmhs/bin
2)启动脚本(切回dmdba用户下)
cd /opt/dmhs/bin
./DmhsServiceHS_02 start
源端启动dmhs控制台,执行装载命令:
在初次搭建过程中,需要将源端数据加载到目的端,有两种操作方法。
如果需要保证目的端数据和源端数据完全一致,搭建时选择将源数据库停止对应用程序访问,并对源数据库进行物理备份,并在目的端数据库进行还原。还原操作需要放到启动dmhs_server之前。
此种情况下,源端装载,执行命令:
./dmhs_console
CSL[INFO]: DMHS控制台工具: V3.0.2.01-Build(2015.10.09)
DMHS >connect
CSL[UNKNOW]: 执行成功
DMHS >COPY 0 "SCH.NAME IS NOT NULL" DICT|LSN
DMHS >clear exec lsn
DMHS >copy 0 "SCH.NAME='SYSDBA' AND TAB.NAME='TEST006'" DICT|LSN|CREATE|INSERT|INDEX
如果目的端数据库里已存在该表先执行
copy 0 "SCH.NAME='SYSDBA' AND TAB.NAME='TEST006'" DELETE
DMHS >start cpt
这种装载方法,只会进行字典信息及LSN值的装载,启动同步后会从COPY时刻记录的LSN值开始进行数据同步。
至此,DMHS实时同步安装完成。