注册
DMDRS诊断工具
专栏/技术分享/ 文章详情 /

DMDRS诊断工具

Cath Palug 2026/09/23 227 0 0
摘要

DMDRS 诊断工具

适用场景:DMDRS 同步链路出现入库失败、数据异常、检查点持续堆积时,如何借助 drdgtool 快速定位根因。
关键词:DMDRS、drdgtool、ERRLOG DUMP、RECID、SITEID、CKPT、检查点堆积。


1. 工具简介

DMDRS 诊断工具 drdgtool 是 DMDRS 提供的专业诊断工具,主要用于:

  • 分析目标端 EXEC 模块的错误日志文件;
  • 分析检查点文件,定位长时间未提交的事务;
  • 输出绑定失败、入库失败等异常操作的详细信息。

工具位于 DMDRS 执行程序目录下,与 drctl 控制台工具同级。启动方式:

cd /data/dmdr5/bin_exec_dm8_5345 ./drdgtool exec.xml

进入后,可使用 ERRLOG DUMP 分析错误日志,或使用 CKPT 系列命令分析检查点。


2. 场景一:目标端错误日志分析

当同步链路出现入库失败或数据异常时,除了分析源端归档日志,还可以用 drdgtool 分析目标端 EXEC 模块错误日志,精准定位失败的 SQL 和执行错误。

2.1 核心概念:RECID 与 SITEID

当 DML 操作发生绑定失败或入库失败时,DMDRS 日志会打印一行“保存操作”日志,其中包含:

  • RECID:记录 ID;
  • SITEID:源端站点号。

RECID 为十六进制,组成方式为:

<文件号><记录在文件中的偏移>

其中:

  • 文件号:最多 8 位;
  • 文件偏移:固定 8 位。

示例:

10007ECF7

表示:

  • 文件号:1
  • 偏移量:0007ECF7

日志示例:

EXE[INFO]: 保存操作(recid:20000000 siteid:1)
Isn:164712603,trxid:2814762652096001,op_id:1,
rowid:AABoRyAAEAALxb1Amgs: syshalt!

获取方式:从 EXEC 模块运行日志中查找“保存操作”关键字,即可拿到 RECID 和 SITEID。


2.2 命令一:输出指定 ID 的错误信息

语法:

ERRLOG DUMP RECID:<RECID> SITEID:<SITEID> [SQL|STRUCT|BIN]
[OUTDIR:"<OUTDIR_PATH>"] [DIR:"<DIR_PATH>"]

功能:根据目标端错误日志文件夹路径和记录 ID,输出指定错误信息。

参数说明:

参数 说明
RECID:&lt;RECID> 记录 ID,每条异常日志操作对应一个记录 ID,可从 DMDRS 日志获取
SITEID:&lt;SITEID> 记录 ID 对应的源端站点号,可从 DMDRS 日志获取
SQL 输出 SQL 格式文件,默认文件名 out.sql
STRUCT 输出 JSON 格式文件,默认文件名 out.json
BIN 输出 BIN 格式文件,默认文件名 &lt;事务号>-&lt;OP_ID号>.bin
OUTDIR 输出文件目录,默认当前程序工作目录
DIR 错误日志文件夹路径,默认当前工作目录下 &lt;EXEC模块名>/ERRLOG_&lt;站点号>

使用示例:

# 分析 1 号站点下,记录 ID 为 10007ECF7 的错误信息,按 SQL 格式输出
drdgtool> ERRLOG DUMP RECID:10007ECF7 SITEID:1

# 手动指定错误日志文件夹路径
drdgtool> ERRLOG DUMP RECID:10007ECF7 SITEID:1 DIR:"/opt/dmdrS/INST_DRS/node1/exec_dm8/ERRLOG_1"

# 按 JSON 格式输出到指定目录
drdgtool> ERRLOG DUMP RECID:10007ECF7 SITEID:1 STRUCT OUTDIR:"/opt/dmdrS/ERR_OUT"

执行成功后,会在指定目录生成 out.sql 或 out.json,内容为故障日志操作详情。

out.sql 示例:

op_id:1,trxid:2814762652096001,Isn:164712603,Ifs:0, rowid:AABoRyAAEAALxb1AAA,errno:-70011, commit_Isn:16471 INSERT INTO "DMDRS"."ORA_INS_23114"("C1") values("10000000000000000000000000000000000000000000000000000000000000000")

2.3 命令二:输出指定区间内的错误信息

语法:

ERRLOG DUMP MIN:<MIN_RECID> MAX:<MAX_RECID> SITEID:<SITEID>
[<TRX_ID>] [<OP_ID>] [SQL|STRUCT|BIN]
[OUTDIR:"<OUTDIR_PATH>"] [DIR:"<DIR_PATH>"]
["<SCHNAME>.<TABNAME>"] [ROWID:<ROWID>]
[FROM "<START_TIME>" TO "<END_TIME>"]

功能:根据目标端错误日志文件夹路径,输出从起始记录 ID 到截止记录 ID 区间内的所有错误信息。

参数说明:

参数 说明
MIN:&lt;MIN_RECID> 区间起始记录 ID,十六进制,不支持模糊起始记录 ID
MAX:&lt;MAX_RECID> 区间截止记录 ID,支持模糊截止记录 ID,即截止记录 ID 可不对应存在的记录
SITEID:&lt;SITEID> 记录 ID 对应的源端站点号
&lt;TRX_ID> 需要输出的事务号。配置后只输出指定事务错误信息,不配置则输出区间内所有事务错误信息
&lt;OP_ID> 日志操作在事务内的操作序号。配置后按操作序号过滤,不配置则输出所有操作序号
SQL\|STRUCT\|BIN 输出格式,含义同命令一
OUTDIR 输出文件目录
DIR 错误日志文件夹路径
"&lt;SCHNAME>.&lt;TABNAME>" 按模式名和表名过滤,不配置则输出所有表错误信息
ROWID:&lt;ROWID> 按 ROWID 过滤
FROM "&lt;START_TIME>" TO "&lt;END_TIME>" 按错误发生起始时间和截止时间过滤,格式为 yyyy-mm-dd HH:MM:SS

使用示例:

# 分析 1 号站点下,从记录 ID 10007ECF7 到 10009BEC3 的所有错误信息
drdgtool> ERRLOG DUMP MIN:10007ECF7 MAX:10009BEC3 SITEID:1

# 分析 26 号站点下,3 号文件中记录的所有错误信息,按 JSON 格式输出到指定目录
drdgtool> ERRLOG DUMP MIN:30000000 MAX:3FFFFFFF SITEID:26 STRUCT OUTDIR:"/opt/dmdrS/ERR_OUT"

# 分析 26 号站点下,3 号文件和 4 号文件中模式名为 DMDRS、表名为 ORA_INS_23435 的表上的错误信息
# 按 JSON 格式输出,并按错误发生时间从 2024 年 2 月 3 日至 2024 年 2 月 8 日过滤
drdgtool> ERRLOG DUMP MIN:30000000 MAX:4FFFFFFF SITEID:26 STRUCT
OUTDIR:"/opt/dmdrS/ERR_OUT" "DMDRS.ORA_INS_23435"
FROM "2024-02-03 00:00:00" TO "2024-02-08 23:59:59"

2.4 完整分析流程示例

场景:Oracle 到 DM8 同步链路,目标端 DMDRS 打印错误后主动停机。

日志:

EXE[ERROR]: DRS-9011 执行已经准备好的SQL语句失败
DB-70011 无效的转换字符串
EXE[INFO]: 保存操作(recid:20000000 siteid:1)
Isn:164712603,trxid:2814762652096001,op_id:1,
rowid:AABoRyAAEAAALxb1Amgs: syshalt!

分析步骤:

# 1. 在目标端执行程序目录中启动诊断工具 cd /data/dmdr5/bin_exec_dm8_5345 ./drdgtool exec.xml # 2. 根据日志提示指定 recid 和站点号输出错误信息 drdgtool> ERRLOG DUMP RECID:20000000 SITEID:1 # 3. 查看生成的 out.sql 文件,分析引发故障的 SQL cat out.sql

输出结果分析:

op_id:1,trxid:2814762652096001,Isn:164712603,Ifs:0, rowid:AABoRyAAEAAALxb1AAA,errno:-70011, commit_Isn:16471 INSERT INTO "DMDRS"."ORA_INS_23114"("C1") values("10000000000000000000000000000000000000000000000000000000000000000")

根据报错信息“无效的转换字符串”,检查 SQL 后发现:

  • 日志操作中 DATA 列的数据长度超过目标端表 DMDRS.ORA_INS_23114 中 NUMBER(38) 类型的精度范围;
  • 因此导致入库失败。

定位原因后,可根据具体应用场景处理该问题。


2.5 错误日志分析注意事项

  • ERRLOG DUMP 命令属于 drdgtool,与 drctl 控制台工具不同,需要单独启动。
  • 错误日志分析需要目标端 EXEC 模块的 ERRLOG_&lt;站点号> 目录中存在错误日志文件;如果目录为空,则无法分析。
  • RECID 和 SITEID 必须从 EXEC 模块运行日志中准确获取,否则无法输出对应错误信息。
  • 按时间范围过滤时,时间格式必须为 yyyy-mm-dd HH:MM:SS,且需确保时间范围在日志文件实际覆盖范围内。
  • 输出文件默认保存在当前程序工作目录,需确保目录有足够磁盘空间,且 dmdba 用户有写入权限。
  • 错误日志文件按站点和类型维护,分析完成后建议及时清理输出文件,避免占用过多磁盘空间。

3. 场景二:使用诊断工具分析检查点

当检查点数量持续增长且不回落时,除了常规状态查看命令,还可以使用 drdgtool 对检查点文件进行深度分析,精确定位导致检查点堆积的具体事务。

3.1 工具说明

drdgtool 可以加载检查点文件,并查看其中包含的事务和操作详情,从而定位是哪个事务长时间未提交导致检查点堆积。

启动方式:

cd /data/dmdr5/bin_exec_dm8_5345 ./drdgtool exec.xml

3.2 分析流程

  1. 初步定位问题
    在 EXEC 控制台中执行:

    show exec_dm8 ckpt
    

    观察检查点数量是否持续增长且不回落。正常情况检查点数量应保持在较低水平。

  2. 加载检查点文件
    进入诊断工具后,通过 ckpt load 加载目标 EXEC 模块的检查点目录。

  3. 查看已加载文件
    使用 ckpt show 查看已加载的检查点文件列表。

  4. 定位问题事务
    通过 ckpt dump trx &lt;TRXID> 输出指定事务的详细操作信息,分析是哪个事务导致检查点无法释放。

  5. 输出分析报告
    诊断工具会将检查点文件内容解析为文本文件,便于进一步分析。


3.3 关键命令详解

3.3.1 加载检查点文件

CKPT LOAD <PATH>

功能:加载指定目录或文件路径的检查点文件,使诊断工具能够对其进行分析。

参数说明:

参数 说明
PATH 如果为目录,则加载目录下所有合法检查点文件;如果为文件路径,则加载指定检查点文件

使用示例:

# 加载目标 EXEC 检查点目录下所有文件
drdgtool> ckpt load /home/dmdrsexec/CKPT00001

LOAD CKPT FILE [1]:/home/dmdrsexec/CKPT00001/CKPT_00000000004008996999_0000000000000000000_0000000000000000000001.ckpt (pages:63, version date:20240112)
LOAD CKPT FILE [2]:/home/dmdrsexec/CKPT00001/CKPT_00000000004009046151_0000000000000000000_0000000000000000000001.ckpt (pages:62, version date:20240112)

加载指定检查点文件:

drdgtool> ckpt load /home/dmdrsexec/CKPT00001/CKPT_00000000004008996999_0000000000000000000_0000000000000000000001.ckpt

预期输出:

LOAD CKPT FILE [1]:/home/dmdrsexec/CKPT00001/CKPT_00000000004008996999_0000000000000000000_0000000000000000000001.ckpt (pages:63, version date:20240112)

3.3.2 查看已加载的检查点文件

CKPT SHOW

功能:查看所有已加载的检查点文件及其文件 ID 序号。

使用示例:

drdgtool> ckpt show

预期输出:

CKPT FILE [ID:1]:4008996999-0-1 pages:63 size:4224 KB
CKPT FILE [ID:2]:4009046151-0-1 pages:62 size:4864 KB

3.3.3 输出检查点文件内容

CKPT DUMP FILE [<FILEID>]

功能:将检查点文件内容输出为文本格式,便于查看文件内部详细数据。输出文件路径与检查点文件相同,以 .txt 作为后缀。

参数说明:

参数 说明
FILEID CKPT SHOW 命令结果中显示的检查点文件 ID 序号,如果不配置则输出所有

使用示例:

# 输出文件 ID 序号为 1 的检查点文件内容
drdgtool> ckpt dump file 1

输出说明:详细内容输出至检查点文件所在目录下的同名 .txt 文件中,例如:

/home/dmdr/s/exec/CKPT00001/CKPT_00000000004008996999_000000000000000000_000000000000000000000000000000000000000000000000000000000000001.txt

3.3.4 输出事务详细信息

CKPT DUMP TRX <TRXID>

功能:在已加载的检查点文件中,根据指定事务 ID 查找并输出该事务的详细操作信息。这是定位“哪个事务导致检查点堆积”的关键步骤。

参数说明:

参数 说明
TRXID 事务 ID,可通过 show exec_dm8 trx 命令获取当前活动事务的 ID

命名规则:输出文件命名为:

trx_<trxid>_<commit|active>_<objmd5>.txt

其中:

  • commit|active:标识该事务是已提交事务还是活动事务;
  • objmd5:对象的 MD5 值。根据执行端分组执行策略,一个事务可能按表归类生成多个文件。

使用示例:

# 输出 ID 为 9885113 的事务的详细操作信息
drdgtool> ckpt dump trx 9885113

预期输出:

详细内容输出至文件:
trx_9885113_commit_0x45A009D57DE918949574651846E8ADAD.txt

生成的文本文件中包含该事务的所有操作详情,包括:

  • 事务的起始 LSN、提交 LSN;
  • 事务包含的 DML 操作,如 INSERT / UPDATE / DELETE;
  • 操作涉及的表名、列名和列值;
  • 操作的时间和顺序。

通过分析这些信息,可以明确判断是哪个表、哪条 SQL 导致事务长时间未提交,从而针对性解决问题。


3.3.5 清空已加载的检查点文件

CKPT CLEAR

功能:在需要分析其他环境的检查点文件时,使用该命令重置环境,清空已加载的所有检查点文件。

使用示例:

drdgtool> ckpt clear

3.3.6 计算指定表的 OBJMD5 值

CKPT GET OBJMD5 <SCH> <TAB>

功能:根据模式名和表名计算 OBJMD5 值,用于在检查点文件中查找和定位特定表的事务信息。

参数说明:

参数 说明
SCH 模式名
TAB 表名

使用示例:

drdgtool> ckpt get objmd5 SYSDBA T1

3.4 完整检查点分析流程示例

# 1. 在 EXEC 控制台中查看检查点数量异常
show exec_dm8 ckpt
# 检查点数持续增长,超过 500

# 2. 查看当前活动事务,获取可疑事务 ID
show exec_dm8 trx
# 发现事务 ID 为 9885113 长时间未提交

# 3. 启动诊断工具
cd /data/dmdr5/bin_exec_dm8_5345
./drdgtool exec.xml

# 4. 加载检查点文件
drdgtool> ckpt load /data/dmdr5/bin_exec_dm8_5345/exec_dm8/CKPT00001

# 5. 查看已加载文件列表
drdgtool> ckpt show

# 6. 输出事务 9885113 的详细信息
drdgtool> ckpt dump trx 9885113

# 7. 分析生成的文本文件,定位具体操作
cat trx_9885113_commit_*.txt

3.5 检查点分析注意事项

  • 诊断工具在 EXEC 模块停止或运行状态下均可使用,但建议在问题发生时,即 EXEC 仍在运行时进行分析,以获取最新检查点数据。
  • CKPT LOAD 加载的检查点文件必须与当前分析的问题对应,否则可能定位到错误的检查点。
  • 检查点分析功能需要 EXEC 模块正常运行并生成检查点文件 .ckpt。如果从未执行过检查点,则无法分析。
  • 生成的文本文件会占用一定磁盘空间,分析完成后建议清理。

4. 命令速查表

功能 命令
启动诊断工具 ./drdgtool exec.xml
输出指定 RECID 错误信息 ERRLOG DUMP RECID:&lt;RECID> SITEID:&lt;SITEID>
输出指定区间错误信息 ERRLOG DUMP MIN:&lt;MIN_RECID> MAX:&lt;MAX_RECID> SITEID:&lt;SITEID>
加载检查点文件 CKPT LOAD &lt;PATH>
查看已加载检查点 CKPT SHOW
输出检查点文件内容 CKPT DUMP FILE [&lt;FILEID>]
输出指定事务详情 CKPT DUMP TRX &lt;TRXID>
清空已加载检查点 CKPT CLEAR
计算表 OBJMD5 CKPT GET OBJMD5 &lt;SCH> &lt;TAB>

5. 总结

drdgtool 是 DMDRS 排障中非常实用的诊断工具,核心能力可以概括为两条线:

  1. 错误日志分析线
    通过 ERRLOG DUMP,结合从“保存操作”日志中提取的 RECID 和 SITEID,定位入库失败的 SQL、错误码和具体数据。

  2. 检查点分析线
    通过 CKPT LOAD / SHOW / DUMP TRX,加载检查点文件并定位长时间未提交的事务,解决检查点持续堆积问题。

实际排障时,建议先看 EXEC 运行日志和状态命令,获取 RECID、SITEID、TRXID 等关键线索,再进入 drdgtool 做精准分析。分析完成后,及时清理输出文件,避免占用过多磁盘空间。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服