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

首頁 > 數據庫 > Oracle > 正文

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

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

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聯系。不過這些方面的壞的機率很少很少的,在以后的文章中我也會做介紹。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荥阳市| 金寨县| 叙永县| 盐亭县| 平泉县| 大冶市| 九江县| 惠安县| 滦南县| 泾阳县| 凤山县| 翁牛特旗| 佛冈县| 安多县| 天津市| 镶黄旗| 遂昌县| 虎林市| 海城市| 育儿| 手游| 绥江县| 广水市| 五原县| 隆安县| 阿拉善左旗| 阳信县| 马尔康县| 武义县| 六盘水市| 土默特右旗| 米脂县| 巨鹿县| 镇安县| 和田县| 汉源县| 景洪市| 弋阳县| 玛沁县| 海宁市| 盈江县|