ORACLE壞塊(ORA-01578)處理方法
ORACLE 的壞塊即 ORA-01578 錯,同時還可能伴隨 ORA-01110 錯,這種錯誤對於初學者或是那些沒有實踐經驗的 dba 來說無疑是很棘手的。我當初就深受其害,寫下這篇文章則是希望對大家有所幫助。
[@more@] |
一、 出問題時的情景 1、 我的一個計費的入庫的程式停掉,報的便是 ORA-01578 錯,對應用相關的表 tg_bill03 做 SQL>select from tg_cdr03 where rownum<10; 這樣是可以的,但做 SQL>select count(*) from tg_bill03; 時則報 ORA-01578 錯。 2、 檢查 alter Errors in file /oracle816/app/admin/billing/udump/ora_7281_billing.trc: ORA-01578: ORACLE data block corrupted (file # 126, block # 88490) ORA-01110: data file 126: '/dev/vgjf7/rdata471' 二、 事後分析產生這種問題的原因 1、 十之八九這個 Oracle 的資料庫 server 開啟了非同步 I/O(async io) 或增加了寫程式。 2、 硬體的 I/O 出現了錯誤。 3、 作業系統的 I/O 或快取出現我問題,比如作業系統對於非同步 I/O 的補丁沒有打。 4、 手動的修改了資料檔案中的資料,我模擬這個錯誤用的便是這種方式。 三、 解決方法 這種問題的解決方法是很多的,如果你用的是歸檔方式,則可以基於時間點恢復來解決。不過這裡介紹一種比較方便的解決方式,因為我的庫沒有開歸檔。 Metaline 關於 ORA-01578 的文字也很多,不過我看過後總覺得都不那麼實用,不能解決實際的問題。 1、 解決這種問題的第一步是首先你要確定是什麼段、哪個段壞了,是索引還是表? A、 開啟 alter B、 執行以下語句看哪個段壞了 SQL>Select * from dba_extents 2 where file_id= 3 and between block_id and block_id+blocks-1; 這裡的 F 指的是 file#,B 指的是 block# 我的顯示結果指出是 tg_bill03 出現了壞塊。 2 、如果確定下來壞的是索引段,這時你就可以輕舒一口氣了,只要把這個索相刪除然後重建一下就可以了,如果出現壞的是表段,則應往下走了。 3、 記錄下這個表的建表語句 為我方便,建議使用 PL/SQL Developer 來完成,如果你沒有可以在 http://www.allroundautomations.com/plsqldev.html 去下載一個,操作步驟是這樣的。 A、 以表的 owner 用 pl/sql developer 連入 oracle B、 在左面的樹狀欄中找到這個表 tg_bill03, 右擊該表 ->view->View SQL, 記錄下 sql ,以備以下步驟中重建索引。 4、 實際處理了,以我的那個表為例 A、 以 tg_bill03 的 owner 連入 oracle B、 使用診斷事件 10231 SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10'; C 、建立一個臨時表 tg_bill_tmp 的表中除壞塊的資料都檢索出來 SQL>CREATE TABLE tg_bill03_tmp as select * from tg_bill03; C、 更名原表,並把 tg_bill03_tmp 為 tg_bill03 SQL>alter table tg_bill03 rename to tg_bill03_bak; SQL>alter table tg_bill03_tmp to tg_bill03; D、 在 tg_bill03 上重新建立索引、約束、授權、 trigger 等物件 E、 利用表之間的業務關係,把壞塊中的資料補足。 四、 如何儘量減少問題及問題的損失呢 分析了產生問題的原因,我認為可以採取以下幾個措施 1、 在為提高效能為作業系統開啟非同步 I/O 時,一定要與 oracle 及作業系統技術支援聯絡把作業系統與非同步 I/O 相關的補丁要打全。 2、 制定一個良好的備份恢復策略,最好有表的 exp 備份 3、 要及時的檢查硬體的狀態,及時更換驅動器部件。 結篇:其實壞塊涉及的內容很多的,如果壞塊發生的回滾段表空間、資料字典 (system 表空間 ) 或聯機日誌,這些處理都是特難的,需要與 oracle 的 supporter 聯絡。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/41224/viewspace-780974/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE壞塊(ORA-01578)處理方法(zt)Oracle
- Oracle壞塊處理Oracle
- ORACLE 壞塊處理Oracle
- ORA-01578(資料塊損壞)跳過壞塊處理辦法
- Oracle 9i資料壞塊的處理(ORA-01578) ztOracle
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- Oracle壞塊處理相關Oracle
- Oracle壞塊問題處理Oracle
- oracle corrupt block壞塊處理OracleBloC
- 對oracle中出現的壞塊的處理方法Oracle
- ORA-01578壞塊解決方法
- oracle 壞塊問題 ora-01578Oracle
- 【BLOCK】Oracle壞塊處理命令參考BloCOracle
- oracle壞塊模擬處理(筆記)Oracle筆記
- Oracle 壞塊處理三板斧Oracle
- Oracle壞塊修復處理實驗Oracle
- rootvg壞塊處理
- 處理塊損壞
- ORA-01578(資料塊損壞)跳過壞塊
- ORACLE資料庫壞塊的處理 (一次壞快處理過程)Oracle資料庫
- 資料庫壞塊Corrupt block的處理方法資料庫BloC
- ORA-01578 壞塊原因模擬及解決方法
- ORACLE資料庫壞塊的處理 (通過re-create table方法)Oracle資料庫
- DBA實踐---壞塊處理
- 資料庫壞塊處理資料庫
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- 教你如何處理Oracle資料庫中的壞塊Oracle資料庫
- oracle - redo 損壞或刪除處理方法Oracle
- 第7章 處理塊損壞
- BAD Block 壞塊的處理BloC
- 處理 Oracle 塊損壞 (文件 ID 1526911.1)Oracle
- Oracle RMAN備份中對壞塊(corrupt block)的處理OracleBloC
- 一次使用BBED處理壞塊
- 利用oracle9i blockrecover 修復ORA-01578壞塊問題OracleBloC
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- [zt] 如何處理Oracle資料庫中的壞塊[final]Oracle資料庫
- EXP匯出ORA-01578(資料塊損壞)錯誤解決方法
- 壞塊的處理思維(用程式製作壞塊不如用系統)