注册
DRS 常用命令、装载掩码学习
专栏/技术分享/ 文章详情 /

DRS 常用命令、装载掩码学习

歪比巴卜 2026/09/04 63 0 0
摘要

DRS 常用命令、装载掩码学习

1. 命令中的占位符

占位符 含义 示例
<CPT_NAME> 源端 CPT 模块名 link_all
<EXEC_NAME> 目标端 EXEC 模块名 node9
<SITE_ID> 目标端站点号 7
<SCHEMA> 模式名 DMDRS
<TABLE> 表名 PRODUCTS
<LOAD_MASK> 装载掩码 TRUNCATE|INSERT

执行命令前,建议先确认模块名和状态,避免把源端命令发到目标端,或操作错误链路。

2. DRS 常用命令

2.1 Manager 通用检查命令

命令 用途
show mods mod 查看模块名、类型、运行状态和启动时间
show version 查看 DRS 版本
show liclic 查看许可证有效期、客户名、编号和授权类型
show io 查看模块之间的 IO/连接信息

日常巡检检查是否存在时间同步延迟等。

2.2 链路启动、停止和重启

启动

# 目标端
./DrsService start
./drcsl
connect
start <EXEC_NAME>
show mod
show <EXEC_NAME> state

# 源端
./DrsService start
./drcsl
connect
start <CPT_NAME>
show mod
show <CPT_NAME> state

停止

# 源端控制台
stop <CPT_NAME>
show mod

# 目标端控制台
stop <EXEC_NAME>
show mod

# 源端和目标端操作系统
./DrsService stop

重启后检查

./DrsService restart
show mod
show <CPT_NAME> state
show <EXEC_NAME> state

重启后还应检查日志、检查点和同步延迟,不能只确认进程存在。

2.3 源端 CPT 状态命令

命令 用途
show &lt;CPT_NAME> state 查看 CPT 与对端总体统计信息
show &lt;CPT_NAME> read 查看归档/在线日志读取信息
show &lt;CPT_NAME> parse 查看日志解析信息
show &lt;CPT_NAME> parse main 查看并行解析主线程信息
show &lt;CPT_NAME> parse child 查看并行解析子线程信息
show &lt;CPT_NAME> send 查看日志发送状态和进度
show &lt;CPT_NAME> trx 查看源端事务信息
show &lt;CPT_NAME> ckpt 查看源端检查点和日志 LSN
show &lt;CPT_NAME> log arch 查看归档日志文件信息
show &lt;CPT_NAME> log online 查看在线日志文件信息

2.4 目标端 EXEC 状态命令

命令 用途
show &lt;EXEC_NAME> state 查看 EXEC 总体统计信息
show &lt;EXEC_NAME> &lt;SITE_ID> state 查看指定站点详细状态
show &lt;EXEC_NAME> info 查看接收、消费和站点信息
show &lt;EXEC_NAME> ckpt 查看目标检查点、执行时间和磁盘占用
show &lt;EXEC_NAME> group 查看所有执行分组
show &lt;EXEC_NAME> group &lt;GROUP_ID> 查看指定分组
show &lt;EXEC_NAME> thr 查看非装载工作线程
show &lt;EXEC_NAME> thr load 查看装载工作线程
show &lt;EXEC_NAME> thr trx 查看工作线程队列中的事务
show &lt;EXEC_NAME> thr curtrx 查看当前正在执行的事务
show &lt;EXEC_NAME> trx 查看活动事务
show &lt;EXEC_NAME> dict 查看同步表字典
show &lt;EXEC_NAME> dict &lt;ID> 查看指定字典结构
show &lt;EXEC_NAME> stor 查看 LOG、DICT、CACHE 等目录空间
show &lt;EXEC_NAME> conf 查看配置项、当前值和默认值

2.5 添加同步表:全量装载后自动增量同步

# 添加单表
alter <CPT_NAME> add table "sch.name='<SCHEMA>' and tab.name='<TABLE>'" <LOAD_MASK>

# 添加整个模式
alter <CPT_NAME> add table "sch.name='<SCHEMA>'" <LOAD_MASK>

# 添加两个模式
alter <CPT_NAME> add table "sch.name='<SCHEMA_A>' or sch.name='<SCHEMA_B>'" <LOAD_MASK>

# 按表名前缀添加
alter <CPT_NAME> add table "sch.name='<SCHEMA>' and tab.name like 'T%'" <LOAD_MASK>

常规重建目标表并进入增量同步的示例:

alter <CPT_NAME> add table "sch.name='<SCHEMA>' and tab.name='<TABLE>'" DROP|CREATE|INSERT|INDEX|TABLE|CHECK|GROUP

ADD TABLE 会同时处理全量和增量:全量装载期间,增量数据先在目标端缓存;全量成功并激活表后,再继续执行增量。

2.6 仅做全量迁移

只需要迁移全量数据、不需要后续增量时,使用 CP,不要用它替代 ADD TABLE 的全量加增量流程。

# 装载表或对象,具体对象类型按手册填写
CP <CPT_NAME> "<OBJ_FILTER>" <LOAD_MASK> <OBJ_TYPE>

# 对象装载示例
cp <CPT_NAME> "sch.name='<SCHEMA>' and obj.name='<OBJECT_NAME>'" CREATE VIEW

2.7 装载状态与失败定位

命令 用途
show &lt;CPT_NAME> load status last 查看最近一次装载总体状态和掩码
show &lt;CPT_NAME> load table running 查看正在装载的表
show &lt;CPT_NAME> load table error 查看装载失败表和错误原因
show &lt;CPT_NAME> load table all 查看全部装载表信息
show &lt;CPT_NAME> load table last 查看所有表最后一次装载结果
show &lt;CPT_NAME> load table &lt;SCHEMA>.&lt;TABLE> 查看指定表总体装载信息
show &lt;CPT_NAME> load group &lt;SCHEMA>.&lt;TABLE> 查看指定表分组装载信息
show &lt;CPT_NAME> load group last &lt;SCHEMA>.&lt;TABLE> 查看指定表最后一次分组结果
show &lt;CPT_NAME> load dict all 查看装载字典历史
show &lt;CPT_NAME> load dict last 查看装载字典最新信息

2.8 停止装载、续装和删除装载记录

# 停止当前 CPT 的全部装载
alter <CPT_NAME> stop load

# 停止指定表装载
alter <CPT_NAME> stop table <SCHEMA>.<TABLE>

# 对最近失败的装载执行续装,但是要等之前的装载操作完成
alter <CPT_NAME> continue load

# 也可对指定表使用 CONTINUE 掩码
alter <CPT_NAME> add table "sch.name='<SCHEMA>' and tab.name='<TABLE>'" CONTINUE

# 删除装载历史记录
alter <CPT_NAME> delete load_record

2.9 字典和同步表管理

# 添加增量同步字典,不执行全量装载
alter <CPT_NAME> add dict "sch.name='<SCHEMA>' and tab.name='<TABLE>'"

# 按数据库最新表结构更新字典
alter <CPT_NAME> update dict "sch.name='<SCHEMA>' and tab.name='<TABLE>'"

# 仅删除源端字典,停止源端解析和发送该表
alter <CPT_NAME> delete dict <SCHEMA>.<TABLE>

# 删除源端字典,并通知目标端清理对象信息
alter <CPT_NAME> terminate dict <SCHEMA>.<TABLE>

# 目标端直接终止同步对象
alter <EXEC_NAME> terminate site <SITE_ID> obj <SCHEMA>.<TABLE>

TERMINATE DICT 需要目标端 EXEC 处于启动和可连接状态;DELETE DICT 不依赖目标端在线。

2.10 字典和 LSN 检查

# 设置起始 LSN 为数据库当前最新日志位置
alter <CPT_NAME> set lsn

# 查看离线字典
show <CPT_NAME> dict all
show <CPT_NAME> dict <SCHEMA>.<TABLE>

# 检查离线字典
show <CPT_NAME> dict check
show <CPT_NAME> dict check <SCHEMA>.<TABLE>

# 查看指定表字典版本及最小 LSN
show <CPT_NAME> table version <SCHEMA>.<TABLE>

2.11 动态修改映射

# 添加表映射
alter <CPT_NAME> add map table "<SRC_SCHEMA>.*==<DST_SCHEMA>.*"

# 删除表映射
alter <CPT_NAME> delete map table "<SRC_SCHEMA>.*==<DST_SCHEMA>.*"

# 确认修改并生效
alter <CPT_NAME> confirm

# 取消尚未生效的修改
alter <CPT_NAME> cancel

动态修改前备份 drs.xml,执行 confirm 前复核源/目标方向、对象类型和黑白名单规则。

3. 装载掩码说明

3.1 基本语法和默认掩码

ALTER [<CPT_NAME>] ADD TABLE "<FILTER>" [<LOAD_MASK>]

未显式指定装载掩码时,默认值为:

CREATE|INSERT|INDEX|TABLE|CHECK|GROUP

装载掩码用 | 组合。掩码并非越多越好,应根据“是否删除目标表、是否创建对象、是否装数据、是否并行、是否含大对象、是否需要续装”选择。

3.2 对象和数据类掩码

掩码 作用 使用提醒
CREATE 在目标端创建对象 目标对象已存在会报错;异构场景会进行类型映射
DROP 删除目标对象 重装表时应与 CREATE|INSERT 等组合,不要对同步表单独执行
TRUNCATE 保留表结构并清空数据 目标表存在独立数据时禁止使用
INSERT 装载表数据 数据装载的主要掩码,默认会对源表加 S 锁
UPDATE 更新目标端已有行 常与 LOBGROUP 组合,用于补装大对象等场景
TABLE 指定对象类型为表 CREATE 未指定对象类型时默认按表处理
INDEX 创建或删除索引 CREATEDROP 组合
CHECK 创建或删除 CHECK 约束 CREATEDROP 组合
FOREIGN 装载外键 可能降低执行性能并引发线程死锁
NDEFAULT 建表时不装载列默认值 CREATE|TABLE 组合
UNIQUE_KEY 主键和唯一约束随建表创建 会增加插入阶段的索引维护成本

3.3 性能和大对象类掩码

掩码 作用 使用提醒
GROUP 将单表拆分为多组并行装载 数值含义随源数据库变化
GROUPS|n 按指定组数分组 范围 1~1000
ROWS|n 设置批量读取行数 最大 10000;未指定时为 250
FAST 使用 DM8 DPI FLDR 或 Oracle OCI DIRPATH 快装 双向和环形不支持;目标为 DM 时故障不支持续传
DELAY 先装普通数据,再更新超过 4000 字节的大对象 不与 EXCHANGE 同用
NOLOB 跳过大对象数据 INSERTUPDATE 组合
LOB UPDATE 组合更新大对象 无主键表可能出现全表扫描,建议评估 ROWID 辅助
ROWID 建表时创建 ROWID 辅助映射 CREATE 组合
EXCHANGE 通过交换分区装载 不与 DELAY 同用

3.4 锁、一致性和续装类掩码

掩码 作用 使用提醒
NOLOCK 装载查询前不对源表加 S 锁 可降低业务阻塞,但可能导致全量快照不一致
WAIT 获取表锁时强制等待 NOLOCK 同用时失效;
TRY|n 表锁失败后重试 n 次 适合短时锁冲突
FLASHBACK 使用闪回查询获取一致性数据 需要闪回权限;长事务可能阻塞装载
SAME 所有闪回分组使用同一 LSN FLASHBACK 组合
CONTINUE 续装最近失败的表或分组 部分装载掩码不支持续装
WHERE|"条件" 只装载满足条件的数据 分区表与 GROUP 组合受限
TIME 检查并替换非法日期时间 后续增量需开启 enable_check_date,否则可能不一致
FORCE 忽略入库错误并强制激活同步 可能造成两端不一致

3.5 数据库专用掩码

掩码 作用 使用提醒
PDB|"名称" 指定容器数据库 容器数据库使用
CDCCDC|1 开启 SQL Server 库级/表级 CDC 应先确认现有 CDC 状态
CDC|0 关闭对应 CDC 可能影响其他表,执行前核对库级和表级 CDC

3.6 GROUP 后面的数字代表什么

源数据库 数字含义 默认值和范围
MySQL 每个表分成多少组 默认 4;仅唯一整型主键表能够有效并行
支持 SF_GET_TABLE_GROUP_INFO_BY_ROWS 的 DM8 每组达到多少行 最小 5000,默认 100000
Oracle 每达到多少数据块分一组 最小 2048,默认 10000;含大对象时默认 3000

3.7 常见组合

常规新表:创建结构、装数据并进入增量

DROP|CREATE|INSERT|INDEX|TABLE|CHECK|GROUP

DROP 会删除目标表,必须先备份并确认目标端不存在独立业务数据。

保留目标表结构,清空后重装

TRUNCATE|INSERT|GROUP

目标表为空,只装数据

INSERT|GROUP

大对象较多

CREATE|INSERT|GROUP|DELAY

无主键表且环境满足 ROWID 限制

DROP|CREATE|ROWID|INSERT|GROUP

使用闪回避免长时间等待 S 锁

INSERT|GROUP|FLASHBACK|SAME

需要数据库闪回权限,并确认源库长事务不会长期阻塞闪回装载。

补装大对象

UPDATE|LOB|GROUP

最近失败表续装

CONTINUE

4. 常见问题与解决方法

4.1 DELETE DICTTERMINATE DICT 有什么区别?

  • DELETE DICT:删除源端字典,源端停止解析和发送该表;不要求 EXEC 在线。
  • TERMINATE DICT:除删除源端字典外,还通知目标端停止并清理该表对象信息;要求 EXEC 在线且链路可连接。

4.2 DRS在装载的过程中执行了start有影响么

不影响,drs支持装载和同步进程同时启动,在同步的过程中会判断表是否在装载队列,如果在装载队列,该表的增量会保存在检查点文件中,只有装载成功激活表之后才会进行增量同步,注意装载失败如果激活失败,检查点文件会堆积无法删除,需要手动的terminate或者重装该表,执行端可以查看s exec group 32767查看是否存在装载失败导致卡检查点的表

4.3 MySQL 远程读报 send dump log failed

现场案例的原因是远程读功能和 libdrcmysql.so 实际加载了不同版本的 libmysqlclient.so

ldd <DRS_BIN_DIR>/libdrcmysql.so | grep -i mysql
ldd <MYSQL_REMOTE_READ_LIB> | grep -i mysql

先备份原动态库,按 DRS 与 MySQL 的支持矩阵统一客户端库和 LD_LIBRARY_PATH,重启后验证日志读取和检查点推进。

4.4 DRS 如何配置黑白名单、表映射、列过滤和操作过滤?

DRS 与 DMHS 的配置方式不同:DRS 主要通过 map 同时配置同步对象范围和源/目标映射,disable=1 表示禁用规则,可用于黑名单;item 中的对象类型还会影响 DDL 对象过滤。

alter <CPT_NAME> add map table "<SRC_SCHEMA>.*==<DST_SCHEMA>.*"
alter <CPT_NAME> confirm

现场 FAQ 说明,DRS 不能直接在 map 中配置 DMHS 式操作过滤和列值过滤;此类转换逻辑应通过 DRS 语言/CVT 实现。修改前应备份配置并检查映射方向,修改后验证 INSERT、UPDATE、DELETE 及需要同步的 DDL。

4.5 字典 LSN、装载 LSN 和目标端 commit_lsn 分别代表什么?

  • 字典 LSN: 源端字典文件会保存多个字典版本;每个版本的 LSN 表示生成该版本字典时的日志位置。表结构发生 DDL 变化后,新旧日志需要使用与其时间点匹配的字典版本解析。
  • 装载 LSN/SCN: 表开始装载时从源数据库取得当前日志位置,并以该时点的一致性视图读取全量数据。以 Oracle 为例,现场资料提到通过数据库当前 SCN 建立装载起点;该值不是表装载结束时的 LSN。
  • 目标端 commit_lsn 记录源端事务的提交 LSN,用于故障恢复时判断哪些事务已经同步完成。

4.6 建表和插入数据能否分开执行?

可以先创建目标表,再单独装载数据,但如果表含主键,建表会自动添加主键,后续装载数据会有性能损失。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服