壞塊問題(摘抄總結)
--產生壞塊問題的常見原因:
1、 Oracle 的資料庫 server 開啟了非同步 I/O(async io) 或增加了寫程式。
2、 硬體的 I/O 出現了錯誤。
3、 作業系統的 I/O 或快取出現問題,比如作業系統對於非同步 I/O 的補丁沒有打。
4、 手動的修改了資料檔案中的資料,我模擬這個錯誤用的便是這種方式。
--常用的處理方法:
? 恢復資料檔案
1) 先offline受影響的資料檔案,執行以下的語句:
ALTER DATABASE DATAFILE 'name_file' OFFLINE;
2) 保留有壞塊的資料檔案,然後複製備份的資料檔案。如果恢復的資料檔案要求路徑不同,執行以下的語句:
ALTER DATABASE RENAME FILE 'old_name' TO 'new_name';
3) 恢復資料檔案,執行以下語句:
RECOVER DATAFILE 'name_of_file';
4) Online恢復後的資料檔案,執行以下的語句:
ALTER DATABASE DATAFILE 'name_of_file' ONLINE;
? RMAN恢復壞的block(9i以上版本可用)
使用這種方法要求資料庫版本是9.2.0以上,要求配置了Rman的catalog資料庫,資料庫為歸檔方式,並且有完整的物理備份。
使用RMAN的BLOCKRECOVER命令
Rman>run{blockrecover datafile 5 block 11,16;}
也可以強制使用某個SCN號之前的備份,恢復資料塊。
Rman>run{blockrecover datafile 5 block 11,16 restore until sequence 8505;}
? 使用10231診斷事件,在做全表掃描的時候跳過壞塊
? 透過ROWID RANGE SCAN 儲存資料
? 使用DBMS_REPAIR
--診斷步驟:
1、解決這種問題的第一步是首先你要確定是什麼段、哪個段壞了,是索引還是表?
A、 開啟 alter
ORA-01578: ORACLE data block corrupted (file # 126, block # 88490)
ORA-01110: data file 126: '/dev/vgjf7/rdata471'
B、 執行以下語句看哪個段壞了
SQL>Select * from dba_extents where file_id=
這裡的 F 指的是 file#,B 指的是 block#,我的顯示結果指出是 tg_bill03 出現了壞塊
2 、如果確定下來壞的是索引段,只要把這個索相刪除然後重建一下就可以了。
3、 如果出現壞的是表段,記錄下這個表的建表語句
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 聯絡。
--Oracle的專門工具dbv來檢查壞塊
關鍵字 說明 (預設)
---------------------------------------------------
FILE 要驗證的檔案 (無)
START 起始塊 (檔案的第一個塊)
END 結束塊 (檔案的最後一個塊)
BLOCKSIZE 邏輯塊大小 (2048)
LOGFILE 輸出日誌 (無)
FEEDBACK 顯示進度 (0)
PARFILE 引數檔案 (無)
USERID 使用者名稱/口令 (無)
SEGMENT_ID 段 ID (tsn.relfile.block) (無)
用法:
c:\>dbv file=d:\oracle\oradata\ora816\system01.dbf logfile=d:\a.log blocksize=8192
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7478833/viewspace-484140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle壞塊問題總結Oracle
- ORACLE壞塊總結(轉)Oracle
- ORACLE壞塊總結2Oracle
- oracle 壞塊問題急救Oracle
- Oracle壞塊問題處理Oracle
- Oracle日常問題-壞塊修復Oracle
- oracle壞塊問題的解決Oracle
- 關於 資料壞塊 的整理和總結
- oracle 壞塊問題 ora-01578Oracle
- oracle壞塊問題及解決辦法Oracle
- 轉載:Oracle資料塊損壞恢復總結Oracle
- 問題總結
- Elasticsearch 問題總結Elasticsearch
- Swoole 問題總結
- Kerberos問題總結ROS
- 面試問題總結面試
- 網友問題摘抄,不定列轉換
- JBoss安全問題總結
- Kibana 問題總結
- electron初探問題總結
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- RabbitMq面試問題總結MQ面試
- 跨域問題總結跨域
- 機器學習問題方法總結機器學習
- 【Java問題面試總結】Java面試
- 常見問題總結
- 滑鼠定位問題總結
- 死鎖問題總結
- IIS配置問題總結
- Entity Framework問題總結Framework
- 揹包問題例題總結
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- vue專案問題總結Vue
- expdpnf 匯出問題總結
- 前端跨域問題總結前端跨域
- mysql常見問題總結MySql
- Vue 常見問題總結Vue