首批通过分布式安全可靠测评,为关键业务系统打造
无锁结构变更
更新时间:2026-04-13 14:20:55
背景信息
为解决变更数据库表结构时的锁表问题,ODC V4.2.0 版本提供了无锁结构变更功能,该功能可以较好地规避因锁表以致于阻塞业务。
本文档旨在介绍如何通过提交无锁变更工单实现数据库无锁结构变更。
ODC 支持的在线结构变更:
| 支持的版本 | 说明 |
|---|---|
| OceanBase V4.0.0 之前的版本 |
|
| OceanBase V4.0.0 及之后的版本 |
|
前提条件
OceanBase MySQL 模式下的表名称不超过 56 个字符,OceanBase Oracle 模式下的表名称不超过 120 个字符。
表中须包含主键或唯一键。
注意事项
目标表中包含主键或唯一键:在执行无锁结构变更时,主键或唯一键用于全量拷表分段操作及后续增量更新。
确保数据库磁盘空间充足。
当前表在执行无锁结构变更同时,执行其它 DDL 操作会导致任务失败。
原理介绍

创建临时表。
变更临时表结构。
全量拷贝数据。
增量数据同步。
数据一致性校验。
Kill Session。
切换新旧表。
执行流程

用户发起无锁结构变更工单。
对用户输入的 SQL 语句进行预检查。
审批任务流程。
执行无锁结构变更任务。
操作步骤
示例:将表 student 中的列 birth 类型修改为 datetime。
| 信息项 | 示例值 |
|---|---|
| 项目名称 | osc |
| 所属数据源 | test137yaobinobmysql |
| 数据库名称 | osc_test |
| 表名称 | student |
在 SQL 窗口中,编辑 SQL 语句以创建表 student 到数据库 osc_test 中。

在 任务 页签中单击 无锁结构变更 > 新建无锁结构变更。

在 新建无锁结构变更 页面中,输入以下信息。

信息项 说明 数据库 选择需变更的数据库。 变更定义 - CREATE TABLE:OceanBasese 不支持的语法需要使用 CREATE 语句。
- ALTER TABLE:OceanBasese V4.0.0 及之后的版本,ALTER TABLE OFFLINE 模式可以使用 ALTER 语句。
SQL 内容 在编辑区中录入 SQL 脚本。 切换表设置 数据一致后将原表切换为目标表。 - 锁表超时时间:切换表过程会锁表,超时未切换完成可能导致执行失败。
- 失败重试次数:超过锁表时间后,未切换完成可自动重试。
- 完成后源表清理策略:选择 重命名不处理,重命名源表,不删除。选择 立即删除,无锁结构变更完成后删除源表。
任务设置 - 选择 立即执行 / 定时执行 设置任务执行方式。
- 无锁结构变更工具提供两种任务错误处理方式:
- 停止任务 :停止任务为默认方式,运行脚本的过程中出现错误时会停止运行。
- 忽略错误继续任务 :选择忽略错误继续任务方式,在运行脚本出现错后将跳过错误语句继续执行。
备注 可在 备注 文本框中输入不超过 200 个字符的描述信息,该项为选填项。 单击 新建,完成新建无锁结构变更。
任务生成后可以在 工单 > 无锁结构变更 列表中查看任务信息。

查看无锁结构变更任务
任务信息
在 任务中心 的无锁结构变更列表中,单击操作列中的 查看 按钮。
在弹出的任务详情面板中,单击 任务信息 页签查看所属数据库、任务类型、风险等级、SQL 内容和回滚内容等信息。

单击 再次发起,可重新发起无锁结构变更任务。
任务流程

在任务详情面板中,单击 任务流程 页签查看发起任务状态、审批状态、执行状态和执行结果等信息。
执行记录

在任务详情面板中,单击 执行记录 页签查看 新表和源表 DDL。
任务日志

在任务详情面板中,单击 任务日志 页签查看任务的全部日志和告警日志。
| 信息项 | 说明 |
|---|---|
| 全部日志 | 全部日志显示任务的 INFO 、 ERROR 和 WARN 日志等全量信息。 单击 查找 、 下载 和 复制 按钮,可查找信息、下载或复制全部日志信息。 |
| 告警日志 | 告警日志单独显示任务的 ERROR 和 WARN 日志。当任务失败时,可通过告警日志查看错误信息。 单击 查找 、 下载 和 复制 按钮,可查找信息、下载或复制告警日志信息。 |