| 占位符 | 含义 | 示例 |
|---|---|---|
<CPT_NAME> |
源端 CPT 模块名 | link_all |
<EXEC_NAME> |
目标端 EXEC 模块名 | node9 |
<SITE_ID> |
目标端站点号 | 7 |
<SCHEMA> |
模式名 | DMDRS |
<TABLE> |
表名 | PRODUCTS |
<LOAD_MASK> |
装载掩码 | TRUNCATE|INSERT |
执行命令前,建议先确认模块名和状态,避免把源端命令发到目标端,或操作错误链路。
| 命令 | 用途 |
|---|---|
show mod 或 s mod |
查看模块名、类型、运行状态和启动时间 |
show version |
查看 DRS 版本 |
show lic 或 lic |
查看许可证有效期、客户名、编号和授权类型 |
show io |
查看模块之间的 IO/连接信息 |
日常巡检检查是否存在时间同步延迟等。
# 目标端
./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
重启后还应检查日志、检查点和同步延迟,不能只确认进程存在。
| 命令 | 用途 |
|---|---|
show <CPT_NAME> state |
查看 CPT 与对端总体统计信息 |
show <CPT_NAME> read |
查看归档/在线日志读取信息 |
show <CPT_NAME> parse |
查看日志解析信息 |
show <CPT_NAME> parse main |
查看并行解析主线程信息 |
show <CPT_NAME> parse child |
查看并行解析子线程信息 |
show <CPT_NAME> send |
查看日志发送状态和进度 |
show <CPT_NAME> trx |
查看源端事务信息 |
show <CPT_NAME> ckpt |
查看源端检查点和日志 LSN |
show <CPT_NAME> log arch |
查看归档日志文件信息 |
show <CPT_NAME> log online |
查看在线日志文件信息 |
| 命令 | 用途 |
|---|---|
show <EXEC_NAME> state |
查看 EXEC 总体统计信息 |
show <EXEC_NAME> <SITE_ID> state |
查看指定站点详细状态 |
show <EXEC_NAME> info |
查看接收、消费和站点信息 |
show <EXEC_NAME> ckpt |
查看目标检查点、执行时间和磁盘占用 |
show <EXEC_NAME> group |
查看所有执行分组 |
show <EXEC_NAME> group <GROUP_ID> |
查看指定分组 |
show <EXEC_NAME> thr |
查看非装载工作线程 |
show <EXEC_NAME> thr load |
查看装载工作线程 |
show <EXEC_NAME> thr trx |
查看工作线程队列中的事务 |
show <EXEC_NAME> thr curtrx |
查看当前正在执行的事务 |
show <EXEC_NAME> trx |
查看活动事务 |
show <EXEC_NAME> dict |
查看同步表字典 |
show <EXEC_NAME> dict <ID> |
查看指定字典结构 |
show <EXEC_NAME> stor |
查看 LOG、DICT、CACHE 等目录空间 |
show <EXEC_NAME> conf |
查看配置项、当前值和默认值 |
# 添加单表
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 会同时处理全量和增量:全量装载期间,增量数据先在目标端缓存;全量成功并激活表后,再继续执行增量。
只需要迁移全量数据、不需要后续增量时,使用 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
| 命令 | 用途 |
|---|---|
show <CPT_NAME> load status last |
查看最近一次装载总体状态和掩码 |
show <CPT_NAME> load table running |
查看正在装载的表 |
show <CPT_NAME> load table error |
查看装载失败表和错误原因 |
show <CPT_NAME> load table all |
查看全部装载表信息 |
show <CPT_NAME> load table last |
查看所有表最后一次装载结果 |
show <CPT_NAME> load table <SCHEMA>.<TABLE> |
查看指定表总体装载信息 |
show <CPT_NAME> load group <SCHEMA>.<TABLE> |
查看指定表分组装载信息 |
show <CPT_NAME> load group last <SCHEMA>.<TABLE> |
查看指定表最后一次分组结果 |
show <CPT_NAME> load dict all |
查看装载字典历史 |
show <CPT_NAME> load dict last |
查看装载字典最新信息 |
# 停止当前 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
# 添加增量同步字典,不执行全量装载
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 不依赖目标端在线。
# 设置起始 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>
# 添加表映射
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 前复核源/目标方向、对象类型和黑白名单规则。
ALTER [<CPT_NAME>] ADD TABLE "<FILTER>" [<LOAD_MASK>]
未显式指定装载掩码时,默认值为:
CREATE|INSERT|INDEX|TABLE|CHECK|GROUP
装载掩码用 | 组合。掩码并非越多越好,应根据“是否删除目标表、是否创建对象、是否装数据、是否并行、是否含大对象、是否需要续装”选择。
| 掩码 | 作用 | 使用提醒 |
|---|---|---|
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 |
主键和唯一约束随建表创建 | 会增加插入阶段的索引维护成本 |
| 掩码 | 作用 | 使用提醒 |
|---|---|---|
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 同用 |
| 掩码 | 作用 | 使用提醒 |
|---|---|---|
NOLOCK |
装载查询前不对源表加 S 锁 | 可降低业务阻塞,但可能导致全量快照不一致 |
WAIT |
获取表锁时强制等待 | 与 NOLOCK 同用时失效; |
TRY|n |
表锁失败后重试 n 次 | 适合短时锁冲突 |
FLASHBACK |
使用闪回查询获取一致性数据 | 需要闪回权限;长事务可能阻塞装载 |
SAME |
所有闪回分组使用同一 LSN | 与 FLASHBACK 组合 |
CONTINUE |
续装最近失败的表或分组 | 部分装载掩码不支持续装 |
WHERE|"条件" |
只装载满足条件的数据 | 分区表与 GROUP 组合受限 |
TIME |
检查并替换非法日期时间 | 后续增量需开启 enable_check_date,否则可能不一致 |
FORCE |
忽略入库错误并强制激活同步 | 可能造成两端不一致 |
| 掩码 | 作用 | 使用提醒 |
|---|---|---|
PDB|"名称" |
指定容器数据库 | 容器数据库使用 |
CDC、CDC|1 |
开启 SQL Server 库级/表级 CDC | 应先确认现有 CDC 状态 |
CDC|0 |
关闭对应 CDC | 可能影响其他表,执行前核对库级和表级 CDC |
GROUP 后面的数字代表什么| 源数据库 | 数字含义 | 默认值和范围 |
|---|---|---|
| MySQL | 每个表分成多少组 | 默认 4;仅唯一整型主键表能够有效并行 |
支持 SF_GET_TABLE_GROUP_INFO_BY_ROWS 的 DM8 |
每组达到多少行 | 最小 5000,默认 100000 |
| Oracle | 每达到多少数据块分一组 | 最小 2048,默认 10000;含大对象时默认 3000 |
DROP|CREATE|INSERT|INDEX|TABLE|CHECK|GROUP
DROP 会删除目标表,必须先备份并确认目标端不存在独立业务数据。
TRUNCATE|INSERT|GROUP
INSERT|GROUP
CREATE|INSERT|GROUP|DELAY
DROP|CREATE|ROWID|INSERT|GROUP
INSERT|GROUP|FLASHBACK|SAME
需要数据库闪回权限,并确认源库长事务不会长期阻塞闪回装载。
UPDATE|LOB|GROUP
CONTINUE
DELETE DICT 和 TERMINATE DICT 有什么区别?DELETE DICT:删除源端字典,源端停止解析和发送该表;不要求 EXEC 在线。TERMINATE DICT:除删除源端字典外,还通知目标端停止并清理该表对象信息;要求 EXEC 在线且链路可连接。不影响,drs支持装载和同步进程同时启动,在同步的过程中会判断表是否在装载队列,如果在装载队列,该表的增量会保存在检查点文件中,只有装载成功激活表之后才会进行增量同步,注意装载失败如果激活失败,检查点文件会堆积无法删除,需要手动的terminate或者重装该表,执行端可以查看s exec group 32767查看是否存在装载失败导致卡检查点的表
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,重启后验证日志读取和检查点推进。
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。
commit_lsn 分别代表什么?commit_lsn: 记录源端事务的提交 LSN,用于故障恢复时判断哪些事务已经同步完成。可以先创建目标表,再单独装载数据,但如果表含主键,建表会自动添加主键,后续装载数据会有性能损失。
文章
阅读量
获赞
