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

haolinhappy發表於2015-10-08

 

Flashback ArchiveOracle 11g推出的具有針對性和強制性的資料透明歸檔技術。本篇我們集中介紹與該特性相關的許可權和DDL操作問題。

 

 

9Flashback Archive相關許可權

 

Oracle一個新特性的推出,經常伴隨著一系列新的許可權集合的確立。Flashback Archive元件相關的有兩個系統許可權,分別為flashback archiveflashback archive administrator

 

從上面的scott使用者的情況中,我們可以看到flashback archive系統許可權的作用。 就是透過對資料表和已經建立的flashback archive建立關係,開啟閃迴歸檔功能。

 

 

SQL> conn scott/tiger@ora11g;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> alter table t flashback archive flar1;

 

alter table t flashback archive flar1

 

ORA-55620: 無權使用閃迴歸檔

 

--切換到sys使用者上

SQL> grant flashback archive on flar1 to scott;

Grant succeeded

 

SQL> alter table t flashback archive flar1;

Table altered

 

 

但是,只擁有flashback archive許可權的使用者,對檢視dba_flashback_xxx系列獲取到的結果是不準確的。

 

 

SQL> select owner_name, flashback_archive_name from dba_flashback_archive;

 

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME  

------------------------------ -------------------------

 

SQL> select table_name, owner_name from dba_flashback_archive_tables;

 

TABLE_NAME           OWNER_NAME                         

-------------------- ------------------------------ --------------------------------

 

 

對只擁有flashback archive系統許可權的使用者而言,只能去查詢user_xxx相關檢視。

 

 

SQL> select owner_name, flashback_archive_name from user_flashback_archive;

 

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME      

------------------------------ ------------------------

SYS                            FLAR1                    

 

 

另一個與flashback archive相關的系統許可權是flashback archive administrator,擁有這個許可權的使用者可以執行下列操作型別:

 

ü        Create flashback archive xxx tablespace yyy quota xx retention zzz; 建立閃迴歸檔區,設定空間限制;

ü        Alter flashback archive xxx 進行清理purge等操作;

ü        Drop flashback archive xxx刪除指定的閃迴歸檔空間;

 

 

SQL> conn sys/oracle@ora11g as sysdba;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> grant flashback archive administer to scott;

Grant succeeded

 

SQL> conn scott/tiger@ora11g;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> select * from dba_flashback_archive_tables;

 

TABLE_NAME  OWNER_NAME                     FLASHBACK_ARCHIVE_NAME           

------------------------------ ------------------------------ -----------------------------------

T                              SCOTT                          FLAR1                         

 

SQL> create flashback archive flar2 tablespace mytest retention 1 year;

Done

 

SQL> ALTER FLASHBACK ARCHIVE flar2 PURGE ALL;

Done

 

SQL> drop flashback archive flar2;

Done

 

 

如果取消了這個系統許可權,那麼相關的系列操作就不能進行。

 

 

SQL> revoke flashback archive administer from scott;

Revoke succeeded

 

SQL> create flashback archive flr2 tablespace mytest retention 1 year;

create flashback archive flr2 tablespace mytest retention 1 year

 

ORA-55612: 無權管理閃迴歸檔

 

 

注意,並不是只有顯示擁有flashback archive administrator許可權的使用者才能Create/alter/drop archive flashback操作。如果使用者是dba角色,也可以實現這個目標。

 

 

SQL> conn sys/oracle@ora11g as sysdba;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> grant dba to scott;

Grant succeeded

 

SQL> conn scott/tiger@ora11g ;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> create flashback archive flr2 tablespace mytest retention 1 year;

Done

 

 

 

10flashback archiveDDL操作

 

Flashback Archive是保證對資料表進行DML操作時,資料前後映象都能儲存找回的技術。那麼,如果一個資料表加入flashback archive之後,進行DDL操作有什麼影響呢?我們分別進行試驗。

 

ü        資料列新增add實驗

 

對已經加入flashback archive的資料表新增一個資料列。

 

 

SQL> alter table t add m varchar2(10);

Table altered

 

 

直觀感覺沒有什麼區別,就是新增資料列的速度要慢很多。此時,我們檢查相關的資料表。

 

 

SQL> select * from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN XID  OPERATION COLUMN_NAME   TYPE                HISTORICAL_COLUMN_NAME

---------- ---------- ----- --------- -------------- -------------------- --------------------

  13395717                  OWNER         VARCHAR2(30)        OWNER

(篇幅原因,有省略……

  13395717             EDITION_NAME  VARCHAR2(30)        EDITION_NAME

  13424840             M             VARCHAR2(10)        M

 

16 rows selected

 

 

資料表基表sys_fba_ddl_colmap_88294記錄了資料欄位變化起效的時間範圍(也就是scn範圍)。從剛才新增資料列的情況看,資料表中說明從scn=13424840開始,新增起效了資料列m

 

ü        資料列修改

 

修改一個資料列屬性。

 

 

SQL> alter table t modify m varchar2(20) ;

 

Table altered

 

SQL> select * from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN  COLUMN_NAME         TYPE          HISTORICAL_COLUMN_NAME

---------- ----------  ----------------- ---------------- ----------------------

  13395717             OWNER               VARCHAR2(30)  OWNER

   13395717            EDITION_NAME       VARCHAR2(30)  EDITION_NAME

  13424840   13427266  M_13427266_M        VARCHAR2(10)  M

  13427266             M                  VARCHAR2(20)   M

 

17 rows selected

 

 

對於一個資料列修改,Oracle flashback archive將其視為刪除列後重新新增。

 

ü        Truncate table

 

資料表的truncate操作是一個典型的DDL操作,具有flashback archive特性的資料表是否可以truncate操作呢?

 

 

SQL> truncate table t;

Table truncated

 

SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 10:45:49','yyyy-mm-dd hh24:mi:ss');

 

  COUNT(*)

----------

        17

 

 

ü        刪除資料列

 

對一個資料列進行刪除操作,flashback archive資料表同樣支援。

 

 

SQL> alter table t drop column m;

Table altered

 

SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 10:45:49','yyyy-mm-dd hh24:mi:ss');

  COUNT(*)

----------

        17

 

SQL> select count(*) from t;

  COUNT(*)

----------

         0

 

 

此時,在sys_fba_ddl_colmap_88294中會記錄上刪除記錄。

 

SQL> select STARTSCN,ENDSCN,COLUMN_NAME from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN    COLUMN_NAME      

---------- ---------- ---------------- -

  13395717               OWNER             

  13395717               NAMESPACE       

(篇幅原因,有省略。。。。。。)

  13395717               EDITION_NAME  

  13424840   13427266    M_13427266_M    

  13427266   13428271    D_13428271_M   

 

17 rows selected

 

 

ü        Drop刪除資料表

 

drop資料表操作,flashback archive資料表是不支援的。

 

 

SQL> drop table t;

 

drop table t

 

ORA-55610: 針對歷史記錄跟蹤表的 DDL 語句無效

 

 

要想刪除資料表,則需要首先使用alter table xxx no flashback archive;語句進行歷史資料歸檔跟蹤關係的解除。之後才能進行刪除。

 

11、結論

 

資料歸檔、offline是很多系統都需要有的特定需求。我們經常遇到這樣的需求:將歷史資料保留幾個月或者幾年待查。待查的情景是很少,但是我們如果從應用入手,就需要設計額外的資料表和業務處理流程。其中一個更麻煩的就是保留期過刪資料的操作,相對較為複雜。

 

Flashback archiveOracle可以使用在生產系統中直接使用的歸檔功能元件。如果開發設計使用這個元件進行歸檔,有若干個好處。

 

首先是透明化的歸檔操作,使用者不需要去關心進行歸檔的業務邏輯。只要設定好了需要歸檔的資料表,按照查詢歸檔語法進行查詢。就可以實現應用系統中最典型的歸檔查詢需要。

 

其次是高效儲存個性。在flashback archive中,資料是儲存在內部分割槽壓縮表中,各方面的屬性由Oracle進行控制管理。

 

最後是保留期管理嚴格化。設定不同的flashback archive retention period,首先可以對不同的資料表適應使用不同的保留期。當資料超期之後,Oracle自動進行資料刪除工作,不需要使用者進行干預。

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

相關文章