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 Redis 缓存 Azure Cache For Redis】Azure Redis删除 TLS 1.0 和 1.1的计划及问题

    问题描述 Azure Redis 正式关闭TLS1.0和1.1关闭的时间 根据文档描述Azure Redis阶段2我们将停止支持 TLS 1.1 和 TLS 1.0,暂时计划 2020 年 12 月 ...

  2. 使用Servlet进行页面跳转的两种方式

    最近在教学生学习JavaWeb相关的技术,刚好讲到Java当中的Servlet,一个服务端的小程序. 也在和学生讲使用Servlet如何进行页面跳转,一种方式是使用请求转发进行页面跳转,一种方式 是使 ...

  3. ACER 宏碁 笔记本无法进入 grub 引导 + 安全启动失败(security boot fail ) 解决办法

    主要介绍让BIOS首先引导grub的方法 加一点:添加完新的启动选项以后,如果看不到添加的启动项,就先保存重启,再进 BIOS 就可以看到了 我是宏碁的笔记本,装了双系统.之前无意间进了一次 BIOS ...

  4. ARM的无线ble IP Cordio-B50 stack and profiles简析

    一 简介 人家英文写的很清楚,我就不蹩脚额翻译了. Cordio-B50 stack is designed specifically for Bluetooth low energy single- ...

  5. 音频重采样48kk转16k

    作为一个音频算法工程师,不懂重采样怎么可以呢?这里做一个常用的方法介绍: pcm转wav: ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -a ...

  6. UDP可靠传输协议KCP的一些理解

    UDP主要用在哪两个方面 游戏 音视频通话 为什么要使用UDP? 实时性的考虑,丢包重传,TCP协议栈重传无法控制,UDP重发可以自定义策略. 在DNS查询的时候,也使用UDP,对资源的考虑. 如何做 ...

  7. ubuntu重启网卡

    1.关闭接口:sudo ifconfig eth0 down 2.然后打开:sudo ifconfig eth0 up

  8. 前后端分离Ajax入门

    前后端分离之Ajax入门 一.概念 Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信 ...

  9. vmware虚拟机共享文件夹显示不出来的解决办法

    今天在虚拟机里部署测试环境时,遇到一个问题,就是在vmware设置里明明共享了文件夹,但是在CentOS里却看不到共享的文件夹 环境 宿主机:MacBook Pro 虚拟机:vmware 15 虚拟机 ...

  10. Android 开发Day10

    这是main里面的所有代码,按版本修改过 AndroidManifest.xml <?xml version="1.0" encoding="utf-8" ...