现在做一个测试:
SQL> create table aa(
2 col001 varchar2(20) primary key,
3 col002 varchar2(20),
4 col003 varchar2(100)
5 );
SQL> insert into aa values('001','China','Asia');
1 rows inserted
SQL> select * from aa;
COL001 COL002 COL003
-------------------- -------------------- -------------------
001 China Asia
SQL> drop table aa;
Table dropped
SQL> select * from user_recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
BIN$szLzmW8iSNe1cOL+pL3nDA==$0 AA DROP
BIN$uvwnj9g/TMOOZPxdVC9azg==$0 SYS_C0030540 DROP
如果我们要恢复表,可以在SQL*PLUS中使用如下命令:
SQL> flash back table TABLE_NAME to before drop
执行完毕后,查询用户表,可以发现表已经成功恢复,且数据完整。
由于被删除的表存在于回收站,并没有真正从硬盘删除,因此它还占用原有的存储空间。如果我们不想看到在查询表的时候出现回收站表的名称,是想释放存储空间,则可以清空回收表:
SQL> purge user_recyclebin;
这样做将删除回收站的所有表,有时候为了保险起见,我们只删除回收站中特定的表,可以使用带表名(也可以是回收站的特殊表名)的purge命令,如:
SQL> purge table TABLE_NAME;
SQL> purge table BIN$szLzmW8iSNe1cOL+pL3nDA==$0;
也可以在删除表的时候加上purge参数,直接删除而不保留在回收站,这样表就永久删除且不可恢复了。如:
SQL> drop table TABLE_NAME purge;
使用闪回技术还可以使表恢复到某个时间点,可以使用命令:
flashback table TABLE_NAME TO TIMESTAMP to_timestamp(string1, [ format_mask ],[ 'nlsparam' ] );
当表空间不足的时候,回收站也会由ORACLE自动管理,按照先进先出的原则删除回收站中的对象。


没有评论:
发表评论