注册
DMDRS 实现 Oracle 19c 到 DM8 数据同步部署实战
专栏/技术分享/ 文章详情 /

DMDRS 实现 Oracle 19c 到 DM8 数据同步部署实战

xixi 2026/08/28 173 0 0
摘要

1. 概述

本文档主要介绍基于达梦数据复制软件(DMDRS)实现 Oracle 19c 数据库到 DM8 数据库的数据同步部署过程。

通过部署 DMDRS,实现 Oracle 数据库作为源端,DM8 数据库作为目标端,将 Oracle 数据库中的业务数据实时同步至 DM8 数据库,实现异构数据库之间的数据迁移及实时同步。

本文档适用于以下场景:

  • Oracle 单机数据库作为数据源;
  • DM8 单机数据库作为目标数据库;
  • DMDRS 实现 Oracle → DM8 单向实时同步。

2. 部署环境规划

2.1 操作环境

项目 配置
操作系统 CentOS Linux 7 x86_64
CPU x86_64
内存 4GB
磁盘 40GB
源数据库 Oracle Database 19c(LINUX.X64_193000_db_home.zip)
目标数据库 DM8 V8(dm8_20260710_x86_CentOS7_64.zip)
数据复制软件 DMDRS V5(dmdrs_rev229171_x86_rh6_64_20260804.bin)
同步方向 Oracle → DM8
同步模式 单向实时同步

2.2 节点规划

两个节点的虚拟机配置都如 2.1 所示。

节点 IP 地址 主机角色 部署软件
节点1 192.168.218.148 Oracle 源端 Oracle 19c、DMDRS 源端
节点2 192.168.218.149 DM 目标端 DM8、DMDRS 目标端

2.3 目录规划

2.3.1 Oracle 源端(192.168.218.148)

目录类型 目录
Oracle 安装目录 /home/oracle/Oracle/19.3.0/DbHome
DMDRS 安装目录 /opt/DmDrs
DMDRS 执行目录 /opt/DmDrs/bin
源端配置文件 /opt/DmDrs/bin/Src.xml
服务脚本 /opt/DmDrs/bin/DrsService
控制工具 /opt/DmDrs/bin/drcsl

2.3.2 DM 目标端(192.168.218.149)

目录类型 目录
DM8 安装目录 /dmdata/data
DMDRS 安装目录 /opt/DmDrs
DMDRS 执行目录 /opt/DmDrs/bin
目标端配置文件 /opt/DmDrs/bin/Dest.xml
服务脚本 /opt/DmDrs/bin/DrsService
控制工具 /opt/DmDrs/bin/drcsl

3. 前置条件

3.1 网络连通性检查

两个节点之间需要保证以下端口可通信:

服务 端口 节点
DMDRS 管理端口 5345 两端
DM8 数据库端口 5234 节点2
Oracle 监听端口 1521 节点1
DMDRS Web 端口 8080 两端

测试:

# 节点1 ping 192.168.218.149 # 节点2 ping 192.168.218.148

3.2 防火墙关闭

所有节点执行:

systemctl stop firewalld systemctl disable firewalld systemctl status firewalld

3.3 SELinux 关闭

所有节点执行:

vi /etc/sysconfig/selinux

修改为:

SELINUX=disabled

验证:

getenforce

3.4 Oracle 节点安装

安装完成后,验证:

sqlplus / as sysdba

3.5 DM 节点安装

参照《01-dm8安装部署手册 - 黄雨晨》的步骤。

安装完成后,验证:

./disql SYSDBA/Dmdba123@localhost:5234

3.6 DMDRS 版本

两节点均安装:dmdrs_rev229171_x86_rh6_64_20260804.bin

4. DRS 软件安装

4.1 上传 DRS 安装包

1)两节点都上传:

dmdrs_rev229171_x86_rh6_64_20260804.bin

2)权限:

Oracle 端:

chown oracle:oinstall dmdrs_rev229171_x86_rh6_64_20260804.bin chmod 755 dmdrs_rev229171_x86_rh6_64_20260804.bin

DM8 端:

chown dmdba:dinstall dmdrs_rev229171_x86_rh6_64_20260804.bin chmod 755 dmdrs_rev229171_x86_rh6_64_20260804.bin

3)创建安装目录:

Oracle 端:

mkdir -p /opt/DmDrs chown oracle:oinstall /opt/DmDrs/ chmod 755 /opt/DmDrs/

DM8 端:

mkdir -p /opt/DmDrs chown dmdba:dinstall /opt/DmDrs/ chmod 755 /opt/DmDrs/

4.2 安装 DRS 服务

1)执行:

./dmdrs_rev229171_x86_rh6_64_20260804.bin -i

Oracle 端和 DM8 端分别执行。

2)运行脚本:

/opt/DmDrs/scripts/root/root_installer.sh

3)查看服务进程:

Oracle 端:

ps -ef|grep oracle

5. DRS 源端 Oracle 配置

5.1 Oracle 数据库准备

# 登录 Oracle sqlplus / as sysdba

5.1.1 字符集确认

SQL> select * from v$nls_parameters where PARAMETER in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
  • NLS_CHARACTERSET 表示字符集;
  • NLS_NCHAR_CHARACTERSET 表示国家字符集;

建议达梦库的字符集和 Oracle 数据库保持一致。

5.1.2 开启归档

-- 关库 SQL> shutdown immediate; -- 启动到 mount 状态 SQL> startup mount; -- 开启归档 SQL> alter database archivelog; -- 快速恢复区设置 SQL> alter system set db_recovery_file_dest=''; -- 归档路径设置 SQL> alter system set log_archive_dest='/home/oracle/Oracle/Arch'; -- 开库 SQL> alter database open; -- 验证归档是否打开 SQL> archive log list;

5.1.3 开启数据库最小附加日志及全列日志

-- 最小附加日志和全列日志设置 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;

5.1.4 字符集修改

当数据库数据包含中文字符时,需将 DMHS 运作所在窗口的 NLS_LANG 设置为对应的字符集,建议使用 AMERICAN_AMERICA.ZHS16GBK

添加到 /home/oracle/.bash_profile 文件结尾:

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

环境变量生效与验证:

. /home/oracle/.bash_profile echo $NLS_LANG

5.1.5 同步用户创建

sqlplus / as sysdba

建议给 DBA 权限,最小权限在打开执行模块的时候,会提示报错权限不足。

CREATE USER DMDRS IDENTIFIED BY qwer1234S; GRANT DBA TO DMDRS; GRANT CONNECT TO DMDRS;

装载相关权限(需要非同步用户下待装载表/序列的查询权限):

GRANT SELECT ANY TABLE TO DMDRS; GRANT SELECT ANY SEQUENCE TO DMDRS;

系统表、系统字典和动态视图的查询权限:

GRANT SELECT ON SYS.OBJ$ TO DMDRS; GRANT SELECT ON SYS.TAB$ TO DMDRS; GRANT SELECT ON SYS.USER$ TO DMDRS; GRANT SELECT ON SYS.NTAB$ TO DMDRS; GRANT SELECT ON SYS.SEG$ TO DMDRS; GRANT SELECT ON SYS.EXTERNAL_TAB$ TO DMDRS; GRANT SELECT ON DBA_CONS_COLUMNS TO DMDRS; GRANT SELECT ON DBA_CONSTRAINTS TO DMDRS; GRANT SELECT ON SYS.COLTYPE$ TO DMDRS; GRANT SELECT ON SYS.TYPE$ TO DMDRS; GRANT SELECT ON SYS.ATTRIBUTE$ TO DMDRS; GRANT SELECT ON SYS.COLLECTION$ TO DMDRS; GRANT SELECT ON SYS.PARTOBJ$ TO DMDRS; GRANT SELECT ON SYS.COM$ TO DMDRS; GRANT SELECT ON V_$DATABASE TO DMDRS; GRANT SELECT ON SYS.CON$ TO DMDRS; GRANT SELECT ON SYS.IND$ TO DMDRS; GRANT SELECT ON SYS.COL$ TO DMDRS; GRANT SELECT ON SYS.CCOL$ TO DMDRS; GRANT SELECT ON SYS.TS$ TO DMDRS; GRANT SELECT ON SYS.DEFERRED_STG$ TO DMDRS; GRANT SELECT ON SYS.SUBPARTCOL$ TO DMDRS; GRANT SELECT ON SYS.SEQ$ TO DMDRS; GRANT SELECT ON DBA_INDEXES TO DMDRS; GRANT SELECT ON DBA_IND_COLUMNS TO DMDRS; GRANT SELECT ON SYS.PARTCOL$ TO DMDRS; GRANT SELECT ON SYS.DEFSUBPART$ TO DMDRS; GRANT SELECT ON SYS.SOURCE$ TO DMDRS; GRANT SELECT ON SYS.TYPED_VIEW$ TO DMDRS; GRANT SELECT ON SYS.VIEW$ TO DMDRS; GRANT SELECT ON SYS.SYN$ TO DMDRS; GRANT SELECT ON "SYS"."_ALL_SYNONYMS_TREE" TO DMDRS; GRANT SELECT ON DBA_EXTENTS TO DMDRS; GRANT SELECT ON SYS.SNAP$ TO DMDRS; GRANT SELECT ON SYS.SUM$ TO DMDRS; GRANT SELECT ON V_$PARAMETER TO DMDRS; GRANT SELECT ON SYS.TRIGGER$ TO DMDRS; GRANT SELECT ON SYS.V_$THREAD TO DMDRS; GRANT SELECT ON V_$DATABASE_INCARNATION TO DMDRS; GRANT SELECT ON V_$TRANSACTION TO DMDRS; GRANT SELECT ON V_$LOCKED_OBJECT TO DMDRS; GRANT SELECT ON GV_$TRANSACTION TO DMDRS; GRANT SELECT ON GV_$LOCKED_OBJECT TO DMDRS; GRANT SELECT ON DBA_PART_INDEXES TO DMDRS; GRANT SELECT ON SYS.LOBCOMPPART$ TO DMDRS; GRANT SELECT ON SYS.PARTLOB$ TO DMDRS; GRANT SELECT ON SYS.ECOL$ TO DMDRS; GRANT SELECT ON SYS.ATTRCOL$ TO DMDRS; GRANT SELECT ON SYS.ICOL$ TO DMDRS;

Oracle 12c 及以上版本且带有容器的数据库需要容器视图的查询权限:

GRANT SELECT ON V_$CONTAINERS TO DMDRS;

Oracle DG 且源 DMDRS 部署在 DG 环境的备数据库:

GRANT SELECT ON V_$MANAGED_STANDBY TO DMDRS; GRANT SELECT ON V_$DATAGUARD_CONFIG TO DMDRS;

锁表权限:

GRANT LOCK ANY TABLE TO DMDRS;

装载使用 FLASHBACK 掩码,需要闪回权限:

GRANT FLASHBACK ANY TABLE to DMDRS;

同步相关权限(需要获取系统 SCN 权限):

GRANT EXECUTE ON DBMS_FLASHBACK TO DMDRS;

系统表、系统字典和动态视图的查询权限:

GRANT SELECT ON SYS.COL$ TO DMDRS; GRANT SELECT ON SYS.LOB$ TO DMDRS; GRANT SELECT ON SYS.TABPART$ TO DMDRS; GRANT SELECT ON SYS.TABCOMPART$ TO DMDRS; GRANT SELECT ON SYS.LOBFRAG$ TO DMDRS; GRANT SELECT ON V_$LOGFILE TO DMDRS; GRANT SELECT ON V_$LOG TO DMDRS; GRANT SELECT ON V_$ARCHIVED_LOG TO DMDRS; GRANT SELECT ON SYS.CDEF$ TO DMDRS; GRANT SELECT ON SYS.TABSUBPART$ TO DMDRS; GRANT SELECT ON SYS.CCOL$ TO DMDRS; GRANT SELECT ON SYS.TS$ TO DMDRS; GRANT SELECT ON SYS.TYPE$ TO DMDRS; GRANT SELECT ON SYS.ATTRIBUTE$ TO DMDRS; GRANT SELECT ON SYS.COLLECTION$ TO DMDRS; GRANT SELECT ON V_$SESSION TO DMDRS; GRANT SELECT ON V_$SESSTAT TO DMDRS; GRANT SELECT ON V_$STATNAME TO DMDRS;

Oracle DG 且源 DMDRS 部署在 DG 环境的备数据库:

GRANT SELECT ON V_$STANDBY_LOG TO DMDRS;

源 DMDRS 主备需要数据库实例的查询权限:

GRANT SELECT ON V_$INSTANCE TO DMDRS; GRANT SELECT ON GV_$INSTANCE TO DMDRS;

其他必要权限:

grant all on drs_$ddl_sql to DMDRS; grant select any table to DMDRS; grant select any dictionary to DMDRS; grant create session to DMDRS; grant lock any table to DMDRS; grant execute on dbms_flashback to DMDRS; grant flashback any table to DMDRS;

5.1.6 网络服务名配置

vi /home/oracle/Oracle/19.3.0/DbHome/network/admin/tnsnames.ora
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.218.148)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )

验证配置:

tnsping orcl sqlplus / as sysdba SQL> SELECT value FROM v$parameter WHERE name='service_names';

5.1.7 环境变量总览

cat /home/oracle/.bash_profile
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH export TMP=/tmp export LANG=en_US export TMPDIR=$TMP export ORACLE_UNQNAME=orcl export ORACLE_SID=orcl export ORACLE_BASE=/home/oracle/Oracle export ORACLE_HOME=$ORACLE_BASE/19.3.0/DbHome export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS" export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/bin:$ORACLE_HOME/bin export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/oracle/Oracle/19.3.0/DbHome/lib:/usr/local/lib

5.1.8 开启 enable_goldengate_replication 参数

SQL> alter system set enable_goldengate_replication = TRUE;

5.2 源端 DMDRS 配置文件(Src.xml)

vi /opt/DmDrs/bin/Src.xml
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port> <!-- DMDRS管理端口,源和目标要保持一致 --> <siteid>1</siteid> <!-- 站点ID,源和目标需不同(源1,目标2) --> <lang>ch-utf8</lang> <!-- 语言,保持默认 --> </base> <cpt> <name>cpt_oracle</name> <!-- CPT模块名称,自定义,但要和后续控制台命令一致 --> <login> <dbtype>Oracle</dbtype> <!-- 源数据库类型 --> <server>orcl</server> <!-- 这里填你 tnsnames.ora 里配置的服务名 --> <user>DMDRS</user> <!-- 前面创建的同步用户 --> <pwd>qwer1234S</pwd> <!-- 同步用户密码 --> </login> <send> <ip>192.168.218.149</ip> <!-- 目标端DM的IP地址,改成你的DM节点IP --> <port>5345</port> <!-- 目标端DMDRS的管理端口,要和Dest.xml的mgr_port一致 --> <target_name>exec_dm8</target_name> <!-- 目标端EXEC模块名称,要和Dest.xml中exec的name一致 --> <map> <item>SUN.*==SUN.*</item> <!-- 同步映射规则:源模式.表==目标模式.表 --> </map> </send> </cpt> </drs>

5.3 Oracle 端修改 DrsService 服务脚本

cp service_template/TemplateService DrsService vi DrsService

修改参数如下:

#REPLACE INSTALL_HOME path INSTALL_HOME=/opt/DmDrs #REPLACE program dir PROG_DIR=/opt/DmDrs/bin #REPLACE program config path CONF_PATH=/opt/DmDrs/bin/Src.xml #REPLACE need library path, LD_LIBRARY_PATH/LIBPATH NEED_LIB_PATH=/home/oracle/Oracle/19.3.0/DbHome/lib #REPLACE program name, drsvr/dssvr/dvsvr EXEC_PROG_NAME=drsvr #REPLACE service type, drs server/dss server/dvs server SERVICE_TYPE_NAME="drs server"

6. 目标端(DM8)DMDRS 配置

6.1 目标端同步用户

SQL> CREATE USER DMDRS IDENTIFIED BY qwer1234S; SQL> GRANT DBA TO DMDRS;

6.2 目标端 DMDRS 配置文件(Dest.xml)

vi /opt/DmDrs/bin/Dest.xml
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port> <!-- 和源端Src.xml的mgr_port一致,都是5345 --> <siteid>2</siteid> <!-- 站点ID,目标端必须和源端不同,源用1,目标用2 --> <lang>ch-utf8</lang> <!-- 保持默认 --> </base> <exec> <name>exec_dm8</name> <!-- EXEC模块名称,必须和Src.xml中send的target_name完全一致 --> <login> <dbtype>DM8</dbtype> <!-- 目标数据库类型,达梦填DM8 --> <server>192.168.218.149</server> <!-- 改成你DM节点的实际IP --> <user>DMDRS</user> <!-- 前面在DM库创建的同步用户 --> <pwd>qwer1234S</pwd> <!-- 同步用户密码 --> <port>5234</port> <!-- DM数据库监听端口,如果不是默认5234,改这里 --> </login> </exec> </drs>

6.3 目标端(DM8)DrsService 脚本配置

cp service_template/TemplateService DrsService

修改参数如下:

#REPLACE INSTALL_HOME path INSTALL_HOME=/opt/DmDrs #REPLACE program dir PROG_DIR=/opt/DmDrs/bin #REPLACE program config path CONF_PATH=/opt/DmDrs/bin/Dest.xml #REPLACE need library path, LD_LIBRARY_PATH/LIBPATH NEED_LIB_PATH=/opt/Dm8/bin #REPLACE program name, drsvr/dssvr/dvsvr EXEC_PROG_NAME=drsvr #REPLACE service type, drs server/dss server/dvs server SERVICE_TYPE_NAME="drs server"

7. 启动服务

cd /home/dmdba/dmdbms/bin/

7.1 启动目标端 DMDRS 服务

./DrsService start

7.2 启动源端 DMDRS 服务

./DrsService start

7.3 启动目标端 DMDRS 执行模块

./drcsl Dest.xml # 连接目标 DMDRS 服务 CSL> connect # 启动执行模块 CSL> start

7.4 启动源端 DMDRS 捕获模块

./drcsl Src.xml # 连接源 DMDRS 服务 CSL> connect # 源端执行全量装载 CSL> ALTER cpt_oracle CP "sch.name='SUN'"

重新开个终端:

sqlplus / as sysdba SQL> SELECT CURRENT_SCN FROM V$DATABASE;

接着回到第一个终端:

CSL> ALTER cpt_oracle SET LSN scn=2216359 CSL> start cpt_oracle

8. 验证

8.1 历史数据初始化同步

1)在 Oracle 源库创建测试表并插入初始数据:

# 先关闭 cpt CSL> stop cpt_oracle
sqlplus / as sysdba
-- 如果 SUN 模式不存在,需先创建(用有权限的用户,如 sys) CREATE USER SUN IDENTIFIED BY sun123; GRANT CONNECT, RESOURCE TO SUN; -- 授予配额 ALTER USER SUN QUOTA UNLIMITED ON USERS; -- 然后用 SUN 用户登录创建表 CREATE TABLE SUN.LZL (A INT); INSERT INTO SUN.LZL VALUES (1); INSERT INTO SUN.LZL VALUES (2); INSERT INTO SUN.LZL VALUES (3); COMMIT;

此时 Oracle 中 SUN.LZL 有 3 条记录,这就是我们的"历史数据"。
image.png
2)DM 端查询:

确保 DM 中存在 SUN 模式(如果不存在,需先创建):

CREATE USER SUN IDENTIFIED BY Sun12345;

然后用 SUN 用户登录查询:

SELECT * FROM SUN.LZL;

image.png
3)开启 Oracle 端的 cpt 服务:

CSL> start cpt_oracle

4)DM 端查询:

SELECT * FROM SUN.LZL;

image.png

8.2 开启增量数据同步,并测试新增数据是否正常同步到 DM 数据库

1)在 Oracle 源库插入数据:

INSERT INTO SUN.LZL VALUES (4); INSERT INTO SUN.LZL VALUES (5); COMMIT;

image.png
2)在 DM 端查询:

SELECT * FROM SUN.LZL;

image.png
确认新增数据已同步到 DM 数据库,即表示增量同步配置成功。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服