openGauss 2.1.0 闪回特性

openGauss 2.1.0 于 2021 年 9 月 30 日发布,是 openGauss 的一个 Preview 版本,该版本生命周期仅为半年。该版本的新增功能如下:

存储过程兼容性增强

SQL 引擎能力增强

支持 Ustore 存储引擎

支持段页式存储

基于 Paxos 分布式一致性协议的高可用

AI4DB 和 DB4AI 竞争力持续构筑

日志框架及错误码整改

JDBC 客户端负载均衡及读写分离

支持 cmake 脚本编译

列存表支持主键唯一键约束

支持 jsonb 数据类型

支持 unique sql 自动淘汰

UCE 故障感知

支持 GB18030 字符集

备机 catch 优化

客户端工具 gsql 支持 readline 命令自动补齐

动态数据脱敏

支持国密算法

防篡改账本数据库

内置角色和权限管理机制

透明加密

全密态数据库增强

支持 dblink

支持 Ubuntu 系统

支持 Hash 索引

upsert 支持子查询

min/max 函数支持 ip 地址类型

增加 array_remove/array_replace/first/last 函数

Data Studio 客户端工具适配内核特性

虽然以上官方文档中描述的新增特性中并没有提及闪回特性,但在《管理员指南》中已经明确提及该特性的使用方法。

闪回恢复其实是利用回收站的闪回恢复删除的表。利用 MVCC 机制闪回恢复到指定时间点或者 CSN 点(commit sequence number)。

闪回技术能够有选择性的高效撤销一个已提交事务的影响,从人为错误中恢复。在采用闪回技术之前,只能通过备份恢复、PITR 等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。

闪回恢复适用于:

误删除表的场景;

需要将表中的数据恢复到指定时间点或者 CSN。

闪回支持两种恢复模式:

基于 MVCC 多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或 CSN 点。

基于类似 windows 系统回收站的恢复:适用于误 DROP、误 TRUNCATE 的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误 DROP、误 TRUNCATE 的表找回。

重要提示:

遗憾的是,官方文档关于闪回恢复的前提条件并没有描述到位,导致初次接触该功能的小伙伴有些茫然(我也是),无法复现闪回恢复的特性操作。这里,需要向大家明确的是:关于 openGauss 的闪回,仅支持 Ustore 存储引擎(和 Oracle 一样,闪回的数据存储在 UNDO 表空间),也就是说,我们需要创建 Ustore 存储引擎的表才可以使用 openGauss 的闪回功能。

下面我们来看看 openGauss 的闪回测试。

一、创建测试数据

设置 Ustore 闪回相关参数

gs_guc set -N all -I all -c "undo_zone_count=16384" ## 内存中可分配的undo zone数量,0代表禁用undo和Ustore表,建议取值为max_connections*4

gs_guc set -N all -I all -c "enable_default_ustore_table=on" ## 开启默认支持Ustore存储引擎

gs_guc set -N all -I all -c "version_retention_age=10000" ## 旧版本保留的事务数,超过该事务数的旧版本将被回收清理

gs_guc set -N all -I all -c "enable_recyclebin=on" ## 打开回收站

gs_guc set -N all -I all -c "recyclebin_retention_time=15min" ## 置回收站对象保留时间,超过该时间的回收站对象将被自动清理

gs_om -t restart

创建测试表

gsql -d postgres -p 26000 -r

openGauss=# create table t1(a int,b int,c int,d int);

openGauss=# insert into t1 values(1,2,3,4),(21,22,23,24),(31,32,33,34);

openGauss=# select * from t1;

a | b | c | d

----+----+----+----

1 | 2 | 3 | 4

21 | 22 | 23 | 24

31 | 32 | 33 | 34

openGauss=# \d+ t1

Table "public.t1"

Column | Type | Modifiers | Storage | Stats target | Description

--------+---------+-----------+---------+--------------+-------------

a | integer | | plain | |

b | integer | | plain | |

c | integer | | plain | |

d | integer | | plain | |

Has OIDs: no

Options: orientation=row, compression=no, storage_type=USTORE

二、闪回查询

闪回查询可以查询过去某个时间点表的某个 snapshot 数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。闪回查询基于 MVCC 多版本机制,通过检索查询旧版本,获取指定老版本数据。

示例:

更新元组

openGauss=# select current_timestamp;

pg_systimestamp

2021-10-12 10:03:08.272344+08

openGauss=# update t1 set a=99;

openGauss=# select * from t1;

a | b | c | d

----+----+----+----

99 | 2 | 3 | 4

99 | 22 | 23 | 24

99 | 32 | 33 | 34

查询 timestamp 对应的 CSN

openGauss=# select snptime,snpcsn from gs_txn_snapshot

where snptime between '2021-10-12 10:03:05.272344+08' and '2021-10-12 10:03:18.272344+08';

snptime | snpcsn

-------------------------------+--------

2021-10-12 10:03:07.583368+08 | 2213

2021-10-12 10:03:10.595467+08 | 2214

2021-10-12 10:03:13.606675+08 | 2215

2021-10-12 10:03:16.619061+08 | 2216

执行闪回查询命令,查看闪回结果

基于 timestamp 的闪回查询

select * from t1 timecapsule timestamp to_timestamp('2021-10-12 10:03:08.272344','YYYY-MM-DD HH24:MI:SS.FF');

a | b | c | d

----+----+----+----

1 | 2 | 3 | 4

21 | 22 | 23 | 24

31 | 32 | 33 | 34

基于 CSN 的闪回查询

select * from t1 timecapsule csn 2213;

a | b | c | d

----+----+----+----

1 | 2 | 3 | 4

21 | 22 | 23 | 24

31 | 32 | 33 | 34

说明:

TIMESTAMP 参数:指要查询某个表在 TIMESTAMP 这个时间点上的数据,TIMESTAMP 指一个具体的历史时间。

CSN 参数:CSN 是一个逻辑提交时间点,数据库中的 CSN 是一个写一致性点,查询某个 CSN 下的数据代表 SQL 查询数据库在该一致性点的相关数据。

三、回收站

在拥有回收站之前,当用户误将表 drop 或 truncate 后,只能使用全库备份恢复的方式来解决这种逻辑错误。

在 openGauss 2.1.0 版本中,引入了回收站功能,用户通过该功能可以从回收站中闪回 TRUNCATE 或 DROP 的表对象,将数据恢复到错误操作前,大大提高了用户数据的可靠性。

闪回 drop: 可以恢复意外删除的表,从回收站(recyclebin)中恢复被删除的表及其附属结构如索引、表约束等。闪回 drop 是基于回收站机制,通过还原回收站中记录的表的物理文件,实现已 drop 表的恢复。

闪回 truncate: 可以恢复误操作或意外被进行 truncate 的表,从回收站中恢复被 truncate 的表及索引的物理数据。闪回 truncate 基于回收站机制,通过还原回收站中记录的表的物理文件,实现已 truncate 表的恢复。

官方文档没有强调到的坑需要注意:recyclebin 不支持 Ustore,只支持 Astore[详见下面测试示例] – 需要找开发确认,更新官方文档

示例:

误操作删除表

-- 创建测试数据

openGauss=# create table t1(id int,name varchar(200)) with (STORAGE_TYPE=USTORE);

openGauss=# insert into t1 values(1,'t1_Tom'),(2,'t1_Jerry');

openGauss=# select * from t1;

id | name

----+----------

1 | t1_Tom

2 | t1_Jerry

openGauss=# create table t2(id int,name varchar(200)) with (STORAGE_TYPE=ASTORE);

openGauss=# insert into t2 values(1,'t2_Tom'),(2,'t2_Jerry');

openGauss=# select * from t2;

id | name

----+----------

1 | t2_Tom

2 | t2_Jerry

-- 模拟误删表

openGauss=# drop table t1;

openGauss=# drop table t2;

查询回收站对象

openGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;

rcyname | rcyoriginname | rcytablespace

-----------------------------+---------------+---------------

BIN$3BFF4EB403B$4C71318$0 | t2 | 0 -- 仅看见Astore存储的t2表,并没有看到Ustore存储的t1表,注意!!

(1 row)

闪回操作

openGauss=# timecapsule table t2 to before drop rename to t2_bak;

TimeCapsule Table

openGauss=# select * from t2_bak;

id | name

----+----------

1 | t2_Tom

2 | t2_Jerry

和 Oracle 一样,也可以使用 recyname 恢复表,如“timecapsule table “BIN$3BFF4EB403B$4C71318$0” to before drop rename to t2;”。

其他闪回操作详见官方文档。

  1. 清空回收站

    openGauss=# purge recyclebin;

    PURGE RECYCLEBIN

    以上是本人对 openGauss 2.1.0 版本闪回特性的基本测试,希望能帮助到有需要的小伙伴。

openGauss 2.1.0 闪回特性的更多相关文章

  1. Oracle 闪回特性(FLASHBACK DATABASE)

    --===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...

  2. 6. Oracle闪回特性

    Oracle 闪回 (flashback)是9i版本提供的新特性.这一特性:其他数据库(PostgreSQL,Mysql)是羡慕不已.对数据恢复提供非常便捷的方式.闪回技术通常用于快速简单恢复数据库中 ...

  3. Oracle的闪回特性之恢复truncate删除表的数据

    Oracle的闪回特性之恢复truncate删除表的数据 SQL> show parameter flashback NAME                                 T ...

  4. MySQL闪回原理与实战

    本文将介绍闪回原理,给出笔者的实战经验,并对现存的闪回工具作比较. DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除 ...

  5. 恢复oracle中误删除drop掉的表 闪回的方法

    恢复oracle中误删除drop掉的表   查看回收站中表 --需要在其所在用户下查询 回收站对象 select object_name,original_name,partition_name,ty ...

  6. (4.11)mysql备份还原——mysql闪回技术(基于binlog)

    0.闪回技术与工具简介 mysql闪回工具比较流行三大类: [0.1]官方的mysqlbinlog:支持数据库在线/离线,用脚本处理binlog的输出,转化成对应SQL再执行.通用性不好,对正则.se ...

  7. FlashBack 闪回

    [学习目标] Flashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到 过去的某个时点的状态,这个功能依赖于Flashback log日志.比RMAN 更快速 ...

  8. Oracle 闪回

    Oracle 闪回特性(FLASHBACK DATABASE) 本文来源于:gerainly 的<Oracle 闪回特性(FLASHBACK DATABASE) > -========== ...

  9. mariadb的flashback到底怎么样???防误删可以,但算不上真正的闪回--再看mariadb 10.3的System-Versioned Tables

    mariadb 在10.2.4引入闪回特性,支持DML(INSERT, DELETE, UPDATE)操作的闪回,不支持DDL语句,使用闪回,必须设置binlog_row_image=FULL. 其原 ...

  10. MySQL的binlog2sql闪回

    从MySQL binlog解析出你要的SQL.根据不同选项,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途=========== * 数据快速回滚(闪回)* 主从切换后新m ...

随机推荐

  1. 【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)

    问题描述 在APIM Gateway 日志中, 对于发送到APIM Host的请求,只记录了一些常规的URL, Status, Time, IP等信息.关于请求Header, Body中的信息,因为隐 ...

  2. SSK:超级键盘模拟器,调用底层,可模拟所有按键

    SSK - 吵架键盘模拟器 SuperSimulator of Keyboard 调用系统底层,能够模拟所有键盘操作! 本程序结合快Key(QuicKeys智能登录助手)一起使用,能够创造更多奇迹! ...

  3. python中把列表中的字符串转成整型的几种方法

    python中在不同类型数据转换方面是有标准库的,使用非常方便.但是在开发中,经常在list中字符转成整形的数据方便遇到问题.这里就记录一下常用的几种方法. 方法一:最基本的方法:通过轮训整个list ...

  4. 网络io与select

    我们知道网络IO模型一共有5种,这里我们主要讨论同步IO和select多路复用的情况. 我们先从一个简单的TCP服务器的代码出发,来讨论一下这个是怎么实现的. 一个十分简单的TCP服务器 一个简单的T ...

  5. 建筑、工程和施工产业中的3D可视化

    3D视觉效果是传达想法,概念或设计的强大工具,它也用于在概念阶段推销该想法. AEC行业的可视化已经走了很长一段路,从将设计提交给客户进行批准,现在用于项目的每个阶段,从项目投标,获得客户和理事会的批 ...

  6. Bitmap优化详谈

    目录介绍 01.如何计算Bitmap占用内存 1.1 如何计算占用内存 1.2 上面方法计算内存对吗 1.3 一个像素占用多大内存 02.Bitmap常见四种颜色格式 2.1 什么是bitmap 2. ...

  7. 【Leetcode】768. 最多能完成排序的块 II

    题目(链接) arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个"块",并将这些块分别进行排序.之后再连接起来,使得连接的结果和按升序排序后的原数组相同. 我们最多能 ...

  8. 「AntV」景点轨迹数据获取与L7可视化

    1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...

  9. 记录--Canvas实现打飞字游戏

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 打开游戏界面,看到一个画面简洁.却又富有挑战性的游戏.屏幕上,有一个白色的矩形框,里面不断下落着各种单词,而我需要迅速地输入这些单词.如果 ...

  10. ADAS-AEB系统详解

    ADAS-AEB系统详解 AEB即自动紧急制动(Automatic Emergency Braking),其通过雷达.摄像头共同监测前方车辆以及行人情况,若探测到潜在碰撞风险,系统将采取相应预警及制动 ...