Oracle 11g閃回資料歸檔新功能解析

freshairpeng發表於2009-03-13
【IT168 技術文章】

  簡介

  Oracle資料庫10g提供了五個新的閃回功能:閃回版本查詢,閃回事務查詢,閃回刪除,閃回表和閃回資料庫。Oracle資料庫11gR1提供了一個有趣的新的閃回功能:閃回資料存檔,它允許一個Or acle資料庫管理員維護一個記錄,對指定時間範圍內對所有表的的改變情況進行記錄。

  許多年前-事實上,在上個世紀-我是一名美國大西部飲料生產廠家人力資源系統的承包商。有一天,人力資源總監問我:“如何為我們的僱員資料配置一個delta表,使我們能夠跟蹤所有對僱員資料的更改情況?”出現在我腦袋中的答案就像最近的美國總統大選期間CNN用來顯示和分析投票結果的“神奇地圖”一樣:

   我想建立一個名為EMPLOYEES_HISTORY的表,除了增加了一個相應的時間戳記的日期和時間的變化外,它與Employees表的列完全一樣。

   我希望把這個新表放在一個單獨的表空間。

   我想套用外來鍵參照完整性約束EMPLOYEES_HISTORY表,以確保兩個表之間的資料一致。

   最後,我想建立一個AFTER ... FOR EACH ROW觸發器,無論何時在Employees表上發生INSERT,UPDATE或DELETE事務時,都將在EMPLOYEES_HISTORY表中插入delta記錄。

  然後一些潛在的問題開始縈繞著我,這樣做了會發生什麼,我不停地問我自己,如果某人:

   禁用了EMPLOYEES_HISTORY表上的觸發器,並且忘記重新開啟了,會發生什麼事情?

   需要向EMPLOYEES表中增加新列,或修改資料型別,但忘記同步修改EMPLOYEES_HISTORY表上對應的列了,會發生什麼?

   雖然同時對EMPLOYEES和EMPLOYEES_HISTORY表做了一致的修改,但忘記修改觸發器了,會發生什麼?

   如果需要刪除EMPLOYEES表的列或將其標記為UNUSED時,會發生什麼?

   意外TRUNCATE掉EMPLOYEES_HISTORY表時會發生什麼?

   意外刪除了EMPLOYEES_HISTORY表時會發生什麼?甚至更糟糕的是刪除了EMPLOYEES表時會發生什麼?

  這些問題的簡單答案是,如果真發生了這些事情,我不得不向客戶解釋為什麼弄丟了EMPLOYEES_HISTORY表中的delta資料。

  用閃回資料歸檔實現Oracle“完全撤銷”

  如果我擁有Oracle 11g,我會直接告訴客戶我花幾分鐘就能恢復資料,Oracle 11gR1新的閃回資料歸檔(FBDA)功能建立一個獨立的倉庫保留表中資料改變的歷史記錄。

  FBDA資訊儲存在一套獨立的物件中,跟蹤目標表的事務歷史,這些物件儲存在一個或多個表空間中,FBDA表的名稱是由系統自動產生的,可以通過檢視DBA_FLASHBACK_ARCHIVE_TABLES檢視,一旦在表上開啟了FBDA,所有保留的事務歷史都可以檢視,這樣就不用再為關鍵事務表建立對應的歷史跟蹤表了,那樣做很麻煩,因為建立歷史跟蹤表後,還有編寫複雜的觸發器,確保歷史資料被精確跟蹤。

  歷史資訊的捕捉也是非常高效的,因為Oracle 11g專門修改了核心,使保留歷史資料的效能開銷減到最小,此外,這些歷史資料以壓縮格式儲存,減少了儲存的需要,另外,只要在表上開啟了FBDA,Oracle 11g就不會再對歷史資料做使其無效的操作(如刪除或清空目標表)或阻止捕捉(如刪除目標表的列)。

  下面解釋一下FBDA是如何工作的:

   閃回資料歸檔(FBDA)是一個新的後臺程式,負責跟蹤和歸檔開啟了FBDA的錶的歷史資料,它通過非同步處理自動收集和向指定的閃回資料歸檔寫入原始資料。

   當開啟FBDA的表中任何資料發生變化時,FBDA首先詢問儲存在資料庫緩衝區中的UNDO資料,如果資料仍然在那裡,FBDA就會使用它,如果UNDO資料已經從資料庫緩衝區中移除,FBDA就會嘗試從UNDO表空間中的UNDO段中獲取資料發生的變化。

   當FBDA捕捉到變化資料時,它會整理開啟FBDA的表中的行,然後將這些行寫入FBDA中的歷史表,這些表資料經過壓縮,就和內部分割槽一樣。

  有趣的是,FBDA不包括捕獲資料的原始索引,當在FBDA中可以對歷史資料建立另一個索引。

  自動保留策略:按照類似的保留需求,可以將FBDA物件中的歷史表資料聚集在一起,Oracle 11g也提供了自動清理FBDA中資料的方法,一旦超出了指定的保留期限就會自動執行清理工作,多個表可以共享同一個資料保留和清理策略,因為FBDA是由一個或多個表空間構成的,所以可以建立多個FBDA,每個FBDA指定不同的保留期限,這樣就可以建立多個FBDA滿足不同需求的保留策略,下面是一些常見的示例:

   為普通的短期歷史查詢保留90天

   為普通的長期歷史查詢保留1整年

   為國家法律需要保留20年

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

相關文章