19闪回

简介: 19闪回

一、闪回恢复

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

 

 说明: ASTORE引擎暂不支持闪回DROP/TRUNCATE

 

1. 闪回支持两种恢复模式:

 

基于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

 

   设置回收站对象保留时间,超过该时间的回收站对象将被自动清理

 

 

二、闪回查询

 

1. 背景信息

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

 

2. 前提条件

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

 

3. 语法

 

FlashBack ::= ( select_statement) TIMECAPSULE { TIMESTAMP | CSN } expression

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

 

4. 参数说明

TIMESTAMP

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

CSN

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

5. 使用示例

 

示例1

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

示例2

```sql
SELECT * FROM t1 TIMECAPSULE CSN 9617;
```

示例3

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

示例4

```sql
SELECT * FROM t1 AS t TIMECAPSULE CSN 9617;
```

三、闪回表

1. 背景信息

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

 

2. 前提条件

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

3. 语法

FlashBack ::= TIMECAPSULE TABLE table_name TO { TIMESTAMP | CSN } expression

4. 使用示例

```sql
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;
```

四、闪回DROP/TRUNCATE

1. 背景信息

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

 

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

 

2. 前提条件

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

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

3. 相关语法

 

删除表

DropTable ::= DROP TABLE table_name [PURGE]

清理回收站对象

PurgeRecyclebin ::= PURGE { TABLE { table_name }
  | INDEX { index_name }
  | RECYCLEBIN
  }

闪回被删除的表

TimecapsuleTable ::= TIMECAPSULE TABLE { table_name } TO BEFORE DROP [RENAME TO new_tablename]

截断表

TruncateTable ::= TRUNCATE TABLE { table_name } [ PURGE ]

闪回截断的表

TimecapsuleTable ::= TIMECAPSULE TABLE { table_name } TO BEFORE TRUNCATE

五、参数说明

DROP/TRUNCATE TABLE table_name PURGE

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

PURGE RECYCLEBIN

 表示清理回收站对象。

TO BEFORE DROP

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

 

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

 

回收站中系统生成的对象名称是唯一的。因此,如果指定系统生成名称,那么数据库检索指定的对象。使用“select * from pg_recyclebin;”语句查看回收站中的内容。

如果指定了用户指定的名称,且如果回收站中包含多个该名称的对象,然后数据库检索回收站中最近移动的对象。如果想要检索更早版本的表,你可以这样做:

 指定你想要检索的表的系统生成名称。

 执行TIMECAPSULE TABLE … TO BEFORE DROP语句,直到你要检索的表。

 恢复DROP表时,只恢复基表名,其他子对象名均保持回收站对象名。用户可根据需要,执行DDL命令手工调整子对象名。

 回收站对象不支持DMLDCLDDL等写操作,不支持DQL查询操作(后续支持)。

 闪回点和当前点之间,执行过修改表结构或影响物理结构的语句,闪回失败。涉及namespace、表名改变等操作的DDL执行闪回报错: ERROR: recycle object %s desired does not exis;增加/删除/切割/合成等分区改变等操作的DDL执行闪回报错: ERROR: relation %s does not exis;其他情况报错:“ERRORThe table definition of %s has been changed. ”

RENAME TO

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

 

TO BEFORE TRUNCATE

闪回到TRUNCATE之前。

 

六、语法示例

```sql
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;
```
目录
相关文章
|
Oracle 关系型数据库 数据库
一个Oracle数据库,一天归档日志3T多
Oracle数据库一体机,Oracle linux7,看看归档日志大小
|
SQL Oracle 关系型数据库
|
SQL 存储 Oracle
PostgreSQL WAL解析与闪回的一些想法
最近在walminer基础做了不少修改,以支持我们的使用场景。详细参考 如何在PostgreSQL故障切换后找回丢失的数据 修改也花了不少精力和时间,这个过程中有些东西想记录下来,方便以后查阅。
1620 0
|
SQL 存储 NoSQL
DM7闪回与闪回查询
闪回当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的UNDO记录来完成历史记录的还原。
827 0
|
SQL Oracle 关系型数据库
Oracle闪回drop和闪回查询
        Oracle提供了7种闪回技术,分别为:闪回drop、闪回查询、闪回数据归档、闪回表、闪回版本查询、闪回事务、闪回数据库。此次验证下Oracle数据库闪回drop和闪回查询。 一、闪回DROP         又名闪回删除。
11215 0
|
SQL 监控 Oracle
|
Oracle 关系型数据库 数据库