撤銷和閃回技術

閃回查詢和閃回表的功能完全基於oracle database中長期存在的技術,撤銷段,撤銷段用於撤銷沒有提交的事物。
當提交事物時,撤銷段中保存行的前映像的盤區被釋放,用於將來的重寫。在oracle9i和以後的版本中,oracle開始使用閃回查詢技術,我們現在可以控制撤銷盤區在被重寫之前所保留的時間。完成這項工作後,
我們就可以很好的使用撤銷段---從而幫助我們撤銷已提交的錯誤事物。
根據撤銷盤區在被重寫之前所保留在撤銷表空間中的時間來決定是否可查詢對象或將對象改回過去的某個時間點。
在利用撤銷表空間中的每個盤區後纔會進行重寫操作。
至於在回退到多久以前的情況下可以使用“閃回查詢/閃回表”,則取決於oracle如何從提交事物的時間點切換到重寫該事物的撤銷時間點。從提交事物到重寫撤銷盤區的週期就是閃回窗口。
有許多因素決定閃回窗口,但最重要的因素時事物負載,可以使用視圖V$UNDOSTAT查看撤銷使用情況的統計。該視圖中的每一行代表10分鐘內利用的撤銷塊數量。
1.undo_management=auto
2.undo_tablespace
3.undo_retention






1.閃回查詢【允許查詢過去某個時間的數據庫,可以藉助一條select語句或通過將會話臨時退回到過去以使其所有查詢都針對先前版本的數據庫】『受撤銷保留時間限制』

   
   select * from emp as of timestamp to_timestamp('2009-06-27 13:00:00','YYYY-MM-DD HH:MI:SS')
   select * from emp as of scn 173194;
2.閃回表【如果已確定針對某個表提交了不正確的操作,可以提示oracle反轉從特定的時間點以來對該表所做的所有更改,而保持其他所有表當前的狀態】
   啓動行移動 alter table emp enable row movement;
   flashback table emp to timestamp to_timestamp('2009-06-27 13:00:00','YYYY-MM-DD HH:MI:SS')
   flashback table emp to scn 173194;
3.閃回事物【】
  使用閃回事物可以看見某一指定事物產生的所有更改或者某個特定時間框架內所有的事物。
  閃回事物是使用重做以及利用日誌挖掘(logminer)功能挖掘出事物的更改向量,然後確定回滾這些更改的最佳方式。

4.閃回刪除<回收站>『受表空間的可用空間限制』
  閃回刪除允許您將之前刪除的表恢復到剛好刪除它之前的狀態,同時還會恢復所有索引以及任何觸發器和權限。唯一的主鍵和非空約束也會被恢復---但不包括外鍵約束。
  閃回刪除是drop命令特有的,而不能閃回truncate命令。
   flashback table emp to before drop;
5.閃回數據庫『受閃回日誌的大小限制』
  閃回數據庫不能撤銷物理損壞,而只能恢復用戶錯誤造成的邏輯錯誤。
  閃回數據庫要求歸檔日誌模式並使用alter database open resetlogs 來創建數據庫的一個新化身。
   (1)開啓閃回數據庫
   startup mount
   數據庫處於歸檔模式
   設置閃回保存目標爲所需的值(閃回日誌的生命週期與閃回數據庫選項能恢復的時間範圍直接相關。
   默認情況下,閃回日誌保留足夠長的時間,從而可以從當前時間閃回24小時,如果時間過長或過短,則可以使用初始化參數進行更改)
   alter system set db_flashback_retention_target=720;
   閃回很大程度增加了fra的使用率。
   alter database flashback on;
   alter tablespace sales_idx flashback off;(對於不需要的表空間,關閉閃回記錄功能)
   alter database open;
   (2)執行閃回數據庫
   查詢當前scn ;select current_scn from v$database;
   引入錯誤
   數據庫必須加載且沒有打開進行閃回操作
   shutdown immediate
   startup mount
 
   flashback database to timestamp to_timestamp('','yy-mm-dd hh24:mi:ss');時間戳
   ------sql*plus的閃回語法可以接受時間戳或系統更改號(SCN)參數。與rman不同,它不接受日期或日誌切換序列號。
 

   flashback database to scn =897786;
   flashback database to sequence=2112 thread=1;日誌切換序列號
   flashback database to time=to_date('','yy-mm-dd hh24:mi:ss');
   ----------在rman中,有三種選擇某個時間點,scn,日誌切換序列號

  alter database open read only;
   確定已經閃回到適當的scn
   shutdown immediate;
   startup mount
   alter database open resetlogs;(使用resetlogs打開數據庫)
   (3)閃回數據庫的調整

   1)select retention_target,flashback_size,estimated_flashback_size,oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
   保留目標時間的設置值(單位時分鐘)默認1天;閃回日誌文件佔用的時間空間,提供了總閃回大小的估計,也提供將數據庫閃回到的實際最早時間

   
   2)select * from V$flashback_database_stat;

   V$flashback_database_stat 可以查看閃回記錄活動,提供了一段時間內生成的閃回數據的相關信息,除了顯示閃回記錄的數量,該視圖也提交生成的重做和相同時間週期內生生成的實際數據庫數據。

 
    如果啓用了閃回 數據庫,那麼會記錄所有表空間的閃回數據,可以關閉某些表空間的閃回屬性
    alter tablespace <tablespace_name> flashback off;
     alter tablespace <tablespace_name> flashback on;
     如果一個或多個表空間不生成閃回數據,那麼在執行閃回操作之前必須使構成表空間的文件脫機,然後閃回可以政策進行。要記住recover將忽略脫機數據文件--這與flashback時相同的。
      將一些表空間排除在閃回日誌記錄之外將有助於提高聯機性能,但付出的代價時必須執行屬於恢復過錯的部分還原。這樣做通常仍會比不完整恢復所需的完全還原更快速一些。
6.閃回數據歸檔
  使用flashback data archive,它能夠查看過去任何時間的表的狀態。
   當一個表啓用flashback data arvchive會創建一個表(和其他幾個對象),可用於存儲的所有先前的版本;當針對表提交了dml操作後,一個稱爲flashback data archive進程(FBDA)的
後臺進程將捕捉必需的數據並將它保存在歸檔上。在那裏可以使用常規閃回查詢採用的相同語法來查詢--但是閃回可以回溯到多年以前。
   當創建flashback data archive時指定時間限制,FBDA會確保保存該時間之前的所有數據,然後會刪除,FDBA負責在歸檔中創建對象,根據需要使用行來填充,並清除超過有效期的回數據。

   使用閃回數據歸檔可以把所以更改永久歸檔到一個表中,以便及時回滾到任一時間點和查看過去的數據。
   閃回數據歸檔要求構建一個特定類型的表空間,以便保存要求在特定表中及時回滾的版本信息
   如果將表置於閃回數據歸檔模式,不能進行的操作:執行帶有upgrade子句的alter table命令;執行刪除表的操作
   (1)create tablespace fbs datafile '/home/oracle/app/oracle/oradata/orcl11g/fbs01.dbf' size 1024m;
   (2)create flashback archvie default fda01 tablespace fbs qutoa 500m retention 1 year;
   (3)alter table emp flashback archive;



----------------------閃回技術與DATAGUARD
閃回數據庫使用自己的閃回日誌和一些重做數據,使整個數據庫返回到先前的時間點和SCN。這個過程並不會生成任何重做數據,在住數據庫上使用時,它也需要執行open resetlogs,以便再次以讀寫模式打開數據庫。
以下情況使用閃回數據庫
1.要在任意備用數據庫上恢復數據
  必須啓用閃回數據庫,並基於需求將保留期設置爲足以恢復數據的期限,閃回恢復區需要進行大小調整以處理保留期生成的閃回日誌。
2.要在物理備用上以快照模式(用於測試的讀寫模式)打開物理備用數據庫
  在這種情況下,閃回數據庫不見得明確啓用,因爲以讀寫模式打開物理備用數據庫前,DATAGUARD使用保證還原點(GRP)。保留期也不需要,因爲會根據需要的時間長度維護閃回日誌。
  這也意味着需要分配相應大小的閃回恢復區,因爲並不存在滾動閃回窗口的概念,如果閃回恢復區耗盡了分配空間,不僅快照備用異常終止,而且從主數據庫傳入的重做數據也將停止。
3.要在主數據庫和所有備用數據庫上及時閃回主數據庫
  在這種情況下,主數據庫上的閃回發生之前,dataguard設置中的所有數據庫必須明確啓用閃回數據庫。備用數據庫上的保留期也必須大於或等於主數據庫上的保留期。
  如果在主數據庫上執行了閃回數據庫操作,必須首先停止所有備用數據庫上的應用進程,在閃回後,一旦open resetlogs命令已在主數據庫上執行,就必須將每個備用數據庫閃回到主閃回之前的時間點。當重做
  數據再次開始傳輸(序列號重置爲1),備用數據庫將識別更改並恢復備用數據庫直至閃回點,然後開始處理新的重做流。
4.要在主數據庫上,在故障轉移後恢復數據庫
  這種情況下,故障轉移到備用數據庫之前,必須啓用閃回數據庫。








發佈了51 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章