天天看點

Oracle Flashback Archive——Oracle閃回歸檔(上)

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/