oracle flashback特性(1.1)--閃回查詢之As of timestamp
正如前言中所提,Flashback Query是利用多版本讀一致性的特性從UNDO表空間讀取操作前的記錄資料!
提示:什麼是多版本讀一致性
Oracle採用了一種非常優秀的設計,透過undo資料來確保寫不堵塞讀,簡單的講,不同的事務在寫資料時,會將資料的前映像寫入undo表空間,這樣如果同時有其它事務查詢該表資料,則可以透過undo表空間中資料的前映像來構造所需的完整記錄集,而不需要等待寫入的事務提交或回滾。
flashback query有多種方式構建查詢記錄集(注意,要使用flashback的特性,必須啟用自動撤銷管理表空間,什麼,你想問什麼是自動撤銷管理表空間?這個,說來話長啊~~~請注意關注本篇外傳),記錄集的選擇範圍可以基於時間或基於scn,甚至可以同時查詢出記錄在undo表空間中不同事務時的前映象。用法與標準查詢非常類似,要透過flashback query查詢undo中的撤銷資料,最簡單的方式只需要在標準查詢語句的表名後面跟上as of timestamp(基於時間)或as of scn(基於scn)即可。
1、As of timestamp的示例:
先建立一個很簡單的表並插入一些記錄用於測試:
JSSWEB> create table jss_tb1 (id,vl) as
2 select rownum,oname from(select substr(object_name,1,1) oname from dba_objects
3 group by substr(object_name,1,1) order by 1)
4 where rownum<=20;
已建立20行。
JSSWEB> select * from jss_tb1;
ID VL
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
11 K
12 L
13 M
14 N
15 O
16 P
17 Q
18 R
19 S
20 T
已選擇20行。
刪除幾條記錄並提交:
JSSWEB> delete from jss_tb1 where id<10;
已刪除9行。
JSSWEB> commit;
提交完成。
JSSWEB> select * from jss_tb1;
ID VL
---------- --------------------
10 J
11 K
12 L
13 M
14 N
15 O
16 P
17 Q
18 R
19 S
20 T
已選擇11行。
你看,這個時候jss_tb1表中id<10的記錄均已被刪除,假設過了一會兒你發現刪除操作執行有誤,仍需找回那些被誤刪的記錄該怎麼辦呢?使用備份恢復?如果是在8i,恐怕是需要這樣,自9i之後,使用flashback query的特性,我們可以很輕鬆的恢復記錄(注意並不是任何情況下都可以恢復喲,後面會講到制約flashback query的一些因素,我們這裡舉的都是理想條件下的例子),假設當前距離刪除資料已經有5分鐘左右的話:
JSSWEB> select * from jss_tb1 as of timestamp sysdate-5/1440;
ID VL
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
11 K
12 L
13 M
14 N
15 O
16 P
17 Q
18 R
19 S
20 T
已選擇20行。
你看,我們透過增加as of timestamp的語法,就可以到undo表空間中查詢到5分鐘之前的記錄前映象,使用它我們就可以很輕易的並且迅速的將記錄恢復:
JSSWEB> insert into jss_tb1
2 select * from jss_tb1 as of timestamp sysdate-5/1440
3 where id<10;
已建立9行。
JSSWEB> commit;
提交完成。
JSSWEB> select * from jss_tb1;
ID VL
---------- --------------------
10 J
11 K
12 L
13 M
14 N
15 O
16 P
17 Q
18 R
19 S
20 T
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
已選擇20行。
提示:
as of timestamp|scn的語法是自9iR2後才開始提供支援,如果是9iR1版本,需要使用DBMS_FLASHBACK包來應用flashback query的特性。
如上述示例中所表示的,as of timestamp的確非常易用,但是在某些情況下,我們建議使用as of scn的方式執行flashback query,比如需要對多個相互有主外來鍵約束的表進行恢復時,如果使用as of timestamp的方式,可能會由於時間點不統一的緣故造成資料選擇或插入失敗,透過scn方式則能夠確保記錄的約束一致性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3907/viewspace-1009367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- [閃回特性之閃回版本查詢]Flashback Version Query
- oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【閃回特性之閃回事務查詢】Flashback Transaction Query
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 【閃回特性之閃回查詢】使用閃回查詢(select as of)
- 【徵文】全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- Flashback Query閃回查詢
- Oracle 閃回特性(FLASHBACK DATABASE)OracleDatabase
- 閃回查詢之閃回版本查詢
- 閃回查詢之閃回表查詢
- 閃回版本查詢(Flashback Version Query)
- Oracle9i,.10g 閃回查詢(flashback)Oracle
- 聊聊閃回版本查詢Flashback Version Query
- oracle閃回查詢Oracle
- oracle 閃回查詢Oracle
- oracle 閃回 flashbackOracle
- oracle的閃回查詢Oracle
- oracle的回閃查詢Oracle
- Oracle Database 10g新特性-閃回版本查詢OracleDatabase
- Oracle閃回查詢,閃回版本查詢與閃回事務查詢的使用區別總結Oracle
- 【Flashback】使用檢視快速獲得Flashback Query閃回查詢資料
- 閃回表、閃回查詢
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Oracle Flashback 閃回查詢功能操作範例(9i and 10g)Oracle
- Oracle 11G 閃回技術 使用Oracle閃回查詢Oracle
- 10g新特性——閃回版本查詢
- 閃回查詢
- 閃回(關於閃回查詢)
- 閃回刪除、閃回查詢
- oracle閃回特性Oracle