当前位置: 首页 > news >正文

GaussDB闪回技术

概念介绍

闪回恢复功能是数据库恢复技术的一环,可以有选择性地撤销一个已提交的事务,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,通过闪回drop和闪回truncate恢复已提交的数据库drop/truncate的数据,只需要秒级,而且恢复时间和数据库大小无关。

闪回逻辑图

简单的比喻,闪回类似于虚拟机中的恢复快照、类似于看视频时候的快退操作。

控制闪回的参数主要有两个:

enable_recyclebin

undo_retention_time

使用GaussDB闪回恢复的注意事项:

Astore引擎只支持闪回DROP/TRUNCATE功能。

备机不支持闪回操作。

用户可以根据需要开启闪回功能,开启后会带来一定的性能劣化。

按照产品文档的顺序,本次主要通过 闪回查询、闪回表、闪回drop\truncate 三方面来介绍。

闪回查询

闪回查询可以查询过去某个时间点表的某个snapshot数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。闪回查询基于MVCC多版本机制,通过检索查询旧版本,获取指定老版本数据。

整体方案分为三部分:

旧版本保留、快照的维护和旧版本检索。

旧版本保留:新增undo_retention_time配置参数,用来设置旧版本保留的时间,超过该时间的旧版本将被回收清理。

注意:

使用时间点进行闪回时,可能会有3s的误差。想要闪回到精确的操作点,需要使用CSN进行闪回。

使用前参数设置确认

使用示例:

DROP TABLE IF EXISTS "public".flashtest;--创建表flashtest
CREATE TABLE "public".flashtest (col1 INT,col2 TEXT) WITH(storage_type=ustore);--插入数据
INSERT INTO flashtest VALUES(2025,'jiang');--查询当前数据
SELECT * FROM flashtest;

--查询csn
SELECT int8in(xidout(next_csn)) FROM gs_get_next_xid_csn();

--插入数据
INSERT INTO flashtest VALUES(1991,'shifeng');--查询当前数据
SELECT * FROM flashtest;--查询当前时间戳
select now();

--插入数据
INSERT INTO flashtest VALUES(1,'INSERT1'),(2,'INSERT2'),(3,'INSERT3'),(4,'INSERT4'),(5,'INSERT5'),(6,'INSERT6');--查询当前数据
SELECT * FROM flashtest;

--闪回查询某个csn处的表
SELECT * FROM flashtest TIMECAPSULE CSN 1234;

--闪回查询某个时间戳处的表
SELECT * FROM flashtest TIMECAPSULE TIMESTAMP '2025-09-10 15:28:22.184126';

--闪回查询某个时间戳处的表
SELECT * FROM flashtest TIMECAPSULE TIMESTAMP to_timestamp ('2025-09-10 15:28:22.184126', 'YYYY-MM-DD HH24:MI:SS.FF');

--闪回查询某个csn处的表,并对表进行重命名
SELECT * FROM flashtest AS ft TIMECAPSULE CSN 1234;

闪回表

闪回表可以将表恢复至特定时间点,当逻辑损坏仅限于一个或一组表,而不是整个数据库时,此特性可以快速恢复表的数据。闪回表基于MVCC多版本机制,通过删除指定时间点和该时间点之后的增量数据,并找回指定时间点和当前时间点删除的数据,实现表级数据还原。

使用语法

TIMECAPSULE TABLE table_name TO { TIMESTAMP | CSN } expression

使用示例

DROP TABLE IF EXISTS "public".flashtest;--创建表flashtest
CREATE TABLE "public".flashtest (col1 INT,col2 TEXT) WITH(storage_type=ustore);--插入数据
INSERT INTO flashtest VALUES(1,'INSERT1'),(2,'INSERT2');--查询csn
SELECT int8in(xidout(next_csn)) FROM gs_get_next_xid_csn();--查询当前时间戳
SELECT now();SELECT * FROM flashtest;

--插入数据
INSERT INTO flashtest VALUES(3,'INSERT3'),(4,'INSERT4');SELECT * FROM flashtest;

--闪回表至特定csn
TIMECAPSULE TABLE flashtest TO CSN 3351;SELECT * FROM flashtest;SELECT now();

--插入数据
INSERT INTO flashtest VALUES(5,'INSERT5'),(6,'INSERT6');SELECT * FROM flashtest;

--闪回表至此刻之前的特定时间戳
TIMECAPSULE TABLE flashtest TO TIMESTAMP to_timestamp ('2025-09-10 17:00:05.556824', 'YYYY-MM-DD HH24:MI:SS.FF');SELECT * FROM flashtest;SELECT now();

--插入数据
INSERT INTO flashtest VALUES(2025,'jiang'),(1991,'shifeng');SELECT * FROM flashtest;

--闪回表至此刻之后的特定时间戳
TIMECAPSULE TABLE flashtest TO TIMESTAMP '2025-09-10 17:01:40.256371';SELECT * FROM flashtest;

闪回DROP/TRUNCATE

闪回DROP

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

闪回TRUNCATE

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

主要参数

enable_recyclebin参数用于设置是否启用回收站。

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

使用示例1:(闪回drop掉的表)

--查看回收站
SELECT * FROM gs_recyclebin;

DROP TABLE IF EXISTS flashtest;--创建表flashtest
CREATE TABLE IF NOT EXISTS flashtest(id int, name text) with (storage_type = ustore);--插入数据
INSERT INTO flashtest VALUES(1, 'A');SELECT * FROM flashtest;

--DROP表flashtest
DROP TABLE IF EXISTS flashtest;--查看回收站,删除的表被放入回收站
SELECT * FROM gs_recyclebin;--查看表flashtest,表不存在
SELECT * FROM flashtest;

--闪回drop表
#直接闪回
TIMECAPSULE TABLE flashtest to before drop;#闪回drop表,表名用回收站中的rcyname
TIMECAPSULE TABLE "BIN$3269233841F9$E26F110==$0" to before drop;#闪回drop表,并重命名表
TIMECAPSULE TABLE flashtest to before drop rename to flashtest_rename;--查看表,表被恢复到drop之前
SELECT * FROM flashtest;

--查看回收站,回收站中的表被删除
SELECT * FROM gs_recyclebin;

使用示例2:(闪回truncate之后的表)

DROP TABLE IF EXISTS flashtest;--创建表flashtest
CREATE TABLE IF NOT EXISTS flashtest(id int, name text) with (storage_type = ustore);--插入数据
INSERT INTO flashtest VALUES(1, 'A');SELECT * FROM flashtest;--truncate表
TRUNCATE TABLE flashtest;--查看回收站,表的数据被放入回收站
SELECT * FROM gs_recyclebin;--查看表,表中的数据为空
SELECT * FROM flashtest;

--闪回truncate表
TIMECAPSULE TABLE flashtest to before truncate;--查看表,表中的数据被恢复
SELECT * FROM flashtest;--查看回收站
SELECT * FROM gs_recyclebin;

--清空回收站
PURGE RECYCLEBIN;--查看回收站,回收站被清空
SELECT * FROM gs_recyclebin;


文章转载自:

http://8f0ncLXI.xxsrm.cn
http://Fb4oNzWC.xxsrm.cn
http://3Ivupx1y.xxsrm.cn
http://IRXchKLI.xxsrm.cn
http://Hf1O4H7R.xxsrm.cn
http://SCSx92is.xxsrm.cn
http://71Hgc5bA.xxsrm.cn
http://wypwnQgO.xxsrm.cn
http://F5Nk8dwX.xxsrm.cn
http://6iG5NNuq.xxsrm.cn
http://hLX6wGDS.xxsrm.cn
http://SUU68me1.xxsrm.cn
http://wNWzt4L0.xxsrm.cn
http://osBTziR5.xxsrm.cn
http://juikQZIX.xxsrm.cn
http://niaMbZlO.xxsrm.cn
http://ZTUS0SbP.xxsrm.cn
http://qBlQhLIK.xxsrm.cn
http://d5uZPg4U.xxsrm.cn
http://PAgHUt9O.xxsrm.cn
http://Z62LXw1K.xxsrm.cn
http://N0jRYG2t.xxsrm.cn
http://N6XSX5bd.xxsrm.cn
http://OQSxCqQS.xxsrm.cn
http://jnIm7nfR.xxsrm.cn
http://1Z1GG3dg.xxsrm.cn
http://iTe6eB1k.xxsrm.cn
http://979H4qlq.xxsrm.cn
http://KwdwTMxz.xxsrm.cn
http://27Prkxc2.xxsrm.cn
http://www.dtcms.com/a/376207.html

相关文章:

  • OpenResty 配合 Lua 脚本的使用
  • 浅聊一下Redisson分布式锁
  • kdump使用方法和场景介绍
  • 提示词工程深度实践:从基础原理到生产级应用优化
  • [硬件电路-176]:光电二极管利用的二极管的漏电流与光强的线性关系,通过电流大小推算光强的大小
  • 基于单片机的电机交流调速系统设计(论文+源码)
  • Linux Namespace和Cgroup的概念
  • 关于Ubuntu的 update造成的内核升级
  • Ubuntu 22.04 安装 ROS 2 Humble 笔记
  • 基于数据挖掘的单纯冠心病与冠心病合并糖尿病的证治规律对比研究
  • LeetCode每日一题,20250910
  • Linux防火墙firewalld
  • JNI初识
  • Linux 系统中高性能 I/O 事件通知机制的核心——`epoll_create` 系统调用
  • UNIX与Linux:五大核心差异解析
  • 大模型评测工程师学习清单与计划
  • 5.后台运行设置和包设计与实现
  • 深度学习入门:打好数学与机器学习基础,迈向AI进阶之路
  • 【AOSP 的分层设计理念与命名规范】
  • Docker 清理完整指南:释放磁盘空间的最佳实践
  • 进程状态(Linux)
  • Linux负载如何判断服务器的压力
  • 【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
  • 第4讲 机器学习基础概念
  • 新加坡服务器连接速度变慢应该做哪些检查
  • Elasticsearch启动失败?5步修复权限问题
  • HR软件选型指南:SaaS还是本地部署好?
  • 基于51单片机简易计算器仿真设计(proteus仿真+程序+嘉立创原理图PCB+设计报告)
  • matlab基本操作和矩阵输入-台大郭彦甫视频
  • Power BI制作指标达成跟踪器