暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE 闪回之闪回删除

IT界数据库架构师的漂泊人生 2020-12-14
627

flashback database (闪回数据库)

Flashback Table (闪回表)

Flashback Drop (闪回删除)

Flashback Query(闪回查询)

  4.1 Flashback Table Query(闪回表查询)

  4.2 Flashback Version Query(闪回版本查询)

  4.3 Flashback Transaction Query(闪回事务查询)

 FLASHBACK DROP 特性允许在不丢失任何数据库的情况下将指定的表恢复至其被删除的时间点,并保持数据库为当前状态。闪回删除并不是真正的删除表,而是把该表重命名并放入回收站,类似于Windows的回收站一样。当某个活动对象需要使用该表所占用的空间时,该表才会被真

正删除。只要空间未被复用,该表即可恢复。本文主要讲述了FLASHBACK DROP特性以及闪回特性中回收站(RECYCLEBIN)的管理。

 一、FLASHBACK DROP 的功能

    将先前删除的表恢复到删除之前的状态

    恢复该表的索引以及触发器,授权

    恢复该表的约束,包括唯一约束、主键约束、非空约束。外键约束不可恢复

    可以实现基于系统和基于会话的flash drop操作

        alter system set recyclebin = on | off;

        alter session set recyclebin = on | off;

drop table(oracle 10g)命令并不真正删除表,在内部被映射为rename命令,即是将其重命名之后放入回收站。   

--基于emp表来创建表tb_emp

create table tb_emp as select * from emp;      

--添加主键约束,将产生主键索引  

alter table tb_emp add constraint empno_pk primary key(empno);    

--添加唯一约束,将产生唯一索引     

alter table tb_emp add constraint ename_uk unique(ename);

--添加非空约束

alter table tb_emp add constraint sal_ck check(sal>0);      

alter table tb_emp modify job constraint job_nn not null; 

--添加外键约束

alter table tb_emp add constraint dept_fk  foreign key(deptno) references dept(deptno) on delete cascade;  

--查看tb_emp表上的所有约束

select constraint_name,constraint_type from user_constraints where table_name='TB_EMP';



drop table tb_employees;

show recyclebin;  --删除后的对象位于回收站中

select object_name,original_name,can_undrop, base_object from user_recyclebin;

 

OBJECT_NAME                    ORIGINAL_NAME                    CAN BASE_OBJECT

------------------------------ -------------------------------- --- -----------

BIN$k1zC3yEiwZvgQAB/AQBRVw==$0 TB_EMPLOYEES                     YES 54493

BIN$k1zC3yEhwZvgQAB/AQBRVw==$0 ENAME_UK                         NO  54493

BIN$k1zC3yEgwZvgQAB/AQBRVw==$0 EMPNO_PK                         NO  54493

--可以使用回收站名来访问对象,但要对对象加双引号

 select count(1) from "BIN$k1zC3yEiwZvgQAB/AQBRVw==$0";  

flashback table tb_employees to before drop;   --进行闪回

--闪回之后索引约束的名字还是使用了以BIN开头,由系统生成的名字,可以将其改回,但外键约束已经不存在了。

 alter index "BIN$k1zC3yEgwZvgQAB/AQBRVw==$0" rename to EMPNO_PK;

回收站的管理

    每个用户都拥有自己的回收站,且可以查看在自己模式中删除的表

    使用purge命令可以永久删除对象,回收空间

    purge命令的几种常用形式

    drop table tbname purge    --直接删除表,而不置于回收站

    purge table tbname         --清除回收站中的tbname表

    purge index idx_name       --清除回收站中的索引idx_name

    purge tablespace tablespace_name   --清除该表空间中所有已删除的对象

    purge tablespace tablespace_name user user_name  --清除表空间中指定用户删除的对象

    purge user_recyclebin      --清除指定用户已删除的所有对象

    purge dba_recyclebin       --清除所有已删除的对象

 五、总结

    通过对上述表的删除及空间分配情况,总结如下:

1.表的删除被映射为将表的重命名,然后将其置于回收站

2.表的索引,触发器,授权闪回后将不受到影响索引,触发器名字可以根据需要进行更改回原来名称

3.对于约束,如果是外键约束,表删除之后将不可恢复,其余的约束不受影响

4.如果要查询回收站中的对象,建议将对象名使用双引号括起来

5.闪回的实质并不能撤销已提交的事务,而是构造倒退原有事务影响的另一个事务

6.对于已经删除的表如果在所在的表空间新增对象由于空间不足的压力而被重用将导致闪回失败

7.对于表空间不足时,系统会自动清除回收站中最老的对象,以满足当前需求,即采用FIFO原则

8.闪回表的常用方法

        flashback table tbname to before drop ;

        flashback table tbname to before drop rename to newtbname;

第二条语句用于被删除的表名已经被再次重用,故闪回之前必须将其改名为新表名,schema不变化

9.如回收站中存在两个相同的原表名,则闪回时总是闪回最近的版本,如果闪回特定的表,需要指定该表在回收站中的名称。如

        flashback table "BIN$k1zC3yEiwZvgQAB/AQBRVw==$0" to before drop;

10.flashback drop 不能闪回truncate命令截断的表,而是只能恢复drop 之后的表

11.flashback drop 不能闪回drop user scott cascade删除方案的操作,此只能用flashback database

12.在system表空间中存储的表无法启用flashback drop,且这些表会被立即删除

与回收站相关两个重要的视图

        dba_recyclebin

        user_recyclebin    

 



文章转载自IT界数据库架构师的漂泊人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论