Flashback Data Archive(閃回日志歸檔)其實理解為長時間的保存undo數(shù)據(jù),對于某些重要的表可以自定義它的歷史記錄保存期限,它的的種種行為與undo表空間十分相似,使用的時候也是完全透明的,用戶不知道它的查詢一致性視圖數(shù)據(jù)是來自undo還是Flashback Data Archive,現(xiàn)來分析它與undo的幾點不同:
1.Flashback Data Archive僅記錄UPDATE和DELETE語句,不記錄INSERT語句。
2.Flashback Data Archive中的行數(shù)據(jù)庫可以保存非常長的時間,甚至是幾十年,相比之下的undo數(shù)據(jù)中的對象通常只有幾個小時或者幾天的保留期限。
3.Flashback Data Archive和undo的本質(zhì)功能是不同的,它只關注表行的歷史改動,而非undo來實現(xiàn)數(shù)據(jù)庫整體事務的讀一致性,已經(jīng)回滾操作等。
那么Flashback Data Archive是怎么實現(xiàn)的呢,設想既然是保存表中的行記錄,應該是需要單獨的存儲區(qū)域來記載行記錄的,為這個區(qū)域指定保留期限,這樣其中的數(shù)據(jù)就會長久的保留下去,然后再在想要記錄的表上添加跟蹤標記,這樣就可以實現(xiàn)行記錄的歸檔保存了,實際上這便是Oracle的實現(xiàn)原理,這里的存儲區(qū)域就是Flashback Data Archive,在使用過程中使用create flashback archive命令創(chuàng)建。
一、創(chuàng)建歸檔
Oracle建議使用單獨的表空間來存儲Flashback Data Archive,當然也可以在一個已經(jīng)存在的表空間上創(chuàng)建一個或多個Flashback Data Archive,
–創(chuàng)建前需要保證執(zhí)行用戶具有FLASHBACK_ARCHIVE_ADMINISTRER權限,該權限包括創(chuàng)建和修改flashback archive,啟用表跟蹤,管理歸檔中的表空間等)
Tablespace created.
接下來開始創(chuàng)建Flashback Data Archive:
Flashback archive created.
上面的命令創(chuàng)建了一個保存十年的Flashback Data Archive,它可以使用fbda1表空間中300m的空間(有點小了。。。),根據(jù)需要我們可以再創(chuàng)建一個默認的歸檔,使用default關鍵字,如
Flashback archive created.
查詢DBA_FLASHBACK_ARCHIVE視圖獲取歸檔的信息,包括保留期限,狀態(tài)等
查詢FLASHBACK_ARCHIVE_TS視圖獲取表空間和歸檔的對應關系
FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
------------------------- ------------------ -------------------- ------------
FB_01 1 FBDA1 300
FB_DFLT 2 FBDA1
二、跟蹤表到指定的Flashback Data Archive中
將scott用戶的emp表分配到fb_01歸檔下:
Table altered.
查詢DBA_FLASHBACK_ARCHIVE_TABLES視圖可以獲得已經(jīng)歸檔的表:
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NA ARCHIVE_TABLE_NAME STATUS
---------- ---------- -------------------- -------------------- --------
EMP SCOTT FB_01 SYS_FBA_HIST_73181 ENABLED
三、查詢使用Flashback Data Archive
這里的使用和undo完全沒有異樣了,在查詢中指定as of就可以了,這里演示查詢3年前的emp表數(shù)據(jù):
EMPNO ENAME HIREDATE
---------- ---------- ---------
7934 MILLER 23-JAN-82