暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

探秘 GBase 数据库闪回恢复功能:多模式恢复机制解析

原创 GBASE数据库 2025-08-07
100

数据备份是保护数据安全的重要手段之一。为了更好地保护数据安全,南大通用GBase 8c数据库提供三种备份恢复类型、多种备份恢复方案,能够在备份和恢复过程中保障数据的可靠性。 备份与恢复类型可分为逻辑备份与恢复、物理备份与恢复、闪回恢复。本文主要介绍GBase 8c的闪回恢复功能。

1、概述

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

2、闪回查询

背景信息 

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

语法

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

参数说明 

TIMESTAMP 指要查询某个表在TIMESTAMP这个时间点上的数据,TIMESTAMP指一个具体的历史时间。 

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

3、闪回表

背景信息 

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

前提条件 

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

语法 

TIMECAPSULE TABLE table_name TO { TIMESTAMP | CSN } expression 

4、闪回 DROP/TRUNCATE

背景信息 

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

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

前提条件 

开启enable_recyclebin 参数,启用回收站。 

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

相关语法 

删除表 

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

参数说明 

DROP/TRUNCATETABLEtable_name PURGE :默认将表数据放入回收站中,PURGE 直接清理。 

PURGERECYCLEBIN :表示清理回收站对象。

TOBEFOREDROP :使用这个子句检索回收站中已删除的表及其子对象。 可以指定原始用户指定的表的名称,或对象删除时数据库分配的系统生成名称。 回收站中系统生成的对象名称是唯一的。因此,如果指定系统生成名称,那么数据库检索指定的对象。使用“select*fromgs_recyclebin;”语句查看回收站中的内容。如果指定了用户指定的名称,且如果回收站中包含多个该名称的对象,然后数据库检索回收站中最近移动的对象。如果想要检索更早版本的表,可以进行操作:

  1. 指定想要检索的表的系统生成名称。 
  2. 执行TIMECAPSULE TABLE... TO BEFORE DROP语句,直到要检索的表。 
  3. 恢复DROP表时,只恢复基表名,其他子对象名均保持回收站对象名。用户可根据需要,执行DDL命令手工调整子对象名。
  4. 回收站对象不支持DML、DCL、DDL等写操作,不支持DQL查询操作(后续支持)。 
  5. 闪回点和当前点之间,执行过修改表结构或影响物理结构的语句,闪回失败。执行过DDL的表进行闪回操作报错:“ERROR:Thetabledefinition of %shasbeen changed.”。涉及 namespace、表名改变等操作的DDL 执行闪回操作报错: ERROR:recycle object %sdesired does not exis; 
  6. RENAMETO :为从回收站中检索的表指定一个新名称。 
  7. TOBEFORETRUNCATE :闪回到TRUNCATE之前。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论