基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Fork 概述
更新时间:2026-09-15 17:00:16
说明
本功能在当前版本为实验特性。
Fork 是 OceanBase 提供的数据克隆能力,允许用户基于现有表或数据库快速创建一个独立的副本。Fork 在满足一致性要求的前提下,尽量复用已有的数据组织和存储结构,避免全量数据复制。目标对象后续写入会产生增量存储开销。
Fork 方式
Fork 可以作用于单张表或整个数据库,分别对应局部数据隔离和完整环境复制两种场景:
- Fork Table:基于源表在某个快照时刻的数据,创建一张独立的目标表。目标表包含源表的完整结构和数据,创建后与源表完全独立,可自由读写。详见 Fork Table。
- Fork Database:基于源数据库在某个快照时刻的全量数据,创建一个独立的目标数据库。底层对源库中的每张用户表依次执行 Fork,并保证所有表共享同一快照版本,确保跨表数据一致性。详见 Fork Database。
Fork Table 与 Fork Database 对比如下
| 维度 | Fork Table | Fork Database |
|---|---|---|
| 克隆粒度 | 单张表 | 整个数据库(所有用户表) |
| 适用场景 | 只需要部分表的数据隔离 | 需要完整数据库环境的隔离 |
| 跨表一致性 | 不涉及 | 库内所有表共享同一快照版本 |
| 语法 | FORK TABLE ... TO ... |
FORK DATABASE ... TO ... |
使用场景与价值
数据版本与分支管理
团队在同一份基线数据上并行推进多种改动(修订脏数据、调整特征字段、变更索引策略等)时,直接修改原表风险高且难以回退,完整复制又耗时且占用大量存储。
Fork 允许围绕同一基线快速派生多个独立分支,各分支互不影响,多人可并行操作。每个副本对应源对象的某个快照时刻,数据来源清晰;改动未达预期时可直接切回原分支,实现轻量回滚。
A/B 实验与沙箱验证
许多验证工作必须基于真实生产数据才有意义,但直接在生产环境实验风险不可接受,独立搭建测试环境又成本高、数据易偏差。
Fork 可快速创建生产数据的隔离副本,实验在副本中进行,线上数据不受影响。当需要横向对比多个方案时,可分别为每个方案创建独立副本,在各自环境中验证后再统一评估。
Vibe Coding 与合成数据迭代
用自然语言驱动数据开发时,生成结果具有不确定性,需要反复试验,但每次试验不应污染已有数据。
Fork 出的副本充当可自由修改、随时丢弃的工作空间。用户在副本中通过自然语言指令调整表结构与数据,形成"描述—生成—验证"的闭环。未达预期则重新 Fork 一份继续迭代,无额外负担。
数据迁移与备份验证
灾备演练、测试环境搭建、数据归档前的正确性核对都需要完整副本,而库级数据复制通常耗时以小时计且需预留同等存储,导致这类验证常被简化甚至跳过。
库级 Fork 可快速创建整库副本,用于容灾演练、测试环境搭建或归档前的完整性验证。创建成本极低,使原本因代价过高而被省略的验证环节得以纳入常规流程。
功能特性
说明
V4.6.2.1 版本起支持并行 Fork 和后台并行处理功能。
| 特性 | 说明 |
|---|---|
| 高效创建 | 创建目标对象时避免全量复制数据,适合大表和整库场景 |
| 在线执行 | Fork 过程中源表可以继续进行 DML 读写 |
| 快照一致性 | 目标对象的数据与源对象在 Fork 快照时刻保持一致。Fork Database 中的所有表共享同一个快照版本 |
| 读写隔离 | Fork 完成后,源对象和目标对象相互独立,任一方的后续写入都不会影响另一方 |
| 渐进可用 | 目标对象创建后即可访问,后台数据组织的完善不影响对外提供的快照语义和可用性 |
| 并行 Fork | 支持同时对同一源对象发起多个 Fork,各目标对象的创建互不阻塞 |
| 后台并行处理 | 后台数据处理采用多线程并行执行,提升 Fork 整体完成效率 |
Fork 也可以用于版本回退。分支验证失败时,停止使用并删除分支即可回到原版本;验证通过时,可按业务和运维流程将分支切换为默认版本。
权限说明
发起 Fork 需要同时具备源对象的 SELECT 权限和目标对象的 CREATE 权限:
| 操作 | 源对象权限 | 目标对象权限 |
|---|---|---|
| Fork Table | 源表 SELECT |
目标库 CREATE |
| Fork Database | 源库库级 SELECT |
目标库 CREATE |
- Fork Table 的源表
SELECT可以由全局、库级或表级权限满足。 - Fork Database 要求源库库级
SELECT,全局或源库库级权限可以满足;仅拥有源库中各表的表级SELECT不满足要求。 - Fork 只能在当前租户内执行,不支持 sys tenant。
Fork 只复制 schema 和数据,不复制源对象上的授权,也不会自动给 Fork 发起人增加权限。目标对象按照普通新建对象判断权限:如果发起人只有 CREATE、没有目标对象的 SELECT,Fork 可以成功,但不能查询目标数据。
通用限制与约束
- 操作互斥:Fork Table 执行期间,源表和目标表会与相关 DDL 操作互斥。Fork Database 执行期间,源库及其中的表会与 DDL 操作互斥(如
DROP TABLE、DROP DATABASE)。Fork 期间源对象仍可继续进行 DML 读写。 - 目标对象已存在:如果目标对象已存在,或目标表与外键占位父表(mock FK parent table)重名,系统会报错。需先删除已有目标对象或更换名称。
- 回收站对象:不支持 Fork 已进入回收站的表或数据库。
- 系统或内部对象:不支持 Fork 内部表以及系统或内部数据库。
- 存储开销:Fork 创建时通过复用源对象的存储结构减少初始开销,后续对目标表/库的修改会增量产生存储消耗。
- 级联 Fork:支持对 Fork 产生的目标表/库再次执行 Fork,但在当前 Fork 操作的后台处理结束前,不支持级联 Fork。
常见问题
Q:Fork 出来的表/库和源表/库是什么关系?
A:完全独立。Fork 只是借用了源数据的一个快照作为初始状态,创建完成后两者互不影响。
Q:Fork 会影响源表的读写性能吗?
A:Fork 操作本身对源表/源库的性能影响极小。Fork 完成后,源表/源库和目标表/库的读写互不干扰。
Q:Fork 过程中源对象还能写入吗?
A:可以。Fork 过程中可以继续进行 DML 读写,但相关 DDL 会与 Fork 操作互斥。
Q:Fork 能指定历史时间点吗?
A:当前版本不支持用户指定时间点,系统会自动选取合适的快照时刻。
Q:为什么后台处理还未完全结束,目标对象就可以使用?
A:Fork 会先完成目标对象的创建并提供访问能力,后续数据组织在后台继续进行。该过程不影响快照一致性和正常读写。
Q:Fork 与传统数据复制有什么区别?
A:传统复制通常需要进行全量数据拷贝。Fork 采用增量复制和存储复用技术,创建速度更快,资源消耗更少。
Q:源表被删除后,Fork 出的目标表还能用吗?
A:目标表在 Fork 完成后是独立的,不依赖源表的后续状态。
Q:Fork Database 能保证所有表的数据是同一时刻的吗?
A:能。Fork Database 保证库内所有表共享同一个快照版本。
Q:Fork Database 与逐表执行 Fork Table 有什么区别?
A:Fork Database 对库内所有表使用同一个快照版本,可以保证多表数据一致性;逐表执行 Fork Table 时,各表的快照时刻可能不同。Fork Database 还会创建目标库并继承源库的数据库属性。
Q:同一个源数据库可以多次 Fork 吗?
A:可以,且支持同时发起。多次 Fork 到不同的目标库可并行执行,各目标库的数据为各自 Fork 时刻的快照,相互独立。