oracle 壞塊問題急救
ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10’;
CREATE TABLE tg_bill03_tmp as select * from tg_bill03;
------------------
AlertSID.log:
Ora-1578 file# (RFN) block#
Ora-1110 file# (AFN) block#
Ora-600 file# (AFN) block#
其中RFN表示的是relative_fno
AFN表示的是file_id
Select file_name, tablespace_name, file_id “AFN”, relative_fno “RFN”
From dba_data_files;
Select file_name, tablespace_name, file_id, relative_fno“RFN”
From dba_temp_files;
¡¤具體處理方法的介紹
(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;
¡¤只恢復壞的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;}
¡¤透過ROWID RANGE SCAN 儲存資料
(1) 先取得壞塊中ROW ID的最小值,執行以下的語句:
SELECT dbms_rowid.rowid_create(1,
(2)取得壞塊中的ROW ID的最大值,執行以下的語句:
SELECT dbms_rowid.rowid_create(1,
(3)建議一個臨時表儲存那些沒有壞塊的資料,執行以下的語句:
CREATE TABLE salvage_table AS SELECT * FROM corrupt_tab Where 1=2;
(4) 儲存那些不存在壞塊的資料到臨時表中,執行以下的語句:
INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM
INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM
(5) 根據臨時表中的資料重建表,重建表上的索引,限制
¡¤使用10231診斷事件,在做全表掃描的時候跳過壞塊
可以在session級別設定:
ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';
也可以在資料庫級別上設定,在初始化引數中加入:event="10231 trace name context forever, level 10" ,
然後重啟資料庫。
然後從存在壞塊的表中取出不存在壞塊的資料,執行以下的語句:
CREATE TABLE salvage_emp AS SELECT * FROM corrupt_table;
最後rename生成的corrupt_table為原來表的名字,並重建表上的索引和限制。
¡¤使用dbms_repair包進行恢復
使用dbms_repair標記有壞塊的表,在做全表掃描的時候跳過壞塊,執行以下的語句:
Execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('
然後使用exp工具或者createtable as select的方法取出沒有壞塊資料,然後重建表,表上的索引和限制。
如果只是對資料庫中比較重要的表進行壞塊檢查,
可以使用
ANALYZE TABLE tablename VALIDATE STRUCTURE CASCADE
的方法來檢測壞塊,它執行壞塊的檢查,但是不會標記壞塊為corrupt,
檢測的結果儲存在USER_DUMP_DEST目錄下的使用者trace檔案中。
使用Oracle的專門工具dbv來檢查壞塊,具體的語法如下
3. 確定壞塊的物件是什麼?
select tablespace_name, segment_type, segment_name, owner
from dba_extents
where file_id = 7
and 12 BETWEEN block_id AND block_id + blocks - 1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879835/viewspace-1046286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle壞塊問題總結Oracle
- Oracle壞塊問題處理Oracle
- Oracle日常問題-壞塊修復Oracle
- oracle壞塊問題的解決Oracle
- oracle 壞塊問題 ora-01578Oracle
- oracle壞塊問題及解決辦法Oracle
- 壞塊問題(摘抄總結)
- 急救,jivejdon安裝問題
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- oracle壞塊(二)Oracle
- Oracle資料庫壞塊(corruption)-物理壞塊Oracle資料庫
- Oracle上的邏輯壞塊和物理壞塊Oracle
- Oracle___專題研究__資料庫壞塊Oracle資料庫
- Oracle壞塊處理Oracle
- oracle壞塊Block CorruptionsOracleBloC
- 檢查 oracle 壞塊Oracle
- ORACLE 壞塊處理Oracle
- 利用oracle9i blockrecover 修復ORA-01578壞塊問題OracleBloC
- ORACLE壞塊總結(轉)Oracle
- ORACLE壞塊總結2Oracle
- oracle壞塊修復例項Oracle
- Oracle 11.1 邏輯壞塊Oracle
- Oracle壞塊處理相關Oracle
- oracle corrupt block壞塊處理OracleBloC
- 深度分析ORACLE熱點塊問題Oracle
- truncate操作消除ORACLE SEG壞塊解析Oracle
- Oracle資料庫壞塊修復Oracle資料庫
- 深度分析ORACLE熱點塊問題(轉)Oracle
- 【BLOCK】Oracle壞塊處理命令參考BloCOracle
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- 跳過Oracle資料庫壞塊方法Oracle資料庫
- oracle壞塊模擬處理(筆記)Oracle筆記
- oracle壞塊的rowid方式修復Oracle
- ORACLE中修復資料塊損壞Oracle
- Oracle 壞塊處理三板斧Oracle
- Oracle壞塊修復處理實驗Oracle
- Oracle資料庫塊的物理損壞與邏輯損壞Oracle資料庫
- Oracle資料庫壞塊典型案例擴充Oracle資料庫