openGauss闪回恢复实践操作

2023年 10月 26日 39.5k 0

一、适用场景

1)误删除表的场景;   2)需要将表中的数据恢复到指定时间点或者 CSN。

二、简单描述

闪回恢复可以有选择的撤销已提交事务对数据库的影响,恢复速度快,只需要秒级,而且恢复速度与数据库大小无关。

三、实践操作

0.配置闪回相关参数

## 旧版本保留的事务数,超过该事务数的旧版本将被回收清理
gs_guc set -N all -I all -c "version_retention_age=10000"
## 打开回收站
gs_guc set -N all -I all -c "enable_recyclebin=on"
## 置回收站对象保留时间,超过该时间的回收站对象将被自动清理
gs_guc set -N all -I all -c "recyclebin_retention_time=15min"
gs_guc set -N all -I all -c "vacuum_defer_cleanup_age=10000"
#重新加载使配置生效
gs_ctl reload -D /data/og1

1.闪回查询

描述:可以查询过去某个时间点表的 snapshot(快照)数据,基于 MVCC 多版本控制机制,通过检索查询旧版本,获取指定老版本的数据。

#记录当前时间
test=# select current_timestamp;
pg_systimestamp
-------------------------------
2022-03-03 11:00:46.075387+08
(1 row)

#插入数据
test=# insert into test_1 values(3);
INSERT 0 1

#记录插入数据之后的时间
test=# select current_timestamp;
pg_systimestamp
-------------------------------
2022-03-03 11:00:58.635591+08
(1 row)

#查询timestamp对应的CSN
test=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2022-03-03 11:00:43.075387+08' and
test-# '2022-03-03 11:00:58.635591';
snptime | snpcsn
-------------------------------+--------
2022-03-03 11:00:58.513917+08 | 3134
2022-03-03 11:00:55.492238+08 | 3131
2022-03-03 11:00:52.471618+08 | 3129
2022-03-03 11:00:49.446113+08 | 3127
2022-03-03 11:00:46.424361+08 | 3125
2022-03-03 11:00:43.402865+08 | 3123
(6 rows)

#执行闪回查询命令,查看闪回结果
#基于timestamp闪回查询,注意:基于时间点的闪回查询,这个时间点可以不是对应到csn点的时间,
#可以是recylcebin_retention_time内的任意时间
test=# select * from test_1 timecapsule timestamp to_timestamp('2022-03-03 11:00:43.513917','YYYY-MM-DD HH24:
MI:SS.FF');
id
----
1

2
(3 rows)
此时3还没有插入

#基于csn闪回查询
test=# select * from test_1 timecapsule csn 3123;
id
----
1

2
(3 rows)

2.闪回 drop

闪回 drop:可以恢复意外删除的表

#模拟删除表
[omm@OG1 ~]$ gsql -d test -p 15400 -r
test=# drop table test_1;
DROP TABLE

#查看回收站中的内容
test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
------------------------------+---------------+---------------
BIN$61124EB6173$52489D18==$0 | test_1 | 0
#gs_recyclebin这个表属于pg_catalog,有很多列,
#暂时先关注到rcyname:表示对象被删除时,系统生成的名称
#rcyoriginname:表示被删除对象原来的名称

#闪回恢复刚刚删除的表test_1,并为其起了名字叫test_1_bak
test=# timecapsule table test_1 to before drop rename to test_1_bak;
TimeCapsule Table
test=# select * from test_1_bak;
id
----
1

2
3
(4 rows)
#再次查看一下回收站中的内容
test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
---------+---------------+---------------
(0 rows)
#可以发现,回收站中对于test_1的记录已经删除

#如果在删除表的时候加入了purge,那么表会被直接删除掉,而不是放到回收站中
test=# drop table test_1_bak purge;
DROP TABLE
test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
---------+---------------+---------------
(0 rows)

3.闪回 truncate

闪回 truncate:可以恢复误操作或意外 truncate 的表

#truncate表test_2,这个表中创建有索引
test=# truncate table test_2;
TRUNCATE TABLE
test=# select * from test_2;
id | name
----+------
(0 rows)
#可以发现truncate之后表中的数据没有了

#查看回收站中的内容
test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
------------------------------+---------------+---------------
BIN$61124EB6168$524F90A8==$0 | test_2 | 0
BIN$61124EB616C$524F9A58==$0 | id_uniq | 0
(2 rows)

#利用回收站恢复truncate掉的数据
test=# timecapsule table test_2 to before truncate;
TimeCapsule Table
test=# select * from test_2;
id | name
----+--------
1 | XXX
2 | XXX
3 | haha
4 | Zhang
5 | Hua
6 | AAA
7 | heihei
8 | Get
(8 rows)

test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
------------------------------+---------------+---------------
BIN$61124EB616C$52548180==$0 | id_uniq | 0
BIN$61124EB6168$52548748==$0 | test_2 | 0
(2 rows)

#从上可以发现,恢复truncate掉的数据之后,回收站中还有相应的记录

#清空回收站中指定的表或索引信息
test=# purge table test_2;
PURGE TABLE
test=# select rcyname,rcyoriginname,rcytablespace from gs_recyclebin;
rcyname | rcyoriginname | rcytablespace
---------+---------------+---------------
(0 rows)
##由于索引id_uniq附属在表test_2上,所以purge掉表的同时,也会将相关索引给purge掉

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论