首页 > 数据库 >openGauss学习笔记-154 openGauss 数据库运维-备份与恢复-闪回恢复

openGauss学习笔记-154 openGauss 数据库运维-备份与恢复-闪回恢复

时间:2023-12-12 21:02:46浏览次数:42  
标签:闪回 CSN 154 DROP TABLE openGauss TIMECAPSULE 回收站

openGauss学习笔记-154 openGauss 数据库运维-备份与恢复-闪回恢复

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

img 说明:

ASTORE引擎暂不支持闪回DROP/TRUNCATE。

  • 闪回查询
  • 闪回表
  • 闪回DROP/TRUNCATE

154.1 闪回查询

154.1.1 背景信息

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

154.1.2 前提条件

  • undo_retention_time参数用于设置undo旧版本的保留时间。

154.1.3 语法

{[ ONLY ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
[ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ]
[TIMECAPSULE { TIMESTAMP | CSN } expression ]
|( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
|with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
|function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
|function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
|from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]}

语法树中“TIMECAPSULE {TIMESTAMP | CSN} expression”为闪回功能新增表达方式,其中TIMECAPSULE表示使用闪回功能,TIMESTAMP以及CSN表示闪回功能使用具体时间点信息或使用CSN(commit sequence number)信息。

154.1.4 参数说明

  • TIMESTAMP
    • 指要查询某个表在TIMESTAMP这个时间点上的数据,TIMESTAMP指一个具体的历史时间。
  • CSN
    • 指要查询整个数据库逻辑提交序下某个CSN点的数据,CSN指一个具体逻辑提交时间点,数据库中的CSN为写一致性点,每个CSN代表整个数据库的一个一致性点,查询某个CSN下的数据代表SQL查询数据库在该一致性点的相关数据。

154.1.5 使用示例

  • 示例1:

    SELECT * FROM t1 TIMECAPSULE TIMESTAMP to_timestamp ('2020-02-11 10:13:22.724718', 'YYYY-MM-DD HH24:MI:SS.FF');
    
  • 示例2:

    SELECT * FROM t1 TIMECAPSULE CSN 9617;
    
  • 示例3:

    SELECT * FROM t1 AS t TIMECAPSULE TIMESTAMP to_timestamp ('2020-02-11 10:13:22.724718', 'YYYY-MM-DD HH24:MI:SS.FF');
    
  • 示例4:

    SELECT * FROM t1 AS t TIMECAPSULE CSN 9617;
    

154.2 闪回表

154.2.1 背景信息

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

154.2.2 前提条件

  • undo_retention_time参数用于设置undo旧版本的保留时间。

154.2.3 语法

TIMECAPSULE TABLE table_name TO { TIMESTAMP | CSN } expression

154.2.4 使用示例

TIMECAPSULE TABLE t1 TO TIMESTAMP to_timestamp ('2020-02-11 10:13:22.724718', 'YYYY-MM-DD HH24:MI:SS.FF');
TIMECAPSULE TABLE t1 TO CSN 9617;

154.3 闪回DROP/TRUNCATE

154.3.1 背景信息

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

154.3.2 前提条件

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

154.3.3 相关语法

  • 删除表

    DROP TABLE table_name [PURGE]
    
  • 清理回收站对象

    PURGE { TABLE { table_name }
    | INDEX { index_name }
    | RECYCLEBIN
    }
    
  • 闪回被删除的表

    TIMECAPSULE TABLE { table_name } TO BEFORE DROP [RENAME TO new_tablename]
    
  • 截断表

    TRUNCATE TABLE { table_name } [ PURGE ]
    
  • 闪回截断的表

    TIMECAPSULE TABLE { table_name } TO BEFORE TRUNCATE
    

154.3.4 参数说明

  • DROP/TRUNCATE TABLE table_name PURGE

    • 默认将表数据放入回收站中,PURGE直接清理。
  • PURGE RECYCLEBIN

    • 表示清理回收站对象。
  • TO BEFORE DROP

    使用这个子句检索回收站中已删除的表及其子对象。

    可以指定原始用户指定的表的名称,或对象删除时数据库分配的系统生成名称。

    • 回收站中系统生成的对象名称是唯一的。因此,如果指定系统生成名称,那么数据库检索指定的对象。使用“select * from gs_recyclebin;”语句查看回收站中的内容。
    • 如果指定了用户指定的名称,且如果回收站中包含多个该名称的对象,然后数据库检索回收站中最近移动的对象。如果想要检索更早版本的表,你可以这样做:
      • 指定你想要检索的表的系统生成名称。
      • 执行TIMECAPSULE TABLE … TO BEFORE DROP语句,直到你要检索的表。
  • 恢复DROP表时,只恢复基表名,其他子对象名均保持回收站对象名。用户可根据需要,执行DDL命令手工调整子对象名。

    • 回收站对象不支持DML、DCL、DDL等写操作,不支持DQL查询操作(后续支持)。
    • 闪回点和当前点之间,执行过修改表结构或影响物理结构的语句,闪回失败。涉及namespace、表名改变等操作的DDL执行闪回报错: ERROR: recycle object %s desired does not exis;增加/删除/切割/合成等分区改变等操作的DDL执行闪回报错: ERROR: relation %s does not exis;其他情况报错:“ERROR:The table definition of %s has been changed. ”。
  • RENAME TO

    为从回收站中检索的表指定一个新名称。

  • TO BEFORE TRUNCATE

    闪回到TRUNCATE之前。

154.3.5 语法示例

DROP TABLE t1 PURGE;

PURGE TABLE t1;
PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";
PURGE INDEX i1;
PURGE INDEX "BIN$04LhcpndanfgMAAAAAANPw==$0";
PURGE RECYCLEBIN;

TIMECAPSULE TABLE t1 TO BEFORE DROP;
TIMECAPSULE TABLE t1 TO BEFORE DROP RENAME TO new_t1;
TIMECAPSULE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0" TO BEFORE DROP;
TIMECAPSULE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO new_t1;

标签:闪回,CSN,154,DROP,TABLE,openGauss,TIMECAPSULE,回收站
From: https://blog.51cto.com/shuchaoyang/8790764

相关文章

  • openGauss学习笔记-155 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-155openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-概述155.1概述openGauss提供的gs_dump和gs_dumpall工具,能够帮助用户导出需要的数据库对象或其相关信息。通过导入工具将导出的数据信息导入至需要的数据库,可以完成数据库......
  • openGauss-预编译慢问题
    背景:使用opengauss3.0.3,JDBC使用占位符,PreparedStatement的方法测试,因为是压测和业务场景特殊,每次使用的参数都一致。现象:1、不传参的方法,将where条件变量写死,执行时间很快2、修改enable_pbe_optimization=off,发现执行5次之后,依然慢分析:查看where条件带值的SQL执行计划,和使......
  • openGauss学习笔记-152 openGauss 数据库运维-备份与恢复-物理备份与恢复之PITR恢复
    openGauss学习笔记-152openGauss数据库运维-备份与恢复-物理备份与恢复之PITR恢复152.1背景信息当数据库崩溃或希望回退到数据库之前的某一状态时,openGauss的即时恢复功能(Point-In-TimeRecovery,简称PITR)可以支持恢复到备份归档数据之后的任意时间点。说明:PITR仅支持恢......
  • openGauss学习笔记-153 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_proback
    openGauss学习笔记-153openGauss数据库运维-备份与恢复-物理备份与恢复之gs_probackup153.1背景信息gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。可用于备份单机数据库,也可对主机或者......
  • openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebac
    openGauss学习笔记-151openGauss数据库运维-备份与恢复-物理备份与恢复之gs_basebackup151.1背景信息openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_basebackup工具做基础的物理备份。gs_basebackup的实现目标是对服务器数据库文件的......
  • 「杂题乱刷」洛谷P1544
    题目链接数字三角形的变形。直接在原来的基础上加个判断\(3\)倍的就行了。参考代码:点击查看代码#include<bits/stdc++.h>usingnamespacestd;longlongn,m,ans=-1e18,a[110][110],dp[110][110][5010];#definelc(x)x<<1#definerc(x)x<<1|1#definelowbit(x)x&-......
  • P1541-DP【绿】
    刚开始理解错题意了,题中说“玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片”指的是不能用同一张卡片,我给理解成不能连续用同一种卡片了。后来想想其实题目中的说法歧义不大,是我粗心才导致看错的。最终我看错的导致了题目难度更高一些,偏偏写完了更高难度的题之......
  • openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复
    openGauss学习笔记-146openGauss数据库运维-备份与恢复-配置文件的备份与恢复146.1背景信息在openGauss使用过程中,如果静态配置文件无意损坏后,会影响openGauss感知openGauss拓扑结构和主备关系。使用gs_om工具生成的静态配置文件,可以替换已经损坏的配置文件,保证openGauss的正......
  • openGauss学习笔记-143 openGauss 数据库运维-例行维护-数据安全维护建议
    openGauss学习笔记-143openGauss数据库运维-例行维护-数据安全维护建议为保证openGauss数据库中的数据安全,避免丢失数据、非法访问数据等事故发生,请仔细阅读以下内容。143.1避免数据被丢失建议用户规划周期性的物理备份,且对备份文件进行可靠的保存。在系统发生严重错误的情况......
  • openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引
    openGauss学习笔记-141openGauss数据库运维-例行维护-例行重建索引141.1背景信息数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。数据库支持的索引类型为B-tree索引,例行重建索引可有效的提高查询效率。如果数据发生......