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

haolinhappy發表於2015-10-08

 

Oracle Flashback閃回是從10g開始推出的一系列技術新特性。閃回Flashback的範圍很廣泛,包括Flashback QueryFlashback DatabaseFlashback TransactionFlashback 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 dropflashback 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_archivedba_flashback_archive_tsdba_字首可以使用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/tiger@ora11g;

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檢視的結果,建立了資料表Tflar1的關係。

 

 

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 archiveflashback query很相像,都是利用指定過去的一個時間點(timestampscn)進行查詢。但是,flashback query是利用undo的負效應,將沒有被覆寫的資料返回給使用者。這種方式首先是對所有的資料表均有效果,另一個是時間有限,受到undo大小和資料庫事務頻繁度的影響。

 

 

flashback archive則是將資料歸檔做到了資料庫的層面上。設定一塊專門的區域空間,稱之為flashback archive。這個區域是真實對應在表空間上可以進行儲存使用的。之後設定這塊區域的保留時間。

 

在資料表層面,可以選擇需要進行保留的資料表,讓其與flashback archive區域關聯,這樣在儲存區域中,就會保留各個時間點的映象資料。

 

 

本篇中研究瞭如何設定和使用flashback archive,下面我們一起分析研究下設定flashback archive的資料表特徵和其他特點。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27785870/viewspace-1813445/,如需轉載,請註明出處,否則將追究法律責任。

相關文章