DMHS数据同步工具

DMHS数据同步工具

​ 本章节主要介绍DM数据同步工具DMHS的使用,通过将oracle11g的数据同步到DM8的过程来理解DMHS的功能和作用。

安装前的准备

端口、服务信息

IP地址服务名称版本端口安装路径
192.168.19.136OracleOracle11.0.21521/opt/oracle
/DMHS源端dmhs_V3.3.20_oracle_rev141041_rh6_64_202310105345/opt/dmhs
192.168.19.133DMDM85236/home/dmdba/dmdbms
/DMHS目的端dmhs_V4.3.32_dm8_rev163952_rh6_64_202407105345/home/dmdba/dmhs

Oracle11g源端的准备

  • 开启归档
    • 切换至oracle用户,创建目录

      mkdir /data/oracle/oradata/orcl/archlog
      
    • 连接数据库,进行归档设置

      # 关闭数据库服务
      SQL> shutdown immediate
      # 以 mount 方式启动 oracle 数据库
      SQL> startup mount
      # 开启归档
      SQL> alter database archivelog;
      # 设置归档文件路径(如果使用本地路径存放归档日志,需要将 db_recovery_file_dest 参数置空,然后设置 log_archive_dest 参数
      SQL> alter system set db_recovery_file_dest='';
      SQL> alter system set log_archive_dest='/opt/oracle/oradata/orcl/archlog';
      # 恢复为 open 状态
      SQL> alter database open;
      # 再次检查归档
      SQL> archive log list;
      

      在这里插入图片描述

  • 开启附加归档

    附加日志(supplemental log)指数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,进行数据的分析。

    • 检查附加日志

      SQL> select SUPPLEMENTAL_LOG_DATA_MIN min,SUPPLEMENTAL_LOG_DATA_PK  pk,SUPPLEMENTAL_LOG_DATA_UI ui,SUPPLEMENTAL_LOG_DATA_FK fk, SUPPLEMENTAL_LOG_DATA_ALL "all" from v$database;
      

      在这里插入图片描述

    • 开启数据库最小附加日志级全列日志

      SQL> alter database add supplemental log data;
      SQL> alter database add supplemental log data (all) columns;
      # 再次检查附加日志
      SQL> select supplemental_log_data_min, supplemental_log_data_all from v$database;
      

      在这里插入图片描述

  • 关闭Oracle的回收机制
    • 检查Oracle的回收机制

      SQL> show parameter recyclebin;
      # 如果是on,需要关闭oracle回收机制
      SQL> alter system set recyclebin=off deferred;
      

      在这里插入图片描述

      • 重启数据库生效

        在这里插入图片描述

  • 检查字符集是否一致
    • 先查询Oracle数据库的字符集

      SQL> select userenv('language') from dual;
      

      在这里插入图片描述

      • Oracle数据库字符集:AMERICAN_AMERICA.WE8MSWIN1252
    • 再查询系统字符集

      echo $NLS_LANG
      
      # 如果该变量值为空或者与查询结果不一致,则将该变量设置为查询结果的值
      vi ~/.bash_profile
      # 增加 export NLS_LANG=”sql查询结果”
      source ~/.bash_profile
      

      在这里插入图片描述

      在这里插入图片描述

  • 创建同步用户及授权
    • 启动Oracle数据库,进行同步用户的相关创建与授权

      SQL> create user DMHS identified by "DMHS" default tablespace  USERS temporary tablespace TEMP profile DEFAULT;
      SQL> grant connect to DMHS;
      SQL> grant create any table to DMHS;
      SQL> grant select any table to DMHS;
      SQL> grant select any dictionary to DMHS;
      SQL> grant create session to DMHS;
      SQL> grant lock any table to DMHS;
      SQL> grant execute on dbms_flashback to DMHS;
      SQL> grant unlimited tablespace to DMHS;
      

      在这里插入图片描述

  • root用户安装ODBC
    • 查看是否安装ODBC

      rpm -qa|grep unixODBC
      

      在这里插入图片描述

    • 添加ODBC的环境变量

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
      
    • 安装ODBC

      yum -y install unixODBC unixODBC-devel
      

      在这里插入图片描述

      • 这里我已经安装过了

      • 如果这里yum报错:cannot find a valid baseurl for repo-base/7/x86_64,可以参考这篇文章:

        • https://blog.csdn.net/g310773517/article/details/140321025
      • 安装完成后执行命令

        odbcinst -j
        

        在这里插入图片描述

    • 配置unixODBC

      vim /etc/odbc.ini
      
      • 写入内容:

        [ORACLE]
        Description = Oracle ODBC driver for Oracle 11g
        Driver= Oracle in OraDb11g_home1
        SERVER = 192.168.19.136
        ServerName = orcl
        UserID = DMHS
        Password = DMHS
        Port = 1521
        

        在这里插入图片描述

    • 配置odbcinst.ini文件

      vim /etc/odbcinst.ini
      
      • 增加以下内容:

        [Oracle in OraDb11g_home1]
        Description = ODBC DRIVER FOR ORACLE
        Driver = /opt/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1
        Threading = 0
        

        在这里插入图片描述

    • 查看是否缺少依赖项

      ldd /opt/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1 
      

      在这里插入图片描述

      • 缺少libodbcinst.so.1文件
    • 查找系统其他地方是否有这个依赖

      find / -name libodbcinst*
      

      在这里插入图片描述

    • 将其他地方有的文件复制到路径下

      cp /usr/lib64/libodbcinst.so.2 /lib64/libodbcinst.so.1 
      
      ldd /opt/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1 
      

      在这里插入图片描述

      • 这里就把依赖的路径给写进去了
    • 使用issql进行测试(在oracle用户下进行测试

      isql -v ORACLE DMHS DMHS
      

      在这里插入图片描述

      • 连接成功,说明配置啥的都是可以使用的

DM8目的端的准备

  • 开启归档
    • 连接数据库,查询归档是否开启

      SQL> select arch_mode from v$database;
      

      在这里插入图片描述

      • 我这里是开启了归档

      • 如果没有开启,需要用下面的命令进行开启归档

        alter database mount;
        alter database archivelog;
        alter database add archivelog 'TYPE=LOCAL,DEST=/dmdata/arch,FILE_SIZE=1024,SPACE_LIMIT=10240';
        alter database open;
        
  • 开启逻辑日志
    • 使用SYSDBA连接数据库执行命令

      SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
      select para_value from v$dm_ini where para_name in ('RLOG_APPEND_LOGIC');
      

      在这里插入图片描述

    • dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响同步

      SQL> select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
      

      在这里插入图片描述

  • 创建同步用户及授权
    • 创建用户

      CREATE TABLESPACE HSEXEC DATAFILE 'HSEXEC.DBF' size 128;
      CREATE USER HSEXEC IDENTIFIED by "1314520dsy" DEFAULT TABLESPACE HSEXEC DEFAULT INDEX TABLESPACE HSEXEC;
      GRANT VTI TO HSEXEC;
      GRANT PUBLIC TO HSEXEC; 
      GRANT RESOURCE TO HSEXEC;
      GRANT DBA TO HSEXEC;
      
    • 授权

      SQL> grant resource to HSEXEC;
      SQL> grant select any table to HSEXEC;
      SQL> grant dba to HSEXEC;
      SQL> grant unlimited tablespace to HSEXEC;
      

      在这里插入图片描述

DMHS服务部署

DM8目的端的部署

  • 部署dmhs服务
    • 修改可执行文件的权限,然后执行安装程序

      chmod +x /opt/dmhs_V4.3.32_dm8_rev163952_rh6_64_20240710.bin 
      ./dmhs_V4.2.60_dm8_rev106302_rh6_64_veri_20220225.bin -i
      

      在这里插入图片描述

    • 开始安装,根据提示进行选择

      在这里插入图片描述

      在这里插入图片描述

      • 至此,DMHS已经安装好了
  • 修改服务配置
    • 进入DMHS安装目录下的bin子目录,通过修改示例服务脚本,准备当前的服务启动脚本

      cd /home/dmdba/dmhs/bin
      cp TemplateDmhsService DmhsService
      vim DmhsService
      
      • 需要修改的内容:

        #set execute environment
        #REPLACE DMHS_HOME path
        DMHS_HOME=/home/dmdba/dmhs
        #REPLACE program dir
        PROG_DIR=/home/dmdba/dmhs/bin
        #REPLACE program config path
        CONF_PATH=/home/dmdba/dmhs/bin/dmhs.hs
        #REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
        NEED_LIB_PATH=/home/dmdba/dmhs/bin:/home/dmdba/dmhs/hs_agent:/home/dmdba/dmhs/db/bin
        HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
        

        在这里插入图片描述

    • 在dmhs的bin目录下,新增dmhs.hs配置文件

      cd /home/dmdba/dmhs/bin
      vim dmhs.hs
      
      • 配置内容如下:

        <?xml version="1.0" encoding="GB2312"?>
        <dmhs>
            <base>
                <lang>en</lang>
                <mgr_port>5345</mgr_port>
                <chk_interval>2</chk_interval>
                <ckpt_interval>45</ckpt_interval>
                <siteid>4</siteid>
                <version>2.0</version>
            </base>
            <exec>
                <recv>
                    <data_port>5346</data_port>
                </recv>
                <db_type>dm8</db_type>
                <db_server>192.168.19.133</db_server>
                <db_user>HSEXEC</db_user>
                <db_pwd>1314520dsy</db_pwd>
                <db_port>5236</db_port>
                <char_code>PG_UTF8</char_code>
                <db_name></db_name>
                <exec_thr>8</exec_thr>
                <exec_sql>1024</exec_sql>
                <exec_trx>2000</exec_trx>
                <exec_rows>2000</exec_rows>
                <msg_col_size>30000</msg_col_size>
                <ddl_continue>1</ddl_continue>
                <affect_row>0</affect_row>
                <exec_policy>2</exec_policy>
                <enable_rowid>0</enable_rowid>
                <clear_trx_file>1</clear_trx_file>
                <trx_max_file>8</trx_max_file>
            </exec>
        </dmhs>
        
  • 启动DMHS服务
    • 进入dmhs安装的bin子目录,执行配置好了的服务脚本

      ./DmhsService start
      ./dmhs_console
      # 启动 exec 模块
      DMHS> start exec
      

      在这里插入图片描述

      • 这里我遇到报错:(ORACLE NLS_LANG) is not set in this script, starting failed!!!
      • 分析原因,是DmhsService的参数没写完整,解决方法:写参数HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    • 可以在/home/dmdba/dmhs/log下看到相关的日志

Oracle源端的部署

  • 部署dmhs服务

    root权限下执行操作

    • 进入到dmhs的目录下,先赋予安装程序权限,执行安装

      ##赋予权限
      chmod a+x dmhs_V4.3.28_oracle_rev152326_rh6_64_20240223_sp7.bin
      
      [root@localhost dmhs]# ./dmhs_V4.3.28_oracle_rev152326_rh6_64_20240223_sp7.bin -i
      

      在这里插入图片描述

      • 操作过程跟上面DM数据库的一样
    • 修改配置文件

      cd /opt/dmhs/bin/
      vi /opt/dmhs/bin/dmhs.hs
      
      • 修改内容如下:(注意修改两个IP)

        <?xml version="1.0" encoding="GB2312"?>
        <dmhs>
            <base>
                <lang>en</lang>
                <mgr_port>5345</mgr_port>
                <ckpt_interval>45</ckpt_interval>
                <siteid>1</siteid>
                <version>2.0</version>
            </base>
            <cpt>
                <db_type>oracle11g</db_type>
                <db_server>192.168.19.136:1521/orcl</db_server>
                <db_user>DMHS</db_user>
                <db_pwd>DMHS</db_pwd>
                <ddl_mask>op:obj</ddl_mask>
                <char_code>PG_UTF8</char_code>
                <constraint>1</constraint>
                <arch>
                    <clear_interval>600</clear_interval>
                    <clear_flag>0</clear_flag>
                </arch>
                <send>
                    <ip>192.168.19.133</ip>
                    <mgr_port>5345</mgr_port>
                    <data_port>5346</data_port>
                    <filter>
                        <enable>
                            <item>DMHS.*</item>
                        </enable>
                        <disable>
                        </disable>
                    </filter>
                    <map>
                        <item>DMHS.*==DMHS.*</item>
                    </map>
                </send>
            </cpt>
        </dmhs>
        
  • 配置服务文件
    • 将模版文件复制一份为正式服务并授权

      cp TemplateDmhsService DmhsService
      chmod +x DmhsService
      
    • 编辑文件

      vi DmhsService
      
      • 编辑内容:

        #set execute environment
        #REPLACE DMHS_HOME path
        DMHS_HOME=/opt/dmhs/bin
        #REPLACE program dir
        PROG_DIR=/opt/dmhs/bin
        #REPLACE program config path
        CONF_PATH=/opt/dmhs/bin/dmhs.hs
        #REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
        NEED_LIB_PATH=
        HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
        

        在这里插入图片描述

  • 启动服务器
    • oracle 用户到 /opt/dmhs/bin 目录下执行命令

      ./DmhsService start
      ./dmhs_console
      

      在这里插入图片描述

      DMHS> clear exec lsn
      DMHS> COPY 0 "SCH.NAME='HSEXEC'" CREATE
      DMHS> COPY 0 "SCH.NAME='HSEXEC'" INSERT|THREAD|2
      DMHS> start cpt
      

      在这里插入图片描述

验证同步效果

登录DM检查表是否存在

  • 使用dmdba用户登录DM数据库,看数据表情况

    disql HSEXEC/1314520dsy
    # 查看此时表数据量
    SQL> select table_name from user_tables;
    

    在这里插入图片描述

    • 这里就只有系统表格,没有其他多余的
  • 登录Oracle创建表及添加数据

    • 使用oracle用户登录,创建数据表,添加数据

      # 创建表
      SQL> create table dmhs.test(id int,name varchar2(20));
      # 添加数据
      SQL> insert into dmhs.test values(1,'老吴');
      SQL> insert into dmhs.test values (2,'小吴');
      SQL> insert into dmhs.test values (3,'小圆');
      SQL> commit;
      # 查看表记录
      SQL> select * from dmhs.test;
      

      在这里插入图片描述

      • 这里oracle出现了乱码(目前来说不是重要问题)
  • 登录DM验证同步结果

    • 在dmdba用户执行命令

      disql HSEXEC/1314520dsy
      
    • 查看同步情况

      # 查看系统表,确定数据表 "DMHS.TEST" 在达梦数据库中已创建
      SQL> select table_name from user_tables;
      # 查询表记录,数据跟 Oracle 数据库中数据表记录一致
      SQL> select * from DMHS.TEST;
      

      在这里插入图片描述

      • 也能够勉强看出,这是同步过来了

总结

  • 本次主要搭建DMHS进行Oracle到DM8数据库之间的数据同步,总结上面的安装部署,我踩了很多坑,特别是在oracle数据库上。在完成安装部署后回头一看,上面步骤写的很容易,但自己搭建的时候绝对是问题百出,当然,积极解决问题而不是抱怨问题,最终都会解决。
  • 此外还有些小问题,像编码有误等我就没怎么在这里展示,主要还是以DMHS的搭建为主。

参考

  • https://eco.dameng.com/document/dm/zh-cn/start/dmhs-product-introduction.html
  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值