一 什麼是數據庫的壞塊
首先我們來大概看一下數據庫塊的格式和結構——數據庫的數據塊有固定的格式和結構,分三層 cache layer,transaction layer,data layer。在我們對數據塊進行讀取寫入操作的時候,數據庫會對要讀寫的數據塊做一致性的檢查,其中包括 數據塊的類型、數據塊的地址信息、數據塊的SCN號以及數據塊的頭部和尾部。如果發現其中有不一致的信息,那數據庫就會標記這個數據塊為壞塊了。數據庫的壞塊分為兩種,邏輯壞塊和物理壞塊。
二 壞塊對數據庫產生的影響
如果數據庫出現壞塊,數據庫的告警日志文件裡面會存在有如下的一些報錯信息 Ora-1578以及Ora-600 and trace file in bdump directory,其中Ora-600錯誤的第一個參數值的范圍是[2000]-[8000],不同的值代表著數據塊的不同的層出現問題,具體的如下表所示:
Range block layer
Cache layer 2000 – 4000
Transaction layer 4000 – 6000
Data layer 6000 - 8000
壞塊產生影響的對象可能是數據字典表、回滾段表、臨時段、用戶數據表和索引等。不同的對象產生壞塊後的處理方法不盡相同。
三 壞塊產生的原因
Oracle調用標准C的系統函數,對數據塊進行讀寫操作,因此,壞塊是有可能由以下幾種原因產生:
硬件的I/O錯誤
操作系統的I/O錯誤或緩沖問題
內存或paging問題
磁盤修復工具
一個數據文件的一部分正在被覆蓋
Oracle試圖訪問一個未被格式化的系統塊失敗
數據文件部分溢出
Oracle或者操作系統的bug