利用recyclebin的保留策略恢复被删除的表(二)

2014-11-24 16:56:24 · 作者: · 浏览: 1
2esAfoA7gQAB/AQB4Dg==$0 TEST1
BIN$5Jl2esAgoA7gQAB/AQB4Dg==$0 TEST2
可以看出来,表虽然删除了,但是表空间还没有释放,同时recyclebin中已经存在了删除的两个表,那么这时候表空间还有3M的大小,我们再建一个同样的表
[html]
SQL> create table test3 as select * from dba_objects;
Table created.
再查看表空间和recyclebin的使用情况
[html]
SQL> select owner,segment_name,round(bytes/1024/1024,2)||' MB' m from dba_segments where tablespace_name='TSP_TEST';
OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
M
-------------------------------------------
TEST
BIN$5Jl2esAgoA7gQAB/AQB4Dg==$0
6 MB
TEST
TEST3
6 MB
OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
M
-------------------------------------------
SQL> select object_name,ORIGINAL_NAME from user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$5Jl2esAgoA7gQAB/AQB4Dg==$0 TEST2
这时候把recyclebin给清空了,在查看recyclebin和表空间
[html]
SQL> purge recyclebin;
Recyclebin purged.
SQL> select object_name,ORIGINAL_NAME from user_recyclebin;
no rows selected
SQL> select owner,segment_name,round(bytes/1024/1024,2)||' MB' m from dba_segments where tablespace_name='TSP_TEST';
OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
M
-------------------------------------------
TEST
TEST3
6 MB
此时recyclebin被清空,表空间中只剩下test3表。
由此可见:
当我们在删除一个表的时候,被删除的表以及相关的对象(比如索引、约束、嵌套表等等)并没有被移除,并且依然占用着空间,直到我们从recyclebin中将他们清楚,或者由于表空间的限制, 数据库将他们清除,这样他们才会被清除掉。
现在来演示恢复
我们再创建一个相同的表test4
[ html]
SQL> create table test4 as select * from dba_objects;
Table created.
删除掉
[html]
SQL> drop table test3;
Table dropped.
SQL> drop table test4;
Table dropped.
这时候在recyclebin中可以查到删除的表
[html]
SQL> select OBJECT_NAME,ORIGINAL_NAME from user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$5Jl2esAhoA7gQAB/AQB4Dg==$0 TEST3
BIN$5Jl2esAioA7gQAB/AQB4Dg==$0 TEST4
闪回并查看结果
[html]
SQL> flashback table test4 to before drop;
Flashback complete.
SQL> select OBJECT_NAME,ORIGINAL_NAME from user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$5Jl2esAhoA7gQAB/AQB4Dg==$0 TEST3
SQL> select count(*) from test4;
COUNT(*)
----------
50558
发现被删除的test4成功的恢复了。