原作者;张晓娟
闪回恢复
- 闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。
- 闪回支持两种恢复模式:
- 基于MVCC多版本的数据恢复(仅支持Ustore):适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或CSN点。
- 基于数据库回收站的恢复(仅支持Ustore):适用于误DROP、误TRUNCATE的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误DROP、误TRUNCATE的表找回。
- 相关参数:
- enable_default_ustore_table=on
开启默认支持Ustore存储引擎 - undo_retention_time
设置undo旧版本保留时间。等同于允许闪回查询的时间跨度,超过该时间闪回查询可能会报restore point not found
错误。 - enable_recyclebin=on
打开回收站 - recyclebin_retention_time=15min
设置回收站对象保留时间,超过该时间的回收站对象将被自动清理
- enable_default_ustore_table=on
测试环境
- 环境信息
- 操作系统:CentOS7.6 x86_64
- 数据库版本: 5.0
- 数据库环境:单机,安装过程详见 https://www.modb.pro/db/654780
闪回查询
- 闪回查询可以查询过去某个时间点表的某个snapshot数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。闪回查询基于MVCC多版本机制,通过检索查询旧版本,获取指定老版本数据。
前提条件
- 需要配置以下几个参数:
[omm@raca2 ~]$ gs_guc set -D /opt/mogdb/data/ -c "enable_default_ustore_table=on" [omm@raca2 ~]$ gs_guc set -D /opt/mogdb/data/ -c "enable_ustore=on" [omm@raca2 ~]$ gs_guc set -D /opt/mogdb/data/ -c "undo_zone_count=16384" [omm@raca2 ~]$ gs_guc set -D /opt/mogdb/data/ -c "undo_retention_time=1800" // 重启数据库,使参数生效 [omm@raca2 ~]$ gs_om -t restart
复制
- 查看当前参数配置
MogDB=# select name,setting,context from pg_settings where name in ('enable_default_ustore_table','undo_retention_time','undo_zone_count','enable_ustore'); name | setting | context -----------------------------+---------+------------ enable_default_ustore_table | on | user enable_ustore | on | postmaster undo_retention_time | 1800 | sighup undo_zone_count | 16384 | postmaster (4 rows)
复制
模拟测试
- 创建表及插入数据
MogDB=# create table t1(id int,name varchar(10)); CREATE TABLE MogDB=# \d+ t1 Table "public.t1" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | name | character varying(10) | | extended | | Has OIDs: no Options: orientation=row, compression=no, storage_type=USTORE MogDB=# insert into t1 values(1,'Apple'),(2,'Bear'); INSERT 0 2 MogDB=# select clock_timestamp(); clock_timestamp ------------------------------- 2023-08-15 16:35:40.788785+08 (1 row) MogDB=# insert into t1 values(3,'Car'); INSERT 0 1 MogDB=# select clock_timestamp(); clock_timestamp ------------------------------- 2023-08-15 16:35:51.932852+08 (1 row)
复制
- 基于timestamp的闪回查询
MogDB=# SELECT * FROM t1 TIMECAPSULE TIMESTAMP to_timestamp ('2023-08-15 16:35:40.788785', 'YYYY-MM-DD HH24:MI:SS.FF'); id | name ----+------- 1 | Apple 2 | Bear (2 rows)
复制
- 修改一行数据
MogDB=# select clock_timestamp(); clock_timestamp ------------------------------- 2023-08-15 16:44:10.124224+08 (1 row) MogDB=# update t1 set name='Cup' where id=3; UPDATE 1 MogDB=# select * from t1; id | name ----+------- 1 | Apple 2 | Bear 3 | Cup (3 rows)
复制
- 基于CSN的闪回查询
MogDB=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2023-08-15 16:43:59.124224' and '2023-08-15 16:44:10.124224'; snptime | snpcsn -------------------------------+-------- 2023-08-15 16:44:04.411239+08 | 9598 2023-08-15 16:44:07.423107+08 | 9599 2023-08-15 16:44:01.397737+08 | 9597 (3 rows) MogDB=# SELECT * FROM t1 TIMECAPSULE CSN 9598; id | name ----+------- 1 | Apple 2 | Bear 3 | Car (3 rows)
复制
闪回表
- 闪回表可以将表恢复至特定时间点,当逻辑损坏仅限于一个或一组表,而不是整个数据库时,此特性可以快速恢复表的数据。闪回表基于MVCC多版本机制,通过删除指定时间点和该时间点之后的增量数据,并找回指定时间点和当前时间点删除的数据,实现表级数据还原。
- 基于CSN的闪回表
MogDB=# TIMECAPSULE TABLE t1 TO CSN 9598; TimeCapsule Table MogDB=# select * from t1; id | name ----+------- 1 | Apple 2 | Bear 3 | Car (3 rows)
复制
- 基于timestamp的闪回表
MogDB=# TIMECAPSULE TABLE t1 TO TIMESTAMP to_timestamp ('2023-08-15 16:35:40.788785', 'YYYY-MM-DD HH24:MI:SS.FF'); TimeCapsule Table MogDB=# select * from t1; id | name ----+------- 1 | Apple 2 | Bear (2 rows)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2031次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
910次阅读
2025-04-03 15:21:16
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
855次阅读
2025-04-27 16:53:22
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
623次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
515次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
502次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
486次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
434次阅读
2025-04-07 09:44:54
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
391次阅读
2025-04-17 17:02:24
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
372次阅读
2025-04-10 12:32:35
TA的专栏
热门文章
我的故障分析及处理思路分享(李真旭)
2020-10-22 11126浏览
公共子表达式消除(Common Subexpression elimination,CSE)
2020-08-26 6204浏览
Oracle数据库的跟踪和分析方法
2020-10-02 5067浏览
2.5.9使用systemd管理MySQL服务器
2020-10-20 4539浏览
初探华为云GaussDB (for MySQL)
2020-12-11 3871浏览
最新文章
28.4.4 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS 表
2024-09-29 108浏览
28.4.3 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU 表
2024-09-29 67浏览
28.4.2 INFORMATION_SCHEMA INNODB_BUFFER_PAGE 表
2024-09-29 65浏览
28.4.1 INFORMATION_SCHEMA InnoDB 表参考
2024-09-29 69浏览
28.3.50 INFORMATION_SCHEMA VIEW_TABLE_USAGE 表
2024-09-29 71浏览
目录