oracle 回收站recyclebin

oracle
1. 查看是否开启回收站功能。
SQL> show parameter recyclebin;

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
recyclebin                           string                 on
SQL>

2. oracle的recyclebin功能:当drop 表时而不指定【purge】,"drop table TABLENAME;"时;系统只是将这个表重命名为BIN$开头的名称,
并在数据字典中修改了相关数据,表所占用的物理空间并没有真正的回收,此时所占用的空间还是原来的表空间,当表空间不够用时,ORACLE会跟据DROPSCN#自动进行逐个清理回收站中对像所占用的空间。默认开启。
另外还需要注意一种情况,对像所在的表空间要有足够的空间,不然就算drop掉经过recyclebin由于空间不足oracle会自动删除的!
3. 需要不经过回收站删除并直接释放所占的空间时
SQL> drop table  TABLENAME purge ;
注:此命令相当于truncate+drop 的操作,一般不建议此操作,除非已非常的确定了解后果。

4. 将recyclebin中的对象还原

SQL> flashback table TABLENAME to before drop ;
 表名可以是回收站系统的dba_recyclebin.object_name也可以是dba_recyclebin.original_name
     但是此时问题来了,我已经用备份的DDL语句重建了一个新的表,这个时候再用此命令还原显然会报错,
     这个时候怎么办呢,只能还原成一个别名,
如果还原恢复时,原来的表名已经使用或者表结构已经创建,那么我们就需要将recyclebin中的表恢复为别名,如下
SQL> flashback table TABLENAME to before drop rename to TABLENAME_old;

再将数据还原到对应的新表     
SQL> insert into TABLENAME select * from TABLENAME_old t;

注意:如果将表drop掉,那么索引也被drop掉了,从recyclebin中只是恢复了表的数据,所以还要重建下表上的索引,约束。

另一种将数据都复制出去

create table TABLENAME_new as select * from TABLENAME; TABLENAME删除的表

5. 回收站recyclebin 查看
SQL> show recyclebin;
SQL> select * from dba_recyclebin;
SQL> select * from user_recyclebin;
show recyclebin为什么没有数据呢?
    recyclebin是user_recyclebin的同义词,如此你当前的登陆用户是system此时运用show recyclebin是没有数据的。
6. 同一对像多次删除怎么在recyclebin中识别?
    dba_recyclebin中对每删除一个对像都会以BIN$进行命名,同时会有相应的dropscn、createtime、droptime可以跟据这些对像进行定位,然后进行恢复。

7. 手工清除回收站
SQL> purge table USER.TABLENAME ;--清除具体的对像
    注意:如果此时是DBA用户操作其它用户数据,清除回收站中的表时要加上用户名,否则报表不在回收站中
SQL> purge tablespace TABLESPACENAME;   --清除指定的表空间对像
SQL> purge tablespace TABLESPACENAME user USER; --删除表空间指定用户下的所有对像
SQL> purge recyclebin ; --清空整个回收站

8. ORACLE空间利用原则
    (1)使用现有的表空间的未使用空间
    (2)如果没有了空闲空间,则检查回收站,对于回收站的对象按照先进先出的原则,对于最先删除的对象,
    oracle在空间不足之时会最先从回收站删除以满足新分配空间的需求;
    (3)如果回收站也没有对象可以清理,则检查表空间是否自扩展,如果自扩展则扩展表空间,然后分配新空间;
    (4)如果表空间非自扩展,或者已经不能自扩展(到达最大限制),则直接报表空间不足错误,程序终止。
9. DROP掉的对像不是都会经过回收站
    以下几种drop不会将相关对像放进回收站recyclebin中
    * drop tablespace :会将recyclebin中所有属于该tablespace的对像清除
    * drop user :会将recyclebin中所有属于该用户的对像清除
    * drop cluster : 会将recyclebin中所有属于该cluster的成员对像清除
    * drop type : 会将recyclebin中所有依赖该type对像清除
    
    
    
mysql 也有回收站功能,需要安装插件,自动备份MySQL中被Drop的数据库/表,在出现人为误操作删表时,可以快速的进行恢复。
但是从功能完整性上来讲,与oracle还有较大的差距,目前仍在完善中。只能工作在复制集群的slave实例中。
mysql的recycle_bin并不直接作用于master实例,而是工作在复制环境中的slave实例上,当通过客户端在master实例上进行drop操作时,
slave实例可以拦截drop操作,先进行数据备份,再进行删除操作。当备份文件超过保存时间后,recycle_bin会自动清除这些备份数据。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值