胖头鱼的鱼缸

崖山数据库沙箱功能实测:分支、快照、时间漫游全搞定

胖头鱼的技术专栏-429 崖山数据库沙箱功能实测:分支、快照、时间漫游全搞定(20260528)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)

公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

先聊聊痛点:研发与AI时代,数据环境有多头疼?

日常做数据相关研发,你大概率踩过这些坑:

  • 发版要适配多版本,多套schema、多套库,数据层版本管理压力拉满;
  • 误删数据/表,要么从历史版本找回、处理差异,要么靠设计文档重建结构,数据基本凉透;
  • AI时代更麻烦:探索过程数据被污染/损坏,要从头重来;AI 做过啥没法回溯,没法和历史对比。

简单说:数据环境缺版本、缺快照、缺隔离、缺回滚。

最近崖山数据库推出了内核原生沙箱组件,专门解决这类问题——提供分支、快照、隔离等数据环境管理能力,实测下来很顶。

二、崖山沙箱架构:三层设计,共享存储、隔离执行

image.png

崖山沙箱是内核级能力,整体架构分三层:

  1. 实例层

    负责业务接入与连接管理,是用户请求入口。
    解析连接串里的沙箱标识,把请求精准路由到目标沙箱,保证连接不跑偏。
  2. 数据沙箱引擎(核心)

    在实例层与存储引擎之间,内部跑多个独立沙箱。
    每个沙箱都是完整数据库运行环境:
    独立计算引擎,负责 SQL 解析执行;
    独立数据视图、独立事务上下文;
    沙箱之间逻辑完全隔离,一个沙箱操作不影响其他沙箱的数据可见性。
  3. 共享存储引擎

    所有沙箱共享底层存储,用写时拷贝实现数据共享。
    新建沙箱时直接共享父沙箱数据块,只有写入时才复制被修改的数据块。
    既省存储,又保证严格逻辑隔离。

三、 实战演示

很荣幸能够受到崖山数据库的参与崖山数据库沙箱功能的内测,本次测试是在RHEL 9.7操作系统上使用数据库版本23.6.0.1进行测试。
image.png

(一)分支操作:像Git一样管数据库

1. 查看当前分支

show branch;
或者
SELECT DBMS_BRANCH.CURRENT() FROM dual;

image.png
登录后默认分支是_ADMIN,类似于root分支,也被称为管理分支。

2. 切换到master分支

exec DBMS_BRANCH.CHECKOUT('master');
image.png

3. 创建分支并切换

-- 创建新分支
exec DBMS_BRANCH.CREATE('v_01');
-- 切换到新分支
exec DBMS_BRANCH.CHECKOUT('v_01');

image.png
image.png
注意:在管理分支中是无法执行创建分支的操作的。

4. 冻结/激活分支

-- 冻结test分支
exec DBMS_BRANCH.FREEZE('v_01');
-- 激活test分支
exec DBMS_BRANCH.ACTIVATE('v_01');

image.png
image.png
image.png
注意:不能冻结或激活当前所在分支

冻结分支后,无法进行任何读写操作。冻结操作常用于:

  • 保护分支不被意外修改
  • 标记分支为稳定版本
  • 节省系统资源

5. 删除分支

-- 删除test分支
exec DBMS_BRANCH.DELETE('v_01');

image.png
删除分支操作也不能在当前分支中操作,需要到其他分支中才行。

6. 重命名分支

exec DBMS_BRANCH.RENAME('test_branch', 'new_branch');

7. 查看所有分支信息

select DBMS_BRANCH.LIST() from dual;
image.png

(二)数据时间漫游:误删表?一键回滚到指定时间

数据时间漫游功能实现了将一个分支回溯到某个时间点的能力。可以在任何误操作或者需要回滚数据时发挥作用。这是沙箱最香的功能之一。

1. 创建测试数据

在分支v_01中创建测试数据:

create table test01 (id number,name varchar(20));
insert into test01 values(1,'yhw');
insert into test01 values(2,'sky');
commit;
image.png

2. 手滑删除

select current_timestamp from dual;
drop table test01;
image.png

3 回溯时间

exec DBMS_BRANCH.RESTORE('2026-05-28 13:26:09.0000');
image.png

还有另一种方式可以实现,即恢复到分支被创建时的状态:

--一键重置回初始状态
exec DBMS_BRANCH.RESET();

但我暂时还没有找到实现这种方式的方法。官方反馈在新版本中已修复。

从当前操作来看,第一种基于时间点的分支恢复已经可以很好的处理误操作和回滚数据的场景需求了。

三. 分支并行与隔离

1. 从当前分支新建子分支,默认继承父分支全量数据。

image.png

这里也引入一下DBMS_BRANCH.CREATE()相关参数:

exec DBMS_BRANCH.CREATE (
    name VARCHAR, -- 分支名,不指定内部生成
    parent VARCHAR, -- 父分支名,不指定从当前分支克隆
    checkout BOOLEAN, -- 创建之后是否立即切换,默认false
    is_default BOOLEAN -- 是否创建缺省分支,默认false
);

2. 子分支里增删改查,完全不影响父分支。

insert into test01 values(3,'yashan');
commit;

image.png
可以看到才分支v_03中,新的数据已经被插入。

切换回v_02查看数据:
image.png
分支v_02中的数据则不受影响。

分支并行与隔离能力使得多开发、多测试环境可同时在线,隔离拉满。

四、 完整流程:研发怎么用沙箱?

下面是分支操作的完整流程图:
image.png

五、使用注意事项

  • 数据库安装需要未格式化磁盘(裸盘或逻辑卷),数据库直接接管,才能支持写时拷贝、时间漫游;
  • 操作系统重启后,数据库不会自动启动,需要手动拉起;
  • 内测阶段部分操作偶现 BUG,已反馈官方,正式版会持续优化。

总结

崖山数据库这套内核原生沙箱,把分支管理、隔离和时间漫游做成了数据库级能力,完美解决研发版本管理、误操作恢复、AI 数据探索等痛点。对数据开发、测试、运维来说,是真正能提升效率、降低风险的硬核功能。

老规矩,知道写了些啥。

Image
今晚19点,在崖山数据库的直播间,我会和韩锋老师与嘉伟一起聊聊崖山沙箱!