10.3. 多发比对功能概览
本章节重点介绍比对服务的功能。功能清单列表如下:
服务 |
功能 |
描述 |
---|---|---|
比对服务 |
||
1 |
多租户功能 |
支持根据业务用户名进行区分用户的操作 |
2 |
比对结果页面展示 |
展示traceId、业务SQL、状态、错误原因、SQL类型、源库、目标库、源库SQL、目标库多发SQL、比较内筒、记录行数、应用类型、应用名、业务用户名、schema、业务执行时间、比对执行时间、操作详情展示 |
3 |
比对结果筛选 |
支持根据状态、TraceID、应用类型、应用名、用户名进行筛选 |
比对规则自定义 |
||
1 |
替换规则(ForceReplace) |
用于将数据替换为另一部分内容。 |
2 |
字符串截取规则(SubString) |
从输入字符串中截取指定长度的子串 |
3 |
精度截取规则(SubPrecision) |
将数值小数部分精确到指定的位数(四舍五入),该规则用于保证数值精度在特定应用场景下的一致性和准确性。 |
4 |
布尔转数字(Boolean2Number)规则 |
将true转成1,将false转成0 |
5 |
时间戳转字符串(Timestamp2String)规则 |
将数值类型的时间戳(通常为毫秒数)转换为格式化的日期字符串。 |
6 |
忽略表字段规则 |
指定某张表里的某些字段不进行比较。 |
7 |
全局比对规则展示 |
|
其他特色功能 |
||
1 |
支持全表同步 |
目标库与源库的表数据不一致,支持全表同步 |
2 |
支持钉钉消息推送 |
在发生比对失败的时候,发送钉钉消息 |
10.3.1. 比对服务
10.3.1.1. 比对结果页面展示
登录系统后,进入左侧菜单【多发比对】-【多发比对报告】,即可查看比对报告列表界面,比对报告可以基于租户名、比对报告状态、TraceId、应用类型、应用名、用户名、报告生成时间等条件进行筛选。
点击每个比对报告右侧的 详情 链接即可进入比对报告详情界面:
![]()
特别注意
比对详情界面展示的表名称在多表操作时会包含所有涉及的表,无法直接看出表与列的关系,需要结合多发查询SQL来明确列字段具体来自哪张表中。
为了列表页面的查询效率,比对结果页面的分页总数与列表是分开查询的,当您点击具体页码切换分页时,分页总数是不会进行更新的;如果您发现分页总数已不准确,需要刷新分页总数时,可点击右下角的刷新按钮,来刷新分页总数。
比对规则下拉列表租户名、应用名、用户名数据量在10000以内时可快速显示,下拉列表数据持续变大时显示会变慢。
比对规则下拉列表租户名、应用名、用户名中的数据每隔一分钟刷新,比对报告中如果出现新的租户名、应用名、用户名需要等待1分钟定时刷新后才会显示在下拉列表中。
10.3.2. 比对规则说明
10.3.2.1. 支持多租户隔离
比对规则支持多个租户之间相互隔离,每个租户可以使用自己独立的比对规则。比对规则支持配置基于【列数据类型】、【列名称】、【表名称+列名称】、【表名称+列名称+列数据类型】等多个维度的比对规则。
比对规则应用时基于先精确后模糊的流程,比如【表名称+列名称+列数据类型】>【表名称+列名称】>【列名称】>【列数据类型】,在以上维度中只要在一个维度找到了比对规则,应用了比对规则后便不再进行后续查找。
数据库列值不匹配比对规则时,比对规则执行后还是原始值,比如对于精度截取规则,如果数据库列值不是数值类型,如abc,则规则应用后还是原值abc。
比对规则列表页面中的租户名、表名、列名下拉列表,最大支持10000个不重复的选项值,根据创建时间逆序排列。
界面操作时请注意:新增比对规则界面,比对规则类型更改时,默认会清除上一次和规则绑定的配置值,如替换规则中的【待替换的值、替换后的值】,精度截取规则中的【精度截取值】,字符串截取规则中的【截取长度值】,时间戳转字符串规则中的【格式化字符串】。
比对规则验证界面,验证同一个规则时,默认关闭验证窗口会保留上次输出的待测试列值;只有在切换比对规则后会清空。
10.3.2.2. 比对规则列数据类型映射说明
对于定长字符串、变长字符串、大字符串等统一映射为 VARCHAR 类型进行处理,在确保语义一致的同时以规避数据库层及驱动层差异。
对于所有精确数值类型,则统一映射为 DECIMAL 类型进行处理。
对于所有非精确数值类型,则统一映射为 DOUBLE 类型进行处理。
对于日期时间和时间戳类型,则统一映射为 TIMESTAMP 类型进行处理。
其他列类型请参考以下映射关系表进行选择。
数据库列类型统一展示为小写格式,比对规则列类型统一展示为大写格式,以示区分。
数据库列类型 |
比对规则映射类型 |
char |
VARCHAR |
nchar |
VARCHAR |
bpchar |
VARCHAR |
varchar |
VARCHAR |
varchar2 |
VARCHAR |
nvarchar2 |
VARCHAR |
long |
VARCHAR |
tinytext |
VARCHAR |
text |
VARCHAR |
mediumtext |
VARCHAR |
longtext |
VARCHAR |
json |
VARCHAR |
number |
DECIMAL |
numeric |
DECIMAL |
decimal |
DECIMAL |
bit |
DECIMAL |
bool |
DECIMAL |
boolean |
DECIMAL |
tinyint |
DECIMAL |
smallint |
DECIMAL |
int |
DECIMAL |
integer |
DECIMAL |
mediumint |
DECIMAL |
bigint |
DECIMAL |
int1 |
DECIMAL |
int2 |
DECIMAL |
int4 |
DECIMAL |
int8 |
DECIMAL |
serial |
DECIMAL |
bigserial |
DECIMAL |
float |
DOUBLE |
double |
DOUBLE |
binary_float |
DOUBLE |
binary_double |
DOUBLE |
real |
DOUBLE |
float4 |
DOUBLE |
float8 |
DOUBLE |
double precision |
DOUBLE |
timestamp |
TIMESTAMP |
timestamp with time zone |
TIMESTAMP |
datetime with time zone |
TIMESTAMP |
timestamptz |
TIMESTAMP |
datetime |
TIMESTAMP |
date |
DATE |
time |
TIME |
blob |
BLOB |
tinyblob |
BLOB |
mediumblob |
BLOB |
longblob |
BLOB |
clob |
CLOB |
nclob |
CLOB |
binary |
BINARY |
raw |
BINARY |
bytea |
BINARY |
varbinary |
BINARY |
其他所有非以上列类型 |
OTHER |
10.3.2.3. 忽略表列规则
忽略表列规则支持【表名称.*】、【*.列名称】、【表名称.列名称】三种模式,忽略表列规则匹配时不考虑列数据类型,只要匹配该规则,即为当前列值比对成功,将不再应用其他比对规则。
忽略表列规则典型应用于基于系统时间生成的时间戳,如create_time、update_time等数据列。
忽略表列规则在进行规则测试时,不考虑列值是什么,只要匹配规则,规则应用后列值一直为true。
10.3.2.4. 布尔转数字规则
布尔转数字规则统一将boolean类型中的true转换为1,false转换为0,再进行后续的比对。
布尔转数字规则典型应用于boolean类型在不同数据库中表现形式不一样的场景,MySQL数据库存储时为boolean值,Oracle数据库存储时为整数值。
10.3.2.5. 时间戳转字符串规则
时间戳转字符串规则用于将时间戳类型统一转换为字符串后再进行比对,默认转换格式为 yyyy-MM-dd HH:mm:ss。
时间戳转字符串规则典型用于日期时间类型在不同的数据库中行为不一致的问题,数据库驱动序列化后可能是java.util.Date、java.sql.Date、java.sql.Timestamp、java.util.LocalDateTime等不同类型。
配置的格式化字符串长度等于10时,如 yyyy-MM-dd,规则应用时会自动在尾部拼接字符串 00:00:00。
格式化字符串解析依赖于 JDK java.time.format.DateTimeFormatter#ofPattern(java.lang.String) 方法,比对服务本身不做特殊验证,如格式化字符串不包含格式化符号时,也能转换成功,如格式化字符串 123,在应用规则后列值也是 123。
10.3.2.6. 精度截取规则
精度截取规则用于将浮点数的精度截取到指定的位数,以忽略浮点数处理在不同数据库中的精度差异。
精度截取规则典型应用于浮点数函数计算,如 expr、sqrt、ceil、floor、round 等数学函数。
对于待测试的数值型列值精度小于配置的截取精度值时,默认尾部填充0。
10.3.2.7. 字符串截取规则
字符串截取规则用于将字符串截取到指定的长度,以解决字符串处理在不同数据库中的差异。
对于待测试的列值长度小于配置的截取长度值时,默认返回原始列值。
10.3.2.8. 替换规则
替换规则用于将字符串中的指定子字符串替换为用户自定义的子字符串,以解决字符串处理在不同数据库中的差异。
替换规则典型应用于星期处理,如 MySQL 的 WEEKDAY() 返回 0-6,0 代表星期一;DM 中 TO_CHAR(date, ‘D’) 返回的星期值与 Oracle 一致,1 代表星期日,7 代表星期六。
替换规则在界面显示时,被替换值和目标值之间使用§¢£§特殊符号分割,该特殊符号不可用于待替换值和目标值,可能导致结果错误。
10.3.2.9. 忽略大小写规则
忽略大小写规则用于将字符串规范化为小写格式后进行比对,忽略字符串大小写在不同数据库中的差异性。
忽略大小写规则典型应用于系统表列信息查询,如Oracle查询出的表列名称默认为大写,而Postgresql查询出的表列名称默认为小写。
10.3.2.10. 比对规则在线验证
比对规则支持在线验证,可在新增规则时先确认下规则的执行效果,规则生效值即为比对规则应用后的列值。
比对规则应用只在数据比对时生效,实际展示比对报告时还是显示原始列值。
以忽略表列规则为例,比对规则匹配时,无论列值是什么,都以true进行对待。
以忽略表列规则为例,比对规则不匹配时【此处为列名不匹配】,则返回原始列值。
10.3.3. 其他特色功能
10.3.3.1. 支持全表同步
在比对报告中,可点击 全表数据同步
将对比失败的表进行表数据的全量同步,当前版本只支持从 ORACLE
同步表数据到 OCEAN_BASE_ORACLE
,只支持同步一个表。详细操作步骤如下:
![]()
![]()
在
LightDB
官网下载迁移工具 LightDB-ETL。將下载的
LightDB-ETL
里的jar包(如lightdb-etl-24.3.jar
)的绝对路径配置在环境变量LIGHTDB_ETL_JAR
。迁移日志文件目录为
{比对服务安装目录的log}/lightdb-etl/{当前时间_traceId_计数}
,可查看详细的迁移日志。前端页面会展示基本全量同步结果。
问题排查
![]()
可通过查看
LightDB-ETL
的日志文件lightdb-etl-error.log
查看更加详细的报错内容。日志路径为
{比对服务安装目录的log}/lightdb-etl/{当前时间_traceId_计数}
。
lightdb-etl.log
:数据同步的总日志,可查看具体迁移的表、迁移数据等。
lightdb-etl-error.log
:数据同步报错日志汇总。