Oracle 11g 閃回資料歸檔
雖然ORA-01555錯誤可以通過種種手段來避免和減少,但是隨著時間的流逝,這些UNDO資訊總會失去,那麼能否將這些資訊儲存起來,使得資料庫在一定的歷史週期之內可以不斷向後追溯,使得我們可以看到一個資料表在任意歷史時間點上的切片呢?
從Oracle Database 11g開始,Oracle 提供了一個這樣的功能:閃回資料歸檔(Flashback Data Archive)。通過這一功能Oracle資料庫可以將UNDO資料進行歸檔,從而提供全面的歷史資料查詢,也因此Oracle引入一個新的概念Oracle Total Recall,也即Oracle全面回憶功能。閃回資料歸檔可以和我們一直熟悉的日誌歸檔類比,日誌歸檔記錄的是Redo的歷史狀態,用於保證恢復的連續性;而閃迴歸檔記錄的是UNDO的歷史狀態,可以用於對資料進行閃回追溯查詢;後臺程式LGWR用於將Redo資訊寫出到日誌檔案,ARCH程式負責進行日誌歸檔;在Oracle 11g中,新增的後臺程式FBDA(Flashback Data Archiver Process)則用於對閃回資料進行歸檔寫出:
[oracle@sp3: ~]$ps -ef | grep fbda | grep -v grep
oracle 3251 1 0 Jan07 ? 00:00:11 ora_fbda_ccdb
閃迴歸檔資料甚至可以以年為單位進行儲存,Oracle可以通過內部分割槽和壓縮演算法減少空間耗用,這一特性對於需要審計以及歷史資料分割槽的環境尤其有用,但是注意,對於繁忙的資料庫環境,閃回資料儲存顯然要耗用更多的儲存空間。當然,使用者可以根據需要,對部分表進行閃回資料歸檔,從而滿足特定的業務需求。
因為閃回資料歸檔需要獨立的儲存,所以在使用該特性之前需要建立獨立的ASSM(自動段空間管理)表空間:
sys@TQGZS11G> create tablespace fbda datafile '/oracle/oradata/tqgzs11g/FBDA.dbf' size 200M segment space management auto;
Tablespace created.
然後可以基於該表空間建立閃回資料歸檔區,FLASHBACK ARCHIVE ADMINISTER系統許可權是建立閃回資料存檔所必需的,此處使用SYS使用者進行:
sys@TQGZS11G> create flashback archive fda tablespace fbda retention 1 month;
Flashback archive created.
此後就可以使用該歸檔區來記錄資料表的閃回資料量。為了測試方便,先將UNDO表空間更改為較小,以使得UNDO資料能夠儘快老化:
sys@TQGZS11G> create undo tablespace UNDOTBS2_SMALL datafile '/oracle/oradata/tqgzs11g/UNDOTBS2_SMALL.dbf' size 20M autoextend off;
Tablespace created.
sys@TQGZS11G> alter system set undo_tablespace= UNDOTBS2_SMALL;
System altered.
sys@TQGZS11G> show parameter undo
NAME TYPE VALUE
------------------------------------ ------------------------------ ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2_SMALL
接下來使用測試使用者連線,對測試表執行閃迴歸檔設定,FLASHBACK ARCHIVE物件許可權是啟用歷史資料跟蹤所必需的:
sys@TQGZS11G> conn tq/tq
Connected.
tq@TQGZS11G> select TABLE_NAME from user_tables;
TABLE_NAME
--------------------
T
EMP
tq@TQGZS11G> alter table t flashback archive fda;
Table altered.
取消對於資料表的閃迴歸檔可以使用如下命令:
alter table table_name no flashback archive;
接下來記錄一下SCN,從資料庫表中刪除部分資料:
tq@TQGZS11G> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1142115
tq@TQGZS11G> select count(*) from t;
COUNT(*)
----------
69266
tq@TQGZS11G> delete from t where rownum < 1001;
1000 rows deleted.
tq@TQGZS11G> commit;
Commit complete.
現在執行閃回查詢,則資料來自UNDO表空間:
tq@TQGZS11G> select count(*) from t as of scn 1142115;
COUNT(*)
----------
69266
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1048 (1)| 00:00:13 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 69266 | 1048 (1)| 00:00:13 |
-------------------------------------------------------------------
接下來執行一小段批量迴圈程式碼,使UNDO資料老化覆蓋:
tq@TQGZS11G> begin
2 for i in 1 .. 100 loop
3 delete from t where rownum < 31;
4 commit;
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
現在來看一下閃回資料歸檔發揮作用的閃回查詢,通過執行計劃能夠看到和之前查詢執行方式的不同:
tq@TQGZS11G> select count(*) from t as of scn 1142115;
COUNT(*)
----------
69266
Execution Plan
----------------------------------------------------------
Plan hash value: 1421074822
----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1151 (1)| 00:00:14 | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | VIEW | | 20633 | | 1151 (1)| 00:00:14 | | |
| 3 | UNION-ALL | | | | | | | |
| 4 | PARTITION RANGE SINGLE| | 20295 | 515K| 69 (2)| 00:00:01 | 1 | 1 |
|* 5 | TABLE ACCESS FULL | SYS_FBA_HIST_72661 | 20295 | 515K| 69 (2)| 00:00:01 | 1 | 1 |
|* 6 | FILTER | | | | | | | |
|* 7 | HASH JOIN OUTER | | 338 | 669K| 1081 (1)| 00:00:13 | | |
|* 8 | TABLE ACCESS FULL | T | 3463 | 41556 | 1048 (1)| 00:00:13 | | |
| 9 | VIEW | | 19522 | 37M| 32 (0)| 00:00:01 | | |
|* 10 | TABLE ACCESS FULL | SYS_FBA_TCRV_72661 | 19522 | 37M| 32 (0)| 00:00:01 | | |
----------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - filter("ENDSCN">1142115 AND "ENDSCN"<=1145328 AND ("STARTSCN" IS NULL OR "STARTSCN"<=1142115))
6 - filter("F"."STARTSCN"<=1142115 OR "F"."STARTSCN" IS NULL)
7 - access("T".ROWID=CHARTOROWID("F"."RID"(+)))
8 - filter("T"."VERSIONS_STARTSCN" IS NULL)
10 - filter(("ENDSCN" IS NULL OR "ENDSCN">1145328) AND ("STARTSCN" IS NULL OR "STARTSCN"<1145328))
Note
-----
- dynamic sampling used for this statement
通過以上執行計劃可以看到,查詢閃回來自SYS_FBA_TCRV_72661系統表,該表隸屬於閃迴歸檔表空間,用於記錄閃回資料:
tq@TQGZS11G> desc SYS_FBA_TCRV_72661
Name Null? Type
----------------- -------- ---------------------
RID VARCHAR2(4000)
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OP VARCHAR2(1)
tq@TQGZS11G> select count(*) from SYS_FBA_TCRV_72661;
COUNT(*)
----------
18511
閃回功能生成的字典物件有多個,通過查詢USER_TABLES/USER_OBJECTS檢視可以獲得這些物件的詳細資訊:
tq@TQGZS11G> select table_name,tablespace_name from user_tables where table_name like '%FBA%';
TABLE_NAME TABLESPACE_NAME
------------------------------ --------------------
SYS_FBA_DDL_COLMAP_72661 FBDA
SYS_FBA_TCRV_72661 FBDA
SYS_FBA_HIST_72661
tq@TQGZS11G> select object_name,object_type from user_objects where object_name like '%FBA%';
OBJECT_NAME OBJECT_TYPE
------------------------------ --------------------
SYS_FBA_DDL_COLMAP_72661 TABLE
SYS_FBA_HIST_72661 TABLE
SYS_FBA_HIST_72661 TABLE PARTITION
SYS_FBA_TCRV_72661 TABLE
SYS_FBA_TCRV_IDX_72661 INDEX
可以通過資料字典檢視來檢視關於閃迴歸檔表的記錄:
tq@TQGZS11G> select * from user_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME
---------- ---------- ------------------------------ --------------------
T TQ FDA SYS_FBA_HIST_72661
可以通過dict字典查詢和閃迴歸檔有關的資料字典表:
sys@TQGZS11G> select table_name from dict where table_name like '%FLASHBACK_ARCHIVE%';
TABLE_NAME
-----------------------------------
DBA_FLASHBACK_ARCHIVE
DBA_FLASHBACK_ARCHIVE_TABLES
DBA_FLASHBACK_ARCHIVE_TS
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES
總之,閃回資料歸檔是Oracle 11g提供的重要增強之一,通過合理使用這一增強,可以為資料庫提供更為全面的資料生命週期管理,Oracle關於UNDO技術的進化至此又邁進了重要的一步。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [zt] Oracle 11g 閃回資料歸檔Oracle
- Oracle閃回資料歸檔Oracle
- 11g閃回資料歸檔
- 11g新特性--Oracle 11g 閃回資料歸檔Oracle
- Oracle 11g閃回資料歸檔新功能解析Oracle
- 【Flashback】11g的閃回資料歸檔初探
- Oracle 11g新特性--閃回資料歸檔(flashback data archive)[zt]OracleHive
- 清除閃回資料歸檔區資料
- 關於oracle閃回資料歸檔的總結Oracle
- 閃回資料歸檔-- Flashback Data ArchiveHive
- Oracle 11g 閃回資料庫Oracle資料庫
- Oracle 11g 閃迴歸檔Oracle
- 【oracle 】閃回與歸檔位置的理解Oracle
- 開閃回及閃迴歸檔
- Oracle閃回技術之閃回資料庫Oracle資料庫
- Oracle 11G 閃回技術 使用Oracle閃回查詢Oracle
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- Oracle資料庫閃回Oracle資料庫
- Oracle閃回資料庫Oracle資料庫
- Oracle 11g 閃回表Oracle
- RAC資料庫啟用歸檔和閃回的步驟資料庫
- Oracle資料庫的閃回恢復區及多歸檔路徑的設定Oracle資料庫
- Oracle 11g 閃回刪除Oracle
- Oracle 11g 閃回查詢Oracle
- Oracle 11G 閃回技術 使用閃回版本查詢Oracle
- Oracle 閃回技術 概覽 資料庫閃回功能Oracle資料庫
- 【Flashback】啟用閃回資料庫功能需要在歸檔模式下完成資料庫模式
- Oracle 閃回資料庫測試Oracle資料庫
- 詳解oracle資料庫閃回Oracle資料庫
- Oracle 11g 閃回版本查詢Oracle
- 【備份恢復】 閃回技術之閃迴歸檔
- 閃回(關於閃回資料庫)資料庫
- 閃回與歸檔引數的設定
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Oracle 11g資料庫改為非歸檔模式Oracle資料庫模式
- Oracle 11G 閃回技術 使用Oracle閃回事務查詢Oracle
- Oracle 11g開啟閃回功能FlashbackOracle
- Oracle 11G 閃回技術概覽Oracle