ORACLE 11G flashback 相关讨论

一 flashback的相关类型

1.FLASHBACK QUERY 

闪回查询:用到数据库的UNDO表空间,其特性有UNDO表空间的特性

2.FLASHBACK TABLE

闪回表:也是用到了UNDO表空间,其特性有UNDO表空间的特性

3.FLASHBACK DROP

闪回删除的表

4.FLASHBACK ARCHIVE

闪回归档  --待续

5.FLASHBACK DATABASE

闪回数据库

6.FLASHBACK TRANSACTION QUERY





二 FLASHBACK QUERY 

1.需要数据库开启的条件

SYS @ ocpdb2 > select dbid,name,log_mode,flashback_on from v$database;


      DBID NAME       LOG_MODE    FLASHBACK_ON
---------- --------------------------- ------------------------------------ ------------------------------------------------------
1014051930 OCPDB2       NOARCHIVELOG   NO

--看到此时数据库没有开启归档也没有开启闪回功能

--创建表T

SYS @ ocpdb2 > create table t as select * from all_objects;

Table created.

--查询当前SCN号

SQL> select NAME,CURRENT_SCN from v$database;
 
NAME CURRENT_SCN
--------- -----------
OCPDB2      815596

--查询当前时间

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2016-03-21 21:41:00

--查询当前表的数据

SQL> select count(*) from t;
 
  COUNT(*)
----------
     70962

------此时删除表中数据

SQL> delete from t;
 
70962 rows deleted
 
SQL> commit;
 
Commit complete


SQL> select count(*) from t;
 
  COUNT(*)
----------
         0

---------

--查询之前记录的SCN号,此时如果SCN号在创建T之前回报错的 ORA-01466: 

SQL> select count(*) from t as of scn 815596;
 
  COUNT(*)
----------
     70962

SQL> select count(*) from t as of timestamp to_date('2016-03-21 21:41:00','yyyy-mm-dd hh24:mi:ss');
 
  COUNT(*)
----------
     70962


---此时可以查看到某一时间点或者SCN号的数据情况

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

下边继续

----

SQL> select NAME,CURRENT_SCN from v$database;
 
NAME CURRENT_SCN
--------- -----------
OCPDB2      816974
 
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2016-03-21 21:49:13
 
SQL> insert into t select * from all_objects where rownum<=100;
 
100 rows inserted
 
SQL> commit;
 
Commit complete
 
SQL> select NAME,CURRENT_SCN from v$database;
 
NAME CURRENT_SCN
--------- -----------
OCPDB2      817034
 
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2016-03-21 21:50:04
 
SQL> delete from t;
 
100 rows deleted
 
SQL> commit;
 
Commit complete

SQL> select count(*) from t versions between scn 815596 and 817034;
 
  COUNT(*)
----------
    142024

----- 142024=70962 + 70962 + 100 

SQL> select 70962 + 70962 + 100  from dual;
 
70962+70962+100
-------------------
             142024
 
SQL> select NAME,CURRENT_SCN from v$database;
 
NAME CURRENT_SCN
--------- -----------
OCPDB2      822186
 
SQL> select count(*) from t versions between scn 815596 and 822186;
 
  COUNT(*)
----------
    142124

----- 142024=70962 + 70962 + 100 + 100

--可以看出使用范围闪回查询会把原数据与更新或者删除的记录都查询出来

/*

从上边的数据库当前状态可以看出数据库当前没有开启归档也没有开启闪回功能,数据库是如何实现闪回查询的功能呢

使用的是UNDO表空间的历史快照进行的查询,所以这个闪回查询会有所有的UNDO表空间的一些特性,数据可覆盖,如果此历史数据被覆盖或者清空那么将无法查询

UNDO_RETENTION参数

会不会有快照过旧这个错误呢?

*/




二 FLASHBACK TABLE 闪回表

--闪回表需要开启表的行迁移

SQL> alter table t enable row movement;--一个现存的行允许改变其rowid(物理存储地址)
 
Table altered
 
SQL> flashback table t to scn 815596;
 
Done
 
SQL> select count(*) from t;
 
  COUNT(*)
----------
     70962

/*

这个区别与闪回查询的是表的数据被该变了。

*/


三 闪回DROP的表

其原理是利用回收站,所以回收站要开启才能使用该功能,该闪回有回收站的特性。

在SYSTEM表空间的对象删除后不会在回收站中存在,所以在system表空间DROP的表是不能恢复的!


SQL> create table t as select * from all_objects ;
 
Table created
 
SQL> drop table t;
 
Table dropped
 
SQL> flashback table t to before drop;
 
Done
 
SQL> select count(*) from t;
 
  COUNT(*)
----------
     70936




四 FLASHBACK ARCHIVE

(1)Flashback data archive只能在ASSM的tablespace上创建
(2)Flashback data archive要求必须使用自动undo管理,即 undo_management 参数为auto


















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值