ORA-01578壞塊解決方法
一. 出問題時的情景
我在自己測試資料庫上給大表 tb_table導完資料後,建立索引時,出現以下錯誤
ORA-01578: ORACLE data block corrupted (file # 7, block # 28969)
ORA-01110: data file 7: 'D:\ORACLE\ORADATA\PAUL\GAME_LARGE.DBF'
檢視alert.log日誌時有以下錯誤
Corrupt block relative dba: 0x01c07129 (file 7, block 28969)
Bad check value found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x01c07129
last change scn: 0x0000.00035361 seq: 0x1 flg: 0x04
consistency value in tail: 0x53610601
check value in block header: 0x302a, computed block checksum: 0x8
spare1: 0x0, spare2: 0x0, spare3: 0x0
二. 解決方法
1.執行以下語句看哪個段壞了
select segment_type,owner||'.'||segment_name
from dba_extents
where 7 = file_id and 28969 between block_id and block_id+blocks -1
segment_type owner.segment_name
TABLE PARTITION PAUL.TB_CASHFLOW_LOG
2.使用診斷事件
如果損失的是資料,ok
我們可以設定內部事件,使exp跳過這些損壞的block
SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10’;
取消內部事件設定
如果你在初始化引數中設定的,注視之
如果在命令列設定的
alter system set events='10231 trace name context off';
3、建立一個臨時表tb_cashflow_log_tmp的表中除壞塊的資料都檢索出來
SQL>CREATE TABLE tb_cashflow_log_tmp as select * from tb_cashflow_log;
4、 更名原表
SQL>alter table tb_cashflow_log rename to tb_cashflow_log _bak;
SQL>alter table tb_cashflow_log _tmp to tb_cashflow_log;
5、在tb_cashflow_log上重新建立索引、約束、授權、trigger等物件
6、 利用表之間的業務關係,把壞塊中的資料補足。
然後用DBV來檢驗壞塊:
E:\Oracle\oradata\paul>dbv file=block.dbf blocksize=8192
1. exp正常嗎, 將exp的資料imp到一個臨時表中, 看看資料的記錄數是否正確啊.
2. 如果正常, 直接刪除目前的資料表, 在利用測試資料重建這個表就好了.
3. 如果不正常. 使用10231的trace event, 再使用create table as select 重建對應的表之後, rename當前表, 再將對應的資料塊, dump出來, 自己構建相應的資料內容吧^_^.
二、事後分析產生這種問題的原因
1、 十之八九這個Oracle的開啟了非同步I/O(async io)或增加了寫程式。
2、 硬體的I/O出現了錯誤。
3、 作業系統的I/O或快取出現我問題,比如作業系統對於非同步I/O的補丁沒有打。
4、 手動的修改了資料檔案中的資料,我模擬這個錯誤用的便是這種方式。
四、如何儘量減少問題及問題的損失呢
分析了產生問題的原因,我認為可以採取以下幾個措施
1、 在為提高效能為作業系統開啟非同步I/O時,一定要與及作業系統技術支援聯絡把作業系統與非同步I/O相關的補丁要打全。
2、 制定一個良好的備份恢復策略,最好有表的exp備份
3、 要及時的檢查硬體的狀態,及時更換驅動器部件
這次測試資料庫又出現系統表空間有壞塊,目前情況下只能透過重建庫來解決了,重新匯入備份的資料
要是索引塊壞的話還是比較好處理,重建索引即可
所以最好保證不出問題,要有良好的備份.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-255311/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-01578 壞塊原因模擬及解決方法
- EXP匯出ORA-01578(資料塊損壞)錯誤解決方法
- ORACLE壞塊(ORA-01578)處理方法Oracle
- ORACLE壞塊(ORA-01578)處理方法(zt)Oracle
- ORA-01578(資料塊損壞)跳過壞塊
- oracle 壞塊問題 ora-01578Oracle
- ORA-01578(資料塊損壞)跳過壞塊處理辦法
- oracle壞塊問題的解決Oracle
- ORA-01578錯誤的解決方法 ( 二)
- ORA-01578和ORA-26040--NOLOGGING操作引起的壞塊-錯誤解釋和解決方案
- 資料庫壞塊解決案例一則資料庫
- oracle壞塊問題及解決辦法Oracle
- Oracle 9i資料壞塊的處理(ORA-01578) ztOracle
- 利用oracle9i blockrecover 修復ORA-01578壞塊問題OracleBloC
- voting disk 損壞解決方法---重建crs
- ORACLE 邏輯壞塊真實案例ORA-01578 ORA-01110Oracle
- 轉---DBMS_ROWID.ROWID_CREATE來解決壞塊
- 單個控制檔案損壞的解決方法
- 跳過Oracle資料庫壞塊方法Oracle資料庫
- Oracle資料庫壞塊(corruption)-物理壞塊Oracle資料庫
- BIOS被病毒破壞了的解決方法(轉)iOS
- Oracle上的邏輯壞塊和物理壞塊Oracle
- 資料庫壞塊Corrupt block的處理方法資料庫BloC
- 對oracle中出現的壞塊的處理方法Oracle
- oracle壞塊(二)Oracle
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- 資料塊損壞ORA-1578(發現損壞塊)
- ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr]邏輯壞塊解決ErrorAST
- Win10系統桌面圖示已損壞的解決方法Win10
- 硬碟物理故障解決方法之電路板損壞修復方案硬碟
- 回滾段表空間資料檔案損壞解決方法
- Ceph 磁碟損壞現象和解決方法
- Oracle壞塊處理Oracle
- oracle壞塊Block CorruptionsOracleBloC
- rootvg壞塊處理
- 檢查 oracle 壞塊Oracle
- ORACLE 壞塊處理Oracle
- 處理塊損壞