openGauss/MogDB 3.0 闪回恢复测试

本文出处:https://www.modb.pro/db/411368

介绍

闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR 等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。

闪回支持两种恢复模式:

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

基于数据库回收站的恢复(仅支持 Ustore):适用于误 DROP、误 TRUNCATE 的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误 DROP、误 TRUNCATE 的表找回。 说明: 回收站暂不支持 Astore 引擎(闪回 DROP/TRUNCATE)。

测试环境

操作系统:centos7.6 x86

数据库版本:openGauss 3.0

数据库环境:单机

(在这里数据库安装过程省略),根据上述提到的两种恢复模式下面分别进行测试。

闪回查询和表

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

前置条件

数据库配置文件 postgresql.conf 参数配置

enable_default_ustore_table=on ###开启默认支持Ustore存储引擎

undo_zone_count=16384 ###内存中可分配的undo zone数量,0代表禁用undo和Ustore表,建议取值为max_connections*4

undo_retention_time=2000 ###用于设置undo旧版本的保留时间,默认为0,单位s。

测试过程

---创建测试表并插入两条数据

openGauss=# create table u_tb (id int,c1 varchar(10));

CREATE TABLE

openGauss=# insert into u_tb values (1,'Aso'),(2,'Hocx');

INSERT 0 2

openGauss=# select clock_timestamp();

clock_timestamp

2022-06-02 16:21:38.123874+08

(1 row)

---再插入新数据

openGauss=# insert into u_tb values (3,'Ysad');

INSERT 0 1

openGauss=# select clock_timestamp();

clock_timestamp

2022-06-02 16:21:52.773089+08

(1 row)

---基于timestamp的闪回查询

openGauss=# SELECT * FROM u_tb TIMECAPSULE TIMESTAMP to_timestamp ('2022-06-02 16:21:38.123874', 'YYYY-MM-DD HH24:MI:SS.FF');

id | c1

----+------

1 | Aso

2 | Hocx

(2 rows)

openGauss=# select clock_timestamp();

clock_timestamp

2022-06-02 16:22:36.596661+08

(1 row)

---修改一行数据

openGauss=# update u_tb set id = 4 where id =3;

UPDATE 1

openGauss=# select * from u_tb;

id | c1

----+------

1 | Aso

2 | Hocx

4 | Ysad

(3 rows)

---查询timestamp对应的CSN

openGauss=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2022-06-02 16:21:52.773089' and '2022-06-02 16:22:36.596661';

snptime | snpcsn

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

2022-06-02 16:22:36.330093+08 | 45012

2022-06-02 16:22:33.306022+08 | 45011

2022-06-02 16:22:30.279709+08 | 45010

2022-06-02 16:22:27.256441+08 | 45009

2022-06-02 16:22:24.232027+08 | 45008

2022-06-02 16:22:21.208859+08 | 45007

2022-06-02 16:22:18.181382+08 | 45006

2022-06-02 16:22:15.15771+08 | 45005

2022-06-02 16:22:12.132989+08 | 45004

2022-06-02 16:22:09.109973+08 | 45003

2022-06-02 16:22:06.086961+08 | 45002

2022-06-02 16:22:03.064702+08 | 45001

2022-06-02 16:22:00.042871+08 | 45000

2022-06-02 16:21:57.009696+08 | 44999

2022-06-02 16:21:53.985716+08 | 44998

(15 rows)

---基于CSN的闪回查询

openGauss=# SELECT * FROM u_tb TIMECAPSULE CSN 45009;

id | c1

----+------

1 | Aso

2 | Hocx

3 | Ysad

(3 rows)

---基于CSN的闪回表

openGauss=# TIMECAPSULE TABLE u_tb TO CSN 45009;

TimeCapsule Table

openGauss=# select * from u_tb;

id | c1

----+------

1 | Aso

2 | Hocx

3 | Ysad

(3 rows)

---基于timestamp的闪回表

openGauss=# TIMECAPSULE TABLE u_tb TO TIMESTAMP to_timestamp ('2022-06-02 16:21:38', 'YYYY-MM-DD HH24:MI:SS.FF');

TimeCapsule Table

openGauss=# SELECT * FROM u_tb;

id | c1

----+------

1 | Aso

2 | Hocx

(2 rows)

闪回 drop/truncate

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

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

前置条件

enable_recyclebin=on ###启用回收站。 recyclebin_retention_time=30min ###参数用于设置回收站对象保留时间,超过该时间的回收站对象将被自动清理。

测试过程

---创建测试表

openGauss=# create table u_tb2 (id int,c1 varchar(10));

CREATE TABLE

openGauss=# insert into u_tb2 values (1,'Aso'),(2,'Hocx');

INSERT 0 2

openGauss=# select * from u_tb2;

id | c1

----+------

1 | Aso

2 | Hocx

(2 rows)

---truncate表

openGauss=# truncate u_tb2;

TRUNCATE TABLE

openGauss=# select * from u_tb2;

id | c1

----+----

(0 rows)

---闪回truncate操作

openGauss=# timecapsule table u_tb2 to before truncate;

TimeCapsule Table

openGauss=# select * from u_tb2;

id | c1

----+------

1 | Aso

2 | Hocx

(2 rows)

---误drop表

openGauss=# drop table u_tb2;

DROP TABLE

---查看回收站

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

rcyname | rcyoriginname | rcytablespace

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

BIN$3C774EBC071$23FB27078==$0 | u_tb2 | 0

(1 row)

---闪回drop表并且rename

openGauss=# timecapsule table u_tb2 to before drop rename to u_tb2_bak;

TimeCapsule Table

openGauss=# select * from u_tb2_bak;

id | c1

----+------

1 | Aso

2 | Hocx

(2 rows)

---删除表时不放到回收站

openGauss=# drop table u_tb2_bak purge;

DROP TABLE

---检查回收站

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

rcyname | rcyoriginname | rcytablespace

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

(0 rows)

总结 3.0 和 2.1 的区别

如果是 2.1 版本测试闪回查询和闪回表则需要配置参数 version_retention_age(设置旧版本保留的事务数,超过该事务数的旧版本将被回收清理),不是配置 undo_retention_time;在 3.0 版本中 version_retention_age 参数已被弃用,使用的参数就是 undo_retention_time(undo 旧版本保留时间)做闪回查询。回收站在 2.1 版本中对 Astore 表支持,在 3.0 中不再支持 Astore 表,而是 ustore 表才支持。

mogdb里xlog相关的几个参数的更多相关文章

  1. react中关于create-react-app2里css相关配置

    先看 webpack.config.dev.js 里的相关代码: // style files regexes const cssRegex = /\.css$/; const cssModuleRe ...

  2. 从头说catalan数及笔试面试里那些相关的问题 (转)

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11938973. 声明:版权所有,转载请注明出处,谢谢 ...

  3. 解决kettle在两个mysql之间迁移数据时乱码的问题 和 相关报错 及参数调整, 速度优化

    1. 乱码问题 编辑目标数据库的链接: 配置编码参数即可. 2. 报错 No operations allowed after statement closed. 需要调整wait_timeout:  ...

  4. catalan数及笔试面试里那些相关的问题(转)

    一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...

  5. 【前端童鞋看过来!】给大家分享网盘里前端相关书籍,主要是和网络通信(HTTP/TCP/IP)及javascript相关的

    百度云链接:https://pan.baidu.com/s/1kUPdf5H(无密码) 截图: <HTTP权威指南> [豆瓣书评]:此书第一部分是HTTP的概略,如果你没有时间,通读第一部 ...

  6. 掌握zigbee网络里的相关的重要概论

    1.zigbee无线通信,需要高频的载波来提供发射效率,zigbee模块之间要可以正常的收发,必须把接收频率设置和发射模块的载波频率一致. 2.zigbee有27个载波可以进行通信,载波叫做信道(无线 ...

  7. Swift里计数相关的小细节

    Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug. 在讲主题前,先说个小细节. Swift里非常严密的定义了一大堆字符 ...

  8. 替换文件里的相关单词(一)之文件类型为txt

    首先说一下详细的实现思路: 第一步:我们须要获取要改动文件的信息,我们能够通过文件的路径来获取文件的FileInputStream,即文件的输入流,然后调用InputStreamReader读取文件输 ...

  9. AbstractQueuedSynchronizer的使用和juc里的相关类的解析

    对AQS进行解析后,先来实现两个简单的基于AQS的类,然后再解析juc里基于AQS构造的类. 1.基于AQS的类的示例 首先先看这个类,这个类是<Java并发编程实战>的一个示例,AQS源 ...

  10. NFS客户端访问行为相关的几个参数解释

    soft / hard Determines the recovery behavior of the NFS client after an NFS request times out. If ne ...

随机推荐

  1. 【Azure Fabric Service】怎样关闭 Azure Service Fabric?

    问题描述 怎样关闭Azure Service Fabric服务呢?在Azure门户上没有找到 Stop 按钮. 问题回答 Azure Service Fabric 默认是无法停止的,可以删除. 虽然可 ...

  2. 【Azure 媒体服务】在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤

    问题描述 如何在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤 问题解决 第一步:在 Media Service 这边点击资产.上传本地视频资源作为Media Se ...

  3. 无依赖单机尝鲜 Nebula Exchange 的 SST 导入

    本文尝试分享下以最小方式(单机.容器化 Spark.Hadoop.Nebula Graph),快速趟一下 Nebula Exchange 中 SST 写入方式的步骤.本文适用于 v2.5 以上版本的 ...

  4. kafka的消费

    1.消费方式 consumer 采用 pull(拉) 模式从 broker 中读取数据. push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的. 它的目标是尽可能 ...

  5. Docker安装好后服务启动不了

    安装 安装方式参考地址:https://www.docker.org.cn/book/install/install-docker-on-rhel-29.html 问题 安装好后启动不了服务器.查看状 ...

  6. c语言中内存分配malloc,calloc,realloc函数的区别和联系

    一 概念: A malloc() 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址 B calloc() 与malloc相似,参数size ...

  7. Web service是什么? (转载)

    转载自 : Web service是什么?- 阮一峰的网络日志 作者: 阮一峰 日期: 2009年8月26日 我认为,下一代互联网软件将建立在Web service(也就是"云") ...

  8. Global AI Bootcamp 成都站 圆满结束!

    3月10日星期天下午2点「Global AI Bootcamp 2024 - 成都站」,在成都银泰中心蔚来汽车会议区圆满结束了! 本次活动共计吸引了约50名IT行业从业者线下参与,他们分别来自成都各行 ...

  9. x86 常见调用约定(cdecl,fastcall,stdcall) & x86和ARM调用约定的栈帧分析 & ARM ATPCS(ARM-THUMB procedure call standard)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  10. 低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计

    上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面.本文我们将回到低开的核心-页面拖拉拽,探讨关 ...