flashback總結四之Flashback_Query

zhangshengdong發表於2011-11-25

Flashback Query 是利用多版本讀一致性的特性從UNDO 表空間讀取操作前的記錄資料!

由於例子完整性,演示As of timestamp和As of scn 的示例
個人推薦就使用as of scn,精準性高

1,As of timestamp的例子
******************************個人操作**************************************
SQL> alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';
會話已更改。

SQL> select sysdate from dual;
SYSDATE
-------------------
2011-11-25 10:24:18

SQL> delete from emp;
已刪除14行。

SQL> select * from emp;
未選定行

SQL> select count(*) from emp as of timestamp sysdate-5/1440;(通過as of timestamp查詢五分鐘之前的資料)

  COUNT(*)
----------
        14

SQL> select count(*) from emp as of timestamp to_timestamp('2011-11-25 10:24:18'
,'YYYY-MM-DD hh24:mi:ss');(按系統時間查詢)

  COUNT(*)
----------
        14

SQL> insert into emp select * from emp as of timestamp sysdate-5/1440;(插入以前時間點的資料)

已建立14行。

SQL> select count(*) from emp;

  COUNT(*)
----------
        14
恢復操作成功!!!!

2,As of scn的例子
********************************個人操作**************************************
SQL> SELECT dbms_flashback.get_system_change_number FROM dual;
SELECT dbms_flashback.get_system_change_number FROM dual
       *
第 1 行出現錯誤:
ORA-00904: : 識別符號無效
(它說我有ora-00904的錯誤,原因是我現在還在scott使用者下,所以要轉回sys使用者下)

SQL> connect sys/root as sysdba;
已連線。

SQL> SELECT dbms_flashback.get_system_change_number FROM dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 3361877

SQL> SELECT CURRENT_SCN FROM V$DATABASE;(檢視scn)

CURRENT_SCN
-----------
    3361949

SQL> delete from scott.emp;

已刪除14行。

SQL> commit;

提交完成。

SQL> select count(*) from scott.emp as of scn 3361949;(通過scn查詢歷史資料)

  COUNT(*)
----------
        14

SQL> insert into scott.emp select * from scott.emp as of scn 3361949;(插入歷史資料)

已建立14行。

SQL> select count(*) from scott.emp;

  COUNT(*)
----------
        14

恢復操作成功


flash_query總結:
檢視SCN 和 timestamp 之間的對應關係(如下),
SQL> select * from(select rownum no,scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')
from sys.smon_scn_time)
  2  where no>=1 and no<=10;

        NO        SCN TO_CHAR(TIME_DP,'YY
---------- ---------- -------------------
         1    3289317 2011-11-23 16:42:00
         2    3289725 2011-11-23 16:52:00
         3    3290621 2011-11-23 17:02:01
         4    3214377 2011-11-22 14:16:15
         5    3291105 2011-11-23 17:12:01
         6    3179460 2011-11-19 16:29:43
         7    2019804 2011-10-21 14:40:51
         8    2020849 2011-10-21 15:00:36
         9    3202079 2011-11-22 09:43:36
        10    3216623 2011-11-22 15:26:16

已選擇10行。

說明scn和時間有一定的對應關係,對應規則是:每隔5 分鐘,系統產生一次系統時間標記與scn 的匹配

5分鐘的概念就是,在這個時間段點,就有一個scn對應
舉個例子,比如scn:339988,339989 分別匹配11-11-11 13:52:00 和11-11-11 13:57:00,在這個時間段裡面查
找的資料都是11-11-11 13:52:00 時間點的資料。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26446098/viewspace-712049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章