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

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

歪比巴卜 2026/09/04 325 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 mod 或 s mod 查看模块名、类型、运行状态和启动时间
show version 查看 DRS 版本
show lic 或 lic 查看许可证有效期、客户名、编号和授权类型
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 更新目标端已有行 常与 LOB、GROUP 组合,用于补装大对象等场景
TABLE 指定对象类型为表 CREATE 未指定对象类型时默认按表处理
INDEX 创建或删除索引 与 CREATE 或 DROP 组合
CHECK 创建或删除 CHECK 约束 与 CREATE 或 DROP 组合
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 跳过大对象数据 与 INSERT 或 UPDATE 组合
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|"名称" 指定容器数据库 容器数据库使用
CDC、CDC|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 DICT 和 TERMINATE 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 建表和插入数据能否分开执行?

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

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服