基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
无主键表迁移机制
更新时间:2023-06-08 10:47:08
OMS 支持针对部分数据源进行无主键表迁移,无主键表下将统一用 ROWID 作为主键。
支持无主键表迁移的数据库
| 源端 | 目标端 | 支持的迁移类型 |
|---|---|---|
| Oracle | OB-Oracle | * 全量迁移 * 增量数据同步 * 数据校验 |
| OceanBase-MySQL V1.4.7.9版本 | OceanBase-MySQL V2.2.20及后续版本 | * 全量迁移 * 增量数据同步 * 数据校验 |
| OceanBase 数据库(MySQL 和 Oracle 模式) V2.2.1 版本 | OceanBase 数据库(MySQL 和 Oracle 模式) V2.2.30 版本 | * 全量迁移 * 增量数据同步 * 数据校验 |
Oracle 到 OB-Oracle 的无主键表迁移机制
OMS 支持基于 Oracle ROWID 和 OceanBase 隐藏列功能实现无主键表的全量迁移和增量数据同步。如果迁移 Oracle 无主键表到 OB-Oracle,OMS 会在结构迁移时自动添加 ROWID 相关隐藏列和约束,并在迁移结束后自动删除相关伪列和索引等约束。
ALTER TABLE AAA ADD "OMS_OBJECT_NUMBER" NUMBER INVISIBLE;
ALTER TABLE AAA ADD "OMS_RELATIVE_FNO" NUMBER INVISIBLE;
ALTER TABLE AAA ADD "OMS_BLOCK_NUMBER" NUMBER INVISIBLE;
ALTER TABLE AAA ADD "OMS_ROW_NUMBER" NUMBER INVISIBLE;
ALTER TABLE AAA ADD CONSTRAINT "UK_XXXX" UNIQUE ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER") LOCAL;
注意
以下操作可能导致 Oracle ROWID 产生变化:
导入或导出表。 执行
ALTER TABLE XXXX MOVE。执行
ALTER TABLE XXXX SHRINK SPACE。执行
FLASHBACK TABLE XXXX。分裂分区。
更新一个值,使其移动到一个新的分区。
合并分区。
在使用 ROWID 方式进行数据迁移时,如果有可能导致 ROWID 变化的操作,需要提前通过运维方式规避此风险,即关闭 dba_tables 表属性中的 row movement 参数。
ROW_MOVEMENT VARCHAR2(8) Whether partitioned row movement is enabled or disabled。在业务数据库的切换流程中,也就是业务割接期间,OMS 会自动删除附加的约束。但为了偏于后续业务正常使用,建议手动将每张表的四个伪列也删除掉。
OceanBase 到 OceanBase 的无主键表迁移机制
OMS 支持迁移 OceanBase(包括 MySQL 和 Oracle)的无主键表到 OceanBase 指定目标库中,基于 OBServer 暴露隐藏主键实现全量迁移和增量数据同步。OceanBase 作为源端时,每张无主键表迁移到目标端之后,都会被附加如下 SQL 语句:
ALTER TABLE `DB`.`TABLE` ADD `OMS_PK_INCRMT` bigint;
CREATE UNIQUE INDEX `DB`.`UK_${TABLE}_OBPK_INCRMT` ON `DB`.`TABLE`(`OMS_PK_INCRMT`);
注意
在业务数据库的切换流程中,也就是业务割接期间,OMS 会自动删除基于 ROWID 附加的唯一索引。但为了偏于后续业务正常使用,建议手动将每张表的四个伪列也删除掉。
OceanBase V2.2.30 无主键分区表需要基于"分区键+伪列"创建唯一索引。
CREATE UNIQUE INDEX "DB"."UK_${TABLE}_OBPK_INCRMT"
ON "DB"."TABLE"("分区键","OMS_PK_INCRMT") local;