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

Halo数据库回收站功能介绍

贾桂军 2024-05-20
233

    回收站机制存在目的是防止用户错误的删除了表、索引等数据库对象,在未使用回收站技术之前,只能用传统的数据恢复方式从备份中恢复,此时需要备份文件以及归档日志文件,这样的恢复往往涉及那些不需要恢复的对象,显然这样的恢复不具针对性,而使用回收站就可以直接的恢复想恢复的对象,更高效省时。

    启用回收站后,使用drop table指令删除表,该表不会从数据库中立即删除,而是保持原表的位置,但是将删除的表重新命名,并将删除的表信息存储在回收站中,回收站记录了被删除表的新名字和原名字以及与该表相关的对象信息。

    在Halo数据库中,要启动回收站,关键是启动参数RecycleBin,该参数可以通过set指令在会话里动态设置,默认为off。

    接下来我们先看一下系统表pg_dbarecyclebin的结构:

oid:  记录对象的唯一标识。

namespace:表示被删除的对象所属的schema

owner:  表示被删除的对象所属的用户

object_name:表示Halo为删除的表的重命名

original_name:为被删除的表的原始表名

type:被删除的数据库对象类型,如表或视图等

can_undrop:记录对象是否可以闪回删除

can_purge:记录对象是否可以被永久删除

一、回收站的drop和flashback

    我们先创建一个测试表,然后删除该表,查看该表在回收站中的记录:

    由输出可以看出,表t1已经记录在回收站中。记录该表所属schema为public,所属用户为10,并记录了删除时间为2023-12-25 17:42:17,此时自动生成了一个被删除表的系统名称为BIN$262141$140010,该名称由bin$和表oid及版本号组成。

    在重命名被删除的表时,也会重命名该表的依赖对象,如涉及的索引视图,函数等。例如:

    同样的,闪回回收站中的表,该表的依赖对象,如涉及的索引、视图函数等也会一起回收。回收命令:

flashback table t1 to before drop;

    当回收站里有原始名称相同的多条记录时候,使用命令恢复时会优先恢复最近写入回收站的表。有时候我们不需要恢复最近的记录,也可以使用系统生成的名字来恢复指定表。

    再次回收t1并重命名为new_t1。使用命令:

flashback table t1 to before drop rename to new_t1;

二、应用purge永久删除表

    purge指令可以手工的删除回收站里的对象,在实际的数据库维护中,用户确定不需要某个表,又出于该表的安全性所以不希望放入回收站。此时我们用purge命令来删除即可:

DROP TABLE t1 PURGE;

    这样删除的表不会在回收站中记录任何信息,此时查看回收站不会发现表t1的删除记录。如果已经删除一个表,并且该表记录在回收站中,此时又希望永久删除该表,也需要使用purge命令:

PURGE TABLE newt1;

    此时,表t2将从数据库永久删除,并且和该表对应的其他数据库对象也将永久删除,我们继续查看回收站则不会再记录到表new_t1的任何信息。与flashback不同,对于回收站原名字相同的多条记录,purge优先删除最早写入回收站的表。当然了,我们同样可以使用系统生成的名字来删除指定的表的记录:

三、清空回收站

    在数据库的维护中,清空回收站也是常用功能之一。这时候则可以使用 命令purge recyclebin 或者 purge user_recyclebin来删除当前用户的回收站。若要清空所有用户的回收站记录,则需切换超级用户,使用命令purge dba_recyclebin。

    以上是Halo数据下回收站针对表的一些基本操作。关于函数存储过程的依赖以及模式还有用户相关的内容这里没有详细演示,感兴趣的同学可以下载最新安装包自行体验及问题反馈。感谢您阅读到了此处~

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论