一、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. git开发流程图解,本地分支合并,并推送远程分支步骤

    本地分支合并,并推送远程分支步骤 1.只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit 2.假设本地两个分支 用于开发的分支:dev 用于同 ...

  2. Oracle设置日志参数-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

    要实现两个数据库之间的实时同步,需要给Oracle设置参数 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 执行了12小时,等待数据库中的其它事务都提交以后才 ...

  3. 08、Etcd 中MVCC原理

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 1.什么是 MVCC MVCC(Multiversion concurrency control)是一个基于多版本技术实现的一种并发控制 ...

  4. 【Azure 应用服务】App Service for Container中配置与ACR(Azure Container Registry)的RABC权限

    问题描述 在使用App Service for container时,在从ACR(Azure Container Registry)中获取应用的镜像时,需要使用对应的权限.默认情况为在ACR中启用Ad ...

  5. 【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道

    问题描述 当本地Node.js(Linux + Node.js + npm + yarn)部署上云,选择 Azure App Service for Linux 环境.但是在部署时,遇见了以下三个问题 ...

  6. 结构化思维助力Prompt创作:专业化技术讲解和实践案例

    结构化思维助力Prompt创作:专业化技术讲解和实践案例 最早接触 Prompt engineering 时, 学到的 Prompt 技巧都是: 你是一个 XX 角色- 你是一个有着 X 年经验的 X ...

  7. Java 继承成员变量和继承方法的区别

    1 package com.bytezreo.duotai3; 2 3 /** 4 * 5 * @Description 继承成员变量和继承方法的区别 6 * @author Bytezero·zhe ...

  8. Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、贡献枚举)

    C. Tea Tasting 思路 这里枚举有三种思路 然后经过考虑3是最可行的,然后接着考虑如何计算贡献 这里在实现的时候用了一个差分数组,因为我们需要记录第i个茶师它喝了多少个\(b_i\)以及不 ...

  9. 仅需10秒!ChatGPT轻松画出UML用例图,我却苦战10分钟。

    当我们写技术文档时,一张系统用例图,平时要花费10分钟才完成,而ChatGPT绘图过程只用了10秒钟,基本可以达到同样的水平,通过ChatGPT可以显著提高画流程图的效率. 什么是用例图 用例图是统一 ...

  10. MDC实现微服务链路追踪

    一.问题背景 在微服务架构中,我们没办法快速定位用户在一次请求中对应的所有日志,在排查生产问题的时候会非常困难,那是因为我们在输出的日志的时候没把请求的唯一标示输出到我们的日志中,导致我们没办法根据一 ...