小議物化檢視與基表資料不一致的消除(一)

dbhelper發表於2015-01-08

這篇文章介紹一下快速重新整理的只讀物化檢視於基表不一致的解決方法。


我並沒有碰到過實際的情況,但是在網上看到過幾次類似的案例:快速重新整理的物化檢視與基表出現資料不一致的狀況。

因為我並沒有在使用中實際碰到過這種情況,因此不好確定問題產生的原因。不過推斷產生的原因可能有兩種,一個是Oracle的bug造成的,另一個是物化檢視的基表被人手工修改。

這裡並不打算討論問題是怎樣產生的,而是給出碰到這種問題後的解決方案。

最簡單的解決方法:將物化檢視執行完全重新整理。如果物化檢視不是實時訪問,可以考慮透過非原子性重新整理方式來提高重新整理速度。這種方法的優點是簡單方便,不會造成錯誤的結果,風險較小,但是不適用於資料量很大的情況。

第二種方法是重建物化檢視。這種方法由於避免了UNDO資訊且減少了REDO,效率要比完全重新整理高很多。而且也不會造成錯誤的結果。缺點是物化檢視刪除後到物化檢視重新建立完成直接,這個物件在資料庫中不再存在,如果這個時候訪問這個物件會直接報錯。而且物件重建後,需要恢復物化檢視的索引、約束、許可權和統計資訊等。這些步驟不但麻煩而且容易遺漏。更重要的是,對於資料庫很大的表,這種操作的代價仍然是很大的。

最後一種方法也是下面幾篇文章的重點,透過手工修改物化檢視日誌來達到物化檢視和基表的一致。這種方法的最大好處是對於資料量很大且不一致的資料量很小的情況,這種方法的代價很小,同步速度也很快。不過這種方法也有很明顯的缺點:首先就是方法比較複雜,要求對物化檢視的重新整理和物化檢視日誌有比較清晰的瞭解。而且操作失誤的話,很容易造成資料的進一步錯誤。不過,以前面兩種方法作為後盾,即使這種方法真的造成了資料的錯誤也不會產生太大的問題。

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

相關文章