DMHS软件架构
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的环境变量;
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)
)
)
[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包,可以创建个软链接
ln -s /usr/local/lib/libodbc.so.2 /usr/local/lib/libodbc.so.1
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 |
| |
+---------------------------------------+
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
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
8、配置同步
数据量较小场景下:
目标端启动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
文章
阅读量
获赞