本文是上一篇《银行信创迁移测试数据到达梦方案》的实践补充,聚焦脚本跑完后如何快速发现、定位并解决数据异常。
https://10.9.25.21/community/post/20250812184945G0ZZVALTTUQSGJ6A2T
批量脚本执行完 dmfldr
后,仅凭“导入成功/失败”的返回码并不能保证数据 100 % 准确。
我们在 708 张表中检出12张表存在异常,根因是 数据内容恰好与分隔符冲突,导致部分记录被截断或丢弃。
dmfldr
的日志会输出两组核心指标:
167 行数据加载成功
0 行由于数据错误没有成功加载
0 行由于数据格式错误被丢弃
跳过的逻辑记录总数:0
读取的逻辑记录总数:167
拒绝的逻辑记录总数:0
read=$(grep "读取的逻辑记录总数" logfile | awk '{print $NF}')
skip=$(grep "跳过的逻辑记录总数" logfile | awk '{print $NF}')
reject=$(grep "拒绝的逻辑记录总数" logfile | awk '{print $NF}')
success=$(grep "行数据加载成功" logfile | awk '{print $1}')
if [[ "$read" == "$success" && "$skip" == "0" && "$reject" == "0" ]]; then
echo "✅ 数据一致"
else
echo "❌ 存在异常"
fi
对 708 张异常表进行二次比对,发现字段内容里出现了默认的列分隔符 ,
、包围符 "
以及换行符 \n
,导致 dmfldr
无法正确解析列边界。
用途 | 字符 | 十六进制 | 备注 |
---|---|---|---|
列分隔符 | ^A | 0x01 | SOH |
包围符 | ^D | 0x04 | EOT |
行分隔符 | ^Y | 0x19 | EM |
LOAD DATA
INFILE '/path/to/datafile' STR X '19' -- 行分隔符 ^Y
INTO TABLE your_table_name
FIELDS TERMINATED BY X '01' -- 列分隔符 ^A
OPTIONALLY ENCLOSE BY X '04' -- 包围符 ^D
注意
STR X'xx'
必须写成十六进制,不能用^A
等可见符号。- 若源文件已生成,可用
sed/awk
批量替换旧分隔符为新分隔符,再执行装载。
至此,数据一致性问题闭环。
https://eco.dameng.com
文章
阅读量
获赞