首批通过分布式安全可靠测评,为关键业务系统打造
数据迁移服务隐藏列机制说明
更新时间:2026-04-14 15:40:37
您在进行 OceanBase 社区版之间的数据迁移时,在结构迁移步骤,OceanBase 迁移服务(OceanBase Migration Service,OMS)社区版会根据数据迁移项目的实际情况,提供相应的机制。
背景信息
如果您在运行 OceanBase 社区版至 OceanBase 社区版的单向数据迁移项目时,进入了正向切换步骤,OMS 社区版为了支持无唯一键表迁移,将在目标端为对应表增加隐藏列,并基于隐藏列创建唯一索引,对应的列和索引将在正向切换步骤被自动移除。
如果您在运行数据迁移项目时,没有进入正向切换步骤,请根据本文的操作,自行删除唯一索引和隐藏列。
前置说明
"{partition_col_0}" 或者 `{partition_col_0}` 为表分区字段,可能存在多个。存在多个时,请使用英文逗号(,)分隔。例如,
"{partition_col_0}", "{partition_col_1}","{partition_col_2}"或 `{partition_col_0}`,`{partition_col_1}`,`{partition_col_2}`。{schema}、{table}、{partition_col_0}、{partition_col_1} 分别为库名、表名、分区字段名、分区字段名的占位符。
操作步骤
迁移 OceanBase 社区版的数据至 OceanBase 社区版时,OMS 社区版会对无唯一键表添加列和唯一索引。
注意
容灾双活场景仅支持迁移有唯一键表。
您可以执行下述命令(其中 {schema}、{table} 需要替换为实际的库名和表名),判断是否为无唯一键表。如果无返回结果,即可视为无唯一键表。
SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA = {schema} AND TABLE_NAME = {table} GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME HAVING count(1) = count(IF(upper(nullable) != 'YES' and NON_UNIQUE = 0, 1, NULL));
添加列
ALTER TABLE `{schema}`.`{table}` ADD COLUMN `OMS_PK_INCRMT` BIGINT;添加唯一索引
// 有分区字段 CREATE UNIQUE INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}` (`{partition_col_0}`, `{partition_col_1}`, `OMS_PK_INCRMT`) LOCAL; // 没有分区字段 CREATE UNIQUE INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}` (`OMS_PK_INCRMT`);删除唯一索引
DROP INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}`;删除列
ALTER TABLE `{schema}`.`{table}` DROP COLUMN `OMS_PK_INCRMT`;