文档中心MogDBMogDB StackUqbar

文档:v3.4

支持的版本:

发布记录

本工具进入维护期:不再进行新功能研发,但依然会对现有 BUG 进行修复处理。 相关功能已整合到 MDB 异构迁移同步套件中

v3.7.1 (2024-03-21)

问题修复

  • 修复opengauss_version()查询报错导致的对比失败
  • 修复MySQL/MogDB带毫秒的time类型作为主键,对比时顺序不一致的问题
  • OG查询时将ctid强转为text类型,避免驱动解码报错

v3.7.0 (2023-12-27)

新增功能

  • 增加 REMAP_OBJECT 参数,支持对比不同名称的对象或表
  • 增加对 MTK 中的 remapTable 参数的识别(该参数已废弃,不建议使用)

功能优化

  • 在单方 MySQL 场景下,自动设置为 MySQL 时区,可自定义时区名映射
  • 考虑到 openGauss/PG 中时区有一定的特殊性,对其正负号特殊处理
  • 优化 REMAP_SCHEMA 参数的解析与对象过滤

问题修复

  • 修复指定 MTK 配置文件时,部分配置项设置为 null 导致参数识别问题
  • 修复源和目标主键字段不一致时,解析 Key 逻辑报错的问题
  • 修复 MySQL CST 服务器时区在驱动连接时无法识别的问题
  • 修复 MySQL 8.0.30 之前版本中,不可见主键在数据字典无法查询导致的对比异常
  • 修复 DB2 指定排除系统表之后,获取对象列表报错的问题
  • 修复 openGauss/MogDB 中 datacompatibility 属性大小写导致的对比问题
  • 修复 INCLUDE 列表全 % 时查询 Oracle 对象报错问题

v3.6.5 (2023-11-30)

功能优化

  • json 输出结果中,增加 SORCE_ERROR, TARGET_ERROR, CHECK_RESULT 字段,可直接根据 CHECK_RESULT 判断校验结果: SUCCEED, FAILED

问题修复

  • 修复 MogDB 5.0 版本 B 模式数据库中无法使用 to_char 格式化 time 类型的问题

v3.6.4 (2023-11-22)

新增功能

  • 支持在对比结果中展示每张表的对比耗时

功能优化

  • 增加表数据对比时,异常信息的输出内容,输出真实堆栈信息
  • 对象列表增加 openGauss 中集合类型的识别
  • 对象列表中移除 Oracle 物化视图基表的相关记录
  • 支持在配置文件中移除字段为 Key 字段场景下的对比,保留 Key 但不对比 Key
  • 自定义条件的情况下,不再执行分区和采样检测
  • DB2 驱动分离,将 DB2 驱动从二进制中分离出来,避免驱动问题导致的连不上目标库

问题修复

  • 修复 MogDB 5.0 以上 B 模式数据库中无法使用 to_char 格式化 time 类型的问题
  • 修复 DB2 char/varchar 迁移为 MogDB bytea 过程中空格导致的对比不一致
  • 修复主键中存在 chr(0) 不可见字符,没有特殊处理,在对比时无法准确匹配双方主键的问题

v3.6.3 (2023-11-01)

新增功能

  • 支持在数据库异常或手动退出后,主动记录已完成结果(记录到隐藏 .mvd_table_verify 前缀的文件中,执行成功后会删除)

功能优化

  • 扩大逐行对比时 Key 字段范围,支持主键,也支持非空的唯一键
  • 适配 mtk 中的 schema.table:partition写法,忽略分区信息
  • 扩大动态采样的支持范围,支持多字段主键/唯一键表的动态采样
  • 移除 DB2 为源的场景下的自动 --rtrim-varchar,可手动添加此参数
  • 增加 DB2 错误文件,调整打包脚本,输出真正的错误文本

问题修复

  • 增加 OG 端 GBK 编码库中 GB18030 字符的自动化转码支持,避免生僻中文字导致的对比失败
  • 修复 SQL Server 获取索引信息时报错的问题
  • 对 DB2 GBK 编码的排序字段调整,使用 hex 转换排序,并增加对主键表异常结果的二次确认避免排序规则导致的数据不一致
  • 修复数据对比时,NULL值和空字符串在不同数据库,不同模式下排序规则不同的问题
  • 修复无主键表差异结果中,行定位符数显示不全的问题
  • 修复本地计算 MD5 时,在 MySQL 中查询数据报错的问题

v3.6.2 (2023-10-11)

新增功能

  • 增加 "--local-md5" 选项,支持在本地计算 MD5,避免数据库字符集不同造成的对比失败
  • 支持 DB2 varchar/char 类型与 MogDB bytea 类型数据的对比

功能优化

  • 支持部分无主键表(有唯一索引且唯一索引字段为NOT NULL)的精确列数据差异定位
  • 移除列统计值对比入口,不再处理列统计值对比的问题
  • 添加 openGauss 5.0 引入的 uint4/uint8 类型支持
  • "--upgrade" 适配新的命名方式

问题修复

  • 修复分区表对比是 EXTRA 字段为空导致 mtk 中结果解析失败的问题
  • 修复大表分区分片对比时结果汇总报错的问题

v3.6.1 (2023-09-12)

新增功能

  • 自动打包增加麒麟系统打包

功能优化

  • 移除对 loguru, request 模块的依赖
  • 全表 Hash 算法从 md5 切换到 xxhash128
  • 增加获取 Oracle 对象列表时的对象类型限定(只获取常见且通用的对象类型)

问题修复

  • 修复仅 data 对比情况下,不对比数据的问题
  • 修复 MySQL 大表对比过程中连接超时的问题
  • 修复 MySQL 大表对比内存溢出的问题
  • 修复在部分仅对比数据的场景下,对象类型不一致导致的程序异常
  • 修复字段内容全空在 OG/MySQL 中计算整体 Hash 报错的问题

v3.6.0 (2023-07-07)

新增功能

  • 新增 -m/--mode 选项,支持使用整表全量特征值对比,提高对比效率,默认为逐行对比

功能优化

  • 数据对比结果内容扩充,适配全量特征值对比结果
  • 在 MySQL 中使用 concat_ws 函数代替 concat 函数,移除各个字段上的 coalesce 函数

问题修复

  • 修复部分场景下,MySQL 数据字典约束对应的字段名称为空导致的问题
  • 移除 Oracle CLOB 相关类型支持,避免字符拼接报错,以及非主键表特征值汇总排序报错
  • 修复 MySQL 分区表对比时,分区边界值类型导致的程序异常
  • 修复 MySQL 中 year 类型无法使用 date_format 函数格式化导致的对比失败

v3.5.2 (2023-06-09)

功能优化

  • 优化 MVD_TEMP 目录删除问题,考虑自定义 MVD_TEMP 变量,临时目录删除失败不报错,不影响整体运行
  • OG 库连接默认启用自动提交
  • 源库为 DB2 的情况下,自动移除 VARCHAR 尾部空格

问题修复

  • 修复动态采样中,分析时间为空导致的 max 函数失败问题
  • 修复唯一键在有字段映射情况下的查找报错问题 (unhashable type: 'list')
  • 修复 MySQL 约束字段为空,导致的对比报错
  • 解决非 UTF8 字符集的 Oracle 数据库在数据库中计算 md5 值不一致的问题

v3.5.1 (2023-04-26)

新增功能

  • 增加--rtrim-varchar选项,支持在对比前移除变长字符串尾部的空格

功能优化

  • 优化动态采样的支持范围,支持根据选择度最高的索引前导列进行动态采样
  • 优化时区对比逻辑,默认不做时区转换,依赖数据库与驱动本身的时区处理
  • 优化 Oracle Lib 载入的逻辑
  • 统一修复--row-feedback启用后,精确定位列差异的问题,列差异查询报错不影响主流程

问题修复

  • 修复 PG 库对比时,丢失 where 条件的问题
  • 优化临时文件结构,避免单进程同类库无主键表对比时,找不出差异项的问题
  • 修复 MySQL 默认字符集排序规则中,大小写不敏感导致的对比异常
  • 修复 MySQL 整数格式化末尾带 0 导致的对比失败
  • 修复命令行选项 --fraction-prec 不识别的问题
  • 修复 MySQL 库中绑定变量占位符 %s 与时间格式化占位符冲突,导致回表查询报错的问题
  • 修复 REMAP_SCHEMA 对象转 JSON 不可序列化的问题

v3.5.0 (2023-02-24)

新增功能

  • 支持根据源库数据,自动生成修复目标库的 SQL 脚本(需要本地环境中有 mtk,不支持 SQL Server/MySQL 非主键表)

功能优化

  • 最终差异结果文件格式调整为csv,便于后续的自动化解析使用
  • 优化对比逻辑,支持列名混合大小写的场景

问题修复

  • 修复版本号带字母的情况下,软件自升级报错的问题(compare_version函数支持./_拆分,支持字符对比)
  • 修复 openGauss 环境下多列主键对比结果不正确的问题
  • 修复 SQL Server 非主键表对比失败的问题
  • 通过将 cursor 设置为 buffered=True,修复 MySQL 数据对比过程中获取详细异常列报错(Unread result found)

v3.4.2 (2023-02-09)

新增功能

  • 支持通过 --row-feedback 参数控制是否精确对比差异行的字段差异(仅针对主键表相同主键的情况下,精确显示具体字段差异)

功能优化

  • 优化结果汇总数据中 TOTAL_TABLES 的统计逻辑
  • 忽略 openGauss/PG 库外键自动生成的触发器 (t.tgisinternal is false)
  • 解析 Oracle 函数索引时,将单独使用双引号包裹的字段识别未正常的索引字段,而不是函数索引字段
  • 支持解析 MTK 配置参数 convertOracleIntegerToNumeric,将 Oracle 中部分 NUMBER 类型映射为 bigint
  • 支持解析 MTK 配置参数 templateSeqName,自动将 MySQL 自增列识别为其他库的 SEQUENCE
  • 支持解析 MTK 配置参数 skipColumnType/skipColumnName,排除自定义的字段信息,该参数也可以在 MVD 配置文件中配置
  • 支持解析 MTK 配置参数 excludeSysTable,排除自定义系统表,MVD 参数增加 EXCLUDE_SYS_TABLE参数
  • 支持解析 MTK 配置参数 autoAddMySQLAutoIncr,忽略自动添加的 PK_ID 及其相关信息
  • 支持解析 MTK 配置参数 disableFKCons,忽略外键对比
  • 支持解析 MTK 配置参数 dataOnly/schemaOnly

问题修复

  • 修复 SQL Server 中由于表名处理丢失导致的对比错误
  • 修复 Informix 中由于分区表函数未处理导致的报错
  • 修复 Informix 中表大小查询返回字符串导致的对比失败
  • 修复 openGauss中package 中的函数存储过程也会在 pg_proc 中存储导致的对比问题 (propackageid=0)
  • 修复 Oracle vs openGauss 对比时 PACKAGE BODY 对比失败的问题
  • 修复 openGauss/PG 库中触发器与触发器函数是相互分离的设计,忽略触发器函数
  • 修复 MogDB 自定义数据类型在 ::regtype 转换时带有 schema 信息,导致对比失败的问题
  • 修复对象类型中没有 TABLE 时的程序异常
  • 修复只对比数据的情况下,无法进行数据对比的问题

v3.4.1 (2023-02-02)

新增功能

  • 在 JSON 结果中,对每一张表增加 DIFF_FILE 数据,记录表的差异数据所在的路径

功能优化

  • 增加 --ora-float-prec 选项,用于单独指定 Oracle 中的 float 精度
  • 优化统一配置文件中 COLUMN_LIST 和 DATA_FILTER 的识别规则
  • 支持在 -T 单表对比模式时,对 schema 和对象名称使用引号包裹,从而保留其大小写的功能
  • 批量对比模式时,增加对各个数据库中存在的大小写混合对象的识别与对比
  • 更新 float/double 字段数据的对比精度,默认未自适应(使用最大精度 -1)
  • 更新示例配置文件

问题修复

  • 修复 openGauss 非主键表全列空值时,MD5 值也为空,导致未能在数据库中排序,因此造成这部分数据对比失败的问题
  • 修复 MySQL 中部分新添加的函数未对 schema 和表名增加 strip 处理的潜在问题
  • 修复 Oracle 无法解码字符查询报错导致整个对比任务失败的问题,使用 16 进制标识占位异常字符
  • 修复部分场景下,分区分片对比时对 MAXVALUE 边界处理不正确的问题
  • 修复 Oracle 数据库中 NCHAR/NVARCHAR 数据类型在内部计算 MD5 值时,由于字符编码问题导致的数据不一致
  • 修复 Oracle 分区分片时,对 TIMESTAMP 分区字段未能正常解析的问题
  • 修复对比结果中 DATA_DIFF_TABLES 统计问题,数据有差异实际应该是源库和目标库两张表的异常
  • 修复 Oracle 与 MogDB 对比时的 Type/TypeBody 对象异常
  • 修复 MogDB 数字溢出的问题,调整 Oracle number 转字符串使用 TM9 格式
  • 修复由于处理 Oracle 时区问题,引入的字段表达式丢失的问题
  • 修复Oracle Lib在macOS中查找载入的问题(多个/tmp/_MEI目录混用的问题)
  • 修复 Oracle 带时区的时间戳,在对比时由于时区不一致导致的数据异常
  • 修复 MVD 3.4.0 正式发布版本中不能读取 MVD_[SOURCE/TARGET]_DSN 环境变量的问题

v3.4.0 (2023-01-11)

新增功能

  • 支持基于真实数据分布的动态采样区间划分,以及按百分比的动态部分数据对比
  • 支持基于单个分区表的分区并行对比,目前只支持单一数字和时间字段的 RANGE 分区
  • 支持通过 --data-filter 参数对单表指定过滤条件的部分数据对比,单一条件的部分数据对比可与分区并行以及动态采样并行共存
  • 支持通过 --data-filter 参数支持指定多个过滤条件,实现单表手动并发对比的功能
  • 数据对比结果中显示当前表使用的对比模式,包括:Split/Sample/Partition/Partial/Normal 等
  • 增加 --detail-mode 参数,支持在结果中展示没有数据差异的表结果
  • 支持从环境变量中读取数据库连接信息 (MVD_SOURCE_DSN/MVD_TARGET_DSN),支持数据库密码解密
  • 支持对全量数据基于主键自动分片(20片),默认 10GB 以上才考虑分片

功能优化

  • 支持解析 MTK 配置文件中自定义数据分片规则 (object.tableSplit)
  • 支持通过 --column-list 针对不同的表做不同列限制与映射
  • 调整命令行选项逻辑,支持命令行选项与配置文件的执行
  • 在 openGauss 库分区表无主键的情况下,ctid 不唯一,差异中间在有 where 条件的情况下带上 where 条件
  • 对于 Oracle 数据库,支持在行长不超过 4000 字符的情况下,从 Oracle 内部计算 MD5 并排序
  • 最终结果中增加汇总数据

问题修复

  • 修复单表模式下,表不存在时的对比报错
  • 修复 openGauss.query() 函数一次性获取数据导致内存占用过大的问题

v3.3.1 (2022-11-25)

新增功能

  • 支持设置浮点数精度,毫秒精度,Informix 库毫秒精度最大设置到 5

功能优化

  • 优化 MySQL 连接方式: 采取两次尝试,分别采用默认认证插件与mysql_native_password认证插件
  • 更新打包脚本和逻辑,减少外部 Lib 文件,缩减可执行程序大小
  • 列统计值对比也考虑浮点数精度问题

问题修复

  • 修复 Informix 库主键表对比时,md5 计算时少算一列导致的数据对比异常
  • 修复 Informix 库中 Money 数据对比时带符号的问题
  • 修复 MySQL 数据对比时,无法识别 varchar 和 tinyint 字段类型数据的问题
  • 修复 openGauss 在数据库为 B 兼容模式时,concat null 值返回 null 的问题
  • 修复 openGauss 在数据库为 B 兼容模式时,coalesce(null::int, '') 返回 0 的问题

v3.3.0 (2022-11-21)

新增功能

  • 支持 Informix 库的基础对象对比,以及表数据的逐行 md5 对比

功能优化

  • openGauss 库数据对比时,增加对 boolean 字段支持

问题修复

  • 修复 openGauss 数据对比时,对 row 数据赋值导致的报错
  • 修复OG库数据对比不识别text字段的问题

v3.2.0 (2022-11-03)

新增功能

  • 支持 SQL SERVER 库的基础对象对比,以及表数据的逐行 md5 对比
  • 支持通过 callback 回调接收进程信息与结果

功能优化

  • 优化 macOS 系统中 Oracle Lib 的初始化逻辑
  • 表结构对比过程中,考虑到字段映射的自定义设定
  • 支持 openGauss 中 Large Sequence 对象的识别

问题修复

  • 修复 openGauss 中 money 类型数据处理函数的不兼容报错
  • 修复 column-list 选项未设置时,列统计对比报错的问题
  • 修复 MySQL 驱动报错: ImportError: No localization support for language 'eng'

v3.1.1 (2022-10-12)

问题修复

  • 修复 MogDB/openGauss/MySQL 库中由于 || 导致的数据对比异常,测试兼容 mariadb

v3.1.0 (2022-10-10)

功能优化

  • License 认证版本升级为 v31, 不再兼容旧版 License 文件

问题修复

  • 修复 MogDB/openGauss 库中主键表对比时 || 拼接空串导致的数据对比异常

v3.0.1 (2022-09-23)

新增功能

  • 增加 "--upgrade" 选项,支持脚本自升级
  • 支持 PostgreSQL 数据库的对比
  • 支持单表模式 "-T" 下对 schema 名称与表名的重命名对比
  • 支持单表模式 "-T" 下对字段名称重命名后的过滤与对比

功能优化

  • Oracle 无主键表数据查询效率优化
  • 数据查询排序规则调整(有主键按主键排序,无主键按 MD5 值排序)

问题修复

  • 修复部分场景下,Oracle 字段中多字节字符乱码导致的查询报错

v3.0.0 (2022-06-09)

新增功能

  • 增加 "-L", "--license", "--apply-licnese" 选项,用于 License 申请和验证
  • 增加 "--column-list" 参数,支持只对比指定字段的数据

功能优化

  • 使用 "--debug-md5" 选项可输出源库和目标库字段列表与主键列表,便于问题分析定位
  • 统计指标对比时,将字段过滤内置到查询之前,部分代码风格调整
  • 调整对象名称中有空字符的显示方式(使用双引号包裹)
  • 支持 MySQL 对象名称不带空格与其他库带空格的对比
  • 添加 OG 执行 SQL 时的 Debug 信息

问题修复

  • 修复 MogDB 主键数据对比,返回值为 NULL 导致的 Key 值对比失败
  • 将 public 移除出系统用户列表

v2.4.8 (2022-04-22)

新增功能

  • 对象对比时,MogDB 库增加 Package 对象(2.1及以后版本),以及 SYNONYM 对象的对比
  • Oracle/DB2 数据库对比时,增加对 OS 本地变量的识别(TMPDIR, TMP),用于存储程序运行时的临时数据
  • 增加 -Z 选项,可在运行时手动指定不同数据库中数据对比所使用的时区

功能优化

  • 最终结果展示微调,可读性更优
  • 优化 --debug-md5 选项在数据对比过程中的输出,能输出更加细致的双边数据对比过程
  • 优化 -T 模式,使得单表对比模式下也支持 -r 指定 Schema 映射

问题修复

  • 修复 openGauss/MogDB 库中的主键表,查询时排序规则不同,导致的对比结果异常的问题
  • 修复非主键表对比过程中,主键标识识别失败,导致的程序报错问题
  • 修复不同数据库中,主键字段名称大小写混合,导致排序数据不一致的问题 ("TID")
  • 修复单边库中数据不一致时,无法正确识别的问题
  • 修复主键字段尾部空格,导致主键表对比结果不正确的问题
  • 修复 Oracle/DB2 中查询字段多次出现(主键表),导致查询报错的问题
  • 修复 MySQL 库中 char 类型尾部空格导致的数据对比不正确的问题

v2.4.0 (2021-12-20)

新增功能

  • 增加对比类别选项 (-C/--catagory): 提供单独对比对象结构,以及单独对比数据的功能
  • 增加调试选项 (--debug-md5): 提供对数据对比时,Python MD5计算结果的原值输出
  • 增加Schema重映射选项 (--remap-schema): 支持源库与目标库 Schema 名称发生变化情况下的数据对比

功能优化

  • 优化数据对比逻辑: 对有主键的表,采取按主键对比的方案,并在结果中输出主键值与源和目标的MD5计算结果
  • 输出结果优化: 重新改写对象结构对比,以及数据对比的结果展示,更加便于阅读和理解
  • DB2 连接方式优化: 在DB2 数据库连接时,尝试更多的认证方式 (SERVER_ENCRYPT, SERVER, CLIENT, 默认)

问题修复

  • 修复不可见字符 chr(0) 导致的数据对比失败,并添加对应的 -z/--zero-char 选项,可指定 chr(0) 在迁移中的转换字符
  • 修复 DB2 数据库中,数字取模操作符 (%) 在部分版本中不可用的问题

v2.3.2 (2021-11-08)

问题修复

  • 修复低版本 MySQL(<8.0) 时表约束对比错误,支持 MySQL 5.5, 5.7, 8.0
  • 修复 MySQL 不同版本字段类型返回值在 Python 驱动中的数据类型不同的问题

v2.3.1

问题修复

  • 修复部分版本下 MySQL 查询字段类型,驱动返回值是 str/byte 导致的程序异常
  • 修复 MySQL 驱动在 SUSE 系统中获取操作系统版本时,lsb_release -a 命令返回值解析报错的问题

v2.3.0

Feature

  • 支持 Linux 平台下 openGauss/MogDB 中的 sha256 加密认证方式

v2.2.14

Copyright © 2011-2024 www.enmotech.com All rights reserved.