YashanDB 闪回表(Flashback table)与Oracle 对比

2023年 10月 20日 41.3k 0

测试背景

国产数据库百花齐放,想看看各朵“花”有多鲜艳~

说明

1.YashanDB (崖山数据库) 是一款国产数据库,主打兼容Oracle。
2.Oracle 的闪回能力相信大家都很熟悉,网上的资料也挺多,这里不过多解释了。
3.并不是所有的数据库都具备闪回(flashback)功能,当然,不排除其他手段达到“闪回”的效果。

1. Flashback(闪回)

可以理解成一种稍微高级的数据恢复手段。当说到数据恢复时,大家可能第一时间想到rman备份恢复或者mysql的mysqldump备份等。

然而,对于日常开发或者运维中的一些“小失误”,我们往往不想大动干戈的去拿备份集恢复,又慢又重还很搞人心态。

闪回稍微高级的地方,就是“救火”咱们的“小失误”,比如误删除数据、误更新数据,甚至误删除表。直接通过一条命令,将数据恢复。

2. YashanDB 的闪回能力

主要包括如下能力:

  1. 闪回查询
  2. 闪回恢复数据至某个时间点
  3. drop操作闪回
  4. truncate操作闪回

2.1 闪回查询

就是查询过去某个时间点的数据。
例:

SELECT * FROM test AS OF TIMESTAMP TO_TIMESTAMP('2023/07/04 15:27:13','yyyy/mm/dd hh24:mi:ss')

和Oracle语法类似,主要使用as timestamp 来查询过去的某个时间点的数据。

2.2 闪回恢复数据至某个时间点

就是将这张表的数据,恢复到过去某个时间点的状态。

需要开启行迁移。因为,在YashanDB中,表内的任意行都是被rowid记录的,如果由于数据更新,导致你想闪回的rowid已经被其他数据占用了的话,在不对当前表启用行迁移的情况下,是没法迁移回去的。所以,需要开启行迁移功能。

#开启行迁移
ALTER TABLE test ENABLE ROW MOVEMENT;

例:

FLASHBACK TABLE test TO TIMESTAMP TO_TIMESTAMP('2023/07/04 15:27:13','yyyy/mm/dd hh24:mi:ss');

这里要注意的是,在当前时间和目标闪回时间之间,表的结构不得发生变化。

也和Oracle类似,语法一样。

2.3 闪回drop

就是你执行了一个drop table的操作,然后,你后悔了,马上将这张表恢复到drop表之前的状态。

闪回drop需要开启回收站功能。

#开启回收站
ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;

这个也好理解,因为在YashanDB里面,开启回收站之后,当我们去删除一张表时,并不会马上销毁,而是被放到“回收站”存储区域。就类似电脑上的回收站功能,我们删除的文件都放在了回收站,想要的时候,还可以恢复出来。

例:

FLASHBACK TABLE table_name TO BEFORE DROP;

与Oracle 一样一样。

2.4 闪回truncate

和闪回drop类似,也可以直接通过一个命令,将你刚才truncate的表数据,直接恢复回来。

原理也和闪回drop一样,需要开启回收站功能。

#开启回收站
ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;

在YashanDB 中,当我们执行了truancate table,也会将改对象的segment存放到回收站。

这一点是跟Oracle不一样的。在Oracle里面暂时没有一键闪回truncate。 因为Oracle 处理truncate和YashanDB处理truncate的机制上的差异,大家可以试试在Oracle里面,打开回收站功能,然后truncate table,其实在回收站视图里面是没有这个对象的信息的。

Oracle flashback table语法(19c)

YashanDB flashback table 语法

例:

FLASHBACK TABLE table_name TO BEFORE TRUNCATE;

至此,各位同学,崖山数据库的闪回truncate的功能有打动你吗?

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论