ORACLE、DM7双向同步

目录:
一、DMHS概述:……………………………………………………………… 2
二、DMHS环境搭建:……………………………………………………… 2-14
2.1 环境准备:…………………………………………………………. 3
2.2 ODBC安装:………………………………………………………. 3-4
2.3 配置数据库服务监听文件……………………………………… 4-5
2.4 启ORACLE端数据库的归档及附加日志:………………. 5-6
2.5 设置ORACLE客户端字符集及用户权限…………………… 6-7
2.6 安装ORACLE端DMHS…………………………………………. 8-11
2.7 安装DM端DMHS………………………………………………… 11-13
2.8 源端及目的端DMHS控制台字典装载……………………… 13-14
2.9 测试DM及ORACLE端数据双向同步……………………… 14-15
三、常见故障及处理方式:………………………………………………… 16-18
四、 总结:……………………………………………………………………… 19

一、 DMHS概述

达梦数据实时同步软件 DMHS 是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。该产品可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发和多业务中心等业务领域。
达梦数据实时同步软件DMHS,通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、影子表等对业务系统带来的性能影响;通过可读写的备机数据库系统可以解决传统备机系统仅作为后备而无法对外提供数据服务的问题。DMHS 简易实现原理如下图所示。

二、 DMHS环境搭建
同步流程:前置硬件及软件环境检查—>安装ODBC—>安装DMHS软件—>配置DMHS—>同步数据测试
2.1 环境准备:
硬件环境:物理服务器(虚拟服务器),网络环境、磁盘。
软件环境:红帽操作系统、ORACLE数据库安装包,达梦数据库安装包、ODBC安装包、DMHS版本安装包。

2.2 ODBC安装:
ORACLE端使用ODBC驱动接口对这些数据进行入库,它采用了标准的ODBC驱动接口和符合SQL92标准的SQL语句来访问数据库。需要配置的参数有数据库连接信息、事务缓存信息以及事务入库的方式等。
1)操作系统为64位,执行以下命令
export CFLAGS=“-maix64 -DBUILD_REAL_64_BIT_MODE”
export OBJECT_MODE=64
2)解压并安装ODBC
tar -zxvf unixODBC-2.3.9.tar.gz
cd unixodbc-2.3.9
export CC=gcc
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make & make install
3)配置UNIXODBC,将当前目录切换至/usr/local/etc目录,修改odbc.ini和odbcinst.ini参数
odbc.ini 参数内容如下所示:
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 127.0.0.1
UID = DMHS
PWD = DMHS
Servername = olcom114DB
PORT = 1521
odbcinst.ini参数内容如下所示:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /data/app/oracle/product/dbhome_1/lib/libsqora.so.11.1
Threading = 0
4)设置环境变量
export LD_LIBRARY_PATH=/data/app/oracle/product/dbhome_1/lib:/usr/lib
5)测试ODBC连接ORACLE
isql -v ORACLE DMHS DMHS

2.3 配置数据库服务监听文件:
1)DMHS 装载历史数据时,需通过数据库服务名来抽取数据库的数据。配置ORACLE数据库的服务名可通过修改$ORACLE_HOME\network\admin\tnsname.ora文件
tnsname.ora
olcom114DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME= olcom114DB)
)

listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = olcom114DB)
(SID_NAME = olcom114DB)
)
)
ADR_BASE_LISTENER = /data/app/oracle
2)配置完成之后,可使用oracle客户端工具sqlplus测试配置是否正确
例如: sqlplus DMHS/DMHS@olcom114DB

2.4 开启ORACLE端数据库的归档及附加日志:
1)修改数据库归档模式,登录源端数据库,关闭数据库服务

2)用mount方式启动ORACLE 数据库服务

3)开启数据库归档,并设置归档文件路径
SQL> alter database archivelog
SQL> alter system set db_recovery_file_dest=’’;
SQL> alter system set log_archive_dest=’/data/app/oracle/archlog’;
4) 关闭oracle数据库后,以mount方式启动数据库后,开启数据库

5)使用sqlplus执行archive log list查看数据库归档模式

2.5 设置ORACLE客户端字符集及用户权限:
1)设置客户端字符集
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
2) Oracle同步至dm时,Oracle端的dmhs用户应该具备以下权限,防止因权限不足导致查询或修改报错
系统权限: 允许dmhs用户执行特定的数据库动作,如创建表、创建索引、连接实例等
对象权限: 允许dmhs用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等

SELECT ON SYS.V_KaTeX parse error: Expected group after '_' at position 26: …SELECT ON SYS.V_̲SESSION
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 28: …ELECT ON SYS.GV_̲INSTANCE
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 31: …ELECT ON SYS.GV_̲ARCHIVE
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 22: …ELECT ON SYS.GV_̲LOGFILE
SELECT ON SYS.DBA_TABLES
SELECT ON SYS.V_ I N S T A N C E S E L E C T O N S Y S . O B J INSTANCE SELECT ON SYS.OBJ INSTANCESELECTONSYS.OBJ
SELECT ON SYS.USER$
SELECT ON SYS.COL$
SELECT ON SYS.DBA_CONS_COLUMNS
SELECT ON SYS.DBA_CONSTRAINTS
SELECT ON SYS.LOB$
SELECT ON SYS.TABPART$
SELECT ON SYS.TAB$
SELECT ON SYS.TABSUBPART$
SELECT ON SYS.TABCOMPART$
EXECUTE ON DBMS_FLASHBACK
LOCK ANY TABLE
SELECT ANY TABLE
2.6 安装ORACLE端DMHS:
DMHS分为日志分析(CPT)、数据传输(NET)、数据入库(EXEC)三大功能模块。
CPT负责对源数据库日志进行分析,联合字典信息提取其中额数据变化,如插入(INSERT)、删除(DELECT)、修改(UODATE)和其他DDL操作,这些操作经过包装后投递给消息发送(NET)模块。日志分析到达NET模块后,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息的列进行映射(改名、剔除和函数计算)。经过NET的处理,消息通过网络(TCP/IP)发送给下一级EXEC模块,或者保存到本地。
EXEC 模块接收到 NET 接受子模块发来的消息,把这些消息按事务分类,并构成相应的SQL,进入目的端数据库。并通过不断刷新检查点的方式,推进LSN变化,当两端LSN一致时,则两端数据完全一致。
注意:DMHS 同步过程中,需将将执行端 ORACLE 表中的外键禁用,否则,在对外键引用表进行更新时,可能会引起执行端 ORACLE 数据库操作错误。
1)创建目录和赋权
chown –R oracle:oinstall /opt
mkdir -p /opt/dmhs_oracle/dmhs_dict
chown –R oracle:oinstall /opt/dmhs_oracle/dmhs_dict

2)执行安装文件,安装步骤参考《DMHS搭建手册》
./dmhs_V3.1.3_oracle_rev94249_rh6_64_veri_20200930.bin

3)ORACLE源端dmhs.xml文件配置
CPT模块:
siteid:站点号是同步节点在同步链路中的唯一标识,配置时请确保它的唯一性,如果重
复,那会造成链路中数据同步的混乱。
mgr_port:管理端口,同步服务起动以后,会监听该端口上的连接,用于执行客户端工具发过来的命令和接收统计信息。
ddl_mask:如果需要同步 DDL 操作,那么就需要配置该掩码。
过滤配置项,本示例配置了白名单,即 enable,也可以配置黑名单,详见 DMHS
用户手册。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么
也是会被过滤的。
filter:本示例配置了白名单,即 enable,也可以配置黑名单,详见 DMHS用户手册。其过滤的规则是先判断白名单,然后判断黑名单。如果存在重叠的情况,那么也是会被过滤的。
presenter:日志分析线程数,默认1,调整该参数提升日志解析速度。
sort_cache:日志排序缓冲大小,默认0,开启排序功能后能提升性能。
EXEC模块:
exec_thr :用来数据入库的工作线程数,如有多个能并行入库。默认值4
exec_rows:数据入库允许最大批量行数,行数取值最大时有助于提升入库性能,较耗内存。默认1000
commit_compress:是否启用提交压缩功能,事务合并时加快事务信息入库,提升入库同步性能。默认值0禁用
commit_wait:提交事务时是否需要等待数据库刷盘。参数为0时做异步提交,来提升同步性能。默认值1

<?xml version="1.0" encoding="GB2312"?> ch 5345 3 1--站点号 5346 oracle11g olcom114DB--oracle服务名 dsn=ORACLE DMHS DMHS- 1521-- 8 512 5000 250 3000 2 oracle11g olcom114DB dsn=ORACLE DMHS DMHS 300 op:obj /opt/dmhs_oracle/dmhs_dict--字典存放目录 1 600 0 172.20.10.121--目的端地址 5345 5346 0 0 -- 是否忽略触发器,默认为 0 0 -- 是否忽略约束,默认为 0 0 0 - -过滤配置项 -- 白名单,所有允许同步的表 *.* --映射配置项 4)DMHS支持源端DDL的同步。源端DDL同步必须满足一下三个条件: 源端数据库必须允许DDL触发器的触发动作,即数据库参数_system_trig_enabled为TRUE或者未设置。 需要在源端数据库以sys用户,在sys模式下创建DDL触发器及DDL记录表,详细参照dmhs_ddl.sql脚本。 需要日志捕获模块对ddl_mask进行设置。例如op:obj。ddl_mask可对同步对象进行过滤,详细参数请参照ddl_mask参数说明。创建DDL触发器和辅助表时执行oracle端ddl文件。 5)执行源端ddl文件 cd /opt/dmhs/scripts ./ ddl_sql_ora.sql 6)启动dmhs服务 cd /opt/dmhs/bin ./dmhs_serverd start

2.7 安装DM端DMHS:
DMHS 是通过解析源端归档日志来实现获取数据库数据的增量变化,强制要求DMHS在运行之前,源端数据库开启日志归档和逻辑日志,在源端数据库dm.ini配置文件中修改,重启后生效。
1)设置归档标记和逻辑日志标记
RLOG_APPEND_LOGIC = 1 ##逻辑日志标记
ARCH_INI= 1 ##开启归档

2)创建目录和赋权
chmod +x /opt/dmhs_V3.1.3_dm7_rev94249_rh6_64_veri_20200930.bin
mkdir -p /opt/dmhs_oracle/dmhs_dict

3)执行安装文件,安装步骤参考《DMHS搭建手册》
./ dmhs_V3.1.3_dm7_rev94249_rh6_64_veri_20200930.bin

  1. DM7端dmhs.xml文件配置

<?xml version="1.0" encoding="GB2312"?> ch 5345 3 2 5346 DM7 127.0.0.1 SYSDBA SYSDBA 5236 4 512 5000 250 3000 2 DM7 127.0.0.1 SYSDBA SYSDBA 300 op:obj /opt/dmhs_dm/dmhs_dict 1 600 0 172.20.10.120--目的端地址 5345 5346 0 0 0 0 0 *.* 5)执行目的端ddl文件 cd /opt/dmhs/scripts ./ddl_sql_dm7.sql

6)启动dmhs服务
cd /opt/dmhs/bin
./dmhs_serverd start

2.8 源端及目的端DMHS控制台字典装载:
初始装载是将源端数据库中的初始数据装载到目的端数据库,使 DMHS 同步的时刻源和
目的端的同步表数据一致。装载前源端 DMHS 服务和目的端 DMHS 服务都需要开启。
注意:当源端及目的端各有数据时,需要将目的端数据迁移至源端,将目的端数据进行清空,从源端copy数据至目的端,保证两端数据保持一致后,启动同步服务。

1) oracle端及dm端进入/opt/dmhs/bin目录,运行DMHS软件工具dmhs_console,连接执行端DMHS服务,控制台管理工具中执行如下DMHS命令
./dmhs_console
DMHS > connect

2)oracle端及dm端都启动日志执行模块,控制台管理工具中执行如下DMHS命令
DMHS > start exec

3)oacle端运行DMHS的dmhs_console工具,连接源端DMHS服务,设置日志捕获模块起始LSN
DMHS > connect
DMHS >clear exec lsn

4) oracle端及dm端运行DMHS的dmhs_console工具,首先连接ORACLE端DMHS服务,装载源端字典信息及历史数据,其次连接DM端的DMHS服务,装载源端字典信息
DMHS > connect
DMHS > copy 0 “sch.name=‘DMHS’" CREATE|INSERT|DICT|LSN ---- ORACLE
DMHS > COPY 0 “SCH.NAME=‘DMHS’” DICT|LSN ----- DM

5) 启动日志捕获模块。源端运行DMHS软件工具dmhs_console,连接源端DMHS服务,依次启动oracle端及dm端cpt服务

DMHS >start cpt

2.9 测试DM及ORACLE端数据双向同步:
1)ORACLE->DM7
ORACLE:在oracle端创建一张t2表,插入一条数据。

DM7:在dm7数据库中查询到了这条数据,可以得出oracle端同步dm端成功

DM7->ORACLE
DM7:在dm7数据中插入又插入一条数据

ORACLE:在oracle数据库中查询到了这条数据,可以得出dm端同步oracle端成功

三、 常见故障及处理方式
3.1启动dmhs服务时显示连接数据库失败:

原因及解决方法:
1)环境变量未正确配置,系统找不到配置文件,通过执行odbcinst -j命令可以查看当前配
置信息情况,以确认相关配置信息的路径是否正确。

2)重新配置ODBCINI及ODBCSYSINI两个环境变量即可。其中,ODBCINI设置为odbc.ini的文件路径全名,ODBCSYSINI配置为配置文件路径。export ODBCINI=/usr/local/etc/odbc.ini , export ODBCSYSINI=/usr/local/etc

3.2源端dmhs服务启动后无法连接到目的端:

原因及解决方法:
1)两端网络故障或防火墙端口不通
2)对端未启动dmhs服务
3)配置文件中目的端ip或端口是存在错误

3.3源端动态库文件加载失败,dmhs启动失败:

原因及解决方法:
1)libcpt_ora动态库文件未正确加载导致,将动态库文件缺少的包补全,拷贝至bin目录下启动,或者检查是否将数据库bin目录添加到LD_LIBRARY_PATH

3.4 oracle用户启动dmhs服务后,dmhs日志显示打开字典文件失败:

原因及解决方法:
1)由于该字典目录下权限是root,oracle用户权限不够导致字典加载失败

3.5 源端执行start cpt时连接失败无法获取LSN:

原因及解决方法:

1) 检查源端和目的端网络是否连通
2) 检查dmhs.hs中send配置的目的端ip或端口是否错误
3) 目的端是否执行start exec,EXEC模块是否成功加载

3.6源端执行DDL语句时未同步至目的端:
原因及解决方法:
1)DDL 未同步时,检查源端是否执行了创建触发器的脚本,首先要检查源端数据库的辅助表DMHS_DDL_SQL 是否记录了事件触发器捕获到的 DDL SQL,如果没有,则可能是数据库 层面禁用了事件触发器
2)还需检查配置文件中<ddl_mask>是否进行正确配置

四、 总结
DMHS具有高扩展性,高可用性,实时同步,高可靠性,备机可读可写的特性,本文主要从DMHS概述介绍,DMHS安装部署、常见故障处理等三个方面进行介绍,展现了DMHS采用并行处理体系,能够实时捕捉主机源数据库变化日志,以较低的资源占用实现大批量的数据实时同步的功能。
DMHS更多需要注意的点在于搭建的过程中依赖库的寻找以及dmhs.hs文件的内容配置,还有两边字符集编码的正确性。DMHS实时同步还需要注意观察DMHS各线程的状态是否正常以及同步完以后的数据是否一致性确认, DMHS也是一个很出色的同步工具,需要我们在实践中探索,去实现用户的需求。

ORACLE与DM7双向同步相关推荐

  1. ogg mysql表结构不一致_求助:OGG双向同步,数据不一致如何解决?(已解决)

    本帖最后由 hbm1985 于 2012-5-10 07:39 编辑 本人在搭建oracle goldengate 双向同步时,遇到一个问题:当两边同时更新同一条记录时,会出现两边数据不一致的问题. ...

  2. 达梦数据库dm7同构数据库的双向同步

    同构数据库的双向同步 前面文章已讲过配置 1.1源端dmhs.hs文件配置 [root@gh1 ~]# cat /opt/dmhs/bin/dmhs.hs <?xml version=" ...

  3. 快速搭建DMHS DM之间双向同步

    快速搭建DMHS DM之间双向同步 1. 场景介绍 2. RPO与RTO概念 3. 双向同步原理 4. 搭建过程 4.1 准备AB测试库 4.2 开启归档和逻辑日志 4.3 初始化DMHS相关DDL触 ...

  4. DMHS搭建、以及DMHS 双向同步

    产品介绍 达梦数据实时同步软件(以下简称 DMHS)是支持异构环境的高性能.高可靠.高可扩展数据库实时同步复制系统.该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机 ...

  5. DMHS DM8到Oracle12c PDB双向同步(大小不敏感+落地文件转发)

    文章目录 前言 架构思路 数据库配置 ODBC配置 DMHS配置 配置dmhs_trans_ora.hs 配置dmhs_trans_dm8.hs 配置dmhs_bi_ora.hs 配置dmhs_bi_ ...

  6. Otter 双向同步mysql

    一.Otter目前支持了什么 1. 单向同步, mysql/oracle互相同步 2. 双向同步,无冲突变更 3. 文件同步,本地/aranda文件 4. 双A同步,冲突检测&冲突补救 5. ...

  7. 达梦数据库-搭建DMHS双向同步

    作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出. 数据同步工具 (DMHS),可实现同构.异构数据库间 ...

  8. 金仓KFS数据双向同步场景部署

    KFS数据双向同步场景部署 数据双向同步场景是两端数据库互为源端和目标端,A端有新的增量数据会同步到B端,B端有增量数据也会同步到A端,并且两端之前有防回环机制,防止A端增量数据同步到B端后再同步到A ...

  9. 实时 双向同步双向复制 即 Beedup 产品

    Beedup 基于数据库日志解析的实时复制软件产品,提供数据库(Oracle/SQLServer/DB2/MySQL/Gbase/PostgreSQL)异地容灾备份,异地数据同步功能.支持复制时的主库 ...

最新文章

  1. HTML一些常用的标签
  2. Factory Method模式的误区:Factory Method模式是简化版的Abstract Factory吗?
  3. 关于bochs用X11启动的说明
  4. 利用程序动态管理Web.config文件
  5. opencv 梯度幅值_20、 OpenCV导数和梯度
  6. 基于Windows字库的点阵数据提取方法
  7. Redis集群环境搭建
  8. C++学习笔记(七)——log4cpp
  9. Matlab中linspace函数的用法
  10. 计算机网络13--网络应用的体系结构
  11. 手把手教你搭建小程序
  12. 记一次网站漏洞修复经历
  13. MQTT Essentials(Basics(1-5) And Features(6-10))
  14. 自定义tab(上面是图片 下面是文字)
  15. 每天温习一个JS方法之Array.flat方法 第六天
  16. 苹果手机如何换行打字_苹果手机备忘录如何导入到新手机?备忘录误删如何恢复?...
  17. 『中秋赏月』程序员用文心大模型带你玩转不一样的中秋
  18. 华为OD机试2022.11.04 只记得两题
  19. long与int转换线上问题解决(必看)
  20. 决策树算法思想及实现介绍

热门文章

  1. rancher2.6.2 单机及高可用部署
  2. 快速开发EasyUI Datagrid报表 thinkphp框架 ppt和视频教程
  3. 手机怎么在线拍照翻译英语?只要几个步骤轻松解决
  4. ASP]在網頁中下SQL查詢.其結果轉成Excel檔
  5. 赛钛客Cyborg R.A.T.7高度自定游戏鼠标
  6. Proteus8.9 VSM Studio Keil编译器仿真AT89C51RD2系列018_lcd12864竖屏
  7. C++编写MC(含源码)
  8. windows下git bash 添加zip命令功能
  9. java开发项目中遇到的难点,帮你突破瓶颈
  10. java 从mysql 导出到excel_Java:将数据库数据导出到Excel (一眼就看会)