使用DBMS_REPAIR確定和跳過壞塊
以下命令使用sys使用者執行
1. 建立修復表DBMS_REPAIR.ADMIN_TABLES
SQL> BEGIN
2 DBMS_REPAIR.ADMIN_TABLES (
3 TABLE_NAME => 'REPAIR_TABLE',
4 TABLE_TYPE => dbms_repair.repair_table,
5 ACTION => dbms_repair.create_action,
6 TABLESPACE => '&tablespace_name');
7 END;
8 /
PL/SQL procedure successfully completed
2. 確定壞塊BMS_REPAIR.CHECK_OBJECT
SQL>
SQL> set serveroutput on
SQL> DECLARE num_corrupt INT;
2 BEGIN
3 num_corrupt := 0;
4 DBMS_REPAIR.CHECK_OBJECT (
5 SCHEMA_NAME => '&schema_name',
6 OBJECT_NAME => '&object_name',
7 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
8 corrupt_count => num_corrupt);
9 DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
10 END;
11 /
number corrupt: 1
PL/SQL procedure successfully completed
3. 查詢檢測到的壞塊
SQL>
SQL> select BLOCK_ID, CORRUPT_TYPE, CORRUPT_DESCRIPTION
2 from REPAIR_TABLE;
BLOCK_ID CORRUPT_TYPE CORRUPT_DESCRIPTION
---------- ------------ --------------------------------------------------------------------------------
992620 6148
4. 標記壞塊DBMS_REPAIR.FIX_CORRUPT_BLOCKS
SQL>
SQL> DECLARE num_fix INT;
2 BEGIN
3 num_fix := 0;
4 DBMS_REPAIR.FIX_CORRUPT_BLOCKS (
5 SCHEMA_NAME => '&schema_name',
6 OBJECT_NAME=> '&object_name',
7 OBJECT_TYPE => dbms_repair.table_object,
8 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
9 FIX_COUNT=> num_fix);
10 DBMS_OUTPUT.PUT_LINE('num fix: ' || to_char(num_fix));
11 END;
12 /
num fix: 0
PL/SQL procedure successfully completed
5. 設定DML跳過壞塊DBMS_REPAIR.SKIP_CORRUPT_BLOCKS
SQL>
SQL> BEGIN
2 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
3 SCHEMA_NAME => '&schema_name',
4 OBJECT_NAME => '&object_name',
5 OBJECT_TYPE => dbms_repair.table_object,
6 FLAGS => dbms_repair.SKIP_FLAG);
7 END;
8 /
PL/SQL procedure successfully completed
SQL>
6. 注意事項:
1 使用DBMS_REPAIR跳過壞塊後,重啟索引如果需要訪問這些壞塊將報錯,如果有唯一約束,插入重複資料將報ORA-1錯誤
2 如果想取消壞塊掉過可以使用dbms_repair.NOSKIP_FLAG值
3 使用SKIP_CORRUPT_BLOCKS,後如果想從表清楚壞塊資料,可以使用alter table
4 CHECK_OBJECT過程將在段頭獲取一個 LOCK (TM) in MODE=3 Row-X (SX)鎖這將阻塞其他程式獲取DDL或者獨佔TM鎖
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15747463/viewspace-1123454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用dbms_repair修復塊損壞AI
- DBMS_REPAIR修復壞塊AI
- 設定 EVENT 10231 跳過壞塊
- ORA-01578(資料塊損壞)跳過壞塊
- 跳過Oracle資料庫壞塊方法Oracle資料庫
- 【故障分析】通過壞塊提示資訊確定損壞的資料庫物件資訊資料庫物件
- ORA-01578(資料塊損壞)跳過壞塊處理辦法
- 利用DBMS_REPAIR包檢查以及COPY處理壞塊:AI
- 無備份的資料塊損壞恢復辦法 dbms_repairAI
- Oracle上的邏輯壞塊和物理壞塊Oracle
- 發生壞塊後的處理及確認
- DBMS_REPAIR的使用AI
- maven 設定跳過測試Maven
- 如何確定MacBook充電器或電池是否損壞Mac
- Oracle資料庫壞塊(corruption)-物理壞塊Oracle資料庫
- DBMS_REPAIR的使用 (轉載)AI
- 使用dbv和RMAN檢查資料檔案中的壞塊
- 一次壞塊的處理過程(一)
- 一次壞塊的處理過程(二)
- 一次壞塊的處理過程 [轉]
- 使用shell批量監控磁碟壞塊(二)
- 使用shell批量監控磁碟壞塊(一)
- 一次使用BBED處理壞塊
- win10 如何跳過建立pin win10 如何跳過設定pinWin10
- PostgreSQL 恢復大法 - 恢復部分資料庫、跳過壞塊、修復無法啟動的資料庫SQL資料庫
- oracle壞塊(二)Oracle
- DBMS_REPAIRAI
- ORACLE資料庫壞塊的處理 (一次壞快處理過程)Oracle資料庫
- 資料塊損壞ORA-1578(發現損壞塊)
- Oracle壞塊處理Oracle
- oracle壞塊Block CorruptionsOracleBloC
- rootvg壞塊處理
- 檢查 oracle 壞塊Oracle
- ORACLE 壞塊處理Oracle
- 處理塊損壞
- RMAN修復壞塊
- Oracle_UNDO壞塊測試和修復(BBED)Oracle
- 關於 資料壞塊 的整理和總結