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

华为GaussDB T FLASHBACK TABLE

墨天轮 2019-10-12
1049

FLASHBACK TABLE

功能描述

在人为操作或应用程序错误时,使用FLASHBACK TABLE语句恢复表到一个早期状态。

表可以闪回到过去的时间点,这依赖于系统中撤销数据的数据量。此外,GaussDB 100数据库不能恢复到通过任何DDL操作改变了表结构的早期状态。

注意事项

  • 执行该语句的用户需要有FLASHBACK权限;如果是其他用户下的表,需要FLASH ANY TABLE权限。
  • FLASHBACK TABLE语句的用法主要分成两大类:从撤销数据中闪回和从回收站中闪回。
    • 撤销数据中记录了新增、更新的数据对象。TO SCN expr和TO TIMESTAMP expr是从撤销数据中闪回。
    • 回收站记录了DROP的对象数据。TO BEFORE DROP语句就是从回收站中闪回。
  • GaussDB 100默认不强制转换日期类型,需要通过函数显式转化。
  • 数据库重启回滚期间不支持该操作。

语法格式

FLASHBACK TABLE [ schema_name. ]table_name TO { SCN expr | TIMESTAMP expr | BEFORE { DROP [ RENAME TO table_name ] | TRUNCATE FORCE } }

参数说明

  • schema_name

    指定模式包含的表。如果缺省,则为当前模式。

  • table_name

    指定一个或多个表名称。

    闪回表受以下限制:

    • 对于这些对象类型闪回表操作是无效的:物化视图、系统表、外部表、独立分区表和子分区表。
    • 以下DDL操作改变了表的结构,所以不能接着使用TO SCN或TO TIMESTAMP闪回到操作之前的时间点:
      • 升级、移动、截取表(truncate)。
      • 增加表约束、增加表;删除或修改列;更改列的加密密钥。
      • 增加、删除、合并、分离、联合、截取分区或子分区(除了增加范围分区)。
  • TO SCN

    指定你要返回表的时间点对应的系统改变号(SCN)。expr必须计算一个数字,代表有效的SCN。

  • expr

    一个有效的scn号。

  • TO TIMESTAMP

    指定你要返回表的时间点对应的时间戳。expr 必须计算一个过去有效的时间戳(使用TO_TIMESTAMP函数将字符串转换为时间类型)。表将被闪回到指定时间戳大约3秒内的时间点。

    说明:回退时间应该小于建表时间,否则会报错。

  • TO BEFORE DROP

    使用这个子句检索回收站中已删除的表,及其可能依赖的对象。该表必须是驻留在本地管理表空间,而不是其他系统表空间。

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

    • 回收站中系统生成的对象名称是唯一的。因此,如果指定系统生成名称,那么数据库检索指定的对象。使用“select * from SYS_RECYCLEBIN;”语句查看回收站中的内容。
    • 如果指定了用户指定的名称,且如果回收站中包含多个该名称的对象,然后数据库检索回收站中最近移动的对象。如果想要检索更早版本的表,你可以这样做:
      • 指定你想要检索的表的系统生成名称。
      • 执行FLASHBACK TABLE ... TO BEFORE DROP语句,直到你要检索表。
  • RENAME TO

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

  • TRUNCATE FORCE

    闪回到TRUNCATE之前。

示例

--创建表空间human_bonus。 CREATE TABLESPACE human_bonus DATAFILE 'bonus2018' SIZE 32M;
--删除表bonus_2018。 DROP TABLE IF EXISTS bonus_2018;
--创建表bonus_2018。 CREATE TABLE bonus_2018(staff_id INT NOT NULL, staff_name CHAR(50), job VARCHAR(30), bonus NUMBER) TABLESPACE human_bonus;
--向表bonus_2018中插入记录1。 INSERT INTO bonus_2018(staff_id, staff_name, job, bonus) VALUES(20,'LIMING','developer',5000); --向表bonus_2018中插入记录2。 INSERT INTO bonus_2018(staff_id, staff_name, job, bonus) VALUES(21,'LIYU','tester',7000); --向表bonus_2018中插入记录3。 INSERT INTO bonus_2018(staff_id, staff_name, job, bonus) VALUES(22,'WANGQIMING','developer',8000); --提交事务。 COMMIT;
--删除表bonus_2018的数据。 TRUNCATE TABLE bonus_2018; --闪回表到前一分钟(执行闪回命令时间距离创建表时间需大于1分钟,否则会报错)。 FLASHBACK TABLE bonus_2018 TO TIMESTAMP SYSTIMESTAMP-1/1440;
--查询表bonus_2018中的数据。 SELECT * FROM bonus_2018;
--删除表bonus_2018。 DROP TABLE IF EXISTS bonus_2018;
--查询表bonus_2018中的数据。 SELECT * FROM bonus_2018;
--闪回表到DROP操作之前。 FLASHBACK TABLE bonus_2018 TO BEFORE DROP;
--查询表bonus_2018中的数据。 SELECT * FROM bonus_2018;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论