一.搭建前的准备工作
两台机器ip分别为192.168.1.103和192.168.1.105。103为源端,105为目的端。
在源端、目的端分别安装达梦8,dm8安装路径/home/dmdba/dmdbms,实例路径 /home/dmdba/data/DAMENG,端口都为5236。
二. 搭建流程
1.在源端、目的端安装DMHS
接来下所有步骤直接回车即可,在搭建DMHS时使用的是自己安装的DM8数据库, 不用 管DMHS内置的数据库。
2.开启归档和逻辑日志 (两台设备均设置)
- 设置归档标记和逻辑日志标记。打开 DM8 服务器配置文件“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 = /home/dmdba/data/DAMENG/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制
3.重启 DM8 数据库,使配置参数生效。
4.验证配置的正确性
检查归档配置的正确性,请执行以下 SQL 命令:
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
检查逻辑日志配置的正确性,通过下面的查询:
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
检查在线日志,通过如下的查询:
SELECT PATH FROM SYS.V$RLOGFILE;
检查 FAST_COMMIT 参数是否为 0
select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
结果如下为正常:
3.配置 DDL(在源端配置即可)
在源端数据库中以 SYSDBA 用户执行DDL同步脚本,在SYSDBA模式下创建相关DMHS系统表及触发器,并在DMHS配置文件中配置 ddl_mask 参数选项以启用该功能。同步脚本位于 DMHS 安装目录的scripts 子目录下,命名为:ddl_sql_dm8.sql
不要在disql中执行ddl_sql_dm8.sql,会报错,在DM管理工具中能成功执行脚本
4.配置 dmhs.hs
源端:
<base>
<lang>ch</lang>
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port><!-- 管理端口号 mgr_port,用于监听该端口上的连接,用于执行客户端工具发过来的命令和用来接收统计信息,取值范围在 1000~ 65535 -->
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<?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>127.0.0.1</db_server>
<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.1.105</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.*</item>
</enable>
</filter>
<map><!--映射配置项-->
<item>SYSDBA.*==SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
目的端:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</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>
5.建立DMHS服务脚本
在/home/dmdba/dmhs/bin/service_template下,将DmhsService复制到bin目录下
修改其内容:
三行内容分别为HS家目录,bin目录和dmhs.hs文件所在位置
6.开启执行 DMHS 服务(两台都启动)
作为系统服务启动,在 dmhs_serverd 配置完成的情况下,可以使用如下命令启动:
Linux:
./dmhs_serverd start
Windows:
net start dmhs_server
或者,进入 DMHS 安装程序的 bin 目录文件夹,执行如下命令:
Linux:
./dmhs_server
Windows:
dmhs_server.exe
7.初始装载
初始装载是将源端数据库中的初始数据装载到目的端数据库,使 DMHS 同步的时刻源和目的端的同步表数据一 致。装载前源端 DMHS 服务和目的端 DMHS 服务都需要开启。本示例的目的端 DMHS 使用的是和源端相同环境的 DM8 数据库
此时可以打开日志,根据日志信息进行接下来操作,日志文件在bin目录下log文件夹下,使用tailf +日志文件打开
目的端端:
./dmhs_console
DMHS >connect
DMHS >start
可能会出现加载日志分析模块失败,日志文件报错库文件缺失,类似下面
对日志文件中缺失的库文件,在bin目录下执行ldd + 缺失库文件,使用locate命令查找其中并没有的so文件,将其复制到bin目录下,一般缺失的so文件在数据库安装包下的带的压缩包,解压即可。
源端:
./dmhs_console
DMHS >connect
DMHS >copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX
可能也会出现目的端类似问题,操作相同。
成功源端日志如下:
8.开启同步
初始装载完成后,则可以开启同步:
源端 DMHS:
./dmhs_console
DMHS >start
三.同步测试
源端建表插入数据,看是否能在目的端搜索数据。
源端:
目的端:
目的端日志文件:
更多达梦相关材料可以参考达梦数据库官方适配中心https://eco.dameng.com/