注册
DMHS安装及配置_oracle
专栏/技术分享/ 文章详情 /

DMHS安装及配置_oracle

harrison辉 2025/07/18 204 0 0
摘要

DMHS软件架构
image.png

DMHS 同步服务主要分为三大模块,分别是日志分析(CPT)、数据入库(EXEC)和消息发送(NET),这三个模块统一由管理模块(MGR)进行调度执行。
1、使用单进程多线程架构
2、支持初始数据装载

源端主要模块:
MGR模块:调度管理模块。负责调度CPT、NET模块等其他功能。
CPT模块:日志捕获模块。通过解析源端数据库的交易日志,获取数据的增量变化,并将增量变化封装DMHS消息。
NET模块:数据传输模块。源端为NET发送子模块将CPT捕获的数据发送给目标端NET接受子模块。

目标端(或者执行端)主要模块:
MGR模块:调度管理模块。负责调度EXEC、NET模块等其他功能。
EXEC模块:数据入库。主要的功能是对CPT捕获的增量数据提取并进行事务归类入库。
NET模块:数据传输模块。目标端为NET接收子模块接受源端传输过来的数据。

DMHS配置的几种方式
第一种方式:在软件安装后,使用tool目录下的dmhs配置助手工具(dmhs_hsca)进行配置;
第二种方式:使用WEB管理平台进行配置;
第三种方式:直接手动编辑dmhs.hs配置文件。

主要软件目录说明
bin: 执行码、动态库等
db: 内置数据库(默认dm7)
doc: 文档目录,包括搭建文档
guard(或者hs_agent): guard或者agent目录
scripts: 脚本目录,包括DDL同步需要执行的相关SQL脚本等
tool: 工具目录,包括dmhs配置助手工具等

选择一个dm7及以上数据库作为manager的后台数据库;
(1)若是使用的dmhs安装中自带的内置数据库,则无需准备,只需启动内置数据库,启动服务脚本是在dmhs安装目录下db目录下面bin目录中的DmServiceXXX服务脚本;
(2)若是使用的外置数据库,则需在该数据库中执行dmhs_manager.sql来创建元数据,dmhs_manager.sql在dmhs安装目录下面的scripts目录下面;
2、配置后台数据库的连接信息,在文件WEB-INF/config/connectPool.xml(manager.war中)配置,使用内置数据库则无需修改;
3、启动tomcat,运行dmhs安装web目录下bin目录下的DmhsWebService服务脚本;
4、假设本机ip为192.168.15.33,开启浏览器访问http://192.168.15.33:8080/manager,登录(admin/888888)
5、veri工具管理,假设本机ip为192.168.15.33,开启浏览器访问http://192.168.15.33:8080/veri,登录(admin/admin)
6、安装使用用户
通常情况下dmhs软件使用root用户安装,但是在oracle端上安装dmhs软件时,需要使用oracle用户安装dmhs,这样是为了加载到oracle的环境变量;

  1. 设置ORACLE 本地链接库路径
    DMHS在运行时,需要加载本地ORACLE 动态库libclntsh.so。在部署DMHS 之前,需将libclnsh.so所在目录添加到共享库路径变量中。libclntsh.so通常位于$ORACLE_HOME/lib中。
    [root@rac19c01 ~]# find / -name libclntsh.so
    /u01/app/19c/grid/lib/libclntsh.so
    /u01/app/oracle/product/19c/db_1/lib/libclntsh.so

DMHS支持源端为ORACLE RAC的数据库,DMHS安装部署在RAC的两个节点上,避免某一个节点异常或故障导致DMHS无法继续同步。
根据RAC存储使用的不同,需进行其他额外的配置:
ASM存储
当RAC文件存放在ASM中时,DMHS的部署节点必须配置ASM服务监听,可直接修改$ORACLE_HOME\network\admin\tnsname.ora文件,添加ASM监听。配置方法示例如下:

ASM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = +ASM)
    )
  )
  1. 源端及目标端DMHS安装
    源端和目标端均安装
    —中文乱码
    export LANG=zh_CN.GB2312
[rac19c01:oracle]:/software>./dmhs_V4.3.38_oracle_rev192522_rh6_64_20250630_sp11.bin -i
Extract install files......... 

1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:2
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:2
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件客户端
4.内置数据库
5.实时同步软件配置助手
6.手册
所需磁盘空间:973 MB
安装目录: [/home/oracle/dmhs]
该路径不为空,是否继续安装?[Y or N]Y
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:1
正在安装
default start ...    default finished.
server start ...    server finished.
hs_agent start ...    hs_agent finished.
webmanager start ...    webmanager finished.
db start ...    db finished.
hsca start ...    hsca finished.
doc start ...    doc finished.
doc start ...    doc finished.
postinstall start ...    postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.122.1](192.168.122.1,192.168.56.4,169.254.16.243,11.11.11.11,192.168.56.12,192.168.56.15,192.168.56.10):192.168.56.10
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[192.168.122.1]:192.168.56.10
内置数据库端口[15236]:
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:/home/oracle/dmdbms/bin:$ORACLE_HOME/jdk/jre/lib:$ORACLE_HOME/network/lib:$ORACLE_HOME/rdbms/lib
Oracle字符集
提示:注意此处配置为ORACLE数据库的NLS_LANG,此配置项由源端数据库字符集编码格式决定,需与源端字符集编码适配。
1.SIMPLIFIED CHINESE_CHINA.ZHS32GB18030
2.SIMPLIFIED CHINESE_CHINA.AL32UTF8
3.TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5
4.TRADITIONAL CHINESE_TAIWAN.AL32UTF8
5.AMERICAN_AMERICA.AL32UTF8
6.AMERICAN_AMERICA.WE8ISO8859P1
7.AMERICAN_AMERICA.WE8ISO8859P15
8.AMERICAN_AMERICA.ZHS16GBK
9.不设置
请配置Oracle字符集[9.不设置]:5
ORACLE_BASE
请输入:ORACLE_BASE[/u01/app/oracle]:

ORACLE_HOME
请输入:ORACLE_HOME[/u01/app/oracle/product/19c/db_1]:

内置数据库服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建内置数据库服务
初始化内置数据库
远程控制服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建远程控制服务
web服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建web服务
以下配置脚本需要以"root"用户的身份运行.
要执行以下脚本命令:
要执行配置脚本,请执行以下操作:
1.打开终端窗口
2.以"root"身份登录
3.运行脚本命令
/home/oracle/dmhs/scripts/root/root_installer.sh
是否已执行shell脚本?yes/no[no]yes
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/oracle/dmhs/log/install.log

DMHS安装完成之后,搭建环境是RAC到RAC双向同步,需要检查4个节点的所有安装模块情况,目录切换到 DMHS软件目录,通过命令 ldd libcpt_ora.so(RAC可通过命令 ldd libcpt_rac.so),查看 DMHS日志CPT模块链接是否正常,通过命令ldd libdmhs_exec.so,查看DMHS日志执行模块链接是否正常。

实验环境无/usr/local/lib/libodbc.so.1包,可以创建个软链接
image.png

ln -s /usr/local/lib/libodbc.so.2 /usr/local/lib/libodbc.so.1
  1. 目标端UNIXODBC安装
    达梦官方推荐安装unixodbc2.3.2版本的odbc。
tar -zxvf unixODBC-2.3.2.tar.gz
cd unixodbc-2.3.2
export CC=gcc
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make
make install

注意:
当服务器系统为UNIX/LINUX 64bits时,在./configure之前需执行
export CFLAGS=“-maix64 -DBUILD_REAL_64_BIT_MODE”
export OBJECT_MODE=64

配置UNIXODBC
odbcinst -j
将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和odbcinst.ini 参数。
目标端odbc.ini 参数内容如下所示:

[ORACLE]
 Description=ORACLEODBCDSN
 Driver=Oracle in OraDb19c_home1    ---名字固定,通过bin/log下的日志报错查找
 SERVER=192.168.56.123
 UID=SYSTEM
 PWD=oracle
 Servername=ORCL
 PORT=1521

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

[root@dm4 etc]# cat odbcinst.ini

[Oracle in OraDb19c_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /oracle/app/oracle/product/19c/dbhome/lib/libsqora.so.19.1
Threading = 0
[dm4:oracle]:/oracle/app/oracle/product/19c/dbhome/lib>isql -v test_oracle system oracle
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
  1. DMHS配置
    源端
    1、 创建连接用户
create user dmhs identified by 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 connect to dmhs;
grant execute on dbms_flashback to dmhs;
grant flashback any table to dmhs;
grant SELECT ON SYS.V_$DATABASE       to dmhs;
grant SELECT ON SYS.V_$SESSION        to dmhs;
grant SELECT ON SYS.GV_$PARAMETER     to dmhs;
grant SELECT ON SYS.GV_$INSTANCE      to dmhs;
grant SELECT ON SYS.GV_$ARCHIVE_DEST  to dmhs;
grant SELECT ON SYS.GV_$ARCHIVE       to dmhs;
grant SELECT ON SYS.GV_$LOG           to dmhs;
grant SELECT ON SYS.GV_$LOGFILE       to dmhs;
grant SELECT ON SYS.DBA_TABLES        to dmhs;
grant SELECT ON SYS.V_$INSTANCE       to dmhs;
grant SELECT ON SYS.OBJ$              to dmhs;
grant SELECT ON SYS.USER$             to dmhs;
grant SELECT ON SYS.COL$              to dmhs;
grant SELECT ON SYS.DBA_CONS_COLUMNS  to dmhs;
grant SELECT ON SYS.DBA_CONSTRAINTS   to dmhs;
grant SELECT ON SYS.LOB$              to dmhs;
grant SELECT ON SYS.TABPART$          to dmhs;
grant SELECT ON SYS.TAB$              to dmhs;
grant SELECT ON SYS.TABSUBPART$       to dmhs;
grant SELECT ON SYS.TABCOMPART$       to dmhs;
grant EXECUTE ON DBMS_FLASHBACK       to dmhs;
grant LOCK ANY TABLE                  to dmhs;
grant SELECT ANY TABLE                to dmhs;

目标端需要有

GRANT CREATE SESSION TO TEST;
GRANT SELECT ANY TABLE TO TEST; 
GRANT CREATE TABLE TO TEST; 
GRANT EXECUTE ON DBMS_FLASHBACK TO TEST; 
GRANT LOCK ANY TABLE TO TEST;

ALTER USER dmhs QUOTA UNLIMITED ON USERS;

2、oracle开启最小附加日志

alter database force logging;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
set lines 200 pages 999
select name, log_mode LogMode,supplemental_log_data_min "Min",supplemental_log_data_pk PK,supplemental_log_data_ui UI,force_logging Forced,supplemental_log_data_fk FK, supplemental_log_data_all "All",to_char(created, 'MM-DD-YYYY HH24MISS') Created from gv$database;

将同步表设置为logging模式,后续操作记录到redo日志中
select 'alter table '||owner||'.'||table_name||' logging;' from dba_tables where logging = 'NO' and duration not like 'SYS%' and owner in ('FENG');

3.查看数据库字符集

select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
select userenv('language') from dual;
注意:数据库的字符变量应与环境变量一致

当数据库数据包含中文字符时,需将DMHS运作所在窗口的NLS_LANG设置为对应的字符集,建议使用AMERICAN_AMERICA.ZHS16GBK。
UNIX/LINUX平台设置客户端字符集:
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
  1. 配置源端 DDL 支持
DMHS支持源端DDL的同步。源端DDL同步必须满足一下三个条件:
源端数据库必须允许DDL触发器的触发动作,即数据库参数_system_trig_enabled为TRUE或者未设置。查看该参数的命令如下:
show parameter "_system_trig_enabled";

@ /home/oracle/dmhs/scripts/ddl_sql_ora.sql
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';

---确认捕获端是否存在物化视图日志表,需加入至同步黑名单:
select * from dba_tables where table_name like 'MLOG$%' and owner='FENG';

5、源端/目的端数据库配置数据库服务网络服务名

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ASM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = +ASM)
    )
  )

ORCL_D =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.123)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

6、配置 dmhs.hs,参考模板

7.配置dmhs服务启动
cd /home/dmdba/hsdm/bin
cp TemplateDmhsService DmhsService
vim DmhsService

image.png
8、配置同步
image.png
数据量较小场景下:

目标端启动exec
[oracle@rac2 bin]$ ./dmhs_console
start exec

源端节点执行如下DMHS命令:
clear exec lsn
copy 0 “sch.name = ‘FENG’” CLEAR|DICT
copy 0 “sch.name = ‘FENG’” drop|create|insert|nolock|fast

—copy 0 “sch.name=‘FENG’” CREATE|INSERT|INDEX|DICT|REG|LSN

A端任意节点执行:
copy 0 “sch.name=‘EMS’” DICT|REG|LSN
B端任意节点执行:
COPY 0 “sch.name=‘EMS’” DICT|LSN

源端节点的控制台管理工具中执行如下DMHS命令:
start cpt

Tomcat 服务启动之后,稍等片刻就可以通过浏览器访问DMHS管理平台, 访问地址:http://Tomcat 所在机器IP:8080/manager。 登录界面的用户名账号(admin/888888)

2、 密码加密
dmhs.hs配置文件中,直接输入了用户密码,有暴露风险怎么办?
可以对密码进行加密处理,再将加密处理后的密码替换db_pwd中的密码。

在dmhs.hs配置文件的base中添加参数并设置该参数值为1,如下:
<pwd_encipher>1</pwd_encipher>
然后登录dmhs_console使用encrypt和decrypt对密码加密,使用双引号将密码括起来。
然后将加密后的密码放到中;

如下为测试密码加密:
DMHS> encrypt “qeasfge!!#$!$6r*09”
密文:c105fb037b11d71ad89da8ca235166ab9726446183ed98d4

DMHS> decrypt c105fb037b11d71ad89da8ca235166ab9726446183ed98d4
明文:qeasfge!!#$!$6r*09

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服