db_block_checksum & db_block_checking 的區別

jackjw發表於2008-09-29
這兩個引數的含義經常讓人混淆,雖然都是對block進行檢查。[@more@]
db_block_checksum & db_block_checking
===========================================================
這兩個引數的含義經常讓人混淆,雖然都是對block進行檢查。

db_block_checksum 是在將資料塊寫到資料檔案的時候對block內資料做一個校驗寫在塊頭,當讀入時候重新計算校驗和寫出時候的校驗對比,如果不同則認為是塊損壞。這通常應該是由於脫離oracle以外在os或者硬體中出現了損壞,如果設定為false則只對系統表空間有效。從8i開始設定為true的時候也同時對log block進行校驗。

db_block_checking 是當block發生任何變化的時候進行邏輯上的完整性和正確性檢查,這在記憶體中進行,當發現錯誤就立即回退,設定為false則只對系統表空間有效。

這意味著,如果db_block_checking = false ,非系統表空間中資料在邏輯上可能已經損壞,但是 db_block_checksum 卻是無法檢查出來的,原樣寫到磁碟原樣讀到記憶體,因為它只校驗塊在寫出後和讀入之間是否發生變化而不檢查寫出前是否存在 邏輯上的正確。

比如有時索引塊損壞,造成透過索引無法獲得資料,但是讀索引塊的時候並沒有出1578錯誤,可能就是這個原因

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

相關文章