基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Fork Database
更新时间:2026-09-15 17:00:16
说明
本功能在当前版本为实验特性。
Fork Database 基于源数据库在某个快照时刻的全量数据,创建一个全新的目标数据库。目标数据库包含源数据库中所有用户表及其数据,在逻辑上等价于源数据库在该快照时刻的完整副本。
Fork Database 底层基于 Fork Table 实现,对源库中的每张用户表依次执行 Fork,并保证库内所有表共享同一个快照版本,确保跨表数据的一致性。
语法
FORK DATABASE source_database TO destination_database;
参数说明
| 参数 | 说明 |
|---|---|
source_database |
源数据库名 |
destination_database |
目标数据库名 |
示例场景
创建库副本并进行读写
-- 创建库副本
FORK DATABASE db_src TO db_fork;
-- 目标库可查询
USE db_fork;
SELECT count(*) FROM t1;
-- 目标库可写入(写入不会影响源库 db_src)
INSERT INTO t1 VALUES (...);
整库分支与版本管理
-- 1) 基于主版本创建分支版本(数据基线为 fork 时刻快照)
FORK DATABASE db_prod TO db_prod_branch_v2;
-- 2) 在分支库上进行实验性变更
-- ... 对 db_prod_branch_v2 中的表执行 DML/业务流程 ...
-- 3a) 快速回滚:停止使用分支版本
DROP DATABASE db_prod_branch_v2;
空库 fork
CREATE DATABASE db_empty;
FORK DATABASE db_empty TO db_empty_fork;
-- 目标库 db_empty_fork 为空库,不含任何表
核心特性
说明
V4.6.2.1 版本起支持并行 Fork 和后台并行处理功能。
| 特性 | 说明 |
|---|---|
| 库级克隆 | 一次性克隆源库中所有用户表及数据,无需逐表操作 |
| 快照版本一致 | 库内所有表的快照版本相同,保证跨表数据一致性 |
| 独立可写 | 目标库可独立执行读写操作和 DDL,不影响源库 |
| 在线执行 | Fork 过程中源库可以继续进行 DML 读写 |
| 渐进可用 | 目标库创建后即可访问,后台数据组织的完善不影响快照语义和可用性 |
| 继承源库属性 | 目标库继承源库的字符集(charset)、排序规则(collation)等数据库属性 |
| 多次 Fork | 同一个源库可多次 Fork 到不同目标库,每次使用各自的快照时刻,各目标库相互独立 |
| 并行 Fork | 同一个源库可同时 Fork 到多个不同目标库 |
| 后台并行处理 | 后台数据处理采用多线程并行执行,提升 Fork 整体完成效率 |
| 支持空库 | 支持 Fork 空数据库,创建出的目标库同样为空库 |
权限说明
发起 Fork Database 需要同时具备:
- 源库库级
SELECT权限(全局或源库库级权限可以满足;仅拥有源库中各表的表级SELECT不满足要求) - 目标库的
CREATE权限
Fork 只复制 schema 和数据,不复制源库上的授权。目标库按照普通新建对象判断权限。Fork 只能在当前租户内执行,不支持 sys tenant。
操作互斥
Fork Database 执行期间,源库及其中的表会与 DDL 操作互斥,例如 DROP TABLE 和 DROP DATABASE。Fork 期间,源库仍可继续进行 DML 读写。
使用限制
| 对象或场景 | 处理方式 |
|---|---|
oceanbase、mysql 等系统或内部库 |
不支持 |
| Routine(存储过程、函数) | Fork 时忽略 |
| Package | Fork 时忽略 |
| Trigger | Fork 时忽略 |
| Sequence | 不支持 |
| Outline | Fork 时忽略 |
Fork Database 中的用户表还需满足 Fork Table 对表类型、索引类型和存储格式的相关要求,详见 Fork Table。
Fork Database 只处理用户基表,视图等其他非基表对象会被忽略。
注意事项
- Fork Database 克隆的是源库中的所有用户表及其数据。
- 目标库创建后与源库完全独立,对任一方的修改不会反映到另一方。
- 源库的 DDL 操作(如新增表、修改表结构)不会自动同步到目标库。
- Fork 操作不会影响源库的正常运行。