文档中心MogDBMogDB StackUqbar

文档:v3.4

支持的版本:

其他版本:

MVD 配置说明

MVD 支持通过配置文件执行对比任务,配置文件为 json 格式的文件。

配置选项说明

命令选项 类别 默认值 选项说明
SOURCE_DB dict 源数据库连接信息,包括:数据库类型,IP,端口,服务名,用户名,密码
TARGET_DB dict 目标数据库连接信息,包括:数据库类型,IP,端口,服务名,用户名,密码
INCLUDE list 对比的对象范围,可指定对象类型,schema,对象名称,以及对应的模糊匹配表达式
EXCLUDE list 对比时需要排除的对象范围,在 INLCUDE 范围内排除部分对象
TABLE str 执行单表对比,使用此选项后,INCLUDE/EXCLUDE 选项失效
ROW_DIR str /tmp/mvd_diff 行差异文件目录,每张有数据差异的表,均会生成一个行差异文件
CATEGORY str all 对比的类别,可以只对比元数据 (meta) 或数据 (data)
MODE str Row 对比模式,分为:汇总模式([S]ummary),逐行模式([R]ow),自动模式([A]utomatic),默认为: Row
WORKERS int 8 表并行数量,取值范围:(0, 32]
TABLE_WORKERS int 4 在分区并行/动态采样/手动并发情况下,单个表内并发数量,取值范围:(0, 32]
DATA_FILTER dict 指定过滤条件,可指定单个表的过滤条件,也可以指定一批表共用的过滤条件,可指定单一过滤条件(部分对比),也可以指定多个过滤条件(手动并发)
SAMPLE_SIZE int 10240 动态采样触发阈值,表大小超过这个阈值才考虑使用动态采样,单位是:MB
SAMPLE_PCT int 1 动态采样比例,取值范围:(0, 1], 取值为 1 时为全量采样
REMAP_SCHEMA dict 若对比的双方存在 schema 不一致的情况,可使用此选项指定 schema 映射关系
COLUMN_LIST dict 指定需要对比的列名范围,以及列名的映射关系
SKIP_COLUMN_TYPE dict {} 跳过指定的字段类型,可具体指定跳过结构对比,跳过数据对比,或者二者皆跳过
SKIP_COLUMN_NAME dict {} 跳过指定的字段名称,可具体指定跳过结构对比,跳过数据对比,或者二者皆跳过
IGNORE_FLOAT bool false 对比时,是否忽略浮点类型的字段,浮点字段可能存在精度差异导致的行对比失败
ORA_FLOAT_PRECISION int -1 指定 Oracle float 类型的近似精度,在对比时会对 Oracle float 类型的数据进行四舍五入
FLOAT_PRECISION int -1 指定 float 类型的近似精度,在对比时会对 float 类型的数据进行四舍五入
DOUBLE_PRECISION int -1 指定 double 类型的近似精度,在对比时会对 double 类型的数据进行四舍五入
FRACTION_PRECISION int 6 指定毫秒字段的数据精度,Informix 数据毫秒最大精度为 5,其他库的精度取值范围为 [0, 6]
ZERO_CHAR str 指定空字符 chr(0) 的替换字符,默认直接移除 chr(0) 字符
TIME_ZONE str +00:00 指定对比时,在数据库客户端使用的时区,确保双方时区一致
EXCLUDE_SYS_TABLE list [] 排除指定的部分系统表
RTRIM_VARCHAR bool false 是否移除 varchar 等变长字符串尾部的空格
LOCAL_MD5 bool false 是否强制源端和目标端在本地计算行数据的 md5 值
CALLBACK str 指定结果回调 URL,支持通过回调获取执行结果
RUN_MODE str INFO 指定运行模式,不同运行模式的日志数量会有较大差异,支持:INFO/DEBUG/WARNING/ERROR/CRITICAL 等
DEBUG_MD5 bool false 针对 MD5 数据对比的 DEBUG 模式,该选项启用后会输出与表中行数相同数量级的日志,非必要不要启用
LOGFILE str mvd_logfile.log 将日志输出到指定的日志文件中
PASSWD_ENCRYPT bool false 数据库用户密码已通过 MDB 加密,需要在使用时进行解密
MTK_CONFIG str 指定 MTK 配置文件,支持通过解析 MTK 配置文件中的必要参数,进行迁移后的数据对比
RESULT_FILE str 指定结果文件的输出位置,默认结果只输出到屏幕,不产生结果文件
RESULT_FORMAT str json 指定结果文件的输出格式,支持:json, plain
DETAIL_MODE bool false 是否输出详细模式的数据对比结果,详细模式会输出所有表的数据对比结果,默认简明模式只输出有差异的表的对比结果
ROW_FEEDBACK bool false 是否精确识别主键表差异行的字段差异,并将有差异的字段数据记录到差异结果文件中(DIFF_DETAIL 字段)
GENERATE_REPAIR bool false 是否生成针对目标库的数据修复脚本
REPAIR_COMPARED bool false 数据修复脚本是否仅针对对比字段,默认是针对所有双边匹配上的字段
FUNCTION_DIMENSION dict 旧的列统计值对比维度,不建议使用,未来可能会废弃
LICENSE_FILE str ./license.json 指定 License 文件的位置

配置文件示例如下(支持在配置文件中使用 // 进行单行注释):

{
    // Mandantory configurations
    // =============================================================================================
    "SOURCE_DB":                // Source Database connection information
    {
        "TYPE": "ORACLE",       // DB Type: ORACLE|ORACLE2|DB2|MYSQL|POSTGRESQL|MOGDB|OPENGAUSS|SQLSERVER|INFORMIX
        "HOST": "127.0.0.1",    // DB Host IP
        "PORT": "1521",         // DB Port
        "SERVICE": "orcl",      // DB Name/Service
        "USER": "",             // DB User
        "PASSWORD": ""          // DB Password
    },
    "TARGET_DB":                // Target Database connection information
    {
        "TYPE": "MOGDB",        // DB Type: ORACLE|ORACLE2|DB2|MYSQL|POSTGRESQL|MOGDB|OPENGAUSS|SQLSERVER|INFORMIX
        "HOST": "127.0.0.1",    // DB Host IP
        "PORT": "26000",        // DB Port
        "SERVICE": "postgres",  // DB Name/Service
        "USER": "omm",          // DB User
        "PASSWORD": ""          // DB Password
    },
    "INCLUDE":                  // Source white list to be compared
    [                                                   // Tips: 1. <OBJECT_TYPE> can use: %/TABLE/VIEW/SEQUENCE/PROCEDURE/FUNCTION/OTHERS
        // ["OBJECT_TYPE", "SCHEMA", "OBJECT_NAME"],    //       2. Can use % in <SCHEMA> and <OBJECT_NAME> field, means to match all
        // ["%", "HONGYE", "%"]                         //       3. Name is case insensitive
    ],
    "EXCLUDE": [],              // Source black list to be compared, format like "INCLUDE"
    "TABLE": "",                // Single table comparison, when this option used, then "INCLUDE" and "EXCLUDE" are ignored
    // "TABLE": "source_schema.source_table:target_schema.target_table",  // source and target can have different schema or table name
    "ROW_DIR": "/tmp/mvd_diff",   // Row differences data directory, each diff table has a file in this directory
    "CATEGORY": "all",          // Compare category: all, meta, data
    "MODE": "Row",              // Data compare mode, default is [R]
                                //   [R] Row mode, compare data row by row
                                //   [S] Summary mode, compare summary data, include row count and data signature
                                //   [A] Automatic mode, Compare summary and compare row when summary does not matched


    // Optional configurations
    // =============================================================================================
    // Performance related configurations
    "WORKERS": 8,               // Parallel between tables
    "TABLE_WORKERS": 4,         // Parallel within a table (split by partition/sampling)
    "DATA_FILTER":              // Customer defined data filter for data comparison
    {
        // "*": [["id < 100", "id < 100"]]
        // "HONGYE.TEST_BIG_PART_BY_ID": [["ID < 10000", "ID < 10000"],
        //                                ["ID between 10000 and 20000", "ID between 10000 and 20000"]
        //                               ]

        // Follow 3 configurations does the same thing:
        // "*":["col_id < 100", "col_id > 100 and col_id < 200"]
        // "*":[["col_id < 100"], ["col_id > 100 and col_id < 200"]]
        // "*":[["col_id < 100", "col_id < 100"], ["col_id > 100 and col_id < 200", "col_id > 100 and col_id < 200"]]
    },
    "SAMPLE_SIZE": 10240,       // Sampling threshold in MB, default 10240MB, 0 means do not split data
    "SAMPLE_PCT": 1,            // Sampling percentage, values between 0 and 1, 1 means split and compare all data

    // Remapping configurations
    "REMAP_SCHEMA":             // Remap schema in comparison: Source:Target
    {
        // "SOURCE_SCHEMA": "TARGET_SCHEMA"
    },
    "COLUMN_LIST":              // Column limitation and remapping
    {
         // "*": [["SOURCE_COLUMN_FOR_ALL_TABLE", "TARGET_COLUMN_FOR_ALL_TABLE"]],
         // "HONGYE.TEST_BIG_PART_BY_ID": [["OBJECT_NAME", "NAME"]],
         // "SCHEMA.TABLE_NAME": [["SOURCE_COLUMN_NAME", "TARGET_COLUMN_NAME"], ["SOURCE_COLUMN_NAME_2", "TARGET_COLUMN_NAME_2_NEW"]]

        // Follow 3 configurations does the same thing:
        // "*":["COL_INT", "COL_SMALLINT"]
        // "*":[["COL_INT"], ["COL_SMALLINT"]]
        // "*":[["COL_INT", "COL_INT"], ["COL_SMALLINT", "COL_SMALLINT"]]
    },

    // Data related configurations
    "IGNORE_FLOAT": false,      // Ignore float column in data comparison
    "ORA_FLOAT_PRECISION": -1,  // Oracle float precision (-1 ~ 128), -1 means automatic round to column "precision - 1"
    "FLOAT_PRECISION": -1,      // Float precision (-1 ~ 128), -1 means automatic round to column "precision - 1"
    "DOUBLE_PRECISION": -1,     // Double precision (-1 ~ 128), -1 means automatic round to column "precision - 1"
    "FRACTION_PRECISION": 6,    // Time microseconds fraction, informix max to 5
    "ZERO_CHAR": "",            // Replace chr(0) with given char
    "TIME_ZONE": "+00:00",
    "EXCLUDE_SYS_TABLE": [],    // Exclude system object: object_name or schema.object_name. case insensitive
    "RTRIM_VARCHAR": false,     // Client time zone, default depend to server setting

    // Other configurations
    "CALLBACK": "",
    "RUN_MODE": "INFO",         // Log mode: INFO, DEBUG
    "DEBUG_MD5": false,         // Debug MD5 data before Python Calculation and Comparison
    "LOGFILE": "",
    "PASSWD_ENCRYPT": false,    // DB Password are encrypted
    "MTK_CONFIG": "",           // MTK config file
    "RESULT_FILE": "",          // Write result to a file
    "RESULT_FORMAT": "json",    // Result format: json, plain
    "DETAIL_MODE": false,       // Default only list table with data differences, detail mode will list all tables in data comparison
    "ROW_FEEDBACK": false,      // Try to found column data differences for tables with primary key, and write differences into 'DIFF_DETAIL' field in diff result file
    "GENERATE_REPAIR": false,   // Whether to generate repair scripts for the target database
    "REPAIR_COMPARED": false,   // Whether to repair all columns matched, default is to repair all columns matched on both sides
    "ROW_FEEDBACK": false,      // Reversed for feature use
    "FUNCTION_DIMENSION":       // Column summary statistics comparison
    {
        "AVG": {"TYPE": "A", "FUNCTIONS": {"*": "AVG"}},
        "MIN": {"TYPE": "NP", "FUNCTIONS": {"*": "MIN"}},
        "MAX": {"TYPE": "NP", "FUNCTIONS": {"*": "MAX"}},
        "MEDIAN": {"TYPE": "NP", "FUNCTIONS": {"*": "MEDIAN"}}
    },
    "LICENSE_FILE": "./license.json"
}

INCLUDE/EXCLUDE

可通过 INCLUDE/EXCLUDE 选项指定对比的范围,二者一个是白名单规则,一个是黑名单规则,对象在白名单且不在黑名单中,则会执行对比。

二者均为二维数组的配置项,配置规则如下:

  1. 内层每个数组对应一个对象规则,
  2. 内层数组包含 3 个元素,分别对应对象类型,schema和对象名
  3. 内层数据元素中可使用 % 表示通用匹配规则,类似数据库 LIKE 操作中的匹配规则
  4. 名称中的数据大小写不敏感

示例:

    "INCLUDE":                  // Source white list to be compared
    [                                                   // Tips: 1. <OBJECT_TYPE> can use: %/TABLE/VIEW/SEQUENCE/PROCEDURE/FUNCTION/OTHERS
        // ["OBJECT_TYPE", "SCHEMA", "OBJECT_NAME"],    //       2. Can use % in <SCHEMA> and <OBJECT_NAME> field, means to match all
        // ["%", "HONGYE", "%"]                         //       3. Name is case insensitive
    ],
    "EXCLUDE": [],              // Source black list to be compared, format like "INCLUDE"

TABLE

单表对比模式,使用此选项后 INCLUDE/EXCLUDE 选项失效。

单表模式中,必须指定 schema.table_name, 支持两种格式:

  • 源库与目标库中 schema 和 table_name 均一致,则使用 schema.table_name
  • 源库与目标库中 schema 或 table_name 存在差异,则使用 source_schema.source_table:target_schema.target_table

DATA_FILTER

通过指定过滤条件,可以实现如下两种需求:

  1. 针对大表,只对比部分数据,比如只对比部分比较新的数据
  2. 针对大表,可手动根据某一字段进行区间划分,多个区间之间可以并发进行数据对比

该选项为字典结构,其中:

  • KEY 为表信息: [schema.]table_name,也可以使用 * 表示对范围内的所有表启用该过滤条件
  • VALUE 为过滤条件,为二维数组,内层数组元素为具体过滤条件,包含两个元素:源条件,目标条件,如果原和目标条件名称一样,可以内层数组只写一个元素,或者直接写字符串。

配置示例如下:

    "DATA_FILTER":              // Customer defined data filter for data comparison
    {
        // "*": [["id < 100", "id < 100"]]
        // "HONGYE.TEST_BIG_PART_BY_ID": [["ID < 10000", "ID < 10000"],
        //                                ["ID between 10000 and 20000", "ID between 10000 and 20000"]
        //                               ]
    }

REMAP_SCHEMA

若对比的双方存在 schema 不一致的情况,可使用此选项指定 schema 映射关系。

该选项为字典结构,其中 KEY 为源 schema, VALUE 为目标 schema。

配置示例如下:

    "REMAP_SCHEMA":             // Remap schema in comparison: Source:Target
    {
        // "SOURCE_SCHEMA": "TARGET_SCHEMA"
    }

COLUMN_LIST

该选项用于指定列名范围,以及列名的映射关系。可同时实现如下两种需求:

  1. 字段限制:限制只对比指定的字段
  2. 字段映射:设置源与目标的字段映射关系

该选项为字典结构,其中:

  • KEY 为表信息: [schema.]table_name,也可以使用 * 表示对范围内的所有表启用该字段限制与映射
  • VALUE 为字段信息,为二维数组,内层每个数组对应一列,其中包含两个元素:源字段,目标字段,如果原和目标字段名称一样,可以内层数组只写一个元素,或者直接写字符串。

配置示例如下:

    "COLUMN_LIST":              // Column limitation and remapping
    {
         // "*": [["SOURCE_COLUMN_FOR_ALL_TABLE", "TARGET_COLUMN_FOR_ALL_TABLE"]],
         // "HONGYE.TEST_BIG_PART_BY_ID": [["OBJECT_NAME", "NAME"]],
         // "SCHEMA.TABLE_NAME": [["SOURCE_COLUMN_NAME", "TARGET_COLUMN_NAME"], ["SOURCE_COLUMN_NAME_2", "TARGET_COLUMN_NAME_2_NEW"]]
    }
Copyright © 2011-2024 www.enmotech.com All rights reserved.