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 事件中心】China Azure上是否有Kafka服务简答

    问题描述 China Azure 上是否有Kakfa服务可以使用呢? 问题回答 China Azure并没有专门的Kafka服务,但是可以使用Azure Event Hub. 创建标准版及以上的Eve ...

  2. Taurus.MVC WebMVC 入门开发教程7:部分视图和页面片段(结束篇)

    本系列的目录大纲为: Taurus.MVC WebMVC 入门开发教程1:框架下载环境配置与运行 Taurus.MVC WebMVC 入门开发教程2:一个简单的页面呈现 Taurus.MVC WebM ...

  3. opencv库图像基础1-python

    opencv库图像基础-python 基本操作 图片颜色通道 非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序 argparse模块 argparse 库是 Python 标准库中用于命 ...

  4. win10图标异常显示空白,WiFi图标消失等情况解决方案

    出现WiFi图标异常不显示,但是网络却正常,以下为解决方案: Win + R 快捷键调出运行框,输入%USERPROFILE%\AppData\Local,找到IconCache.db文件并删除,之后 ...

  5. Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)

    C. Number Game 我们考虑那些状态是必胜态 我的回合时n为奇数(除1外),直接除以n则必胜 下面偶数的情况稍复杂 偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败 ...

  6. MySql变量说明

    1 #变量 2 /* 3 系统变量: 4 全局变量 5 会话变量 6 7 自定义变量: 8 用户变量 9 局部变量 10 11 */ 12 #一.系统变量 13 /* 14 说明:变量由系统定义,不是 ...

  7. zabbix“专家坐诊”第178期问答汇总

    大家好,我是乐乐.早在三年前,我们就在社区举办了zabbix公益问答活动,并且定在每周三邀请资深的zabbix技术工程师,为社群的小伙伴进行免费的答疑.到现在已经178期了.后续我将会把每期的答疑汇总 ...

  8. vue peek 解决了 vue-template 加载 相对目录 ./components 组件内容 vscode

    点击组件跳转,vue-helper 带@的能跳转,相对目录的不能跳转.vue peek 解决了这个问题.

  9. SqlServer复制和订阅(实现主从同步)

    SqlServer复制和订阅 注意: 1.登录必须是服务器名称不能是ip 2.订阅服务器不需要提前创建数据库 复制 1.展开要发布的数据库节点,找到复制下的本地发布 2.右击本地发布,选择本地发布 3 ...

  10. pip 安装requirements.txt 的问题

    用新环境 在进行pip 安装的时候, 如果出现不进行安装 ,但是不报错就是满足条件,这个时候重新起一个shell,然后进行pip的安装.