Oracle Flashback閃回是從10g開始推出的一系列技術新特性。閃回Flashback的範圍很廣泛,包括Flashback Query、Flashback Database、Flashback Transaction和Flashback Drop等。
在之前的Blog系列《使用閃回拯救我們的資料》,筆者已經分析過Flashback閃回的一些特性。Flashback就是在不進行還原操作的情況下,将已經被commit或者ddl操作過的資料恢複過來。
Flashback借用多種技術來實作flashback的目标。Flashback存在一些問題和不适應性。比如:進行flashback的對象時間往往較短,而且不可控。另一方面,flashback的目标沒有針對性,對一些不需要進行flashback的資料表,也消耗資源進行flashback準備操作。
在Oracle 11g中,Oracle推出了flashback archive(閃回歸檔)的新特性。Flashback Archive實作了有針對性資料表的可控時間閃回功能。我們可以設定一塊存儲空間區域,保留一個特定資料表在不同時間的資料鏡像。而且可以設定保留時間,沒有達到保留時間的時候,資料都會進行保留。
下面我們通過一系列的實驗來說明這些特性。
1 、環境準備我們選擇Oracle 11g進行測試,同時建立一個表空間mytest。表空間mytest選擇ASSM方式進行segment space management。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create tablespace mytest datafile size 100m extent management local uniform. size 1m
2 segment space management auto;
Tablespace created
2 、建立Flashback Archive 空間Flashback的其他特性,如flashback drop、flashback database,都是資料庫的預設選擇項目,基本不需要使用者進行指定和配置。如果不希望有這些配置項目,則可以通過參數配置開關進行關閉。
Flashback Archive是一種比較特殊的類型,需要我們進行一系列的配置工作。首先,我們在sys使用者下建立一個flashback archive存儲對象。
SQL> show user;
User is "SYS"
SQL> create flashback archive flar1 tablespace mytest retention 1 year;
Done
建立flar1對象作為使用的flashback archive,存儲使用的表空間為mytest,設定的保留年限為1年。
在建立flar1之後,我們可以在dba_flashback_archive、dba_flashback_archive_ts(dba_字首可以使用user等進行替換)查詢到閃回資訊。
SQL> select * from dba_flashback_archive;
OWNER_NAME FLASHBACK_ARCHI FLASHBACK_ RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME STATUS
---------- --------------- ---------- ----------------- -------------------- -------------------- -------
SYS FLAR1 1 365 05-9月 -11 11.07.43. 05-9月 -11 11.07.43.
000000000 上午 000000000 上午
SQL> select * from dba_flashback_archive_ts;
FLASHBACK_ARCHI FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
--------------- ---------- --------------- ----------------------------------------
FLAR1 1 MYTEST
3 、設定具有閃回歸檔功能的資料表我們轉移到scott使用者下,進行閃回歸檔示範。
SQL> conn scott/[email protected];
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL> desc t;
Object t does not exist.
SQL> create table t as select * from dba_objects;
Table created
SQL> select count(*) from t;
COUNT(*)
----------
72226
之後,我們嘗試使用alter table xx flashback archive yyy的方法,将資料表與設定的閃回歸檔區關聯上。
SQL> alter table t flashback archive flar1;
alter table t flashback archive flar1
ORA-55620: 無權使用閃回歸檔
在scott普通使用者下,直接調用該指令是被拒絕的。使用設定閃回歸檔,需要擁有flashback archive系統權限。
--在sys使用者下
SQL> grant flashback archive on flar1 to scott;
Grant succeeded
--在scott使用者下
SQL> alter table t flashback archive flar1;
Table altered
此時,可以觀察到dba_flashback_archive_tables視圖的結果,建立了資料表T與flar1的關系。
SQL> select * from dba_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
-------------------------- ----------------------------------------------- --------
T SCOTT FLAR1 SYS_FBA_HIST_88294 ENABLED
4 、閃回歸檔資料表下面,我們分别在不同的時間點,對資料表進行DML操作,示範flashback archive特性。
--大規模DML操作前
SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
USED MBs
----------
92
SQL> select count(*) from t;
COUNT(*)
----------
113346
SQL> select sysdate from dual;
SYSDATE
--------------------
2011/9/6 9:06:57
--進行大規模DML操作;
SQL> insert into t select * from dba_objects;
72233 rows inserted
SQL> commit;
Commit complete
SQL> select count(*) from t;
COUNT(*)
----------
185579
SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 9:06:57','yyyy/mm/dd hh24:mi:ss');
COUNT(*)
----------
113346
SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
USED MBs
----------
75
上面的實驗,可以清晰的看出Flashback Archive的特點。從query文法上看,flashback archive與flashback query很相像,都是利用指定過去的一個時間點(timestamp,scn)進行查詢。但是,flashback query是利用undo的負效應,将沒有被覆寫的資料傳回給使用者。這種方式首先是對所有的資料表均有效果,另一個是時間有限,受到undo大小和資料庫事務頻繁度的影響。
而flashback archive則是将資料歸檔做到了資料庫的層面上。設定一塊專門的區域空間,稱之為flashback archive。這個區域是真實對應在表空間上可以進行存儲使用的。之後設定這塊區域的保留時間。
在資料表層面,可以選擇需要進行保留的資料表,讓其與flashback archive區域關聯,這樣在存儲區域中,就會保留各個時間點的鏡像資料。
本篇中研究了如何設定和使用flashback archive,下面我們一起分析研究下設定flashback archive的資料表特征和其他特點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-706778/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/17203031/viewspace-706778/