Oracle Flashback Archive——Oracle閃迴歸檔(下)
Flashback Archive是Oracle 11g推出的具有針對性和強制性的資料透明歸檔技術。本篇我們集中介紹與該特性相關的許可權和DDL操作問題。
9、Flashback Archive相關許可權
Oracle一個新特性的推出,經常伴隨著一系列新的許可權集合的確立。Flashback Archive元件相關的有兩個系統許可權,分別為flashback archive和flashback 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
10、flashback archive與DDL操作
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 archive是Oracle可以使用在生產系統中直接使用的歸檔功能元件。如果開發設計使用這個元件進行歸檔,有若干個好處。
首先是透明化的歸檔操作,使用者不需要去關心進行歸檔的業務邏輯。只要設定好了需要歸檔的資料表,按照查詢歸檔語法進行查詢。就可以實現應用系統中最典型的歸檔查詢需要。
其次是高效儲存個性。在flashback archive中,資料是儲存在內部分割槽壓縮表中,各方面的屬性由Oracle進行控制管理。
最後是保留期管理嚴格化。設定不同的flashback archive retention period,首先可以對不同的資料表適應使用不同的保留期。當資料超期之後,Oracle自動進行資料刪除工作,不需要使用者進行干預。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27785870/viewspace-1813447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Flashback Archive——Oracle閃迴歸檔(上)OracleHive
- Oracle Flashback Archive——Oracle閃迴歸檔(中)OracleHive
- 閃回資料歸檔-- Flashback Data ArchiveHive
- Oracle 11g新特性--閃回資料歸檔(flashback data archive)[zt]OracleHive
- Oracle 11g 閃迴歸檔Oracle
- oracle archive歸檔初步OracleHive
- Oracle Flashback Data ArchiveOracleHive
- 【FLASHBACK】Oracle flashback data archive 介紹OracleHive
- oracle archive log 歸檔日誌OracleHive
- oracle 閃回 flashbackOracle
- Flashback Data Archive (Oracle Total Recall)HiveOracle
- Oracle archive log 歸檔日誌管理OracleHive
- [Archive]更改ORACLE預設歸檔路徑HiveOracle
- Oracle閃回資料歸檔Oracle
- 開閃回及閃迴歸檔
- Oracle 閃回特性(FLASHBACK DATABASE)OracleDatabase
- How To Using Flashback Data Archive (Oracle Total Recall)HiveOracle
- 【oracle 】閃回與歸檔位置的理解Oracle
- oracle11g flashback archive feature新特性OracleHive
- Oracle 11g 閃回資料歸檔Oracle
- Oracle閃回技術--Flashback Version QueryOracle
- 開啟oracle的flashback閃回功能Oracle
- Flashback_oracle閃回功能的使用Oracle
- 【Flashback】11g的閃回資料歸檔初探
- 閃迴歸檔的簡單測試
- oracle 11g 新特性 Flashback Data Archive 說明OracleHive
- [zt] Oracle 11g 閃回資料歸檔Oracle
- 11G flashback data archive 導致產生大量歸檔日誌Hive
- oracle 歸檔/非歸檔Oracle
- 【備份恢復】 閃回技術之閃迴歸檔
- oracle歸檔Oracle
- DBMS_FLASHBACK_ARCHIVE在Oracle版本中的支援情況HiveOracle
- 關於oracle閃回資料歸檔的總結Oracle
- ORACLE非歸檔下的恢復Oracle
- Oracle 11g開啟閃回功能FlashbackOracle
- Oracle Database 11g閃回技術flashbackOracleDatabase
- oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- Oracle OCP 1Z0 053 Q138(DROP FLASHBACK ARCHIVE)OracleHive