DBX

Schema 与数据对比

DBX 提供两类对比工作流:

  • Schema 对比比较对象结构和 DDL,生成从源环境部署到目标环境的脚本
  • 数据对比按关键字段比较一张或多张表的行,生成可选择的插入、更新和删除同步 SQL

两者都遵循“源端作为期望状态,目标端作为待检查/同步状态”的方向。选择反了会生成相反的操作。

对比结果和生成 SQL 都需要人工审查。删除对象、删除行、字段类型转换、跨方言映射和批量同步可能不可逆,生产环境先备份并准备回滚方案。

Schema 对比流程

选择或创建配置

选择最近配置,或新建、重命名、复制一个对比配置。配置可以导入/导出 JSON,便于复用源/目标和比较选项。

选择源与目标

分别选择连接、数据库和 Schema。可以交换源/目标,但交换后必须重新检查部署方向。

配置比较范围

选择表、主键、外键、唯一键、Check、视图、函数、索引、序列、触发器、Rule、Owner 等对象。实际选项按数据库类型显示。

比较并筛选对象

DBX 读取两端元数据和 DDL,构建对象树,标记新增、删除、修改和依赖关系。选择真正需要部署的对象。

审查 DDL 与影响

查看源/目标 DDL、字段映射、部署脚本、依赖、潜在冲突和影响报告。

导出或部署

复制/导出 .sql,或在最终确认后部署到目标数据库。支持时可以在事务中执行,并查看语句级进度与结果。

Schema 差异类型

状态含义典型脚本
源端新增目标缺少对象CREATE、添加字段/索引/约束
目标多余源端没有对象DROP 或删除字段/索引/约束
对象修改两端定义不同ALTER、重建、替换源码
重命名候选名称不同但结构相似根据阈值建议重命名,需要人工确认
兼容性冲突源类型或特性不能直接映射到目标字段映射、降级或手写迁移

对象树可以按操作类型筛选和选择。删除对象不会因为“目标多余”就自动执行,仍需要用户选择和最终确认。

比较选项

对象范围

不同数据库可以比较:

  • 表、字段、列顺序和主键
  • 唯一键、外键、Check 和排除约束
  • 索引、视图、函数、序列、触发器和 Rule
  • Owner 和序列当前值

选项按方言默认值加载。没有可靠元数据或同步 SQL 的对象会隐藏或只显示差异。

表过滤

  • 包含和排除模式
  • 包含/排除冲突时的优先级
  • 批次模式和表名模式
  • 是否显示系统对象

过滤用于控制比较范围,不等于数据库权限。当前账号无法读取的对象不会出现在结果中。

重命名检测

可以启用字段或表重命名检测,并设置相似度阈值。重命名建议基于结构相似度,不知道业务语义;确认前检查数据、约束、应用代码和依赖对象。

跨方言与字段映射

源/目标数据库类型不同时,可以指定源方言、目标方言、兼容阈值和字段类型映射:

  • 保留参数,例如 VARCHAR(255) 的长度
  • 去掉不兼容参数
  • 使用自定义目标参数

跨引擎对比只能生成“尽可能兼容”的脚本。字符集、排序规则、自增、序列、分区、存储引擎、函数和权限往往需要人工迁移设计。

DDL、依赖与部署审核

选择对象后可以查看:

  • 源端和目标端 DDL
  • 单对象部署 SQL
  • 全部所选对象的部署脚本
  • 对象依赖和被依赖关系
  • 字段映射与兼容性提示
  • 创建、修改、删除数量和影响摘要
  • 可选回滚脚本(启用且能够生成时)

最终部署页面会再次显示目标服务器、数据库、Schema、数据库版本和语句数量。生产环境保护会在执行前要求明确确认。

“在事务中执行”只在目标数据库和语句支持事务 DDL 时提供真正的整体回滚。MySQL 等数据库的 DDL 可能隐式提交。

方言语义

DBX 会尽量保留数据库专属语义,而不是把所有 DDL 转成通用格式,例如:

  • PostgreSQL / openGauss 等的 Schema、序列、Owner、Rule 和索引特性
  • MySQL 兼容数据库的字符集、排序规则、自增和索引语法
  • Oracle、达梦、GaussDB、KingbaseES 等的类型和对象限定方式
  • Doris / StarRocks、ClickHouse、Elasticsearch/Easysearch 等只在可可靠处理的结构范围内参与

支持连接不代表所有对象都可对比或部署。查看 数据库支持 和结果中的 capability 提示。

数据对比

数据对比独立于 Schema 对比,用于比较源表和目标表的行。

选择源表和目标表

选择连接、数据库、Schema 和表。批量模式可以选择多张源表,并按同名表映射到目标。

选择关键字段

指定能够唯一识别行的主键或业务键。关键字段错误会把更新误判为新增/删除。

执行比较

DBX 读取两端数据并标记源端新增、目标端多余和字段修改。批量模式显示当前表、进度和单表失败原因。

选择差异

按新增、删除、修改筛选,并选择要同步的行或字段。详情预览限制可以控制一次展示的数据量。

生成并执行同步 SQL

DBX 为目标数据库生成 INSERTUPDATEDELETE。确认语句、数量和目标后再执行。

数据差异方向

状态含义同步到目标时
新增行只存在于源端生成 INSERT
删除行只存在于目标端生成 DELETE
修改相同关键字段的其他列不同生成 UPDATE
一致两端行相同不生成语句

删除同步风险最高。若目标端允许存在源端没有的本地数据,不要选择删除差异。

对比前检查

  • 源和目标方向是否正确
  • 账号是否能读取完整元数据、DDL 或表数据
  • 表过滤和对象选择是否遗漏关键依赖
  • 关键字段是否唯一、是否包含 NULL
  • 跨方言字段映射是否保留精度和语义
  • 目标是否启用只读或生产保护
  • 是否已经备份并在测试环境验证脚本

已知边界

  • 动态 SQL、存储过程内部行为、应用代码和外部 ETL 不在 Schema 对比范围内
  • 重命名检测是相似度建议,不是确定结论
  • DDL 格式差异可能产生语义相同但文本不同的结果
  • 数据对比需要把选定范围读入比较流程,不适合无过滤地处理超大表
  • 事务回滚能力取决于目标数据库
  • 对比配置包含连接 ID 和范围,但不包含数据库密码