注册
DMDRS的使用(执行码版)
专栏/技术分享/ 文章详情 /

DMDRS的使用(执行码版)

zxw 2026/09/30 218 0 0
摘要

DMDRS的使用(执行码版)

使用版本:dmdrs_V5.3.1.7_rev231065_x86_win_64_20260902_sp3
包形态:执行码(免安装)版,解压即用,无安装向导。
操作系统:windows

部署在源端,数据库为Oracle

一、DMDRS软件

DMDRS(DM Data Replication Software,达梦数据复制软件),是一款基于数据库日志分析的实时数据复制工具,用于异构数据库之间的数据同步/迁移(本次场景:Oracle 作为源端,目标端通常为 DM8)。

Oracle(源库,开启归档+附加日志)
   │  日志解析
   ▼
DMDRS 源端服务器:CPT 捕获模块(drcora.dll解析Oracle在线/归档日志)
   │  网络传输(发送到下一级DMDRS服务的mgr_port)
   ▼
DMDRS 目标端服务器:EXEC 执行模块
   ▼
目标数据库(如 DM8)

说明:CPT(捕获)和 EXEC(执行)可以部署在同一台机器,也可以分开部署。生产上通常源端放一台离 Oracle 近的服务器(或 Oracle 本机),目标端放另一台。

什么是附加日志?

​ Oracle的附加日志,是一种机制,指Oracle数据库在重做日志(Redo Log)中记录比默认情况更多的列信息。默认的重做日志主要面向实例恢复,记录的信息量不足以支持基于日志的逻辑分析工具。附加日志的目的是补充这些缺失的信息,以确保逻辑复制、数据同步等操作能准确还原数据变更。

​ 一个UPDATE操作在重做日志中可能只记录被修改的字段和行的ROWID。然而像LogMiner、逻辑备库这类工具,需要基于列数据(如主键) 来定位和同步变更,而不是物理地址ROWID。附加日志就是将主键、唯一键等关键列的信息“附加”到日志流中,使这些工具能够正常工作。

​ 数据库级附加日志:最小附加日志(开启一些工具最低要求)、标识键日志

二、安装包结构

解压后内容:

目录/文件 说明
Release/ 生产用的目录
Debug/ 调试用的目录。带 msvcr100d.dll、vcruntime140_1d.dll等调试运行时

Release的目录内各文件:

可执行程序

程序 作用
drsvr.exe 主服务程序。读取当前目录下的drs.xml,启动各功能模块。
drcsl.exe 控制台客户端,连接运行中的 DRS 管理服务(mgr_port),执行 start/stop/status 等命令
dm_svc.exe/ dm_svc_ctl.exe Windows 服务封装器,把 DRS 注册为系统服务(被 service_template 里的 bat 调用)
drs_test.exe、test_tool.exe 测试/工具程序
drdgtool.exe 诊断信息收集工具
drbkptool.exe 断点/备份相关工具
drlang.exe 语言资源工具

功能模块 DLL(按前缀区分)

前缀 含义 当前环境
drc*.dll CPT 捕获端数据库插件:drcora.dll=Oracle、drcdm8.dll=DM8、drcmysql.dll=MySQL 等 drcora.dll(Oracle 源端捕获)
dre*.dll EXEC 执行端数据库插件:dreora.dll=Oracle、dredm.dll=DM、drekafka.dll=Kafka 等 目标端是什么库就用什么
db*.dll 数据装载/校验用数据库驱动(dbora.dll 等) 初始装载、数据比对时用
dv*.dll+dvsvr.exe/dvagent.exe DVS 数据比对/校验模块(独立服务) 同步后做数据一致性比对
drcvt_db*.dll 各库之间的数据类型转换插件 Oracle→DM 类型转换用 drcvt_dbora.dll等
op_ddl.dll DDL 操作处理模块 DDL 同步
mgr_dll.dll、drsched.dll、drnet.dll 等 管理、调度、网络等公共模块 —

conf_sample/ 配置样例

样例文件 用途
cpt.xml 单机源端捕获配置样例
cpt_rac.xml Oracle RAC 源端捕获配置样例(含 ASM 登录配置)
cpt_rac_master/slave.xml、cpt_dsc*.xml 多节点/集群捕获
exec.xml 目标端执行配置样例
exec_master/slave.xml、exec_kafka.xml 目标端主备、目标为 Kafka
dvs.xml/dssa.xml/agent.xml/dsched.xml/proxy.xml/arbiter.xml 比对服务、代理、调度等扩展模块

scripts/ 源端数据库准备脚本

ddl_sql_ora.sql 是 Oracle 源端必须执行的脚本。其它如 ddl_sql_dm8.sql、ddl_sql_pg.sql对应别的源库。

service_template/ Windows 服务注册脚本

DrsServiceInstall.bat / Start / Stop / Uninstall.bat四个脚本,把 DRS 注册为名为 DrsService 的Windows服务,均需管理员身份运行。

三、Oracle 源端配置

3.1 环境配置

  1. 把 Release目录整个拷贝到部署目录,如 D:\dmdrs
  2. 保证 Oracle 本机的 bin 在 PATH 里,drcora.dll 依赖 Oracle OCI。把 Oracle Client/Oracle Home 的 bin目录加入系统环境变量 PATH。
  3. 防火墙放行 mgr_port(5345或5346)
PATH=$PATH:$HOME/.local/bin:$HOME/bin
#增加下述环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64:/usr/local/lib:$ORACLE_HOME/bin

3.2 Oracle 数据库设置

DRS基于Oracle 日志(在线日志 + 归档日志)解析,因此源库必须:

  1. 开启归档模式(ARCHIVELOG),且归档日志在同步期间不能被提前删除。
  2. 开启数据库级最小附加日志:
$ 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; 查看数据库最小附加日志及全列日志是否开启。若数据库已经开启最小附加日志及全列日志,则跳过步骤9。 SQL> select supplemental_log_data_min,supplemental_log_data_all from v$database; 开启数据库最小附加日志及全列日志。 SQL> alter database add supplemental log data; SQL> alter database add supplemental log data (ALL) columns; Oracle 12c及以上版本需要开启enable_goldengate_replication参数。 SQL> alter system set enable_goldengate_replication = TRUE;

用SYS用户执行 scripts/ddl_sql_ora.sql,它做三件事:

1创建drs _ddl_sql表 + 数据库级 DDL 触发器drs_trigger(用于捕获 DDL 语句,实现 DDL 同步);

2关闭回收站 alter system set recyclebin=off deferred;(防止回收站对象干扰解析);

3给同步用户授权。

创建 DRS 专用同步用户并授权:

create user DMDRS identified by Dmdrs123456 ; grant dba to DMDRS; grant SELECT any table TO DMDRS; GRANT CONNECT 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; GRANT SELECT ON SYS.METHOD$ TO DMDRS; GRANT SELECT ON SYS.RESULT$ TO DMDRS; GRANT SELECT ON SYS.PARAMETER$ TO DMDRS; GRANT SELECT ON V_$CONTAINERS TO DMDRS; GRANT SELECT ON V_$MANAGED_STANDBY TO DMDRS; GRANT SELECT ON V_$DATAGUARD_CONFIG TO DMDRS; GRANT LOCK ANY TABLE TO DMDRS; GRANT FLASHBACK ANY TABLE to DMDRS; 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; GRANT SELECT ON V_$STANDBY_LOG TO DMDRS; GRANT SELECT ON V_$INSTANCE TO DMDRS; GRANT SELECT ON GV_$INSTANCE TO DMDRS; GRANT SELECT ON XDB.XDB$TTSET TO DMDRS; -- select 'GRANT SELECT ON '||owner||'.'||table_name||' TO DMDRS;' from dba_tables where table_name like 'XDB%'; GRANT SELECT ON XDB.XDB$XIDX_IMP_T TO DMDRS; GRANT SELECT ON XDB.XDB$CDBPORTS TO DMDRS; GRANT SELECT ON XDB.XDB$CHECKOUTS TO DMDRS; GRANT SELECT ON XDB.XDB$COLUMN_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$DBFS_VIRTUAL_FOLDER TO DMDRS; GRANT SELECT ON XDB.XDB$DXPTAB TO DMDRS; GRANT SELECT ON XDB.XDB$D_LINK TO DMDRS; GRANT SELECT ON XDB.XDB$H_INDEX TO DMDRS; GRANT SELECT ON XDB.XDB$IMPORT_NM_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$IMPORT_PT_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$IMPORT_QN_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$IMPORT_TT_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$MOUNTS TO DMDRS; GRANT SELECT ON XDB.XDB$NONCEKEY TO DMDRS; GRANT SELECT ON XDB.XDB$PATH_INDEX_PARAMS TO DMDRS; GRANT SELECT ON XDB.XDB$REPOS TO DMDRS; GRANT SELECT ON XDB.XDB$ROOT_INFO TO DMDRS; GRANT SELECT ON XDB.XDB$TSETMAP TO DMDRS; GRANT SELECT ON XDB.XDB$TTSET TO DMDRS; GRANT SELECT ON XDB.XDB$XDB_READY TO DMDRS; GRANT SELECT ON XDB.XDB$XIDX_PARAM_T TO DMDRS; GRANT SELECT ON XDB.XDB$XIDX_PART_TAB TO DMDRS; GRANT SELECT ON XDB.XDB$XTAB TO DMDRS; GRANT SELECT ON XDB.XDB$XTABCOLS TO DMDRS; GRANT SELECT ON XDB.XDB$XTABNMSP TO DMDRS; GRANT SELECT ON XDB.XDB_INDEX_DDL_CACHE TO DMDRS; grant select on v_$database to dmdrs; grant select on v_$log to dmdrs; grant select on v_$logfile to dmdrs; grant select on v_$archived_log to dmdrs; grant select on v_$archive_dest to dmdrs; grant select on v_$transaction to dmdrs; grant select any table to dmdrs;

3.3 源端 drs.xml

把 conf_sample/cpt.xml复制到 Release/目录下并重命名为 drs.xml,改成实际参数:

<?xml version="1.0" encoding="UTF-8"?> <drs> <base> <mgr_port>5345</mgr_port> <!-- 本机 DRS 管理端口,防火墙需放行 --> <siteid>1</siteid> <!-- 站点号,整条链路内唯一 --> <mem_size>8<mem_size> </base> <cpt> <name>cpt_oracle</name> <!-- 捕获模块名,自定义 --> <login> <dbtype>oracle</dbtype> <!-- Oracle 源端固定写 oracle --> <server>192.168.1.10:1521/orcl</server> <!-- IP:端口/服务名(SERVICE_NAME) --> <user>DMDRS</user> <pwd>密码</pwd> </login> <load> <enable>1</enable> <load_thr>64</load_thr> <nets>1</nets> </load> <send> <ip>192.168.1.20</ip> <!-- 目标端 DRS 服务器的 IP --> <port>5345</port> <!-- 目标端 DRS 的 mgr_port --> <target_name>exec_dm8</target_name> <!-- 目标端 EXEC 模块名,必须与目标端配置一致 --> <map> <!-- 对象映射:源模式.源表==目标模式.目标表,支持 *.*==*.* 全量映射 --> <item>SCOTT.*==SCOTT.*</item> </map> </send> </cpt> </drs>

要点:

<siteid>两端不能相同(比如源端 1、目标端 2)。

<map><item> 决定同步哪些表,多个 item 可写多行;.==*.*表示全部模式全部表。

密码支持加密密文(控制台提供help encrypt生成密文的提示),明文也能跑,生产建议加密。

3.4 目标端操作

[dmdba@ ~]$ cat .bash_profile 
# Source /root/.bashrc if user has one
[ -f ~/.bashrc ] && . ~/.bashrc

export LD_LIBRARY_PATH=$DM_HOME/bin:/usr/lib:/usr/lib64
export DM_HOME=/dm/dmdbms
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
#增加下述环境变量
export LD_LIBRARY_PATH=$DM_HOME/bin:/usr/lib:/lib:/usr/lib:/usr/lib64:/usr/local/lib:$LD_LIBRARY_PATH

安装drs软件(非执行码版本的情况下)

# 安装drs
[oracle@ soft]$cd /soft
[oracle@ soft]$ ./dmdrs_rev229171_x86_rh6_64_20260804.bin -i
安装代理

创建用户赋予权限

create user DMDRS identified by Dmdrs123456 ;
GRANT DBA TO DMDRS;
GRANT RESOURCE TO DMDRS;
GRANT CREATE SESSION TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
GRANT CREATE SYNONYM TO DMDRS;
GRANT DROP PUBLIC SYNONYM TO DMDRS;
GRANT CREATE PUBLIC SYNONYM TO DMDRS;
GRANT CREATE TABLE TO DMDRS;
GRANT ALTER TABLE TO DMDRS;
GRANT DROP TABLE TO DMDRS;
GRANT CREATE VIEW TO DMDRS;
GRANT ALTER VIEW TO DMDRS;
GRANT DROP VIEW TO DMDRS;
GRANT CREATE MATERIALIZED VIEW TO DMDRS;
GRANT ALTER MATERIALIZED VIEW TO DMDRS;
GRANT DROP MATERIALIZED VIEW TO DMDRS;
GRANT CREATE TRIGGER TO DMDRS;
GRANT ALTER TRIGGER TO DMDRS;
GRANT DROP TRIGGER TO DMDRS;
GRANT COMMENT ANY TABLE TO DMDRS;
GRANT CREATE PROCEDURE TO DMDRS;
GRANT SELECT ON SYS.V$DM_INI TO DMDRS;
GRANT SELECT ON V$IFUN TO DMDRS;
GRANT SELECT ON SYS.V$LOCK TO DMDRS;
GRANT SELECT ON SYS.V$SESSIONS TO DMDRS;
GRANT SELECT ON SYS.V$TABLESPACE TO DMDRS;
GRANT SELECT ON SYS.DBA_DATA_FILES TO DMDRS;
GRANT SELECT ON SYS.V$TRX TO DMDRS;
GRANT SELECT ON SYS.V$RLOG TO DMDRS;
GRANT SELECT ON SYS.V$MAL_LINK_STATUS TO DMDRS;
GRANT SELECT ON SYS.V$PARAMETER TO DMDRS;
GRANT SELECT ON SYS.V$DATABASE TO DMDRS;
GRANT SELECT ON SYS.DBA_OBJECTS TO DMDRS;
GRANT SELECT ON SYS.DBA_USERS TO DMDRS;
GRANT SELECT ON SYS.DBA_ROLES TO DMDRS;
GRANT SELECT ON SYS.DBA_ROLE_PRIVS TO DMDRS;
GRANT SELECT ON SYS.DBA_TAB_PRIVS TO DMDRS;
GRANT EXECUTE ON SYS.UTL_FILE TO DMDRS;
GRANT EXECUTE ON SYS.DBMS_LOB TO DMDRS;
GRANT EXECUTE ON SYS.DBMS_PIPE TO DMDRS;

把 conf_sample/exec.xml复制为目标端的 drs.xml:(非执行码文件不用改名字)

<?xml version="1.0" encoding="UTF-8"?> <drs> <base> <mgr_port>5345</mgr_port> <siteid>2</siteid> <mem_size>8<mem_size> </base> <exec> <name>exec_dm8</name> <!-- 必须等于源端 send 里的 target_name --> <login> <dbtype>dm8</dbtype> <server>192.168.1.20</server> <user>DMDRS</user> <pwd>DMDRS</pwd> <port>5236</port> </login> </exec> </drs>

目标库也要按 scripts/ddl_sql_dm8.sql准备同步用户。

配置目标端服务

[dmdba@  ~]$ cd /home/dmdba/dmdrs5/bin
[dmdba@ bin]$ cp./service_template/TemplateService ./DrsService
[dmdba@ bin]$ vi DrsService 
...

#set execute environment
#REPLACE INSTALL_HOME path
INSTALL_HOME=/home/dmdba/dmdrs5
#REPLACE program dir
PROG_DIR=/home/dmdba/dmdrs5/bin
#REPLACE program config path
CONF_PATH=/home/dmdba/dmdrs5/bin/exec.xml
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=_REPLACE_SELF_NEED_LIB_PATH

#REPLACE program name, drsvr/dssvr/dvsvr
EXEC_PROG_NAME=drsvr
#REPLACE service type,  drs server/dss server/dvs server
SERVICE_TYPE_NAME="drs server"

四、启动与运行

方式 A:控制台前台运行

cd /d D:\dmdrs drsvr.exe

drsvr.exe启动后读取当前目录 drs.xml,进入交互控制台。看到 Server start up, current version: …即启动成功。

方式 B:注册为 Windows 服务

  1. 把 service_template下 4 个 DrsService*.bat复制到Release同级部署目录(
  2. 右键 → 以管理员身份运行 DrsServiceInstall.bat(内部调用 dm_svc_ctl.exe -install,注册名为DrsService的服务)。
  3. DrsServiceStart.bat启动 / DrsServiceStop.bat停止 / DrsServiceUninstall.bat卸载。

控制台常用命令

前台运行drsvr.exe后,或用drcsl.exe连接管理服务后:

命令 作用
start cpt 启动捕获(开始解析 Oracle 日志)
stop cpt 停止捕获
status 查看模块运行状态、LSN/解析位点

迁移全量执行的命令顺序(源端):

connect
alter cpt_oracle set lsn;

# 因为已经提前完成目标端用户的创建、表结构、序列等信息的迁移工作,所以本次参数只选择了insert,GROUP|3000为分为3000组并行装载。
alter cpt_oracle add table "sch.name='TSMCIS'" INSERT|GROUP|3000
start cpt_oracle;



# 查看信息
show load table error
show load table running
show load status

#可以有的参数
alter cpt_oracle add table "sch.name='TSMCIS'" INSERT|GROUP|3000

可以有的参数:

对象结构类:

掩码 说明
CREATE 在目标端创建表、约束、索引(建全部)
CREATE_INDEX 创建目标表的非唯一索引
CREATE_UNIQUE 创建目标表的唯一索引
DROP 装载前删除目标端对应对象
REFER 装载后建立参照完整性(外键)约束
OWNER 按对象属主方式装载

数据装载类:

掩码 说明
INSERT 向目标表导入数据(默认行为)
REPLACE 遇到主键冲突时,先删除目标表同主键行再插入
TRUNCATE 装载前清空目标表数据,保留表结构
NOROWS 只建结构,不装载数据
NOLOB 不迁移大对象(LOB)列
DELAY 先迁移非 LOB 列和小 LOB(<4000字节),之后以 UPDATE 方式迁移大 LOB
LOBSEGMENT 装载大对象段
MAP 使用列映射关系装载

装载性能类

掩码 说明
GROUP|N 指定每组行数(如 GROUP|3000)
GROUPCOUNT|N 指定并行装载的组数
GROUPCOMMIT|N 按组提交,每 N 行提交一次
FAST 快速装载模式
DIRECT 直接装载到目标表,跳过部分中间处理
ROWID 按 ROWID(或达梦 rowid/ctid)切分区间分组装载
GROUP 分组并行装载,提高大表迁移速度

装载时机类

掩码 说明
BEFORE 装载前创建表对象
BEFORE_INDEX 装载前创建索引
AFTER 装载完成后创建表对象
AFTER_INDEX 装载完成后创建索引

如果varchar类型和varchar2类型需要映射4倍,char类型需要强制字符存储 drs该怎么设置:

源端执行:

alter exec_dm8 dtype_map Oracle VARCHAR(n)  to dm8 VARCHAR2(4n);
alter exec_dm8 dtype_map Oracle VARCHAR2(n) to dm8 VARCHAR2(4n);
alter exec_dm8 dtype_map Oracle CHAR(n)     to dm8 "CHAR(n CHAR)";

可以查看源端和目标端任务管理器中的 带宽 CPU 内存 磁盘IO情况去判断drs工具有没有跑满。

如果要迁移一批表,里面含大字段和非大字段的,可以把大字段的表筛出来,然后非大字段开启FAST快速装载

alter cpt_oracle add table "sch.name='TSMCIS' and tab.name in ('ACT_EVT_LOG',...全部102张...)" INSERT|DELAY|GROUP|3000;

alter cpt_oracle add table "sch.name='TSMCIS' and tab.name in ('AA_RANGE',...全部2522张...)" INSERT|FAST|GROUP|3000;

--tab.name in (集合中最长含义1000张表格,超过1000张会报过长)

更多其他命令:

-- 停止当前正在同步传输的表(running中的)
alter cpt_oracle stop load

--清空status信息
alter cpt_oracle delete record 
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服