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

LightDB新特性-Oracle模式支持回收站功能

姚崇 2024-12-02
38

Oracle回收站介绍

Oracle回收站(Recycle Bin)是Oracle数据库中的一种重要功能,旨在提供数据恢复和保护机制。当用户或管理员不小心删除表或其他数据库对象时,Oracle回收站可以将这些对象暂时保留在回收站中,从而防止数据的永久丢失。这样,即使不小心删除了数据,仍然有机会恢复到原来的状态。

  1. 回收站的基本概念
    在Oracle数据库中,当删除一个表或其他对象时,这些对象并不会立即从数据库中物理删除。相反,它们被移动到回收站中,并标记为“已删除”状态。此时,表数据和元数据都保留在回收站中,仍然可以进行恢复操作。

被删除的对象会被加上一个系统生成的前缀名称,以避免与其他对象发生冲突。比如,当删除一个名为 EMP 的表时,系统可能会在回收站中创建一个名称类似 BIN$ 的对象。这个对象的内容与原始表相同,可以通过回收站恢复。

  1. 启用和禁用回收站
    默认情况下,Oracle数据库会启用回收站功能。

  2. 查看回收站中的对象
    用户可以通过 FLASHBACK 语句来查看回收站中的对象,并查看已删除对象的详细信息。

查询回收站中的对象:

SELECT * FROM user_recyclebin;
复制

此查询返回当前用户回收站中的所有已删除对象的信息。可以看到被删除对象的名称、类型和删除时间等。

  1. 恢复回收站中的对象
    如果需要恢复回收站中的对象,可以使用 FLASHBACK 语句。例如,如果想恢复一个被删除的表,可以使用以下命令:
FLASHBACK TABLE emp TO BEFORE DROP;
复制

该命令会恢复 emp 表到删除之前的状态,包括表结构、数据以及索引。如果要恢复回收站中的其他对象(如视图、索引等),也可以类似地使用 FLASHBACK 语句。

  1. 从回收站中永久删除对象
    当不再需要回收站中的对象时,管理员可以选择从回收站中永久删除这些对象。这可以通过 PURGE 命令来完成:

永久删除指定对象:

PURGE TABLE emp;
复制

永久删除回收站中所有对象:

PURGE RECYCLEBIN;
复制

一旦执行 PURGE 命令,被删除的对象将完全消失,无法恢复。

  1. 回收站的存储空间
    回收站中的对象会占用数据库的存储空间,因此需要定期清理回收站中的无用数据。通过定期清理回收站,能够释放存储空间,避免因回收站中大量存储已删除对象而影响数据库性能。

  2. 注意事项
    空间管理: 回收站中的对象仍然占用数据库的空间,因此需要定期清理。可以使用 PURGE 命令或设置回收站的自动清理策略。
    回收站不适用于所有对象: 例如,表分区或LOB对象删除时,不会进入回收站。
    恢复后的对象: 恢复的对象会恢复到原来的表空间和文件,但与原始对象相比,它们的名称会加上一个前缀。
    总结
    Oracle回收站是一个非常实用的功能,它提供了一种防止误删除的机制。通过回收站,数据库管理员和开发人员可以轻松恢复误删除的对象,避免了因操作失误而造成的数据丢失。在实际应用中,合理利用回收站的恢复功能,有助于提高数据库的稳定性和数据安全性。

在LightDB24.1及以后版本中支持了回收站功能

回收站操作purge recyclebin

lightdb@yao=# select * from dba_recyclebin; owner | object_name | original_name | namespace | operation | type | ts_name | droptime | dropscn | partition_name | can_undrop | can_purge | related | base_object | purge_object | space ---------+------------------------------------------+---------------+-----------+-----------+-------+------------+---------------------+---------+----------------+------------+-----------+---------+-------------+--------------+------- LIGHTDB | BIN$00b71a712921724daa6d6d1047aae484==$0 | TEST1 | PUBLIC | DROP | TABLE | PG_DEFAULT | 2024-12-02:10:43:58 | | | | | 436574 | 436574 | 436574 | (1 row) lightdb@yao=# PURGE RECYCLEBIN; lightdb@yao=# select * from dba_recyclebin; owner | object_name | original_name | namespace | operation | type | ts_name | droptime | dropscn | partition_name | can_undrop | can_purge | related | base_object | purge_object | space -------+-------------+---------------+-----------+-----------+------+---------+----------+---------+----------------+------------+-----------+---------+-------------+--------------+-------
复制

回收站操作FLASHBACK TABLE

lightdb@yao=# create table test1(id int,name varchar2(100));
WARNING:  LightDB DDL check warn! no primary key!
DETAIL:  If your system does not have data replication requirement, just ignore it
CREATE TABLE
lightdb@yao=# drop table test1;
DROP TABLE
lightdb@yao=# FLASHBACK TABLE test1 to before drop;
FLASHBACK TABLE
lightdb@yao=# select * from test1;
 id | name 
----+------
(0 rows)

复制

回收站操作DROP TABLE PURGE;

lightdb@yao=# drop table test1 purge;
DROP TABLE
lightdb@yao=# select * from test1;
ERROR:  relation "test1" does not exist
LINE 1: select * from test1;
                      ^
lightdb@yao=# select * from dba_recyclebin;
 owner | object_name | original_name | namespace | operation | type | ts_name | droptime | dropscn | partition_name | can_undrop | can_purge | related | base_object | purge_object | space 
-------+-------------+---------------+-----------+-----------+------+---------+----------+---------+----------------+------------+-----------+---------+-------------+--------------+-------
(0 rows)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论