2010年8月9日 星期一

第十三回 Oracle 10g 的 BlockRecover

在剛剛某海運公司的問題處理過後,同樣該公司關係企業打來說他們的資料庫因為 Filesystem 一直有問題造成 HA 切換會失敗,所以在週六他們有請硬體廠商來做 FSCK ,當天做完沒問題,一直到過了星期天和今天星期一一整個上午後,Oracle 在某些 DML 會出現錯誤訊息,表示發生 Block Corruption 。原本我還在處理 RMAN 問題時,就己經把 Paper 整理給客戶請他們先試試看,可是一直到接近 16:00 時,客戶又打來問說我們能不能過去看看,反正也在附近,所以我和同事就開車過去了。此時心裏還在盤算著說,其實 Block Recover 我也只聽說過,有這個概念,實做還是沒做過的,而且怎這麼巧,最近翻的一本書裏才有說明類似的狀況,馬上就被我遇到。

到客戶端後,首先坐在電腦前,我先看了一下 v$database_block_corruption 這個 view 的內容,並沒有東西,因為在 FSCK 之後,Oracle 還能被啟動,而且 Application 也正常的運作,只是針對某些 Block 做 Access 時會出現 Block Corruption 的錯誤,同時在 FSCK 之後,當天的 RMAN 備份和今天的備份都失敗了。而且這個 view 只有在備份過程或者是你在下 backup validate database 時,才會去掃描整個資料庫,做 block 確認的動作,我如果不知道這個東西,以往可能會用 dbv 這個工具來掃。我先檢查 alert log ,發現確實有幾個 Block 在 Access 時被標記出來,首先針對這幾個 block 先以 blockrecover 指令測試看看是否有效,還原了兩個 block 之後,我決定使用 RMAN 的 backup validate database 整個全部掃描一次,預估需要 20 分鐘左右後,再去確認 v$database_block_corruption ,結果裏面有約 18 個 block 被標記出來。

有標記出來後就簡單了,只要使用 blockrecover corruption list , RMAN 就會參考這個 view 的內容去做 block recover ,又花了約半小時將資料庫還原後,我決定再將 Oracle database 備份一次,原因有二,一是確認資料庫可以整個被 RMAN 備份下來,二是在還原資料庫上線前,先確保這兩天的資料仍有被備份,所以將 Backup 送出去後,客戶也很客氣的邀我們先去用餐,約 40 分鐘後回來,資料庫確實的有被備份完成,將 Application 啟動後,我們就等待客戶測試,同時,雖然我 對 Solaris 並沒有很熟,還是無聊的下了 dmesg 看了一下,發現該 Filesystem 好像還是有問題,可能是有遺失的 inode ,因為客戶剛也有問到他有些檔案在 fsck 後不見了要怎麼比對找出來,個人覺得比對的工程龐大且無法準確,因此跟客戶解釋,如果每週對 ERP 都有做備份,無妨將 ERP 的整個 Home Directory 還原回來,包證 ERP 能像一週前一樣健康,不足的部份,貴公司的同仁一定有資料能查出這星期做了哪些變更再去調整即可,不然用比對方式再還原,可能你系統隨時會有未爆彈發生。在客戶檢查了約半小時後,大致上沒問題,我們才準備驅車回到台北。

沒有留言:

張貼留言