Oracle Flashback

Flashback功能介绍
1, Flashback常用的原理有三种,UNDO,回收站,闪回日志.
   a,闪回表行记录:UNDO,闪回查询,闪回版本查询,闪回事务查询,及闪回表全部使用UNDO.
   b,闪回drop的表:回收站,如果回收站被清空,则无法闪回.
   c,闪回数据库:闪回日志,仅仅闪回数据库时才使用闪回日志.

2, Flashback开启
   a, 不是一定要将数据库开启flashback才能使用基于回收站和UNDO的闪回功能;
   b, 哪怕数据库没有开启归档,也没有开启闪回,前面这两种闪回同样可以使用.

Flashback使用举例
1, Flashback查询,使用关键字as of scn/timestamp
   可以查询过去时间点的表记录,必要时可以将过去的时间点的表结果导出来,再重新导入至数据库,如下例子:
   SQL>select * from join3 order by 1;
        ID CONTENT
   ------- --------------------
         1 txt1
         2 txt2
         3 txt3
         4 txt4
         5 txt5

   SQL>select * from join3 as of timestamp to_timestamp('2012-06-29 16:50:00','yyyy-mm-dd hh24:mi:ss') order by 1;
        ID CONTENT
   ------- --------------------
         1 txt1
         2 txt2
         3 txt3
         5 txt5
    第4条记录是插入进去的!
2, Flashback版本查询,Flashback事务查询.
   事务查询是在版本查询的基础上进行的,通过版本查询,获取事务号;再通过事务查询UNDO_SQL,可以进行UNDO.
   SQL>select versions_xid,versions_starttime,versions_endtime,versions_operation from join3 versions between
       timestamp  minvalue and maxvalue;

   VERSIONS_XID         VERSIONS_STARTTIME             VERSIONS_ENDTIME               V
   -------------------- ------------------------------ ------------------------------ -
   09002F0048070000     29-JUN-12 04.52.14 PM                                         I

   SQL>select xid,start_scn,COMMIT_SCN,UNDO_SQL from flashback_transaction_query where xid=hextoraw('09002F0048070000');
   XID               START_SCN COMMIT_SCN UNDO_SQL
   ---------------- ---------- ---------- ----------------------------------------------------------------------
   09002F0048070000    5607553    5607661 delete from "HR"."JOIN3" where ROWID = 'AAANCRAAEAAAAKUAAB';
   09002F0048070000    5607553    5607661  
3, Flashback表
   在前面三个查询基础上,可以确定需要闪回的时间戳,或者scn,将表闪回,步骤:
   a, 开启表的行移动,使得rowid可以变化.
      SQL>alter table 表名 enable row movement;
   b, 闪回表
      SQL>flashback table 表名 to timestamp to_timestamp('2012-06-29 17:00:00','yyyy-mm-dd hh24:mi:ss');
      SQL>flashback table 表名 to scn5607553;

4, Flashback drop表
   SQL>flashback table 表名 to before drop [rename to 新表名];

5, Flashback database
  
Flashback遇到的问题
当过一段时间,flashback版本查询不能查询到事务的版本信息了,但如果记住了之前的事务版本号,则可以依旧可以从flashback_transaction_query
中查到该UNDO_SQL,为什么?
SQL>select versions_xid,versions_starttime,versions_endtime,versions_operation from join3 versions between timestamp minvalue and maxvalue;
VERSIONS_XID         VERSIONS_STARTTIME             VERSIONS_ENDTIME               V         ID CONTENT
-------------------- ------------------------------ ------------------------------ - ---------- --------------------
                                                                                              3 txt3
                                                                                              4 txt4
                                                                                              5 TXT5
                                                                                              6 txt6
                                                                                              1 txt1
                                                                                              2 txt2

6 rows selected.//这里已经无法查询到版本信息,但如果记得之前的XID,则下面的事务查询已经可以查询到UNDO_SQL,但XID必须从版本查询中获取.

SQL>select xid,start_scn,COMMIT_SCN,UNDO_SQL from flashback_transaction_query where xid='09002F0048070000';
XID               START_SCN COMMIT_SCN UNDO_SQL
---------------- ---------- ---------- ----------------------------------------------------------------------
09002F0048070000    5607553    5607661 delete from "HR"."JOIN3" where ROWID = 'AAANCRAAEAAAAKUAAB';
09002F0048070000    5607553    5607661
请问这里的版本查询信息,存在哪里?为什么时间久了查询不到?


Flashback相关视图
1,V$FLASHBACK_DATABASE_LOG
select * from V$FLASHBACK_DATABASE_LOG

2,V$FLASHBACK_DATABASE_STAT
SELECT begin_time, end_time, flashback_data, db_data,
redo_data, estimated_flashback_size AS EST_FB_SZE
FROM V$FLASHBACK_DATABASE_STAT

3,闪回区域空间使用视图v$recovery_file_dest
SELECT name, space_limit AS quota,
space_used AS used,
space_reclaimable AS reclaimable,
number_of_files AS files
FROM v$recovery_file_dest


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值