使用版本:dmdrs_V5.3.1.7_rev231065_x86_win_64_20260902_sp3
包形态:执行码(免安装)版,解压即用,无安装向导。
操作系统:windows部署在源端,数据库为Oracle
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服务,均需管理员身份运行。
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
DRS基于Oracle 日志(在线日志 + 归档日志)解析,因此源库必须:
$ 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;
把 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生成密文的提示),明文也能跑,生产建议加密。
[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"
cd /d D:\dmdrs
drsvr.exe
drsvr.exe启动后读取当前目录 drs.xml,进入交互控制台。看到 Server start up, current version: …即启动成功。
前台运行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
文章
阅读量
获赞
