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. C++ //count_if //按条件统计元素个数 //自定义和 内置

    1 //按条件统计元素个数 2 //count_if 3 4 #include <iostream> 5 #include<string> 6 #include<vect ...

  2. Dungeon Master 题解

    这道题的题意简单来说:就是在3D迷宫里找出口,也就是三维地图,需要用到三维数组 由于本人写代码极易出错,所以在输入三维数组的时候修改了c(column,即列)的值,重复定义了没看到==,后面改成定义成 ...

  3. 微信小程序开发:页面分享卡片、风格选择、通道启用等可配置

    上文说到,我们部署了定时任务,但是有个地方忘记在上文写了,这里补上,就是定时任务的超时时间问题,超时时间有7200秒: 我们改成7100秒: 再把云函数调用的云对象的超时时间也改下: 超时时间多一点, ...

  4. Socket编程:htons()、htonl()、ntohs()、ntohl()

    前言 在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons().htonl().ntohs().ntohl(). 查阅资料得知,这是涉及到网 ...

  5. easy-window && aardio 桌面软件开发

    https://github.com/lixk/easy-window https://gitee.com/zha2/easy-window https://www.aardio.com/ 桌面软件开 ...

  6. DatePicker 日期选择器 split-panels 数组的时候,清空这个费劲啊,最后走的后门

    这里的核心问题就是验证的时候value值不对,总是初始化的值,不论怎么设置,开始觉得是数组指针的问题,最后也不行,null也不行,组件的props都已经是null了,验证就是这么神奇,最后把this放 ...

  7. Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序

    Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序

  8. ubuntu spyder3 颜色重置为暗色

    天杀的微软,爷用的是正版的专业版windows10还给爷推送个拿屁股作出来的系统 20H2 ,所有被强制更新的用户都不同程度的黑屏.卡顿.重启.还是ubuntu大法啊! 在ubuntu上换源下载vlc ...

  9. java方法的内存及练习

    方法的内存 一.方法调用的基本内存原理: Java内存分配 栈: 方法运行时使用的内存方法进栈运行,运行完毕就出栈 堆: newl出来的,都在堆内存中开辟了一个小空间 方法区: 存储可以运行的clas ...

  10. 记录--图解 Vue 响应式原理

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近部门分享,有同学提到了 Vue 响应式原理,大家在讨论时,发现一些同学对这一知识理解还不够深入,不能形成一个闭环,为了帮助大家理解这个 ...