Oracle闪回删除的表

文章目录

  • 1.说明
  • 2.显示和清空回收站
  • 3.回收站中对象的命名规则
  • 4.闪回语法
  • 5.示例

Oracle数据库管理,闪回删除的表

1.说明

闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。

系统的回收站只对普通用户有作用。注意:管理员没有回收站,不经过回收站直接删除。

  • 回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。
  • 回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。
  • 被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了两个相同的表。

2.显示和清空回收站

删除表:

drop table aa;
drop table aa purge; -- 不经过回收站,不能闪回

显示回收站:show recyclebin;
清空回收站:purge recyclebin;

3.回收站中对象的命名规则

为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名,重命名的格式如下:

BIN$globalUID$version

其中:BIN表示RECYCLEBIN;globalUID是一个全局唯一的、24个字符长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。

4.闪回语法

FLASHBACK TABLE [schema.]<table_name> 
TO  
{[BEFORE DROP [RENAME TO table]]  
 [ENABLE|DISABLE] TRIGGERS} 
  • schema:模式名,一般为用户名。
  • TO BEFORE DROP:表示恢复到删除之前。
  • RENAME TO table:表示更换表名。
  • ENABLE TRIGGERS:表示触发器恢复以后为enable状态,默认为disable状态。

5.示例

创建和删除表

create table emp2 as select * from emp;
drop table emp2;

create table emp2 as select * from emp where 1=2;
drop table emp2;

显示回收站信息

SQL> show recyclebin;
ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2		 BIN$fQ3Cq4aOLQjgU/BTE6xTmw==$0 TABLE	     2018-12-15:18:12:41
EMP2		 BIN$fQ3Cq4aNLQjgU/BTE6xTmw==$0 TABLE	     2018-12-15:18:12:14

重名的对象:会先闪回后删除的。

SQL> flashback table emp2 to before drop;

Flashback complete.

SQL> show recyclebin;
ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2		 BIN$fQ3Cq4aNLQjgU/BTE6xTmw==$0 TABLE	     2018-12-15:18:12:14

-- 再次闪回会报错,已存在同名的emp2表
SQL> flashback table emp2 to before drop;
flashback table emp2 to before drop
*
ERROR at line 1:
ORA-38312: original name is used by an existing object

-- 闪回重命名表名
SQL> flashback table emp2 to before drop rename to emp3;

Flashback complete.

也可以使用回收站的名称进行闪回(注意有特殊字符,要加双引号)

flashback table "BIN$fQ3Cq4aNLQjgU/BTE6xTmw==$0" to before drop rename to emp3;

你可能感兴趣的:(数据库)