Oracle閃回技術詳解

來源:互聯網
上載者:User

標籤:構建   alt   使用   startup   down   table   bin   表結構   active   

概述:

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

 撤銷段(UNDO SEGMENT)

  在講閃回技術前,需要先瞭解Oracle中一個邏輯結構--撤銷段。因為大部分閃回技術都需要依賴撤銷段中的撤銷資料。撤銷資料是反轉DML語句結果所需的資訊,只要某個事務修改了資料,那麼更新前的原有資料就會被寫入一個撤銷段。(交易回復也會用到撤銷段中的資料)。事務啟動時,Oracle 會為其分配一個撤銷段,事務和撤銷段存在多對一的關係,即一個事務只能對應一個撤銷段,多個事務可以共用一個撤銷段(不過在資料庫正常運行時一般不會發生這種情況)。

 閃回技術

  Oracle提供了四種可供使用的閃回技術(閃回查詢,閃回刪除,閃迴歸檔,閃回資料庫),每種都有不同的底層體繫結構支撐,但其實這四種不同的閃回技術部分功能是有重疊的,使用時也需要根據實際情境合理選擇最合適的閃回功能。

   閃回查詢(Flashback Query)

    a.基本閃回查詢

    功能描述:可以查詢過去某個時間段的資料庫狀態。

    工作原理:Oracle 會提取所需要的撤銷資料(前提是撤銷是可用的,即撤銷資料還沒被覆蓋)進行復原,但這種復原是臨時的,僅針對當前session可見。

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

    b.閃回表

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

    工作原理:同樣,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操作,引入資源回收筒的概念,但此資源回收筒僅是當前資料表空間的一塊邏輯劃分,所以會受限於當前資料表空間的可用空間的限制;閃迴歸檔可提供查詢或回退到過去任意時間點的功能,閃回資料庫則是一中更極端的資料庫恢複功能,相當於不完整恢複,依賴於閃回日誌。

Oracle閃回技術詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.