• 闪回恢复误删除对象


    flashback drop用于恢复用户误删除的对象,包括表、索引等,依赖于tablespace recycle bin ,表空间回收站

    初始化参数recyclebin参数用于控制是否启用recyclebin功能,缺省是ON

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

    在启用这个功能的时候,是不能恢复sys用户的表的。

    SQL> conn / as sysdba
    Connected.
    SQL> create table t(id int);   
    
    Table created.
    
    SQL> drop table t;
    
    Table dropped.
    
    SQL> show recyclebin;
    SQL> conn kel/kel
    Connected.
    SQL> create table p (id int); 
    
    Table created.
    
    SQL> drop table p;
    
    Table dropped.
    
    SQL> show recyclebin;
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34

    可以使用show recyclebin命令来查看recycle bin中的对象列表:

    SQL> show recyclebin;
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34

    也可以通过视图来进行查看recycle bin中的对象列表:

    SQL> select object_name as recycle_name,original_name from recyclebin;
    
    RECYCLE_NAME		       ORIGINAL_NAME
    ------------------------------ ------------------------------
    BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 T
    BIN$/ti6DA4axIDgQKjAbgFLmA==$0 P

    可以像查看普通表一样,来查看recycle bin 中对象的内容:

    SQL> select count(*) from "BIN$/ti6DA4axIDgQKjAbgFLmA==$0";
    
      COUNT(*)
    ----------
    	 0
    

    要使用flashback drop功能恢复误删除的表,需要做以下几点:

    1、 确认已删除的表在recycle bin中

    2、使用flashback table来进行恢复

    SQL> drop table kel;
    
    Table dropped.
    
    SQL> show recyclebin --查看删除表是否在recycle bin中
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    KEL		 BIN$/ti6DA4bxIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:01:07:09
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34
    SQL> flashback table kel to before drop ; --利用flashback table来进行闪回
    
    Flashback complete.
    
    SQL> show recyclebin;
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34
    SQL> select count(*) from kel; --检验
    
      COUNT(*)
    ----------
    	 1

    如果同名的表在recycle bin中存在,可以恢复到需要的那个表:

    SQL> show recyclebin; --查看回收站中内容
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    KEL		 BIN$/ti6DA4exIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:01:13:05
    KEL		 BIN$/ti6DA4cxIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:01:09:41
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34
    SQL> select count(*) from "BIN$/ti6DA4exIDgQKjAbgFLmA==$0";--查看哪个是想恢复的表
    
      COUNT(*)
    ----------
    	 2
    
    SQL> select count(*) from "BIN$/ti6DA4cxIDgQKjAbgFLmA==$0";--查看哪个是想恢复的表
    
      COUNT(*)
    ----------
    	 1
    
    SQL> flashback table "BIN$/ti6DA4exIDgQKjAbgFLmA==$0" to before drop;--恢复表
    
    Flashback complete.
    
    SQL> select count(*) from kel;
    
      COUNT(*)
    ----------
    	 2
    
    SQL> show recyclebin; --恢复完成之后,recycle bin中的内容也就消失了
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    KEL		 BIN$/ti6DA4cxIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:01:09:41
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34

    在恢复的同时,也可以对表进行重命名:

    SQL> show recyclebin; --查看回收站的对象
    ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    KEL		 BIN$/ti6DA4cxIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:01:09:41
    P		 BIN$/ti6DA4axIDgQKjAbgFLmA==$0 TABLE	     2014-07-23:00:59:59
    T		 BIN$/sAFsZ9FnTPgQKjAbgEXcA==$0 TABLE	     2014-07-21:19:31:34
    
    
    SQL> flashback table kel to before drop rename to kel1;--恢复表并且重命名为kel1
    
    Flashback complete.

    在recycle bin中,oracle可以区分不同用户的同名的表。


    recycle bin的维护:

    1、 只能用于非系统表空间和本地管理的表空间

    2、如果对象创建在本地管理的表空间,而关联对象,比如索引创建在字典管理的表空间上,则恢复时字段管理的表空间关联对象不能被恢复

    3、对象是否能恢复成功,取决于对象空间是否被覆盖重用

    4、 不能对recycle bin中的内容进行DML和DDL的操作,只能做查询操作

    5、 对象的参考约束不能被恢复,也就是外键约束需要重建

    手动清除recycle bin的空间:

    清除表空间的recycle bin:

    SQL> purge tablespace kel ;--kel为表空间名称
    
    Tablespace purged.
    
    
    清除表空间的指定用户的recycle bin:

    SQL> purge tablespace kel user kel;--第一个kel是表空间名称,第二个kel是用户名称
    
    Tablespace purged.
    删除当前用户recycle bin中的对象:

    SQL> purge recyclebin;
    
    Recyclebin purged.

    删除所有用户的recycle bin 对象--需要sysdba权限:

    SQL> purge dba_recyclebin;
    purge dba_recyclebin
    *
    ERROR at line 1:
    ORA-01031: insufficient privileges
    
    
    SQL> conn / as sysdba
    Connected.
    SQL> purge dba_recyclebin;
    
    DBA Recyclebin purged.

    永久删除表,也就是不放在recycle bin中,不能恢复:

    SQL> conn kel/kel
    Connected.
    SQL> show recyclebin;
    SQL> drop table kel1 purge;
    
    Table dropped.
    
    SQL> show recyclebin;--表被永久删除
    SQL> 






    for linux and python
  • 相关阅读:
    [直播]WordLock——英文单词锁
    一些Shell的好东西
    Linux下的词典——GoldenDict
    Android重写onOreate,onPause,onStop等方法时需要注意的问题!
    [记录]我的Android工程——SelectToDo
    [FZYZOI比赛]T1256 20130322 (动态规划) 黄地产的生活
    Android使用DOM来编辑XML时遇到的问题——无法保存
    在Java下使用DOM来读取/修改Xml文件
    没来得及整理的一些网站
    Android的一些函数或关于它们用法的函数
  • 原文地址:https://www.cnblogs.com/kellyseeme/p/5525150.html
Copyright © 2020-2023  润新知