全面學習oracle flashback特性(1.1)--閃回查詢之As of timestamp
Flashback是ORACLE自9i就開始提供的一項特性,在9i中利用oracle查詢多版本一致的特點,實現從回滾段中讀取表一定時間內操作過的資料,可用來進行資料比對,或者修正意外提交造成的錯誤資料,該項特性也被稱為Flashback Query。在10g中Flashback又得到了相當大的增強,利用回收站和閃回區的特性實現快速恢復刪除表(Flashback Table)或做資料庫時間點恢復(Flashback Database)的功能。本文將分三個部分分別介紹!
提示:
關於flashback這個詞的翻譯呢,有很多:有叫回閃的,有叫閃回的。雖然三思個人認為相對來說閃回更通行一些,但在本系列文章中,我將堅持不做翻譯,而直稱為flashback。我覺著某些詞彙不應做翻譯,一方面是由於找不著合適的詞來做轉換,另一方面也有使用習慣的原因,比如oracle公司雖然大家都知道其中文名稱叫甲骨文,但日常交流中大家都習慣說oracle就是這個道理。
[@more@]
一、Flashback Query
正如前言中所提,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方式則能夠確保記錄的約束一致性。
如何應用as of scn的方式查詢undo資料呢?請繼續關注後續連載~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-1006143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- Oracle閃回技術--Flashback Version QueryOracle
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Oracle 11G 閃回技術 使用Oracle閃回事務查詢Oracle
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- flashback query閃回資料
- DM7閃回與閃回查詢
- 【Flashback】Flashback Drop閃回刪除功能實驗
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- 【FLASHBACK】Oracle閃回及回收站相關語句參考Oracle
- DM8 閃回查詢
- GeminiDB Cassandra介面新特性FLASHBACK釋出:任意時間點秒級閃回
- Flashback Drop閃回刪除功能實踐
- LightDB 22.4 新特性之相容Oracle樹形查詢Oracle
- mysql timestamp比較查詢MySql
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- oracle學習筆記(十一) 高階查詢Oracle筆記
- Oracle 備份恢復之 FlashbackOracle
- Oracle資料庫閃回Oracle資料庫
- Oracle查詢回滾大事務所需時間Oracle
- 【FLASHBACK】Oracle flashback data archive 介紹OracleHive
- MySQL 學習之索引篇和查詢MySql索引
- Oracle TimestampOracle
- 【RECO_ORACLE】Oracle閃回PDB的方法Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- Oracle 查詢Oracle
- Oracle 閃回資料庫測試Oracle資料庫
- 【PDB】pdb閃回,Oracle還原點Oracle
- 詳解oracle資料庫閃回Oracle資料庫
- 資料庫學習筆記之查詢表資料庫筆記
- ORACLE_OCP之SQL_子查詢OracleSQL
- ORACLE Flashback Query偽列Oracle
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- JavaScript學習1.1JavaScript
- Oracle psu查詢Oracle
- oracle 基本查詢Oracle
- oracle常用查詢Oracle
- 【從零開始學習Oracle資料庫】(3)函式與子查詢和連線查詢Oracle資料庫函式