注册
DFM平台的Oracle到DM数据同步实践
技术分享/ 文章详情 /

DFM平台的Oracle到DM数据同步实践

诗想与论语 2026/08/14 93 0 0

1.环境配置总表

在本次实践中,需要将一套运行在 Oracle 19c 上的测试业务系统,实时同步至达梦 DM8 数据库。采用了达梦数据迁移平台 DMDFM + 数据实时同步服务 DRS的组合方案。该方案基于日志解析技术,能够在不侵入源库业务的前提下,实现 Oracle 到 DM8 的准实时数据同步,并通过 DMDFM 平台提供统一的监控和管理能力,大幅降低了异构数据库同步的运维复杂度。
本文记录了本次从环境准备、Oracle 安装、DMDFM 部署、DRS 配置到数据校验的全流程实践过程,希望能提供一份可参考的操作指南。
机器1:达梦目的库(192.168.244.142)
配置项 值
实例名 DFM01
端口 5237
数据目录 /home/dmdba/dmdbms/data/DFM01
SYSDBA 密码 Dmdba123!
DRS 用户/密码 DRS / Dmdba123!

机器2:DMDFM 管理平台(192.168.244.139)
配置项 值
访问地址 http://192.168.244.139:8080/dfm
默认账号/密码 admin / 123456

机器3:Oracle 源库(192.168.244.146)
配置项 值
实例 ORCLCDB / PDB: ORCLPDB1
端口 1521
SYS 密码 Oracle123!
DRS 用户/密码 DRS / Oracle123!
归档日志 开启,目录 /oradata/arch

DMDFM 代理配置
代理 IP SSH 用户/密码 JDK 路径
达梦代理 192.168.244.142 root / Dmdba123! /usr/lib/jvm/java-11-openjdk
Oracle 代理 192.168.244.146 root / Oracle123! /usr/lib/jvm/java-11-openjdk

DMDFM 数据源配置
数据源 类型 连接地址 用户/密码
Oracle_源库 Oracle 192.168.244.146:1521/ORCLPDB1 DRS / Oracle123!
DM_目的库 DM8 192.168.244.142:5237 DRS / Dmdba123!

2.安装Oracle

2.1环境配置

在安装之前,查看系统环境配置,确保有4G内存和10G+磁盘,确定操作系统版本
cat /etc/os-release# 查看内存和磁盘(Oracle 需要至少 2G 内存,10G+ 磁盘)
free -h
df -h
查看主机名
hostnamectl
image.png
关闭防火墙
Systemctl stop firewalld
Systemctl disable firewaalld

# 2.2安装Oracle

Centos7的yum源已经停止维护,我们将其备份,采用Oracle Linux 7 yum源
cd /etc/yum.repos.d/
mkdir backup ##创建备份目录
mv *.repo backup/ ##备份

##配置新yum源
配置阿里云centos7源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

下载GPG密钥
yum install -y wget
##下载wget
wget --no-check-certificate -P
/etc/pki/rpm-gpg/ https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7
##跳过参数验证,下载GPG密钥

下载预安装包
wget https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm --no-check-certificate

##预安装包下载
yum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
##使用yum localinstal安装
oracle19c_免费高速下载|百度网盘-分享无限制
##安装包下载链接下载后上传到虚拟机,使用 yum localinstall 安装主包
yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm
##下载后上传到虚拟机,使用 yum localinstall 安装主包
image.png
输出如图,即视为安装成功。

设置环境变量
#查找安装位置
find /opt -name “sqlplus” -type f 2>/dev/null
设置 ORACLE_HOME
echo “export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1” >> ~/.bash_profile

echo “export PATH=$ORACLE_HOME/bin:$PATH” >> ~/.bash_profile

echo “export ORACLE_SID=ORCLCDB” >> ~/.bash_profile

source ~/.bash_profile
输出如图,即视为安装成功。

设置环境变量
查找安装位置
find /opt -name “sqlplus” -type f 2>/dev/null

设置 ORACLE_HOME

echo “export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1” >> ~/.bash_profile
设置 PATH
echo “export PATH=$ORACLE_HOME/bin:$PATH” >> ~/.bash_profile
设置 ORACLE_SID(默认实例名)
echo “export ORACLE_SID=ORCLCDB” >> ~/.bash_profile
加载配置文件
source ~/.bash_profile
image.png
验证环境变量是否生效
echo $ORACLE_HOME # 应该输出 /opt/oracle/product/19c/dbhome_1
which sqlplus # 应该输出 /opt/oracle/product/19c/dbhome_1/bin/sqlplus
image.png
初始化并启动
su - oracle
执行静默建库,时间较长
/opt/oracle/product/19c/dbhome_1/bin/dbca -silent -createDatabase
-templateName General_Purpose.dbc
-gdbname ORCLCDB -sid ORCLCDB
-characterSet AL32UTF8
-sysPassword Oracle123! -systemPassword Oracle123!
-createAsContainerDatabase true
-numberOfPDBs 1 -pdbName ORCLPDB1 -pdbAdminPassword Oracle123!
CDB(容器数据库):实例名 ORCLCDB,管理员用户 SYS/SYSTEM,密码 Oracle123!
PDB(可插拔数据库):实例名 ORCLPDB1,管理员密码 Oracle123!
业务数据建议存放在 PDB 中(ORCLPDB1),而不是 CDB
image.png
如图所示,创建完成。

检验是否成功
##启动监听
lsnrctl start
image.png
如图,监听已经启动成功
##验证数据库连接
Sqlplus / as sysdba
image.png
状态为open,代表数据库正常运行。
至此,Oracle的安装建库流程已经全部完成。

3.安装DMDFM

上传dmdfm的安装包,选择静默安装
##给安装包添加执权限
Chmod +x dmdfm_rev223997_x86_rh6_64_20260617.bin
##执行静默安装
./dmdfm_rev223997_x86_rh6_64_20260617.bin -i
填写信息:
安装目录:/home/dmdba/dmdfm5
代理ip:192.168.244.139
管理平台端口:8080
image.png
输出如图,即安装完成。
查看dmdfm5文件夹,Db为存放内置库相关的文件,doc存放文档资料,jdk存放内置的java运行环境,scripts存放运维或者功能脚本,tool存放辅助工具,web存放web应用部署目录,log存放运行日志。
image.png

4.登上DMDFM平台,安装代理

启动DMDFM Web服务
cd /home/dmdba/dmdfm5/web
./DfmWebService start ##启动web服务
ss -tlnp |grep 8080 ##查看8080端口是否正在被监听
image.png
查看到8080被监听,就可以打开
http://192.168.244.139:8080网站进行登录
image.png
进入网站后,选择新建代理,选择远程安装部署,输入源库与目的库的各种信息
点击安装即可。
image.png
如下图所示,已经安装成功。
image.png
在agent文件夹可以看到建立的相关文件配置
image.png
此时,源库与目的库都能看到相关的文件配置,即代理都已经安装完成。

5.添加DRS用户和权限
在安装完DFM服务器和agent代理后,需要创建同步专用数据库账户,遵循最小权限原则,授予数据同步所需的查询、锁表、回退等必要权限,用于DMDRS服务连接数据库进行数据读取和写入

5.1 .Oracle端创建DRS用户并授权

5.1.1System登录CDB

System / as sysdba ##登录
SQL>aechive log list; ##查看归档是否开启
image.png

5.1.2开启附加日志

– 1. 开启最小附加日志
alter database add supplemental log data;

– 2. 开启全列附加日志
alter database add supplemental log data (ALL) columns;

– 3. 开启 Xstream 同步
alter system set enable_goldengate_replication = TRUE;

–4。验证附加日志是否开启
select supplemental_log_data_min from vdatabase;selectsupplementallogdataallfromvdatabase; select supplemental_log_data_all from vdatabase;
都返回yes说明附加日志已经成功开启。
image.png

5.1.3切换PDB创建DRS用户

– 1. 切换到 PDB
alter session set container=ORCLPDB1;

– 2. 创建 DRS 用户
create user DRS identified by “Oracle123!”;

– 3. 授予基础权限
grant connect, resource to DRS;
image.png
开始执行大量GRANT授权,于授予 DRS 用户读取 Oracle 系统表、动态视图、归档日志及执行闪回查询等必要能力,以支持 DMDRS 实时捕获源端数据变更,且严格遵循最小权限原则,仅开放读取权限,不授予任何数据修改权限,确保源库安全性。
GRANT SELECT ON SYS.OBJ$ TO DRS;
GRANT SELECT ON SYS.TAB$ TO DRS;
GRANT SELECT ON SYS.USER$ TO DRS;
GRANT SELECT ON SYS.NTAB$ TO DRS;
GRANT SELECT ON SYS.SEG$ TO DRS;
GRANT SELECT ON SYS.EXTERNAL_TAB$ TO DRS;
GRANT SELECT ON DBA_CONS_COLUMNS TO DRS;
GRANT SELECT ON DBA_CONSTRAINTS TO DRS;
GRANT SELECT ON SYS.COLTYPE$ TO DRS;
GRANT SELECT ON SYS.TYPE$ TO DRS;
GRANT SELECT ON SYS.ATTRIBUTE$ TO DRS;
GRANT SELECT ON SYS.COLLECTION$ TO DRS;
GRANT SELECT ON SYS.PARTOBJ$ TO DRS;
GRANT SELECT ON SYS.COM$ TO DRS;
GRANT SELECT ON V_DATABASETODRS;GRANTSELECTONSYS.CONDATABASE TO DRS; GRANT SELECT ON SYS.CON TO DRS;
GRANT SELECT ON SYS.IND$ TO DRS;
GRANT SELECT ON SYS.COL$ TO DRS;
GRANT SELECT ON SYS.CCOL$ TO DRS;
GRANT SELECT ON SYS.TS$ TO DRS;
GRANT SELECT ON SYS.DEFERRED_STG$ TO DRS;
GRANT SELECT ON SYS.SUBPARTCOL$ TO DRS;
GRANT SELECT ON SYS.SEQ$ TO DRS;
GRANT SELECT ON DBA_INDEXES TO DRS;
GRANT SELECT ON DBA_IND_COLUMNS TO DRS;
GRANT SELECT ON SYS.PARTCOL$ TO DRS;
GRANT SELECT ON SYS.DEFSUBPART$ TO DRS;
GRANT SELECT ON SYS.SOURCE$ TO DRS;
GRANT SELECT ON SYS.TYPED_VIEW$ TO DRS;
GRANT SELECT ON SYS.VIEW$ TO DRS;
GRANT SELECT ON SYS.SYN$ TO DRS;
GRANT SELECT ON SYS."ALL_SYNONYMS_TREE" TO DRS;
GRANT SELECT ON DBA_EXTENTS TO DRS;
GRANT SELECT ON SYS.SNAP$ TO DRS;
GRANT SELECT ON SYS.SUM$ TO DRS;
GRANT SELECT ON V
PARAMETERTODRS;GRANTSELECTONSYS.TRIGGERPARAMETER TO DRS; GRANT SELECT ON SYS.TRIGGER TO DRS;
GRANT SELECT ON SYS.V_THREAD TO DRS; GRANT SELECT ON V_DATABASE_INCARNATION TO DRS;
GRANT SELECT ON V_TRANSACTION TO DRS; GRANT SELECT ON V_LOCKED_OBJECT TO DRS;
GRANT SELECT ON GV_TRANSACTION TO DRS; GRANT SELECT ON GV_LOCKED_OBJECT TO DRS;
GRANT SELECT ON DBA_PART_INDEXES TO DRS;
GRANT SELECT ON SYS.LOBCOMPPART$ TO DRS;
GRANT SELECT ON SYS.PARTLOB$ TO DRS;
GRANT SELECT ON SYS.ECOL$ TO DRS;
GRANT SELECT ON SYS.ATTRCOL$ TO DRS;
GRANT SELECT ON SYS.ICOL$ TO DRS;
GRANT SELECT ON SYS.METHOD$ TO DRS;
GRANT SELECT ON SYS.RESULT$ TO DRS;
GRANT SELECT ON SYS.PARAMETER$ TO DRS;
GRANT SELECT ON V_CONTAINERS TO DRS; GRANT SELECT ON V_MANAGED_STANDBY TO DRS;
GRANT SELECT ON V_DATAGUARDCONFIGTODRS;GRANTLOCKANYTABLETODRS;GRANTFLASHBACKANYTABLETODRS;GRANTEXECUTEONDBMSFLASHBACKTODRS;GRANTSELECTONSYS.COLDATAGUARD_CONFIG TO DRS; GRANT LOCK ANY TABLE TO DRS; GRANT FLASHBACK ANY TABLE TO DRS; GRANT EXECUTE ON DBMS_FLASHBACK TO DRS; GRANT SELECT ON SYS.COL TO DRS;
GRANT SELECT ON SYS.LOB$ TO DRS;
GRANT SELECT ON SYS.TABPART$ TO DRS;
GRANT SELECT ON SYS.TABCOMPART$ TO DRS;
GRANT SELECT ON SYS.LOBFRAG$ TO DRS;
GRANT SELECT ON V_LOGFILE TO DRS; GRANT SELECT ON V_LOG TO DRS;
GRANT SELECT ON V_ARCHIVEDLOGTODRS;GRANTSELECTONSYS.CDEFARCHIVED_LOG TO DRS; GRANT SELECT ON SYS.CDEF TO DRS;
GRANT SELECT ON SYS.TABSUBPART$ TO DRS;
GRANT SELECT ON SYS.CCOL$ TO DRS;
GRANT SELECT ON SYS.TS$ TO DRS;
GRANT SELECT ON SYS.TYPE$ TO DRS;
GRANT SELECT ON SYS.ATTRIBUTE$ TO DRS;
GRANT SELECT ON SYS.COLLECTION$ TO DRS;
GRANT SELECT ON V_SESSION TO DRS; GRANT SELECT ON V_SESSTAT TO DRS;
GRANT SELECT ON V_STATNAME TO DRS; GRANT SELECT ON V_STANDBY_LOG TO DRS;
GRANT SELECT ON V_INSTANCE TO DRS; GRANT SELECT ON GV_INSTANCE TO DRS;
GRANT SELECT ON XDB.XDB$TTSET TO DRS;
授权之后,Oracle端的DRS用户创建与授权即视为完成。

5.2DM端创建DRS用户

– 1. 开启逻辑日志(DMDRS 必需)
SP_SET_PARA_VALUE(1, ‘RLOG_APPEND_LOGIC’, 1);

– 2. 创建 DRS 用户
CREATE USER “DRS” IDENTIFIED BY “Dmdba123!”;

– 3. 授予权限
GRANT PUBLIC, VTI, SOI TO DRS;
GRANT CREATE ANY TABLE TO DRS;
GRANT CREATE ANY PROCEDURE TO DRS;
GRANT SELECT ANY TABLE TO DRS;
GRANT SELECT ANY VIEW TO DRS;
GRANT SELECT ANY DICTIONARY TO DRS;
GRANT ALTER ANY TABLE TO DRS;
GRANT INSERT ANY TABLE TO DRS;
GRANT DELETE ANY TABLE TO DRS;
GRANT UPDATE ANY TABLE TO DRS;
GRANT DROP ANY TABLE TO DRS;
GRANT COMMENT ANY TABLE TO DRS;
image.png
验证用户权限
SELECT PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE = ‘DRS’;
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE = ‘DRS’;
image.png

#6.添加数据源
登录DMDFM,左侧导航栏点击 数据源管理–>关系数据库–>新增数据源
image.png
分别填写源Oracle库信息
image.png
目的DM库信息
image.png
在填写信息之后,点击测试连接,若测试通过,则信息正确
同时预检查,可以察看哪些要求是需要开启的
image.png
可根据需要去进行配置和修改

7.安装DRS

7.1远程自动安装

DRS 服务是 DMDFM 平台执行数据同步的核心引擎,需分别在 Oracle 源库主机和 DM 目的库主机上完成安装部署。安装完成后,各节点上的 DRS 服务将协同工作,实现数据的实时同步。
在DMDFM平台,导航栏–运维–服务管理–远程安装DMDRS,上传版本,填写相关信息,即可远程安装
image.png
如果无法远程安装,参考以下手动安装

7.2手动安装DRS

将安装包上传到机器后,此处采用dmdrs_rev218265_x86_rh6_64_20260409.bin文件
cd /home/oracle # Oracle 机器
cd /home/dmdba # DM 机器

添加执行权限

chmod +x dmdrs_rev218265_x86_rh6_64_20260409.bin

执行静默安装

./dmdrs_rev218265_x86_rh6_64_20260409.bin -i
ls -la /home/oracle/dmdrs5/bin/drsvr # 确认可执行文件存在

配置服务脚本
cd /home/oracle/dmdrs5/bin # 进入 bin 目录
cp service_template/TemplateService DrsService
修改服务脚本参数
vi DrsService
Oracle 源端配置:
INSTALL_HOME=/home/oracle/dmdrs5
PROG_DIR=/home/oracle/dmdrs5/bin
CONF_PATH=/home/oracle/dmdrs5/bin/cpt.xml
NEED_LIB_PATH=/opt/oracle/product/19c/dbhome_1/lib # Oracle 客户端库路径
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”

DM 目的端配置:
INSTALL_HOME=/home/dmdba/dmdrs5
PROG_DIR=/home/dmdba/dmdrs5/bin
CONF_PATH=/home/dmdba/dmdrs5/bin/exec.xml
NEED_LIB_PATH=/home/dmdba/dmdbms/bin # DM 数据库 bin 目录
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”

添加执行权限:
chmod +x DrsService
创建配置文件
Oracle 源端配置文件(cpt.xml)
vi /home/oracle/dmdrs5/bin/cpt.xml
<?xml version=“1.0” encoding=“UTF-8”?>
<drs>
<base>
<mgr_port>5346</mgr_port>
<siteid>2</siteid>
</base>
<cpt>
<name>cpt_oracle</name>
<login>
<dbtype>oracle</dbtype>
<server>192.168.244.146</server>
<user>DRS</user>
<pwd>Oracle123!</pwd>
<port>1521</port>
<service>ORCLPDB1</service>
</login>
</cpt>
</drs>

DM 目的端配置文件(exec.xml)
vi /home/dmdba/dmdrs5/bin/exec.xml

<?xml version=“1.0” encoding=“UTF-8”?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>1</siteid>
</base>
<exec>
<name>exec_dm8</name>
<login>
<dbtype>dm8</dbtype>
<server>192.168.244.139</server>
<user>DRS</user>
<pwd>Dmdba123!</pwd>
<port>5237</port>
</login>
</exec>
</drs>
启动 DRS
cd /home/oracle/dmdrs5/bin # 或 /home/dmdba/dmdrs5/bin
./DrsService start
./DrsService status
验证端口监听
ss -tlnp | grep 5346 # 源端
ss -tlnp | grep 5345 # 目的端
纳管已安装的 DRS 到 DMDFM 平台
此时在代理机器上手动安装的DRS,在DFM平台上无法识别,我们需要手动将其纳入DFM平台的管理中。

vi /home/dmdba/dmdfm5/conf/services.xml # 路径可能因版本而异
<service>
<id>1</id>
<ip>192.168.244.146</ip>
<install_path>/home/oracle/dmdrs5</install_path>
<drs_port>5346</drs_port>
<status>1</status>
</service>

重启 Web 服务
cd /home/dmdba/dmdfm5/web
./DfmWebService restart

8.开始同步

来到DMDFM平台,检查数据源,测试连接,并启动代理
image.png
image.png
创建同步工程:左侧导航栏–同步工程概括–新建工程—输入工程名称和描述
image.png
image.png
点击部署服务
image.png
点击启动,启动之后,如果同步处于运行中,即可开始装载数据
image.png
选择装载类型和装载的对象
image.png
image.png
点击立即装载之后,可以见到装载成功。
image.png
此时数据已经装载成功。
可以通过查看装载日志,检查是否存在问题
image.png

9.测试

Oracle源库存在两条测试数据
image.png
DM目的库现在同image.png样存在了两条测试数据
在Oracle源库插入一条数据
image.png
直接去DM目的库查询,同样可以查询到新插入的数据
image.png
至此,dmdfm的安装部署,oracle到DM的同步实践已经完成。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服