

日常做数据相关研发,你大概率踩过这些坑:
简单说:数据环境缺版本、缺快照、缺隔离、缺回滚。
最近崖山数据库推出了内核原生沙箱组件,专门解决这类问题——提供分支、快照、隔离等数据环境管理能力,实测下来很顶。

崖山沙箱是内核级能力,整体架构分三层:
很荣幸能够受到崖山数据库的参与崖山数据库沙箱功能的内测,本次测试是在RHEL 9.7操作系统上使用数据库版本23.6.0.1进行测试。

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

登录后默认分支是_ADMIN,类似于root分支,也被称为管理分支。
exec DBMS_BRANCH.CHECKOUT('master');

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


注意:在管理分支中是无法执行创建分支的操作的。
-- 冻结test分支
exec DBMS_BRANCH.FREEZE('v_01');
-- 激活test分支
exec DBMS_BRANCH.ACTIVATE('v_01');



注意:不能冻结或激活当前所在分支
冻结分支后,无法进行任何读写操作。冻结操作常用于:
-- 删除test分支
exec DBMS_BRANCH.DELETE('v_01');

删除分支操作也不能在当前分支中操作,需要到其他分支中才行。
exec DBMS_BRANCH.RENAME('test_branch', 'new_branch');
select DBMS_BRANCH.LIST() from dual;

数据时间漫游功能实现了将一个分支回溯到某个时间点的能力。可以在任何误操作或者需要回滚数据时发挥作用。这是沙箱最香的功能之一。
在分支v_01中创建测试数据:
create table test01 (id number,name varchar(20));
insert into test01 values(1,'yhw');
insert into test01 values(2,'sky');
commit;

select current_timestamp from dual;
drop table test01;

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

还有另一种方式可以实现,即恢复到分支被创建时的状态:
--一键重置回初始状态
exec DBMS_BRANCH.RESET();
但我暂时还没有找到实现这种方式的方法。官方反馈在新版本中已修复。
从当前操作来看,第一种基于时间点的分支恢复已经可以很好的处理误操作和回滚数据的场景需求了。

这里也引入一下DBMS_BRANCH.CREATE()相关参数:
exec DBMS_BRANCH.CREATE (
name VARCHAR, -- 分支名,不指定内部生成
parent VARCHAR, -- 父分支名,不指定从当前分支克隆
checkout BOOLEAN, -- 创建之后是否立即切换,默认false
is_default BOOLEAN -- 是否创建缺省分支,默认false
);
insert into test01 values(3,'yashan');
commit;

可以看到才分支v_03中,新的数据已经被插入。
切换回v_02查看数据:

分支v_02中的数据则不受影响。
分支并行与隔离能力使得多开发、多测试环境可同时在线,隔离拉满。
下面是分支操作的完整流程图:

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