6. 校验结果

本章是对校验结果举例和说明。校验结果在输出日志里,搜索关键字———不一致,即可得到结果。如果无不一致信息,则表明对比一致,迁移没有问题。 日志路径:logs/lightdb-etl/lightdb-etl.log

6.1. 表结构对比

对比源数据库和目标数据库的表名、列名、数据类型、数据的精度、数据的标度、字符的长度、日期的标度是否一致。

首先输出:表结构对比开始

对比一致的会在第一行输出:

模式.表名对比一致

对比不一致的:

第一行输出:模式.表名对比不一致 第二行输出:对比不一致的原因。如下所示,如果数据类型不同,会输出数据类型不同,源数据库的数据类型是什么,目标数据类型是什么。

表结构对比开始
 //对比一致
 FUND60ACCO12.tbfundtaclientinfo13对比一致。FUND60ACCO12.tbfundtaclientinfo12对比一致。FUND60ACCO12.tbzdassetacc14对比一致。
 //对比不一致
 FUND60ACCO12.tbfundbakrestables112对比不一致
        busin_type的数据类型不同, 源:VARCHAR2,目标:varchar2
        ori_trans_date的数据类型不同, 源:NUMBER,目标:numeric
 FUND60ACCO12.tbtatransaccount_bak13对比不一致
       目标:invest_flag列不存在
       目标:invest_code列不存在
 FUND60ACCO12.sys_export_schema_01对比不一致
      in_progress: 数据的精度不同,源:88,目标:null;
      invest_flag: 数据的标度不同,源:88,目标:22;
      invest_code:日期的标度不同,源:88,目标:22;
      processing_state: 字符的长度不同,源:88,目标:22;

6.2. 表量对比

对比源数据库和目标数据库的对比表名、表量、表数据行数;对比视图、索引、存储过程、函数数量是否一致。

目前表量对比增加了html输出文档,包含了对比的总量统计、迁移失败原因等

dataCompare.html 是专门针对表的对比结构,统计整体表的对比情况和展开失败的原因。 typeCompare.html 是所有对象的对比结果,统计整体情况,对比失败的类型和schema会进行标红处理,详细对比失败原因可点击展开查看。

../_images/dataCompare.png ../_images/typeCompare.png

对比结果也会在日志的输出,会打印所有的内容,便于一些特殊报错的查询,以下是日志的结构说明:

首先输出:表量对比开始

然后输出:特殊的情况:如pg自动增加的索引:tbcustamlx1currents_pkey,oracle自动增加的索引:sys_il0007162376c00045$$,pg自动增加的分区表:tbcustamlx1currents_1_prt_atr

然后开始输出对比结果:

第一行输出:视图等对比开始

对比一致的会在第二行输出:

模式.表名对比一致。如 tbdictconvert对比一致 tbfundcentralizex8file14对比一致 tbfundcentralizex8file13对比一致

对比不一致的:

第一行输出:模式.表名对比不一致 第二行输出:对比不一致的原因。如下在视图对比时,对比不一致,因为目标数据库的某一个视图没有迁移成功;表量对比时,tbfundcrsclientcfm对比不一致,输出不一致的原因时数据的行数不相同。

表量对比开始
viewCount对比开始
   tbdictconvert对比一致  tbfundcentralizex8file14对比一致    tbfundcentralizex8file13对比一致
   tcustinfo对比不一致
              目标:FUND60ACCO12.tcustinfo 不存在
 sequenceCount对比开始
   无数据,对比一致

 proceduresCount对比开始
   proc_droptable对比一致   proc_droppk对比一致   proc_addcolumn对比一致
   proc_droptable对比不一致
              目标:FUND60ACCO12.proc_droptable 不存在
   proc_dropcolumn对比不一致
              目标:FUND60ACCO12.proc_dropcolumn 多余

 functionCount对比开始
   tbdic对比一致  tbfundcentr对比一致 tbfundcentrali对比一致

   tranferidcode对比不一致
              目标:FUND60ACCO12.tranferidcode 不存在
      tranferidtype对比不一致
              目标:FUND60ACCO12.tranferidtype 不存在

 tableCount对比开始
   tbfundcentralizex8file12对比一致       tbfundcentralizex8file11对比一致    tbfundtaclientinfo15对比一致
   FUND60ACCO12.tbfundaccfrozendetail对比不一致
               数量不同,源:21,目标:0
   FUND60ACCO12.tbfundcrsclientcfm对比不一致
               数量不同,源:63,目标:0

 indexCount对比开始
   tbdictconvert对比一致  tbfundcentralizex8file14对比一致    tbfundcentralizex8file13对比一致
   FUND60ACCO12.sys_export_schema_05对比不一致
               目标:索引sys_export_schema_05_process_order_duplicate_key多余
   FUND60ACCO12.sys_export_schema_01对比不一致
               目标:索引sys_export_schema_01_process_order_duplicate_key不存在

6.3. 表数据对比

根据配置的源数据库和目标数据库信息获取数据库的元数据。比较逻辑如下:

  1. 首先比较相同表的列映射关系,包括列的数量和列名(忽略大小写)。如果不一致,则终止比较。

  2. 接着比较表的行数是否一致。如果不一致,则终止比较。

  3. 然后分别查询源数据库和目标数据库的数据进行比对。如果不一致,则终止比较。

  4. 为了避免不同数据库查询结果格式不一致,数据将进行统一格式化。有关详细信息,请参考 多发对规则数据类型映射

  5. 最后,在 user.dir 目录下生成 table_data_compare_{时间}.html 文件,以记录比对结果。

##日志文件输出样例:
etl.tbfundconfirmstatdetailtmp对比不一致:
    表列不一致,【oracle:id,a,b】,【lightdb:a,b,c】

etl.tbfundconfirmstatdetailtmp2对比不一致:
    表列不一致,无法映射比对【oracle:id,a,b】,【lightdb:a,b,c】

etl.tbaccountopenasset16对比不一致:
    [lightdb]:[public.tbaccountopenasset16]不存在

etl.t2对比不一致:
    [lightdb]:[public.t2]表行数查询失败
etl.t3对比不一致:
    表行数对比不一致,【oracle:302】,【lightdb:300】

etl.t4表无数据,对比一致

etl.t5对比不一致:
    [lightdb]:[public.tbaccountopenasset16]数据值对比不一致
../_images/table_data_compare.png

6.4. 中间结果对比

中间结果对比通过配置对应的sql,对比源库和目标库的数据。报告路径和名称为:工作目录/sqldatacompare_日期时间.html 同时为了避免不同数据库查询的出来格式不一致,可参考多发 比对规则数据类型映射

首先输出:中间结果对比的汇总信息

然后显示对比的SQL的ID、具体SQL、比对结果是否一致、操作命令查看不一致

../_images/sqldatacompare.png