Oracle回收站介绍
从Oracle 10g开始,Oracle数据库引入了一个回收站(Recycle Bin)的数据库对象。回收站(Recycle Bin)从原理上来说就是一个数据字典表,放置用户删除(drop)掉的数据库对象信息。用户进行删除操作的对象并没有被数据库删除,仍然会占用空间。除非是由于用户手工进行purge或者因为存储空间不够而被数据库清掉。
可以使用下面的查询语句来查看回收站的当前状态:
select value from v$parameter where
name='recyclebin';
如果返回值为“on”表明回收站是启动的,“off”表明是关闭的。默认是启动的。
可以手动启动/关闭系统或会话中的回收站:
ALTER SYSTEM SET recyclebin = ON;
ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = OFF;
ALTER SESSION SET recyclebin = OFF;
可以使用下面的任意一个语句来获得回收站中的对象
SELECT * FROM RECYCLEBIN;
SELECT * FROM USER_RECYCLEBIN;
SELECT * FROM DBA_RECYCLEBIN;
试验一:
1 创建表
SQL> create table t(id int);
表已创建。
2 插入数据
SQL> insert into t values(10);
已创建 1 行。
3 删除表
SQL> drop table t;
表已删除。
4 从回收站中查询被删除的表的信息
SQL> select * from user_recyclebin;
OBJECT_NAME ORIGINAL_NAM OPERATION TYPE TS_NAME CREATETIME DROPTIME DROPSCN PARTITION_NAME CAN CAN RELATED BASE_OBJECT PURGE_OBJECT SPACE
------------------------------ ------------ --------- ----- -------- ------------------- ------------------- -------- --------------- --- --- -------- ----------- ------------ -----
BIN$A2N1R4Z09T/gUKjAhfUUwg==$0 T DROP TABLE USERS 2014-09-19:11:11:13 2014-09-19:11:11:32 1095550 YES YES 73435 73435 73435 8
5 从回收站中恢复表
SQL> flashback table t to before drop;
闪回完成。
6 查询表中的数据,看是否和未删除前的数据一致
SQL> select * from t;
ID
----------
10
7 删除表并把从回收站中清空该表
SQL> drop table t purge;
表已删除。
8 从回收站中查询是否还有该表的信息
SQL> select * from user_recyclebin;
未选定行
试验二:
1 创建两个表
SQL> create table t1(id number);
表已创建。
SQL> commit;
提交完成。
SQL> create table t2(id number);
表已创建。
SQL> commit;
表已创建。
2 删除表
SQL> drop table t1;
表已删除。
SQL> drop table t2;
表已删除。
3 从回收站中查询被删除表的信息
SQL> select * from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME DROPSCN PARTITION_NAME CAN CAN RELATED BASE_OBJECT PURGE_OBJECT SPACE
------------------------------ --------------- --------- ----- -------- ------------------- ------------------- ---------- --------------- --- --- -------- ----------- ------------ ------
BIN$A2bmhJLBbL7gUKjAhfUscg==$0 T1 DROP TABLE USERS 2014-09-19:15:18:44 2014-09-19:15:19:18 1103864 YES YES 73446 73446 73446 0
BIN$A2bmhJLCbL7gUKjAhfUscg==$0 T2 DROP TABLE USERS 2014-09-19:15:19:10 2014-09-19:15:19:26 1103878 YES YES 73447 73447 73447 0
4 清空回收站
SQL> purge recyclebin;
回收站已清空。
5 验证回收站是否为空
SQL> select * from recyclebin;
未选定行