注册
【与达梦同行】那些DMHS使用二三事
技术分享/ 文章详情 /

【与达梦同行】那些DMHS使用二三事

yudazzle 2022/12/07 2258 33 9

一什么时候用DMHS?

Dmhs是异构环境下的数据库实时同步系统。主机源数据库支持 DM6、DM7、MYSQL、PostgreSQL、DB2、SQLServer 和 Oracle9i 以上版本。备机目的数据库支持可通过 ODBC 接口连接的各种主流关系数据库管理系统,包括 DM6、DM7、MYSQL、PostgreSQL、DB2、SQLServer、Oracle、GBASE 和 HIVE 以及 KAFKA 消息中间件。

二DMHS安装

Dmhs的安装有两种方式,图形化和命令行安装。安装方式都非常简单,就不赘诉了,具体可以见《DMHS搭建手册》。

安装需要注意的点:

1.关于安装dmhs软件版本

源端和目的端都需要安装dmhs软件,源端和目的端安装的dmhs的版本需要是一致的,或者版本相差不大。安装的dmhs软件包除了版本,还需要根据源端和目的端的数据库的类型以及操作系统的类型来进行申请,比如,源端是win的oracle11g,目的端是rh6的dm8。

2.精简版和完整版的区别

精简版或完整版都能使用数据同步功能。但完整版比精简版多了实时同步软件的客户端与内置数据库。可根据需求选择安装版本,具体情况见下面两张图。
图片1.png
图片2.png

3.安装的时候提示输入

安装的时候提示输入依赖库路径以及内置数据库等信息时,可以先默认,后续根据生成的对应的配置文件去修改,安装到最后生成日志后,需要手动回车结束安装。
图片3.png

4.安装使用用户

通常情况下dmhs软件使用root用户安装,但是在oracle端上安装dmhs软件时,需要使用oracle用户安装dmhs,这样是为了加载到oracle的环境变量;

5.关于dmhs软件安装的位置

dmhs软件需要和源端数据库安装在一台服务器上,而在目的端却不是必要的,也就是说,可以选择将目的端dmhs安装在目的端的某一台数据库上(目的端有可能是集群),可以将目的端dmhs软件安装在第三台机器,前提是第三台机器可以访问到目的端数据库;

三DMHS配置

1.关于配置Odbc

dmhs的同步配置需求是要配置目的端的数据库的odbc连接,但是源端数据库类型为mysql时,源端和目的端都要配置ODBC连接;
图片4.png

2.dmhs运行目录

dmhs的配置文件是dmhs.hs,运行目录默认是dmhs下的bin目录,如果使用hsem(hs的web管理界面)搭建同步链路,运行目录可以自定义文件夹的名字;如果要在一台机器上搭建多个dmhs链路,并不需要重复安装dmhs软件,只需要拷贝运行目录(bin)到另一个路径下,修改配置文件即可运行;
源端和目的端配置文件不一致,源端需要配置cpt模块,目的端配置exec模块;具体的配置文件可见《DMHS搭建手册》;

3.dmhs的同步用户

dmhs的同步用户,源端和目的端配置用户如何选择?
以官方文档中的源端配置文件为例

<?xml version="1.0" encoding="GB2312"?> 
<dmhs> 
<base> 
<lang>ch</lang> 
<mgr_port>5345</mgr_port> 
<ckpt_interval>60</ckpt_interval> 
<siteid>1</siteid> 
</base> 
<cpt> 
<db_type>dm7</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>2</clear_flag> 
<bak_dir>/dmarch/arch_bak</bak_dir> 
</arch> 
<send><!-- 发送模块配置 --> 
<ip>192.168.10.109</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.*==DMHS.*</item> 
</map> 
</send> 
</cpt> 
</dmhs>

可以看到源端配置文件中的配置了db_user和db_pwd,这个地方配置的是dmhs源端读取用户的用户名和密码,比如我的业务用户是test用户,我需要同步test用户下的数据到另一个库,就可以在源端数据库中创建一个读取用户read_test,授予read_test用户select any table权限,或者读取test用户下对象的权限,在db_user和db_pwd中配置read_test用户的名字和密码,即可实现同步;
业务用户的同步,可以在map模块中进行配置,<item>TEST.==TEST.</item>
目的端一般不需要配置相应的用户,因为目的端需要创建对应的对象,执行DDL和DML,直接使用业务用户即可,不用南辕北辙。

4.配置文件密码暴露处理

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

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

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

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

5.dmhs配置环境变量及示例

dmhs配置环境变量如何考虑?
第一种情况是安装了dmhs完整版,在原来的用户的LD_LIBRARY_PATH目录下添加dmhs内置库的bin目录即可;比如配置dm到dm的hs同步,只需要export LD_LIBRARY_PATH=/opt/dmhs/db/bin
第二种情况是安装了精简版,根据我的使用经验是,在原来的LD_LIBRARY_PATH目录下添加数据库bin目录,数据库的lib目录以及odbc配置目录,还要获取对应的dm数据库版本的依赖文件;
以下环境变量的配置可供参考(在原有环境变量下添加):
1)Oracle19c-dm同步
Oracle端环境变量:/u01/app/oracle/product/19.0.0/dbhome_1/lib:/opt/dmhs/bin
dm端环境变量:/home/dmdba/dmdbms/bin:/usr/local/lib:/opt/dmhs/bin
2)mysql-dm同步
MySQL端环境变量:
/home/mysql/dmhs/bin:/mysql/mysql57/lib:/usr/lib64/:/usr/lib/:/var/lib/mysql
dm端环境变量:/opt/dmhs/bin:/home/dmdba/dmdbms/bin/

需要把环境变量的声明语句,添加hs的启动脚本中的最前面;也可以配置在bash里面。

6.中文乱码处理

oralce同步到dm中文乱码怎么办?
解决:设置NLS_LANG参数值以及配置CHAR_CODE掩码;
查询oracle数据库字符集:

SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICA.AL32UTF8

在hs启动脚本中添加
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
以及在dmhs.hs中添加<char_code>PG_UTF8</char_code> ;
以oracle端的字符集为准;
并且目的端的字符集原则上在初始化时,应当和源端保持一致;

7.dmhs服务脚本及自启

如何注册dmhs的服务脚本?
有注册的脚本,在hs安装目录的dmhs/scripts/root下面的dmhs_service_installer.sh;
使用-h查看帮助;
查看帮助:
./dmhs_service_installer.sh -h
Usage: dmhs_service_installer.sh -t service_type [-d execute_program_dir] [-p service_name_postfix] [-x xml_file]
or dmhs_service_installer.sh [ -s service_file_path ]
or dmhs_service_installer.sh -h
-t 服务类型, 包括dmhs_server,dmhs_agent,dmhs_stat,dmhsweb,dmserver,dmhs_guard,veri_agent_dm8,veri_agent_dm7,veri_agent_dm6,veri_agent_db2,veri_agent_ora,veri_agent_mysql,veri_agent_kingbase,veri_agent_postgres,dmhs
-a 设置服务是否自动启动,值为true或false,默认true.
-p 服务名后缀,对于dmserver,dmhsweb服务类型无效
-x 配置文件路径
-d 执行程序所在目录
-l 附加动态库目录(LD_LIBRARY_PATH/LIBPATH).
-n 执行程序名称,仅对dmhs服务类型生效.
-s 服务脚本路径,设置则忽略其他参数选项
-h 帮助
例如:
[root@oradb01 root]# ./dmhs_service_installer.sh -t dmhs_server -p ORA -x /opt/dmhs/bin/dmhs.hs -l /u01/app/oracle/product/19.0.0/dbhome_1/lib:/opt/dmhs/bin -d /opt/dmhs/bin
创建服务(DmhsServiceORA)完成

8.关于dmhs授权

dmhs如何替换授权?是否支持在线替换授权?
Dmhs的授权使用,需要修改为dmhs.key,需要放到运行目录下面,重启生效;
现在也支持在线更新授权,登录dmhs_console控制台,执行upgrade命令即可在线更新授权;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服