国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE壞塊(ORA-01578)處理方法

2024-08-29 13:45:10
字體:
來源:轉載
供稿:網友

  
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<sid>.log中看到一幾條報錯信息:

  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<sid>.log,找到ORA-01578的報錯信息,并記錄下file#及block的值,我這里是126和88490。

B、 執行以下語句看哪個段壞了

  SQL>Select * from dba_extents

2  where  file_id=<F>

3  and <B> 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聯系。不過這些方面的壞的機率很少很少的,在以后的文章中我也會做介紹。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 勐海县| 泰安市| 凤山县| 疏勒县| 花莲市| 河东区| 兴仁县| 香河县| 司法| 平阴县| 璧山县| 上林县| 新化县| 鄂州市| 华阴市| 巴马| 柳江县| 漠河县| 卓尼县| 孝感市| 仲巴县| 梅州市| 温州市| 昌图县| 枣庄市| 和平区| 侯马市| 克东县| 岳池县| 新野县| 丁青县| 汾阳市| 孝感市| 乐陵市| 商都县| 泊头市| 清水河县| 会泽县| 谢通门县| 吉水县| 九龙坡区|