openGauss闪回恢复

2024-09-03 11:28
文章标签 恢复 闪回 opengauss

本文主要是介绍openGauss闪回恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

误删除不用怕,openGauss闪回恢复帮你搞定

下面主要从闪回查询、闪回表、闪回 DROP/TRUNCATE 方面进行演示。
闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据 从人为不正确的操作中进行恢复。

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

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

说明:回收站暂不支持 Astore 引擎(闪回 DROP/TRUNCATE)。

1 闪回查询表

闪回查询可以查询过去某个时间点表的某个快照数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。

闪回查询基于 MVCC 多版本机制,通过检索查询旧版本,获取指定老版本数据。

1.1 根据库配置文件 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。

[omm@trex ~]$ gs_guc set -N all -I all -c "enable_default_ustore_table=on"
[omm@trex ~]$ gs_guc set -N all -I all -c "undo_zone_count=16384"
[omm@trex ~]$ gs_guc set -N all -I all -c "undo_retention_time=2000"

​ 重新启动数据库。

[omm@trex ~]$ gs_om -t restart

1.2 查看修改后的参数值。

[omm@trex ~]$ gsql -d postgres -p 26000 -r
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:09:38 commit 0 last mr  )
NOTICE : The password has been expired, please change the password. 
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.openGauss=# show enable_default_ustore_table;enable_default_ustore_table 
-----------------------------on
(1 row)openGauss=# show undo_zone_count;undo_zone_count 
-----------------16384
(1 row)openGauss=# show undo_retention_time;undo_retention_time 
---------------------2000s
(1 row)openGauss=# 

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

openGauss=# create table test (id int,name varchar(10));
CREATE TABLE
openGauss=# insert into test values (1,'trex'),(2,'hankey');
INSERT 0 2

1.4 查看当前时间戳 t1。

openGauss=# select clock_timestamp();clock_timestamp        
-------------------------------2024-09-01 15:21:35.822563+08
(1 row)

1.5 再插入新数据。

openGauss=# insert into test values (3,'Yema');
INSERT 0 1
openGauss=# select * from test;id |  name  
----+--------1 | trex2 | hankey3 | Yema
(3 rows)openGauss=# 

1.6 查看当前时间戳 t2。

openGauss=# select clock_timestamp();clock_timestamp        
-------------------------------2024-09-01 15:23:34.342875+08
(1 row)

1.7 基于 timestamp 的闪回查询。 查询 t1 时刻时,test 表数据。

openGauss=# SELECT * FROM test TIMECAPSULE TIMESTAMP to_timestamp ('2024-09-01 15:21:35', 'YYYY-MM-DD HH24:MI:SS');id |  name  
----+--------1 | trex2 | hankey
(2 rows)openGauss=# 

1.8 基于 CSN 的闪回查询。

openGauss=# select clock_timestamp();clock_timestamp        
-------------------------------2024-09-01 15:34:59.319153+08
(1 row)openGauss=# update test set id = 4 where id =3;

1.9 查询 timestamp 对应的 CSN。

openGauss=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2024-09-01 15:34:20' and '2024-09-01 15:35:10';snptime            | snpcsn 
-------------------------------+--------2024-09-01 15:35:09.84636+08  |   24822024-09-01 15:35:06.832097+08 |   24812024-09-01 15:35:03.818291+08 |   24792024-09-01 15:35:00.804564+08 |   24782024-09-01 15:34:57.78217+08  |   24772024-09-01 15:34:54.768029+08 |   24762024-09-01 15:34:51.754253+08 |   24752024-09-01 15:34:48.743976+08 |   24742024-09-01 15:34:45.73307+08  |   24732024-09-01 15:34:42.716385+08 |   24722024-09-01 15:34:39.7026+08   |   24712024-09-01 15:34:36.691232+08 |   24702024-09-01 15:34:33.67825+08  |   24692024-09-01 15:34:30.665279+08 |   24682024-09-01 15:34:27.654471+08 |   24672024-09-01 15:34:24.640947+08 |   24662024-09-01 15:34:21.630685+08 |   2465
(17 rows)openGauss=# 
openGauss=# SELECT * FROM test TIMECAPSULE CSN 2477;id |  name  
----+--------1 | trex2 | hankey3 | Yema
(3 rows)

2 闪回 drop/truncate

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

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

2.1 根据库配置文件 postgresql.conf 参数配置。

  • enable_recyclebin=on ###启用回收站。

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

[omm@trex ~]$ gs_guc set -N all -I all -c "enable_recyclebin=on"
[omm@trex ~]$ gs_guc set -N all -I all -c "recyclebin_retention_time=30min"
[omm@trex ~]$ gs_om -t restart[omm@trex ~]$ gsql -d postgres -p 26000 -ropenGauss=# show enable_recyclebin;enable_recyclebin 
-------------------on
(1 row)openGauss=# show recyclebin_retention_time;recyclebin_retention_time 
---------------------------30min
(1 row)openGauss=# 

2.2 创建测试表

openGauss=# create table test2 (id int,name varchar(10));
CREATE TABLE
openGauss=# insert into test2 values (1,'sam'),(2,'allen'); 
INSERT 0 2
openGauss=# select * from test2;id | name  
----+-------1 | sam2 | allen
(2 rows)

2.3 truncate 表。

openGauss=# truncate test2; 
TRUNCATE TABLE
openGauss=# select * from test2;
id | c1
----+----
(0 rows)

2.4 闪回 truncate 操作。

openGauss=# timecapsule table test2 to before truncate;
TimeCapsule Table
openGauss=# select * from test2;id | name  
----+-------1 | sam2 | allen
(2 rows)openGauss=# 

2.5 误 drop 表

openGauss=# drop table test2;

2.6 查看回收站。

openGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;rcyname           | rcyoriginname | rcytablespace 
-----------------------------+---------------+---------------BIN$3D724EB4003$24BC308==$0 | test2         |             0

2.7 闪回 drop 表并且 rename。

openGauss=# timecapsule table test2 to before drop rename to test2_bak;
TimeCapsule Table
openGauss=# select * from test2_bak;id | name  
----+-------1 | sam2 | allen
(2 rows)openGauss=# 

2.8 删除表时不放到回收站。

如果需要在彻底删除表,不放到回收站,可操作如下

openGauss=# drop table test2_bak purge;
DROP TABLEopenGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;rcyname           | rcyoriginname | rcytablespace 
-----------------------------+---------------+---------------
(0 row)

3 总结

openGauss=# drop table test2_bak purge;
DROP TABLEopenGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;rcyname           | rcyoriginname | rcytablespace 
-----------------------------+---------------+---------------
(0 row)

3 总结

闪回恢复可以有选择性的撤销一个已提交事务的影响,对于误操作数据后恢复十分有效。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。可以快速有效的进行数据的恢复。

本文作者:马涛

这篇关于openGauss闪回恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132835

相关文章

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

海鸥相机存储卡格式化如何恢复数据

在摄影的世界里,‌每一张照片都承载着独特的记忆与故事。‌然而,‌当我们不慎将海鸥相机的存储卡格式化后,‌那些珍贵的瞬间似乎瞬间消逝,‌让人心急如焚。‌但请不要绝望,‌数据恢复并非遥不可及。‌本文将详细介绍在海鸥相机存储卡格式化后,‌如何高效地恢复丢失的数据,‌帮助您重新找回那些宝贵的记忆。‌ 图片来源于网络,如有侵权请告知 一、‌回忆备份情况 ‌海鸥相机存储卡格式化如何恢复数据?在意

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户: 在OPPO手机中格式化存储卡后可以恢复图片吗?我删除了 OPPO上的视频和图片,我感觉很糟糕,因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的照片吗?我不小心格式化了OPPO SD 卡,有希望恢复已删除的照片吗? 救命!我在清理时删除了我的照片,我的问题是是否有任何免费软件可以从OPPO中恢复已

openGauss 之索引回表

一. 前言 ​       在openGauss中如果表有索引信息,查询的谓词条件中又包含索引列,openGauss支持通过索引信息快速拿到需要访问元组的位置信息,然后直接到该位置上取出元组数据,称之为回表查询。如下所示,利用索引索引列id=55快速找到t111上对应元组的位置信息,然后通过位置信息拿到id为55的元组中所有列的数据。     本文通过走读openGauss的代码了解ope

Oracle Data Guard:Oracle数据库的高可用性和灾难恢复解决方案

在企业级数据库管理中,确保数据的高可用性和在灾难情况下的快速恢复是至关重要的。Oracle Data Guard是Oracle公司提供的一种强大的数据库高可用性解决方案,它通过在主数据库和至少一个备用数据库之间提供实时或近实时的数据保护来实现这一目标。本文将详细介绍如何在Oracle数据库中部署和使用Oracle Data Guard,包括其基本概念、配置步骤、管理技巧和实际应用示例。 1. O

【Redis】Redis Sentinel(哨兵)系统:自动故障恢复与高可用性配置全解

目录 哨兵 (Sentinel)基本概念主从复制的问题⼈⼯恢复主节点故障哨兵⾃动恢复主节点故障 安装部署 (基于 docker)准备⼯作 以下部分是独立于这一章节的Docker安装Server版本安装CentOS安装实战经验 GUI版本安装(以windows 11为例)安装docker 以上部分是独立于这一章节的重新选举redis-master 宕机之后redis-master 重启之

u盘格式化后数据能恢复吗?这四款工具别错过!

作为一个经常需要处理各种数据恢复问题的数码爱好者,我经常被朋友们问到:“如果U盘数据不小心被格式化了,用哪个软件恢复最好?”今天,我就来给大家分享一下我用福昕数据恢复、转转大师数据恢复和超级兔子数据恢复这三款软件恢复格式化U盘数据的实战体验。 首先,我们得知道,数据恢复并不是一件简单的事,尤其是U盘这种便携式存储设备,一旦格式化,数据很容易被覆盖。所以,一旦发现数据丢失,第一时间停止使用U盘,并

电脑回收站被清空,怎么恢复丢失数据?

回收站,这个看似不太起眼的电脑功能,实际上在关键时刻能够为我们挽回重大损失,帮助我们重新获得至关重要的文件和数据。对于经常与电脑打交道的朋友们来说,当某个文件被不小心删除时,回收站往往成为我们文件找回和恢复的希望。但如果回收站也被清空,我们该如何是好呢?别急,小编已经为您整理了3个实用的恢复方法,一起来看看吧! 方法一:快速撤销删除恢复回收站文件 回收站文件如何恢复?在删除文件后,如果