ORACLE壞塊(ORA-01578)處理方法(zt)
ORACLE的壞塊即ORA-01578錯,同時還可能伴隨ORA-01110錯,這種錯誤對於初學者或是那些沒有實踐經驗的dba來說無疑是很棘手的。我當初就深受其害,寫下這篇文章則是希望對大家有所幫助。
一、出問題時的情景
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/35489/viewspace-84488/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE壞塊(ORA-01578)處理方法Oracle
- Oracle 9i資料壞塊的處理(ORA-01578) ztOracle
- Oracle壞塊處理Oracle
- ORACLE 壞塊處理Oracle
- ORA-01578(資料塊損壞)跳過壞塊處理辦法
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- [zt] 如何處理Oracle資料庫中的壞塊[final]Oracle資料庫
- 對oracle中出現的壞塊的處理方法Oracle
- Oracle壞塊處理相關Oracle
- Oracle壞塊問題處理Oracle
- oracle corrupt block壞塊處理OracleBloC
- 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資料庫
- EXP匯出ORA-01578(資料塊損壞)錯誤解決方法
- sysaux表空間檔案損壞的處理(zt)UX