一、KingbaseES V8R6 flashback drop table介绍

  • 使用FLASHBACK删除和恢复表

    删除表时,数据库不会立即删除与该表关联的空间。数据库重命名表,并将其和任何关联的对象放在回收站中,万一表被错误地删除,可以在稍后恢复。这个特性被称为FLASHBACK DROP, FLASHBACK TABLE语句用于恢复表。

  • 什么是回收站

    回收站实际上是一个数据字典表,包含关于被删除对象的信息。被删除的表和任何关联的对象(如索引、约束、嵌套表等)没有被删除,仍然会占用空间。

  • 用户可以使用以下语句查看回收站中的对象:

    SELECT * FROM RECYCLEBIN;

    开启回收站功能后,DROP TABLE 语句会将对象放入回收站。DROP TABLE若是开启了GUC参数:kdb_flashback.db_recyclebin=on,且未指定PURGE选项,则删除的表及其关联的索引、规则、触发器、约束等将被放到SYS_RECYCLEBIN系统表中。 它添加表及其关联对象,以便它们可以作为一个组数据一起进行恢复。在需要时可以将回收站中的表闪回到删除之前的状态。除了表本身,添加到回收站的关联对象可以包括以下类型的对象:

    嵌套表 LOB数据库字段 索引 约束(不包括外键约束) 触发器 聚簇

  • 启用和禁用回收站

    当回收站被启用时,被删除的表及其相关对象将被放入回收站。当回收站被禁用时,被删除的表及其相关对象不会被放入回收站,它们被彻底删除,您必须使用其他方法来恢复它们(例如从备份中恢复)。

    回收站功能默认关闭,可以通过下列命令查看是否开启回收站功能:

    show kdb_flashback.db_recyclebin;

    开启回收站功能,在登录数据库后执行以下命令即可

    alter system set kdb_flashback.db_recyclebin = on;

  • 从回收站恢复表

    开启了回收站参数后,如果不允许一个删除的表进回收站,需要在DROP语句后面加上PUGRE选项。flashback支持将一个已经删除到回收站中的表及相关对象闪回到删除之前状态。

    如果在当前schema下已经存在同名的表,则闪回失败,需要使用rename to选项指定一个新的表名。 成功闪回一个表后,回收站视图recyclebin和回收站系统表sys_recyclebin中对象将被清除。

    一个FLASHBACK命令:

    FLASHBACK TABLE TABLE_name TO BEFORE DROP;

    这个命令将在回收站中的TABLE_name闪回到闪回之前的状态:

    FLASHBACK TABLE TABLE_name TO BEFORE DROP RENAME TO newname;

    将回收站中的表闪回到一个新的表名:

二、kingbaseES V8R6 flashback drop table配置

1、配置kdb_flashback extension

[kingbase@node102 data]$ cat kingbase.conf |grep flashback
shared_preload_libraries = 'liboracle_parser, synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, ora_commands,kdb_ora_expr, sepapower, dblink, sys_kwr, sys_ksh, sys_spacequota, sys_stat_statements, backtrace, kdb_utils_function, auto_bmr, sys_squeeze, src_restrict'

2、启用kdb_flashback功能

prod=# show kdb_flashback.db_recyclebin ;
kdb_flashback.db_recyclebin
-----------------------------
off
(1 row) prod=# alter system set kdb_flashback.db_recyclebin=on;
prod=# select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 row) prod=# show kdb_flashback.db_recyclebin ;
kdb_flashback.db_recyclebin
-----------------------------
on
(1 row)

2 、查看回收站

prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-----+---------------+----------+------
(0 rows)

3、drop table回收测试

# 查看表结构
prod=# \d ts
Table "public.ts"
Column | Type | Collation | Nullable | Default
---------+----------+-----------+----------+---------
doc | text | | |
doc_tsv | tsvector | | |
Indexes:
"ts_doc_tsv_idx" gin (doc_tsv) #删除表
prod=# drop table ts;
DROP TABLE #查看回收站
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-------+----------------------+-------------------------------+-------
26787 | ts | 2022-12-12 16:56:43.140637+08 | TABLE
26793 | ts_doc_tsv_idx | 2022-12-12 16:56:43.140083+08 | INDEX
26792 | pg_toast_26787_index | 2022-12-12 16:56:43.140591+08 | INDEX
(3 rows)
---如上所示,回收站中包括表自身还有索引等对象信息 #将表闪回
prod=# flashback table ts to before drop rename to ts1;
FLASHBACK TABLE prod=# \d
List of relations
Schema | Name | Type | Owner
--------+---------------------+-------+--------
public | sys_stat_statements | view | system
public | t1 | table | system
public | test1 | table | system
public | ts1 | table | system
(4 rows) #表已经被闪回
prod=# select * from ts1;
doc | doc_tsv --------------------------------------------------------+----------------------------------------------------------------------
--------------------------
Can a sheet slitter slit sheets? | 'a':2 'can':1 'sheet':3 'sheets':6 'slit':5 'slitter':4
How many sheets could a sheet slitter slit? | 'a':5 'could':4 'how':1 'many':2 'sheet':6 'sheets':3 'slit':8 'slitt
er':7
I slit a sheet, a sheet I slit. | 'a':3,5 'i':1,7 'sheet':4,6 'slit':2,8
Upon a slitted sheet I sit. | 'a':2 'i':5 'sheet':4 'sit':6 'slitted':3 'upon':1
Whoever slit the sheets is a good sheet slitter. | 'a':6 'good':7 'is':5 'sheet':8 'sheets':4 'slit':2 'slitter':9 'the'
:3 'whoever':1
I am a sheet slitter. | 'a':3 'am':2 'i':1 'sheet':4 'slitter':5
I slit sheets. | 'i':1 'sheets':3 'slit':2
I am the sleekest sheet slitter that ever slit sheets. | 'am':2 'ever':8 'i':1 'sheet':5 'sheets':10 'sleekest':4 'slit':9 'sl
itter':6 'that':7 'the':3
She slits the sheet she sits on. | 'on':7 'she':1,5 'sheet':4 'sits':6 'slits':2 'the':3
(9 rows) #回收站数据已经被闪回
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-----+---------------+----------+------
(0 rows)

4、drop table...purge测试

Tips:

在drop table时如果使用了purge参数,表将不会保留在回收站,注意此参数的风险。

prod=# drop table ts1 purge;
DROP TABLE prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-----+---------------+----------+------
(0 rows)

三、清理回收站

1、清理指定表

prod=# drop table t1;
DROP TABLE
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-------+---------------+-------------------------------+-------
35003 | t1 | 2022-12-19 10:53:31.035541+08 | TABLE
(1 row) prod=# purge table t1;
PURGE
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-----+---------------+----------+------
(0 rows)

2、清理回收站所有对象

prod=# \d test1
Table "public.test1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
v_name | varchar | | |
Indexes:
"test1_pkey" PRIMARY KEY, btree (id)
"test1_name_ind" btree (v_name) #删除表
prod=# drop table test1;
DROP TABLE #查看回收站信息
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-------+----------------------+-------------------------------+------------
16720 | test1 | 2022-12-19 10:47:20.672125+08 | TABLE
26800 | test1_name_ind | 2022-12-19 10:47:20.670681+08 | INDEX
16726 | test1_pkey | 2022-12-19 10:47:20.671065+08 | INDEX
16725 | pg_toast_16720_index | 2022-12-19 10:47:20.672085+08 | INDEX
16727 | test1_pkey | 2022-12-19 10:47:20.671065+08 | CONSTRAINT
(5 rows) #清理回收站
prod=# purge recyclebin;
PURGE #查看回收站(对象已经清空)
prod=# SELECT * FROM RECYCLEBIN;
oid | original_name | droptime | type
-----+---------------+----------+------
(0 rows)

四、总结

KingbaseES V8R6的kdb_flashback功能,可以通过回收站机制的将用户误删除(drop table)的表数据快速恢复,有效缩短数据库恢复的RTO。

KingbaseES V8R6 运维案例 --flashback drop table的更多相关文章

  1. KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复

    案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...

  2. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  3. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  4. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  5. 运维案例 | Exchange2010数据库损坏的紧急修复思路

    ​​关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...

  6. KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份

    案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...

  7. KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份

    案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...

  8. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

  9. KingbaseES V8R3集群运维案例之---用户自定义表空间管理

    ​案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...

  10. KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例

    案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...

随机推荐

  1. k8s-dashboard、helm

    目录 dashboard 安装dashboard 1. 创建SA 2. 集群角色绑定 3. 创建secret 4. 查看token helm 安装helm 1. 下载tar包 2. 解压 3. 配置环 ...

  2. Java Enumeration接口详解

    二话不说,来看官方文档: public interface Enumeration<E> An object that implements the Enumeration interfa ...

  3. Java集合框架学习(二) HashSet详解

    HashSet介绍 这个类实现了Set接口,背后是一个hash table(实际上是个HashMap 实例) .它不保证元素的迭代顺序.尤其是,随着时间推 移它不保证某一元素的位置不变.这个类是非线程 ...

  4. Maven应用常见问题

    在Spring Boot项目中打包指定类为启动类 <build> <plugins> <plugin> <groupId>org.springframe ...

  5. 2020-11-18 原生js实现自动打字效果

    原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...

  6. 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等

    输入整行字符串 平均绩点 题目描述 每门课的成绩分为A.B.C.D.F五个等级,为了计算平均绩点,规定A.B.C.D.F分别代表4分.3分.2分.1分.0分. 输入 有多组测试样例.每组输入数据占一行 ...

  7. 【Python OO其一】构造函数__init__()

    Python对象包括三个部分:id(identity识别码).type(对象类型).value(对象的值) __ init __()构造函数 __ init __()方法应用定义构造函数,作用是在实例 ...

  8. 【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this operation.)

    问题描述 需要 App Service 访问开启防火墙的存储账号.存储账号中设置为允许选中的VNET访问,同时允许了信任的Azure服务的访问,但是仍然报错 "403 (This reque ...

  9. 用linux命令cd 查找想要找的文件

    如果想找文件Computer下的bin文件,在终端输入绝对路径 cd /bin,不能输入 cd /Computer/bin,因为文件目录不对 文件目录可以在文件的终端看到,/bin就是正确的目录 比如 ...

  10. hadoop集群环境搭建--双NameNode

    hadoop配置文件修改 个人配置文件压缩包地址: hadoop配置文件压缩包地址点此下载 tar -zxvf 你的压缩包路径/hadoop.tar.gz -C /usr/hadoop(你的hadoo ...