注册
dmhs安装部署与数据迁移与同步实践
专栏/技术分享/ 文章详情 /

dmhs安装部署与数据迁移与同步实践

。。 2025/12/05 12 0 0
摘要

dmhs

dmhs安装部署

将对应安装包上传至服务器后修改权限

chmod -R 755 dmhs_V4.3.38_dm8_rev195581_rh6_64_***_sp14.bin

命令行安装

$ ./dmhs_V4.3.38_dm8_rev195581_rh6_64_***_sp14.bin -i
Extract install files......... 

1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:2
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:1

这里安装完整版,采用默认安装路径

1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:2
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件客户端
4.内置数据库
5.实时同步软件配置助手
6.手册
所需磁盘空间:971 MB
安装目录: [/home/dmdba/dmhs]
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.
正在创建快捷方式
安装成功

主机IP为服务器之间可以互相访问到的IP,其他部分采用默认即可

远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.122.1](192.168.122.1,192.168.4.7):192.168.4.7
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[192.168.122.1]:
内置数据库端口[15236]:
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:

依赖路径添加dm8的路径和dmhs的相应路径

服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:/home/dmdba/dmdbms/bin:/home/dmdba/dmhs/bin
内置数据库服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建内置数据库服务
初始化内置数据库
远程控制服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建远程控制服务
web服务
1.自动
2.手动
启动方式:[2.手动]1
正在创建web服务

完成后以root身份执行脚本注册服务

以下配置脚本需要以"root"用户的身份运行.
要执行以下脚本命令:
要执行配置脚本,请执行以下操作:
1.打开终端窗口
2.以"root"身份登录
3.运行脚本命令
/home/dmdba/dmhs/scripts/root/root_installer.sh
是否已执行shell脚本?yes/no[no]yes
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/dmdba/dmhs/log/install.log

二、数据库准备

2.1 检查

退出DMHS并检查是否存在依赖缺失

ldd libdmhs_exec.so

以软连接方法补充对应缺失依赖至/home/dmdba/dmhs/bin中并赋予对应权限,完成后注意为更新环境变量

2.2 配置归档和逻辑日志

  1. 配置dm.ini,本次实验dm.ini所在路径为/home/dmdba/data/DMDB/dm.ini
ARCH_INI = 1 
RLOG_APPEND_LOGIC = 1 
  1. 配置dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmarch
ARCH_FILE_SIZE = 512
ARCH_SPACE_LIMIT = 10240

2.3 配置DDL

在源数据库执行“ddl_sql_dm8.sql”脚本创建触发器和辅助表,脚本默认位置在DMHS执行程序目录下的scripts子目录中

SQL> set define off;
SQL> set char_code utf8;
SQL> start /home/dmdba/dmhs/scripts/ddl_sql_dm8.sql

检查创建的触发器和辅助表是否有效

SQL> 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
8          SYSDBA DMHS_DDL_COMMENT
9          SYSDBA DMHS_DDL_LOG

9 rows got

SQL> select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y'; 
行号     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

2.4 创建数据库同步用户DMHS并赋予最小权限

源数据库管理员和目标数据库管理员分别创建数据库同步用户DMHS,同时该用户需要被赋予一定的权限,一般建议赋予所需的最小权限<br>

## 创建数据库同步用户DMHS(源库和目标库都需要进行)
CREATE USER DMHS IDENTIFIED BY "Dmglydmm@2025";

DM8源数据库同步用户最小权限脚本示例:

-- ## 基础权限
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMHS;
-- 需要系统表、系统字典和动态视图的查询权限
GRANT SOI,VTI TO DMHS;
-- 需要创建会话权限
GRANT CREATE SESSION TO DMHS;
-- ## 装载相关权限
-- 需要非同步用户下待装载表/序列上的查询权限
GRANT SELECT ON <待装载表/序列的模式名>.<待装载表/序列的表名> TO DMHS;
-- ## 同步相关权限
-- DM8触发器同步时,如果数据库用户不是SYSDBA用户,需要对SYSDBA.DRS_$DDL_LOG具有查询权限
GRANT SELECT ON SYSDBA.DRS_$DDL_LOG TO DMHS;
-- ## DSC同步相关权限
-- DSC时,需要新增以下权限:
GRANT CREATE TABLE TO DMHS;
GRANT CREATE PACKAGE TO DMHS;

DM8目标数据库同步用户最小权限脚本示例:

-- ## 基础权限
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMHS;
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
GRANT RESOURCE TO DMHS;
-- 需要查询数据库的相关参数信息、系统表字典信息
GRANT SOI,VTI TO DMHS;
-- 需要创建会话权限
GRANT CREATE SESSION TO DMHS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON <目标表的模式名>.<目标表名> TO DMHS;
GRANT UPDATE ON <目标表的模式名>.<目标表名> TO DMHS;
GRANT DELETE ON <目标表的模式名>.<目标表名> TO DMHS;
GRANT SELECT ON <目标序列的模式名>.<目标序列名> TO DMHS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ANY TABLE TO DMHS;
GRANT UPDATE ANY TABLE TO DMHS;
GRANT DELETE ANY TABLE TO DMHS;
GRANT SELECT ANY TABLE TO DMHS;
GRANT SELECT ANY SEQUENCE TO DMHS;
-- 需要非同步用户模式下创建表注释的权限
GRANT COMMENT ANY TABLE TO DMHS;
-- 需要非同步用户模式下对象的DDL权限
GRANT CREATE ANY <对象类型> TO DMHS;
GRANT ALTER ANY <对象类型> TO DMHS;
GRANT DROP ANY <对象类型> TO DMHS;
-- 需要非模式对象(表空间、用户、角色和公共同义词)的DDL权限
GRANT CREATE <对象类型> TO DMHS;
GRANT ALTER <对象类型> TO DMHS;-- 角色和公共同义词不需要此权限
GRANT DROP <对象类型> TO DMHS;
-- 需要赋予同步用户辅助存储过程的执行权限以及非同步用户下模式所属用户的存储过程的创建权限
GRANT EXECUTE ON PROCEDURE "DRS_$DDL_SQL_PROC" TO DMHS;
GRANT CREATE PROCEDURE TO <非同步用户下模式所属的用户>;

三、通过命令行实现DMHS的数据迁移与同步

3.1 完成源库DMHS服务配置

修改示例服务脚本

cd /home/dmdba/dmhs/bin
cp TemplateDmhsService DmhsService
vi DmhsService

脚本对应需要修改内容

DMHS_HOME=/home/dmdba/dmhs
PROG_DIR=/home/dmdba/dmhs/bin
CONF_PATH=/home/dmdba/dmhs/bin/dmhs.hs
NEED_LIB_PATH=/home/dmdba/dmhs/bin:/home/dmdba/dmhs/hs_agent
HS_NLS_LANG="american_america.AL32UTF8"

根据CONF_PATH路径添加对应dmhs.hs

cd /home/dmdba/dmhs/bin
vi dmhs.hs

<?xml version="1.0" encoding="GB2312"?> 
<dmhs> 
    <base> 
        <lang>en</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.4.7</db_server> 
        <db_user>DMHS</db_user> 
        <db_pwd>Dmglydmm@2025</db_pwd> 
        <db_port>5237</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.4.8</ip> <!—执行端IP--> 
            <mgr_port>5345</mgr_port><!—执行端mgr_port --> 
            <data_port>5346</data_port><!—执行端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>TEMP.*</item> 
                </enable> 
            </filter> 
            <map><!--映射配置项--> 
              <item>TEMP.*==TEMP.*</item> 
            </map> 
        </send> 
    </cpt> 
</dmhs>

3.2 完成目的库DMHS服务配置

目的库操作与源库类似,只有dmhs.hs文件内容稍微有些不同

<?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>DMHS</db_user> 
      <db_pwd>Dmglydmm@2025</db_pwd> 
      <db_port>5237</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> 

3.3 开启装载

源端新建测试用模式和测试用表

CREATE SCHEMA TEMP AUTHORIZATION DMHS;
CREATE TABLE TEMP.TEST_HS (
    ID INT PRIMARY KEY,
    NAME VARCHAR(50),
    CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO TEMP.TEST_HS(ID, NAME) VALUES(1, 'Test_Record');

先启动目的端服务再启动源端服务

./DmhsService start
./dmhs_console

目的端启动本地exec模块

DMHS> start exec

源端停止本地cpt模块并初始化本地采集服务cpt的字典,最后对目的端数据库进行一次同步数据装载:开启装载

DMHS> stop cpt
DMHS> clear exec lsn
DMHS> copy 0 "sch.name='TEMP'" DICT|LSN|CREATE|INSERT|INDEX 

至此数据装载迁移完成

3.4 开启同步

源端启动cpt

DMHS> start cpt

启动捕获模块后一旦检测到源端事务提交后便会将数据同步到目的端

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服