---
title: "结构迁移机制 | OceanBase 文档中心"
description: 结构迁移机制 您在进行 OceanBase 社区版之间的数据迁移时，在结构迁移步骤，OceanBase 迁移服务（OceanBase Migration Service，OMS）社区版会根据数据迁移项目的实际情况，提供相应的机制。 背景信息 如果您在运行 OceanBase 社区版至 OceanBase 社区版的单向…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.0.0 社区版

# 结构迁移机制

更新时间：2026-04-14 15:40:46

[编辑](https://github.com/oceanbase/oms-doc/edit/V4.0.0/zh-CN/600.data-migration/1600.schema-migration-for-tables-without-a-primary-key.md)  

您在进行 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} 需要替换为实际的库名和表名），判断是否为无唯一键表。如果无返回结果，即可视为无唯一键表。

```sql
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));

```

- 添加列

  ```sql
  ALTER TABLE `{schema}`.`{table}` ADD COLUMN `OMS_PK_INCRMT` bigint;

  ```
 - 添加唯一索引

  ```sql
  // 有分区字段
  CREATE UNIQUE INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}` (`OMS_PK_INCRMT`, `{partition_col_0}`, `{partition_col_1}`) local;
  // 没有分区字段
  CREATE UNIQUE INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}` (`OMS_PK_INCRMT`);

  ```
 - 删除唯一索引

  ```sql
  DROP INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}`

  ```
 - 删除列

  ```sql
  ALTER TABLE `{schema}`.`{table}` DROP COLUMN `OMS_PK_INCRMT`;

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
