首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >崖山数据库沙箱功能实测:分支、快照、时间漫游全搞定

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

作者头像
胖头鱼的鱼缸
发布2026-07-02 15:49:48
发布2026-07-02 15:49:48
90
举报

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

914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

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

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

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

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

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

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

image.png
image.png

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

  1. 实例层 负责业务接入与连接管理,是用户请求入口。 解析连接串里的沙箱标识,把请求精准路由到目标沙箱,保证连接不跑偏。
  2. 数据沙箱引擎(核心) 在实例层与存储引擎之间,内部跑多个独立沙箱。 每个沙箱都是完整数据库运行环境: 独立计算引擎,负责 SQL 解析执行; 独立数据视图、独立事务上下文; 沙箱之间逻辑完全隔离,一个沙箱操作不影响其他沙箱的数据可见性。
  3. 共享存储引擎 所有沙箱共享底层存储,用写时拷贝实现数据共享。 新建沙箱时直接共享父沙箱数据块,只有写入时才复制被修改的数据块。 既省存储,又保证严格逻辑隔离。

三、 实战演示

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

image.png
image.png

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

1. 查看当前分支
代码语言:javascript
复制
show branch;
或者
SELECT DBMS_BRANCH.CURRENT() FROM dual;
image.png
image.png

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

2. 切换到master分支
代码语言:javascript
复制
exec DBMS_BRANCH.CHECKOUT('master');
image.png
image.png
3. 创建分支并切换
代码语言:javascript
复制
-- 创建新分支
exec DBMS_BRANCH.CREATE('v_01');
-- 切换到新分支
exec DBMS_BRANCH.CHECKOUT('v_01');
image.png
image.png
image.png
image.png

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

4. 冻结/激活分支
代码语言:javascript
复制
-- 冻结test分支
exec DBMS_BRANCH.FREEZE('v_01');
-- 激活test分支
exec DBMS_BRANCH.ACTIVATE('v_01');
image.png
image.png
image.png
image.png
image.png
image.png

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

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

  • 保护分支不被意外修改
  • 标记分支为稳定版本
  • 节省系统资源
5. 删除分支
代码语言:javascript
复制
-- 删除test分支
exec DBMS_BRANCH.DELETE('v_01');
image.png
image.png

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

6. 重命名分支
代码语言:javascript
复制
exec DBMS_BRANCH.RENAME('test_branch', 'new_branch');
7. 查看所有分支信息
代码语言:javascript
复制
select DBMS_BRANCH.LIST() from dual;
image.png
image.png

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

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

1. 创建测试数据

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

代码语言:javascript
复制
create table test01 (id number,name varchar(20));
insert into test01 values(1,'yhw');
insert into test01 values(2,'sky');
commit;
image.png
image.png
2. 手滑删除
代码语言:javascript
复制
select current_timestamp from dual;
drop table test01;
image.png
image.png
3 回溯时间
代码语言:javascript
复制
exec DBMS_BRANCH.RESTORE('2026-05-28 13:26:09.0000');
image.png
image.png

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

代码语言:javascript
复制
--一键重置回初始状态
exec DBMS_BRANCH.RESET();

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

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

三. 分支并行与隔离

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

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

代码语言:javascript
复制
exec DBMS_BRANCH.CREATE (
    name VARCHAR, -- 分支名,不指定内部生成
    parent VARCHAR, -- 父分支名,不指定从当前分支克隆
    checkout BOOLEAN, -- 创建之后是否立即切换,默认false
    is_default BOOLEAN -- 是否创建缺省分支,默认false
);
2. 子分支里增删改查,完全不影响父分支。
代码语言:javascript
复制
insert into test01 values(3,'yashan');
commit;
image.png
image.png

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

切换回v_02查看数据:

image.png
image.png

分支v_02中的数据则不受影响。

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

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

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

image.png
image.png

五、使用注意事项

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

总结

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

老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 胖头鱼的技术专栏-429 崖山数据库沙箱功能实测:分支、快照、时间漫游全搞定(20260528)
    • 先聊聊痛点:研发与AI时代,数据环境有多头疼?
    • 二、崖山沙箱架构:三层设计,共享存储、隔离执行
    • 三、 实战演示
      • (一)分支操作:像Git一样管数据库
      • (二)数据时间漫游:误删表?一键回滚到指定时间
      • 三. 分支并行与隔离
    • 四、 完整流程:研发怎么用沙箱?
    • 五、使用注意事项
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档