闪回删除和管理回收站

当你删除一张表时,数据库不会立即删除与表现关联的空间。数据库重命名表,并将关联的对象放置在回收站。然而,在表被错误删除的情况下,可以在稍后的时间里进行恢复。这种结构叫做闪回删除, FLASHBACK TABLE语句是用来恢复表。在讨论使用FLASHBACKTABLE语句用于恢复表之前,重要的是理解回收站如何工作,以及如何管理其内容。

 

1.什么是回收站?

回收站实际上是一个包含有关删除对象信息的数据字典表。删除的表和关联的对象(例如索引,约束,嵌套表)并没有被移除,而是一直占用空间。它们继续占用着用户空间配额,直到明确指定从回收站中删除,或数据库表空间约束必须要删除。

每个用户都被认为有自己的回收站,除非这个用拥有SYSDBA权限,可以访问其他用户的回收站。用户可以使用下面的语句查看回收站中它自己的对象。

select * from recyclebin;

 

回收站的中对象名称

当删除的表转移到回收站时,该表以及关联的对象名称是系统生成。这是必要的,避免出现多个相同的名称冲突。这可能发生在以下情况:

  • 用户删除一张表,在创建相同名称的表,然后再次删除。
  • 两个用户具有相同名称的表,且都删除了自己表。

命名约定如下:

BIN$unique_id$version

其中:

  • unique_id是一个26位字符的全局唯一标识符。

  • version 是一个数据库分配的版本号。

 

2.启用和禁用回收站

通过recyclebin初始化参数可启用和禁用回收站。当回收站启用时,删除的表和其依赖的对象都放在回收站。当回收站禁用时,删除的表和他们依赖的对象都不放置在回收站,它们已经被删除,必须使用其他方式来恢复(例如从备份中恢复)。

回收站默认是启用的。

执行其中一个语句,禁用回收站:

ALTER SESSION SET recyclebin = OFF;
ALTER SYSTEM SET recyclebin = OFF;

 

执行其中一个语句,启用回收站:

ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = ON;

 

启用和禁用回收站使用ALTER SYSTEM或ALTER SESSION语句立即生效,禁用回收站不会清除,否则会影响回收站中已经存在的对象。

像其他初始化参数一样,可以在初始化文本文件initSID.ora中设置recyclebin参数的初始值。

recyclebin=on

 

3.查看和查询回收站中的对象

Oracle数据库提供两个视图来获取回收站中的对象信息:

视图描述
USER_RECYCLEBIN该视图可用于用户查看回收站中自己删除的对象。它有一个RECYCLEBIN同义词,为了便于使用。
DBA_RECYCLEBIN该视图使管理员能看见回收站中所有删除的对戏那个

select object_name,original_name from recyclebin;

select object_name,original_name  from dba_recyclebin;

 

4.清除回收站中的对象

如果你决定永远不会从回收站中恢复项目,你可以使用PURGE语句从回收站中删除项目及其相关对象,并释放其存储空间。如果你要除项目,需要一些权限。

当你使用PURGE语句清除表时,你可以使用回收站中已知的名字或表的原始名字。回收站中的名字可以从USER_RECYCLEBIN或DBA_RECYCLEBIN中获取。

purge table emp;

purge recyclebin;

purge tablespace example user e1;

 

5.从回收站中恢复表

使用FLASHBACK TABLE ... TO BEFORE DROP语句从回收站中恢复对象。你可以指定回收站中表的名称或原始表名称。可选RENAME TO子句让你重命名恢复表。

FLASHBACK TABLE emp TO BEFORE DROP;

FLASHBACK TABLE "系统生成的名称" TO BEFORE DROP;

FLASHBACK TABLE emp TO BEFORE DROP  RENAME TO emp_r;

注意!如果使用系统生成的名称进行恢复,需要使用双引号包围系统生成名称。

 

 

6.Examples

6.1查看回收站是否启用

SQL> show parameter recyclebin;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on

 

如果value值为off,则需要启用回收站。

alter system set recyclebin = on;

 

6.2创建tst_example表

create table tst_example (
   tst_id number,
   tst_code varchar2(30),
   tst_desc varchar2(250));


insert into tst_example values (1,'a001','北京');
insert into tst_example values (2,'a002','上海');
insert into tst_example values (3,'a003','IT');

6.3删除tst_example表

查看回收站

SQL> select object_name,original_name from recyclebin;
 
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------

删除表

SQL> drop table tst_example;
 
Table dropped

 

再次查看回收站

SQL> select object_name,original_name from recyclebin;
 
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$65yacRBUzSrgQAB/AQAcPQ==$0 TST_EXAMPLE

发现刚才删除的表,已经被放置到回收站中了。

 

查询表,提示表或视图不存在

SQL> select tst_id ,tst_code from tst_example;
 
select tst_id ,tst_code from tst_example
 
ORA-00942: 表或视图不存在

 

6.4从回收站中恢复表

SQL> flashback table TST_EXAMPLE  to before drop;
 
Done

 

或者使用系统生成的名称进行恢复

flashback table "BIN$65yacRBUzSrgQAB/AQAcPQ==$0" to before drop;

 

查询表

SQL> select tst_id ,tst_code from tst_example;
 
    TST_ID TST_CODE
---------- ------------------------------
         1 a001
         2 a002
         3 a003

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值