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

相关文章

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用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