注册
DRS工具同步Oracle到达梦
专栏/技术分享/ 文章详情 /

DRS工具同步Oracle到达梦

崔小卡 2026/10/10 207 0 0
摘要

一、概述

本文档主要介绍异构DMDRS同步部署,源端为oracle11g的RAC环境,目的端为DM8的dw 环境的主库。DRS软件分别部署在源端和目标端,使用DMDRS实现全量数据装载和索引创建,开启DMDRS同步功能实现ORACLE到达梦的数据实时同步。我们采用命令行搭建DRS服务

二、DMDRS软件安装

注意:为避免出现环境变量问题,ORACLE端DMDRS安装及使用统一用oracle用户操作,DM端DMDRS安装及使用统一用dmdba用户操作。
(1)创建目录

mkdir -p /db/soft
mv dmdrs_rev221722_x86_rh6_64_20260529.bin /db/soft
chmod 755 /db/soft/dmdrs_rev221722_x86_rh6_64_20260529.bin
chown -R dmdba:dinstall /db/dmdrs

(2)安装

Extract install files.........
Please select the installer's language (E/e:English C/c:Chinese)[E/e]:c
-----------欢迎使用达梦数据复制软件安装工具-----------
输入[exit]可退出安装。
-----------安装目录-----------
指定安装目录[/home/dmdba/dmdrs5]:/db/dmdrs
-----------安装组件-----------
请选择需要安装的组件
1.安装达梦数据融合管理平台
2.安装代理
请选择安装组件数字序号(使用空格间隔):
未选择组件
确认?[Y/y(确认选择) or N/n(重新选择)]:y
-----------许可证文件-----------
1.免费试用达梦数据复制软件(必须在试用期范围内使用,反复安装无效,使用时间为3个月)
2.使用许可证文件
指定许可证文件(1,2)[1]:1
免费试用许可证文件限制信息如下:
有效日期:2026-04-13
版本类型:试用版
许可证编号:dm66n367
授权顾客名称:DEVELOP USER
当前选择为免费试用,是否继续安装?[Y/y or N/n]:y
-----------配置-----------
数据库驱动路径配置 -数据库驱动路径[/db/dmdbms/bin]:
-----------安装小结-----------
安装目录:[/db/dmdrs]
数据库驱动路径:[/db/dmdbms/bin]
所需磁盘空间/可用磁盘空间:[2,121 MB/7,276,014 MB]
确认安装?[Y/y or N/n]:y
-----------安装中-----------
server   正在安装 ...   server   安装完成.
default   正在安装 ...   default   安装完成.
doc   正在安装 ...   doc   安装完成.
安装成功
-----------安装总结-----------
达梦数据复制软件V5安装完成
更多安装信息,请查看安装日志文件:/db/dmdrs/log/install.log

三、DRS队列搭建提前准备

1.数据库同步用户&同步用户权限规划

注意:如果数据库管理员已赋予DMDRS同步用户DBA权限,则不需要配置数据库同步用户最小权限。
源端Oracle

CREATE USER DMDRS IDENTIFIED BY "Dameng#123" account unlock;
grant connect,resource to dmdrs;
grant dba to DMDRS ;
权限可以参照用户手册赋予最小授权。
================
赋予最小权限:
-- ## 基础权限
-- 需要创建会话权限
GRANT CONNECT TO DMDRS;
-- ## 装载相关权限
-- 需要非同步用户下待装载表/序列的查询权限
GRANT SELECT ON <待装载表/序列的模式名>.<待装载表名/序列名>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;
-- 若需要同步XMLTYPE类型的数据,需要将XDB模式下XDB$TTSET、表名开头为X$NM和X$QN的表的查询权限赋予用户。若使用可插拔数据库,管理员用户需先切换到可插拔数据库再授权
GRANT SELECT ON XDB.XDB$TTSET TO DMDRS;
GRANT SELECT ON XDB.<以X$NM开头的表名> TO DMDRS;
GRANT SELECT ON XDB.<以X$QN开头的表名> TO DMDRS;

源端grid用户

sqlplus / as sysasm
CREATE USER asm_dmdrs IDENTIFIED BY "Dameng#123";
grant sysdba to asm_dmdrs;
grant sysasm to asm_dmdrs;

目标端达梦

create tablespace DMDRS datafile '/db/data/XJDB/dmdrs01.dbf' size 256 autoextend on CACHE=NORMAL;
create user DMDRS identified by "Dameng#123" default tablespace "DMDRS";
grant dba to DMDRS ;
赋予最小权限:
-- ## 基础权限
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMDRS;
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
GRANT RESOURCE TO DMDRS;
-- 需要查询数据库的相关参数信息、系统表字典信息
GRANT SOI,VTI TO DMDRS;
-- 需要创建会话权限
GRANT CREATE SESSION TO DMDRS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT UPDATE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT DELETE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT SELECT ON <目标序列的模式名>.<目标序列名> TO DMDRS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
-- 需要非同步用户模式下创建表注释的权限
GRANT COMMENT ANY TABLE TO DMDRS;
-- 需要非同步用户模式下对象的DDL权限
GRANT CREATE ANY <对象类型> TO DMDRS;
GRANT ALTER ANY <对象类型> TO DMDRS;
GRANT DROP ANY <对象类型> TO DMDRS;
-- 需要非模式对象(表空间、用户、角色和公共同义词)的DDL权限
GRANT CREATE <对象类型> TO DMDRS;
GRANT ALTER <对象类型> TO DMDRS;-- 角色和公共同义词不需要此权限
GRANT DROP <对象类型> TO DMDRS;
-- 需要赋予同步用户辅助存储过程的执行权限以及非同步用户下模式所属用户的存储过程的创建权限
GRANT EXECUTE ON PROCEDURE "DRS_$DDL_SQL_PROC" TO DMDRS;
GRANT CREATE PROCEDURE TO <非同步用户下模式所属的用户>;

2.开启源端数据库归档和逻辑日志

使用SQLPlus登录到源数据库。
$ sqlplus / as sysdba

查看数据库归档模式是否开启。若数据库已经开启归档模式,则跳过步骤3~步骤7。
SQL> archive log list;

暂停数据库服务。
SQL> shutdown immediate;

以mount方式启动Oracle数据库服务。
SQL> startup mount;

开启数据库归档,并设置归档文件路径。
SQL> alter database archivelog;
SQL> alter system set db_recovery_file_dest='';
SQL> alter system set log_archive_dest='/oradata/arch';

重启数据库,使归档路径生效。
SQL> shutdown immediate;
SQL> startup mount;

将数据库切换到正常的工作状态。
SQL> alter database open;

查看数据库最小附加日志及全列日志是否开启。
SQL> select supplemental_log_data_min from v$database;
SQL> select supplemental_log_data_all from v$database;

开启数据库最小附加日志及全列日志。
SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data (ALL) columns;

Oracle 11g及以上版本需要开启enable_goldengate_replication参数。
SQL> alter system set enable_goldengate_replication = TRUE;

四.DRS队列搭建

1.配置文件

cpt.xml

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>
        <siteid>1</siteid>
    </base>
    <cpt>
        <name>cpt_1</name>
        <login>
            <dbtype>Oracle</dbtype>
            <server>orcl</server>
            <user>DMDRS</user>
            <pwd>DMDRS</pwd>
        </login>
        <send>
            <ip>192.168.164.129</ip>
            <port>5345</port>
            <target_name>exec_1</target_name>
            <map>
                <item>DMDRS.*==DMDRS.*</item>
            </map>
        </send>
        <table_supplement_log>1<table_supplement_log>
    </cpt>

exec.xml

<drs>
    <base>
        <mgr_port>5345</mgr_port>
        <siteid>2</siteid>
    </base>
    <exec>
        <name>exec_1</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.164.139</server>
            <user>DMDRS</user>
            <pwd>DMDRS</pwd>
        </login>
</exec>
</drs>

2.创建服务启动脚本

源端:
cd /data/dmdrs/bin_cpt
cp service_template/TemplateService DrsService_cpt
目标端:
cd /dm/dmdrs/bin_exec
cp service_template/TemplateService DrsService_exec
修改服务脚本,分别修改为对应的目录和配置文件:

image.png

3.启动服务

目标端

cd /dm/dmdrs/bin_exec
./DrsService_cpt  start

源端

cd /data/dmdrs/bin_cpt1
./DrsService_exec start

4.开始装载数据

进入控制台

cd /db/dmdrs/bin_cpt
./drcsl cpt.xml

连接并开始装载

--连接
connect

--设置起始lsn
alter cpt1 set lsn

--启动同步
start cpt

--开启装载
alter cpt1 add table "sch.name='CHANNELAPP' 

5.查看状态

目标端

--目标端进入控制台
cd /data/dmdrs/bin_exec
./drcsl exec.xml
---查看分组信息
show group
--查看状态
show  thr;
show  state;
---查看日志
tail -200f /data/dmdrs/bin_exec/log/drs_202609.log

源端

----查看启动是否正常状态
show mode;

----查进度
show load status
show load table running

show state

----查看哪些失败及原因
show load table error

----断点续传
alter cpt continue load;
----停止同步
stop cpt1
----查看日志
tail -200f /db/dmdrs/bin_cpt1/log/drs_202609.log
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服