Oracle閃回技術詳解

Oracle閃回技術詳解

 

 概述:

  閃回技術是Oracle強大數據庫備份恢復機制的一部分,在數據庫發生邏輯錯誤的時候,閃回技術能提供快速且最小損失的恢復(多數閃回功能都能在數據庫聯機狀態下完成)。須要注意的是,閃回技術旨在快速恢復邏輯錯誤,對於物理損壞或是介質丟失的錯誤,閃回技術就回天乏術了,仍是得藉助於Oracle一些高級的備份恢復工具如RAMN去完成(這纔是Oracle強大備份恢復機制的精髓所在啊)html

 撤銷段(UNDO SEGMENT)

  在講閃回技術前,須要先了解Oracle中一個邏輯結構--撤銷段。由於大部分閃回技術都須要依賴撤銷段中的撤銷數據。撤銷數據是反轉DML語句結果所需的信息,只要某個事務修改了數據,那麼更新前的原有數據就會被寫入一個撤銷段。(事務回滾也會用到撤銷段中的數據)。事務啓動時,Oracle 會爲其分配一個撤銷段,事務和撤銷段存在多對一的關係,即一個事務只能對應一個撤銷段,多個事務能夠共享一個撤銷段(不過在數據庫正常運行時通常不會發生這種狀況)。數據庫

 閃回技術

  Oracle提供了四種可供使用的閃回技術(閃回查詢,閃回刪除,閃迴歸檔,閃回數據庫),每種都有不一樣的底層體系結構支撐,但其實這四種不一樣的閃回技術部分功能是有重疊的,使用時也須要根據實際場景合理選擇最合適的閃回功能。緩存

   閃回查詢(Flashback Query)session

    a.基本閃回查詢工具

    功能描述:能夠查詢過去某個時間段的數據庫狀態。post

    工做原理:Oracle 會提取所須要的撤銷數據(前提是撤銷是可用的,即撤銷數據還沒被覆蓋)進行回滾,但這種回滾是臨時的,僅針對當前session可見。大數據

    SQL> select * from  dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

    b.閃回表url

    功能描述:可將某個表回退到過去某個時間點spa

    工做原理:一樣,Oracle會先去查詢撤銷段,提取過去某個時間點以後的全部變動,構造反轉這些變動的SQL語句進行回退,閃回操做是一個單獨的事務,因此若因爲撤銷數據過時之類的緣由致使沒法閃回,整個操做會回滾,不會存在不一致的狀態。日誌

    步驟:

    1.啓用表閃回首先要在表上支持行移動(在數據字典中設置標識來標識該操做可能會改變行ID,即同一條數據閃回成功後主鍵都同樣,但行ID其實已經發生變化了)   

    SQL> alter table emp enable row movement;

    2.閃回表操做      

    SQL> flashback table dept to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

    閃回表可能會失敗,有可能有如下幾種狀況:

      違反了數據庫約束,好比用戶不當心刪除了子表中的數據,如今想利用閃回表技術進行回退,剛好在這中間,父表中與該數據對應的那條記錄也被刪除了,在這種狀況下,因爲違反了外鍵約束,致使閃回表操做失敗了;

      撤銷數據失效,好比用於支撐閃回操做的撤銷數據被覆蓋了,這種狀況閃回表操做天然會失敗;

      閃回不能跨越DDL,即在閃回點和當前點之間,表結構有過變動,這種狀況閃回操做也會失敗。

    注意:上述閃回功能都是基於撤銷數據的,而撤銷數據是會被重寫的(Expired會被重寫,Active不會被重寫),因此,在須要使用這幾種閃回功能去恢復數據的時候(確切地說,是須要使用基於撤銷數據的閃回功能時),最短期發現錯誤,第一時間執行閃回操做,才能最大程度地保證閃回功能的成功。

   閃回刪除(Flashback Drop

  功能描述:閃回刪除能夠輕鬆將一個已經被Drop的表還原回來。相應的索引,數據庫約束也會被還原(除了外鍵約束)

  原理描述:Drop命令實際上是Rename命令,早期的Oracle版本(10g以前),閃回刪除意味着從數據字典中刪除了該表的全部引用,雖然表中數據可能還存在,但已成了孤魂野鬼,無法進行恢復了,10g版本以後,Drop命令則僅僅是一個Rename操做,因此恢復就很容易了。

  

  閃回刪除操做執行命令很簡單

    SQL> flashback table emp to before

  若是要還原的表名在當前系統中已經被佔用,也能夠在閃回刪除的時候對錶重命名

    SQL> flashback table emp to before drop rename to emp_new

  也能夠經過回收站查看當前用戶那些表被刪除了,每一個用戶都有一個回收站,這個回收站是個邏輯結構,它不是一塊獨立的存儲空間,它存在在當前表空間內,因此若是有別的操做須要空間,好比如今須要建立一張表,沒有足夠空間可用,回收站中的數據就會被清理,這也是致使閃回刪除失敗的緣由。

    SQL> SHOW RECYCLEBIN;

  完全刪除表,閃回刪除也無能爲力

    SQL> DROP TABLE EMP PURGE;

  清空回收站

    SQL> PURGE RECYCLEBIN;

  注意:閃回刪除只針對Drop命令,注意區分truncate操做和drop操做,truncate稱爲表截斷,會清空表中數據(調節Oracle高水位線實現),表結構不受影響,速度很快,弊端是此過程不會產生任何撤銷數據或是重作日誌,若是誤刪,恢復異常麻煩,要慎重使用。而Drop則會刪除數據+表結構,閃回刪除僅針對Drop操做。

   閃回數據歸檔(Flashback Data Archive )

   功能描述:閃回數據歸檔可以使表具備回退到過去任什麼時候間點的能力,前面提到的閃回查詢,閃回表都會受限於撤銷數據是否失效,若是撤銷數據被覆蓋重寫了,閃回操做天然會失敗,閃回刪除則受限於表空間是否有足夠可用空間,而閃回數據歸檔,則沒有這些限制。

   建立閃迴歸檔

   1.建立一個用戶閃回數據歸檔的表空間,固然,也可使用已經存在的表空間。

    SQL> create tablespace test_tb datafile 'test.dbf' size 20m; 

   2.建立一個保留時間爲2年的閃迴歸檔

     SQL> create flashback archive test_fa tablespace test_tb retention 2 year;

   

    爲scott用戶下的emp表啓用閃迴歸檔

   1.賦予用戶歸檔的權限

     SQL> grant flashback archive on test_fa to scott;

    2.鏈接用戶

     SQL> conn scott/tiger;

    3.爲emp表啓用閃迴歸檔

     SQL> alter table emp flashback archive test_fa;

  至此,emp表就擁有了能夠查詢或回退到過去2年任意時間點的能力!

   閃回數據庫(Flashback Database)

   功能描述:閃回數據庫可將整個數據庫回退到過去某個時間點,閃回表是某張表的時空穿梭,閃回數據庫則是整個數據庫的時空穿梭。固然,閃回點以後的全部工做就丟失了,其實就至關於數據庫的不完整恢復,因此只能以resetlogs模式打開數據庫。閃回數據庫會形成停機時間,固然相比於傳統備份恢復機制,恢復過程會快不少。

   工做原理:閃回數據庫不使用撤銷數據,使用另一種機制來保留回退所須要的恢復數據,當啓用閃回數據庫,發生變化的數據塊會不斷從數據庫緩衝區緩存中複製到閃回緩衝區,而後,稱爲恢復寫入器(Recovery Writer)的後臺進程會將這些數據刷新到磁盤中的閃回日誌文件中。閃回的過程,則是一個 提取閃回日誌-->將塊映像複製回數據文件 的過程。

   配置閃回數據庫(閃回數據庫要求數據庫爲歸檔模式)

    1.指定閃回恢復區,也就是存放閃回日誌的位置,但閃回恢復區不只僅是爲了存放閃回日誌,Oracle的不少備份恢復技術都用到這個區域,好比控制文件的自動備份等都會存放到此區域。

   SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';

     2.指定恢復區大小

   SQL> alter system set db_recovery_file_dest_size=4G; 

    3.指定閃回日誌保留時間爲2小時,即經過閃回操做,能夠將數據庫回退到前兩小時內的任意時間點

   SQL> alter system set db_flashback_retention_target=120; 

    4.有序關閉數據庫--mount模式下啓用閃回數據庫--打開數據庫

複製代碼
   SQL> shutdown immediate;

   SQL> startup mount;    SQL> alter database flashback on;    SQL> alter database open;
複製代碼

  至此,閃回數據庫配置完成!

  

   使用閃回數據庫功能

複製代碼
   SQL> shutdown immediate;

   SQL> startup mount;

   SQL> flashback database to timestamp sysdate-60/1440;

   SQL> alter database open resetlogs;
複製代碼

   

 總結

  本文列舉了四類閃回技術,其中,閃回查詢,包括基本閃回查詢,閃回表等技術都依賴於撤銷數據(還有一類閃回技術爲閃回事務,能夠對指定事務進行閃回操做,原理相似,藉助於撤銷數據來構建用於反轉事務的SQL語句),依賴於撤銷數據,則天然受限於撤銷數據的保留時間,可能會因爲撤銷數據被覆寫而致使閃回失敗。閃回刪除,則是因爲10g版本後對錶的刪除僅表現爲一個rename操做,引入回收站的概念,但此回收站僅是當前表空間的一塊邏輯劃分,因此會受限於當前表空間的可用空間的限制;閃迴歸檔可提供查詢或回退到過去任意時間點的功能,閃回數據庫則是一中更極端的數據庫恢復功能,至關於不完整恢復,依賴於閃回日誌。 

做者: dreamcatcher-cx

出處: <http://www.cnblogs.com/chengxiao/>

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在頁面明顯位置給出原文連接。

相關文章
相關標籤/搜索