首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Oracle dbms_repair 修復壞塊完整實戰手冊:從模擬損壞到跳過壞塊與重建 Freelist

     編輯:關於SqlServer

Oracle 資料塊損壞 (ORA-01578) 可透過 dbms_repair 套件標記、跳過壞塊、清理孤兒索引鍵、重建 Freelist 實現「帶傷運行」。本文完整記錄從建立測試表、模擬壞塊 (UltraEdit 改寫 .dbf)、dbv 驗證、dbms_repair 六步驟修復流程,含 PL/SQL 代碼與輸出解讀。

六步驟修復流程

  1. 建立管理表:DBMS_REPAIR.ADMIN_TABLES('REPAIR_TABLE',1,1,'USERS') (壞塊記錄表) + ORPHAN_TABLE (孤兒鍵表)。
  2. 檢查壞塊:DBMS_REPAIR.CHECK_OBJECT(schema=>'DLINGER', object=>'TEST', corrupt_count=>:cc) → REPAIR_TABLE 記錄壞塊位置、MARKED_CORRUPT=TRUE (9i 自動標記,8i 需步驟 3)。
  3. 定位壞塊 (8i 必做):DBMS_REPAIR.FIX_CORRUPT_BLOCKS(...) 寫入標記、更新時間戳。9i 可跳過。
  4. 跳過壞塊:DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema=>'DLINGER', object=>'TEST', flags=>1) → 查詢不再報 ORA-01578,但損失壞塊上的所有行 (實測損失 46 行)。
  5. 處理索引孤兒鍵:DBMS_REPAIR.DUMP_ORPHAN_KEYS(schema=>'DLINGER', object=>'I_TEST', type=>2, repair_table=>'REPAIR_TABLE', orphan_table=>'ORPHAN_TABLE') → ORPHAN_TABLE 列出 46 條孤兒鍵,與損失行數吻合。決定是否 REBUILD INDEX。
  6. 重建 Freelist:DBMS_REPAIR.REBUILD_FREELISTS(schema=>'DLINGER', object=>'TEST') 修復段空間管理結構。

關鍵驗證指令

-- dbv 驗證
dbv file='D:\oracle\oradata\Oracle9i\block.dbf' blocksize=8192

-- 查看 REPAIR_TABLE
SELECT object_name, relative_file_id, block_id, marked_corrupt, corrupt_description, repair_description, check_timestamp
FROM repair_table;

-- 查看 ORPHAN_TABLE
SELECT * FROM orphan_table;

風險與建議

  • 資料遺失不可逆:跳過壞塊 = 犧牲該塊上所有行。必須在備份無效、無法還原時才用。
  • 生產環境優先嘗試 RMAN BLOCK RECOVER 或 Data Guard 切換。
  • 修復後務必 完整備份**並驗證還原**。
  • 定期跑 DBMS_REPAIR.CHECK_OBJECT 於核心表,早期發現壞塊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved