【达梦数据库】oracle11g 到 dm8 的数据同步部署


前言

达梦数据同步软件(Heterogeneous database Synchronization for DM,缩写为DMHS)是达梦公司推出的新一代支持异构环境的高性能、高可靠、高可扩展数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台,支持强大而灵活的拓扑结构,能以极少的系统开支实现秒级数据实时同步,可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。

目前达梦的 DMHS 可以实现多种数据库与达梦数据库之间的数据实时同步。本文则详细介绍了 Oracle 11g 到 dm8 的数据同步安装部署过程。


1 数据库安装部署(oracle11g 源端)

请参考官方文档进行 Oracle11g 安装部署,确保数据库可正常使用。


2 数据库安装部署(dm8 目的端)

请参考官方文档进行 DM8 单机安装部署,确保数据库可正常使用。
达梦数据库 - 单机规范化部署


3 规划路径/端口

IP 地址服务名称版本服务端口部署目录
192.168.163.147Oracle 11gOracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production1521/data/oracle
/DMHS 源端dmhs_oracle_rh6_ 64_veri_20220301_x86_rh75345/opt/dmhs/release
192.168.163.148DM 8DM Database Server 64 V85236/home/dmdba/dmdbms
/DMHS 目的端dmhs_dm8_rh6_64_veri_20220301_x86_kylin105345/opt/dmhs/release

4 安装前准备(oracle11g 源端)

4.1 开启归档

切换用户(尽量使用以下带 - 的方式切换用户)

su – oracle

创建目录

mkdir /data/oracle/oradata/orcl/archlog

连接数据库

sqlplus / as sysdba
# 关闭数据库服务
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=/data/oracle/oradata/orcl/archlog’;
# 恢复为 open 状态
SQL> alter database open;
# 再次检查归档
SQL> archive log list;

在这里插入图片描述

4.2 开启附加日志

附加日志(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;

在这里插入图片描述

4.3 关闭 oracle 的回收机制

检查 oracle 回收机制 on/off

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

在这里插入图片描述

需要重启数据库后才生效。

在这里插入图片描述

4.4 检查字符集是否一致

先查询 oracle 数据库的字符集:(AMERICAN_AMERICA.ZHS16GBK)

SQL> select userenv(language) from dual;

在这里插入图片描述

再查询系统字符集

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

在这里插入图片描述

4.5 创建同步用户及授权

启动 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;

4.6 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

安装完成后,执行以下命令:

odbcinst -j

在这里插入图片描述

配置 unixODBC

新增 odbc.ini 文件

vim /etc/odbc.ini

写入以下内容:

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

配置 odbcinst.ini 文件

vim /etc/odbcinst.ini

增加以下内容:

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

查看是否缺少依赖:

ldd /data/oracle/product/11.2.0/lib/libsqora.so.11.1 

在这里插入图片描述
发现缺少依赖 libodbcinst.so.1 文件。

查找系统其他位置是否存在依赖文件:

find / -name libodbcinst*

在这里插入图片描述

复制相应文件到依赖路径下:

cp /usr/lib64/libodbcinst.so.2 /lib64/libodbcinst.so.1 

ldd /data/oracle/product/11.2.0/lib/libsqora.so.11.1 

再次查看发现所有依赖都可被找到。

配置完成之后,可使用 isql 命令测试配置是否正确。
注意要用 oralce 用户测试。

isql -v ORACLE DMHS DMHS

在这里插入图片描述


5 安装前准备(dm8 目的端)

5.1 开启归档

连接数据库

disql SYSDBA/SYSDBA@localhost:5236

查询归档是否开启,Y/N

SQL> select arch_mode from v$database;

在这里插入图片描述

开启归档

alter database mount;
alter database archivelog;
alter database add archivelog ‘TYPE=LOCAL,DEST=/home/dmdba/dmdbms/data/DAMENG/arch,FILE_SIZE=1024,SPACE_LIMIT=10240;
alter database open;

再次查询归档是否开启,Y/N

select arch_mode from v$database;

在这里插入图片描述

5.2 开启逻辑日志

执行数据库后重启数据库服务生效

SQL> SP_SET_PARA_VALUE(2,’RLOG_APPEND_LOGIC’,1);
SQL> exit
DmServiceDMSERVER restart;

查询逻辑日志是否开启:1/0

SQL> SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME=’RLOG_APPEND_LOGIC’;

在这里插入图片描述

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

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

在这里插入图片描述
输出为 0 则正常。

5.3 创建同步用户及授权

创建用户

SQL> create user DMHS identified by "DMHS_1234" default tablespace MAIN temporary tablespace TEMP;

给用户授权

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

6 DMHS 服务部署(dm8 目的端)

6.1 部署 dmhs 服务

解压安装包

mkdir /opt/dmhs
cd dmhs
unzip dmhs_dm8_rh6_64_veri_20220301_x86_kylin10.zip

修改配置文件

cd /opt/dmhs/release/
vi /opt/dmhs/release/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.163.148</db_server>
        <db_user>DMHS</db_user>
        <db_pwd>DMHS_1234</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>

6.2 配置服务文件

将模板文件,复制一份为正式服务并授权

cp TemplateDmhsService DmhsService
chmod +x DmhsService

编辑文件

vi DmhsService

修改DmhsService以下内容:

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

6.3 启动服务

dmdba 用户到 /opt/dmhs/release 目录下执行以下命令:

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

在这里插入图片描述

执行完成后,可以在 /opt/dmhs/release/log 目录下查看日志文件:

cd /opt/dmhs/release/log
tail -f dmhs_202207.log

在这里插入图片描述

7 DMHS 服务部署(Oracle11g 源端)

7.1 部署 dmhs 服务

root 用户执行以下操作:

解压安装包

mkdir /opt/dmhs
unzip dmhs_oracle_rh6_64_veri_20220301_x86_rh7.zip

修改配置文件

cd /opt/dmhs/release/
vi /opt/dmhs/release/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.163.147: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.163.148</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>

7.2 配置服务文件

将模板文件,复制一份为正式服务并授权

cp TemplateDmhsService DmhsService
chmod +x DmhsService

编辑文件

vi DmhsService

修改DmhsService以下内容:

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

7.3 启动服务

oracle 用户到 /opt/dmhs/release 目录下执行以下命令:

./DmhsService start
./dmhs_console

在这里插入图片描述

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

在这里插入图片描述

8 验证同步效果

8.1 登录 DM 检查表是否存在

使用 dmdba 用户登录DM数据库,确认数据表不存在

disql DMHS/DMHS_1234
# 查看此时表数据量
SQL> select table_name from user_tables;

在这里插入图片描述

8.2 登录 Oracle 创建表及添加数据

使用 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;

在这里插入图片描述

8.3 登录 DM 验证同步结果

在 dmdba 用户下执行命令,连接数据库

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

在这里插入图片描述

至此,Oracle 11g 到 dm8 的数据同步部署成功!

若要退出,则先于源端执行 stop cpt ,再于目的端执行 stop exec 。


9 问题解决

9.1 dmhs.key 缺失或失效

问题描述:

[dmdba@localhost release]$ ./DmhsService start
Starting DmhsService:                                      [ FAILED ]
MGR[INFO]: DMHS start up, current version: V4.1.3-Build(2022.02.24-106302trunc)_D64 (The beta)(Enterprise Edition)
MGR[WARN]: The beta version used for more than 3 months, please apply for a formal key.

在这里插入图片描述

解决办法:

在 /opt/dmhs/release 目录下增加一个在有效使用期限内的 dmhs.key 文件。

9.2 目的端 exec 模块加载失败

问题描述:

DMHS> start exec
CSL[ERROR]: load execute module failure

在这里插入图片描述

解决办法:

ldd libdmhs_exec.so

在这里插入图片描述
发现缺少 libmoci.so 文件,执行以下命令查找:

find / -name libmoci.so

找到文件后复制到 /home/dmdba/dmdbms/bin 目录下即可。
重新启动控制台,启动 exec 模块成功。

在这里插入图片描述

9.3 源端 log analysis 模块加载失败

问题描述:

DMHS> clear exec lsn
CSL[ERROR]: load log analysis module failure

在这里插入图片描述

解决办法:

ldd libdmhs_exec.so

在这里插入图片描述

发现缺少 libclntsh.so.11.1 文件,root 用户执行以下命令查找:

find / -name libclntsh.so*

在这里插入图片描述

找到文件后复制到依赖可以找到的目录下(如 /lib64)即可。

cp /data/oracle/product/11.2.0/lib/libclntsh.so.11.1 /lib64/libclntsh.so.11.1

重新启动控制台,启动 exec 模块成功。
在这里插入图片描述

9.4 表数据中文乱码问题

问题描述:
查询数据库DMHS.TEST时,表的中文数据为乱码。

在这里插入图片描述

解决办法:

Oracle端
检查环境变量 NLS_LANG ,设置为与数据库一致。

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

DM端
涉及到 Oracle 数据同步的时候,需要配置字符集环境变量。

export LANG=zh_CN. GBK

(DM 数据同步到 DM 不需要配置字符集环境变量)

在这里插入图片描述

9.5 源端 log exec start fail

问题描述:

[dmdba@localhost bin]$ ./dmhs_server dmhs.hs
MGR[INFO]:DMHS start up,...
...
EXE[ERROR]: ...NULL SQL_ERROR = SQL:SELECT ...
...
MGR[ERROR]: log exec start fail

解决办法:

SQL> grant dba to DMHS;

总结

Oracle 11g 到 dm8 的数据同步安装部署过程基本如上。其难点主要在于数据库的安装、实验环境的配置(如环境变量和字符集设置)、odbc的配置和相关依赖的缺失解决。还要额外注意的是使用的版本问题和DMHS模块启动关闭顺序问题。

如果报错找不到相关依赖文件,先到 dmhs 的 bin 目录下查看相关文件是否存在。若存在,则是 LD_LIBRARY_PATH 环境变量未配置好,没有添加 dmhs 的 bin 目录为环境变量;若不存在,则执行 find / -name lib*.so,将其中一份复制到 /dmhs/bin 目录下或者系统可读依赖目录下即可。

笔者感觉把 DMHS 部署过程中大部分的坑都踩完了 :),后来发现同事踩的坑更多哈哈哈哈。如果遇到什么奇怪的坑,欢迎评论互相交流。如果文中有误,欢迎指出,大家共同交流进步!

更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值