在实际的工作中我们可能会因为一些误操作删除一些表。这个时候可以通过Oracle的回收站来恢复被删除的表、
一、创建测试表A:
create table A
(
id VARCHAR2(20),
name VARCHAR2(20),
address VARCHAR2(20)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
二、在A插入一些测试数据
insert into A (ID, NAME, ADDRESS)
values ('1', '1', '1');
insert into A (ID, NAME, ADDRESS)
values ('2', '2', '2');
commit;
三、删除测试A表
drop table A;
四、查询回收站
select * from user_recyclebin;
通过上述查询语句会得到如下图所示结果:
五、恢复误删除的表
flashback table A to before drop;
六、通过上一步的恢复操作。我们可以看到表A已经被恢复过来了
七、总结:
oracle提供以上机制保证了安全操作,但同时也代来了另外一个问题,就是空间占用,由于以上机制的运行,使用drop一个表或者delete数据后,空间不会自动回收,对于一些确定不使用的表,删除时要同时回收空间,可以有以下2种方式:
1、采用truncate方式进行截断。(但不能进行数据回恢复了)
2、在drop时加上purge选项:drop table 表名 purge
该选项还有以下用途:
也可以通过删除recyclebin区域来永久性删除表 ,原始删除表drop table emp cascade constraints
purge table emp;
删除当前用户的回收站:
purge recyclebin;
删除全体用户在回收站的数据:
purge dba_recyclebin;