Oracle7大闪回技术讲解

本文详细介绍了Oracle的闪回技术,包括闪回删除、闪回查询、闪回表、闪回数据归档和闪回事务查询。通过实例演示了如何使用这些技术恢复误操作,强调了回收站的作用、闪回查询的时间点选择、闪回表的行移动要求以及闪回数据库的配置和使用。此外,还提到了不同操作对闪回数据库的适用性以及相关视图的使用。
摘要由CSDN通过智能技术生成
Oracle的闪回


1 flashback 的功能:
1)利用undo data回溯或撤销提交的数据,
2)flashback log  使database 可以恢复到过去某个时间点,可以作为不完恢复的补充。


2 flashback分类
1)flashback drop
2)flashback query (新添flashback database archive)
3)flashback table 
4)flashback version query
5)flashback transaction
6)flashback database 








2.1 闪回drop 又名闪回删除
1)理解回收站(recyclebin)
从管理的角度为每个用户“分配”一个回收站,但这个回收站并不实际开辟空间(只是个逻辑容器),当drop table时(非purge),原来的表所使用的段中的数据并没有真正的删除。实际上是把table的段名以回收站方式重命名。该段所在表空间不足需要扩展时,回收站中的信息会被自动清除(考点)。


做个例子理解一下
SQL> show parameter recyclebin
//当初始化参数recyclebin为on时,每个用户都有了自己的回收站
//如果参数设为off 就取消了用户的回收站,那么当你drop table就相当于purge了。


SQL> create tablespace test1 datafile '/u01/app/oracle/oradata/hyyk/test01.dbf' size 1m;
SQL> create table scott.t1(id int) tablespace test1;
SQL> insert into scott.t1 values(1);
SQL> insert into scott.t1 values(1);
SQL> commit;
SQL> select segment_name from dba_segments where tablespace_name='TEST1';
//看test表空间下有了一个段
 
SQL> select sum(bytes) from dba_free_space where tablespace_name='TEST1';
//看这个段有多少空闲空间


继续插入数据,将表空间撑满
SQL> insert into scott.t1 values(1);
SQL> insert into scott.t1 select * from scott.t1;
/
/


查看数据有多少行
SQL> select count(*) from scott.t1;


SQL> select sum(bytes) from dba_free_space where tablespace_name='TEST1';
//显示没有空闲空间


删除表t1
SQL> drop table scott.t1;


查看表空间为TEST1的段名被修改了
SQL> select segment_name from dba_segments where tablespace_name='TEST1';


SQL> select sum(bytes) from dba_free_space where tablespace_name='TEST1';
请看,TEST表空间中的空闲空间又回来了,这说明如果test表空间不够时,这部分空闲空间是可以被重新利用的,实际上即使你设置了表空间autoextend特性,Oracle 会先使用recyclebin,若空间还不够,再考虑autoextend.


SQL> create table scott.emp2 tablespace test1 as select * from scott.emp;   //挤占test表空间
SQL> select sum(bytes) from dba_free_space where tablespace_name='TEST1';
SQL> select segment_name from dba_segments where tablespace_name='TEST1';  
//t1表的数据已经被冲掉了,使用闪回删除无法找回了(考点)。






2)关于回收站中的对象的闪回和清除


闪回和清除的顺序不同


闪回使用LIFO (后进先出)
清除使用FIFO (先进先出)


假设回收站里有两个t1表,看以下两条语句:


SQL> flashback table t1 to before drop;   //闪回的是最新的那个t1表(考点)。
SQL> purge table t1; //清除的是最旧的那个t1表(考点)。


如果想避免混淆,可以直接点出回收站里的表名
SQL> flashback table " BIN$qrJLbL74ZgvgQKjA8Agb/A==$0" to befroe drop;
SQL> purge table "BIN$qrJLbL74ZgvgQKjA8Agb/A==$0";


SQL> purge recyclebin;   //清空回收站   
                                                                                                                                                              
3)如何恢复同一个schema下准备闪回的表已有同名的对象存在,闪回drop需要重命名.
SQL> drop table emp1;                                                                                                         
SQL> create table emp1 as select * from emp;                                                                               
SQL> select * from tab;                                                                                                         


SQL> show recycle;                                                                                                              


SQL> flashback table emp1 to before drop rename to test_old;
//闪回drop语句中使用了重命名 
                                                              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值