關於oracle閃回資料歸檔的總結

賀子_DBA時代發表於2016-09-22
Flashback Data Archive閃回資料歸檔概述:
一句話就是undo的長期儲存
     我們知道關係型資料庫要保證一致性,例如A使用者update一條資料,未提交,此時為保證一致性B使用者是看不到A更改後的資料的,那麼此時B使用者需要從undo表空間裡面檢視資料的前映象,如果找不到前映象就會報錯,非常經典的ora-01555快照過舊的錯誤,還有就是閃回表和閃回查詢也要依靠UNDO表空間記錄的回滾資訊,
然而undo表空間裡面的資料是迴圈複寫的,具體迴圈複寫的規則請見http://blog.itpub.net/29654823/viewspace-2106256/ ,這樣時間久了,所以經常在做回閃查詢時,我們會因為找不到undo block而收到1555錯誤, 由此11G裡面引入了Flashback Data Archive ,他用於儲存資料的所有改變,時間由你自己設定,消耗的是更多的磁碟空間,現在來看下這個特性。
 
一:建立閃回資料歸檔
1)建立管理閃回資料歸檔的使用者
SQL>create user FR_ADMIN identified by oracle;
2)用sys使用者賦予FR_ADMIN需要的許可權
SQL> grant create session,FLASHBACK ARCHIVE ADMINISTER to fr_admin;
SQL> grant CREATE FLASHBACK ARCHIVE to fr_admin;
3)建立閃回資料歸檔使用的表空間
SQL> create tablespace fratbs datafile '/u01/app/oracle/oradata/PROD1/fratbs01.dbf' size 1g autoextend on next 2m ;
4)建立閃回資料歸檔fra1,並保留一年,配額1g;
SQL>create flashback archive fra1 tablespace fratbs   quota 1g retention 1 year;
SQL>drop flashback archive fra1 ;   ##刪除資料歸檔
5)開啟某張表的閃回資料歸檔,
SQL>alter table tablename   flashback archive;  ## 這樣就會使用預設的閃回資料歸檔
或者:
SQL>alter table tablename  flashback archive fra1;  
取消對於資料表的閃迴歸檔可以使用如下命令:
SQL>alter table table_name no flashback archive;

二:閃回資料歸檔的管理:
SQL> alter flashback archive fra1 set default;   ##注意需要sys使用者操作
Flashback archive altered. 
SQL> alter flashback archive fra1 add tablespace fratbs   ; --新增表空間 
Flashback archive altered. 
SQL> alter flashback archive  fra1 remove tablespace fratbs   ;--刪除表空間 
Flashback archive altered.  
SQL> alter flashback archive fra1 modify tablespace fratbs   quota 2048M;--新增配額 
Flashback archive altered.   
SQL> alter flashback archive fra1 modify retention 3 year; 
Flashback archive altered.   
SQL> alter flashback archive fra1 purge all;  -- 清除所有 
Flashback archive altered. 
SQL> alter flashback archive fra1 purge before timestamp (systimestamp - interval '2' day);--清除2天前的 
Flashback archive altered. 
SQL> alter flashback archive fra1 purge before scn 123344;  
Flashback archive altered.

三:閃回資料歸檔的限制
 
在使用閃迴歸檔的過程中有某些限制。對於已經啟用閃回的表,不能使用DDL命令drop column(11r2可以drop column),但可以add column命令。刪除屬於一個啟用了閃回資料歸檔的表列的唯一方法是首先關閉閃迴歸檔功能。但是,這樣會刪除所有閃迴歸檔資料。
下面這些是11GR2之前不支援的,
1、ALTER TABLE:
Drops, renames, or modifies a column (11GR2是可以的)
Performs partition or subpartition operations
Converts a LONG column to a LOB column
Includes an UPGRADE TABLE clause, with or without an INCLUDING DATA clause
2、 DROP TABLE
3、TRUNCATE TABLE (11GR2是可以的)
4、RENAME TABLE (11GR2也是可以的)

四:監控閃回資料歸檔

1、查哪些表已經啟用了閃回資料歸檔
SQL> select * from dba_flashback_archive_tables;
 TABLE_NAME  OWNER_NAME  FLASHBACK_ARCHIVE_NAME  ARCHIVE_TABLE_NAME     STATUS
----------- -----------  ----------------------  ----------------  -------------
T1          GYJ          FLASH1                SYS_FBA_HIST_17877         ENABLED
 2、查資料庫中所有的閃回資料歸檔
SQL> select flashback_archive_name,retention_in_days from dba_flashback_archive;
 
FLASHBACK_ARCHIVE_NAME                             RETENTION_IN_DAYS
-------------------------------------------------- -----------------
FLASH1                                                          1095
 3、查有關閃回資料歸檔所使用的表空間的資訊
 SQL>  select flashback_archive_name,tablespace_name,quota_in_mb from dba_flashback_archive_ts;
FLASHBACK_ARCHIVE_NAME        TABLESPACE_NAME                QUOTA_IN_MB
---------------------------- ----------------------- ----------------------------------
FLASH1                          FLASH_TBS1                                     2048

心得:
關於oracle11g的這個新特性,由於它有諸多的限制,以及必然帶來的效能問題,導致生產環境很少使用,並且生產環境很少存在要閃回某張表到很長時間之前的需求,如果非得恢復到很長時間之前,可以使用資料泵(生產環境一般都是rman+expdp備份的)。












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

相關文章