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

使用 Oracle 8i 修復資料庫壞塊的三種方法

     編輯:Oracle 資料庫基礎

一、資料塊損壞(ORA-01578 / ORA-1115)

成因:硬體問題、實體層級壞塊、巨型檔案處理(ORA-7371)。

確認與恢復步驟:

  1. 查 ALERT.LOG 中其他 ORA-1115:
    • 指向不同磁碟檔案 → 磁碟控制器問題,查 V$DATAFILE 找屬該控制器檔案,進入步驟 2。
    • 指向同磁碟不同檔案 → 磁碟問題,進入步驟 2。
    • 指向同一檔案 → 執行查詢找段:
      SELECT SEGMENT_NAME, SEGMENT_TYPE FROM DBA_EXTENTS
      WHERE FILE_ID=<檔案號> AND <塊號> BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS-1;
      
      持續指向某表/索引 → 重建它們。
  2. 若為 SYSTEM 表空間或 NOARCHIVELOG 模式 → 關閉資料庫,進入步驟 4。
  3. ARCHIVELOG 模式 → 關閉資料庫;若不可關閉 → 將資料檔離線:ALTER DATABASE DATAFILE '檔名' OFFLINE。
  4. 嘗試將資料檔複製到其他磁碟。
  5. 複製失敗 → 檔案遺失。
  6. STARTUP MOUNT
  7. 重命名資料檔:ALTER DATABASE RENAME FILE '舊路徑' TO '新路徑'
  8. ALTER DATABASE OPEN
  9. RECOVER DATAFILE 檔名;ALTER DATABASE DATAFILE '檔名' ONLINE

二、回滾段需恢復

  1. 查所有聯機表空間與資料檔
  2. INIT.ORA 加入 EVENT = "10015 TRACE NAME CONTEXT FOREVER, LEVEL 10",產生追蹤檔含交易與回滾資訊
  3. 關閉並重開資料庫
  4. 查追蹤檔,找 ERROR RECOVERY TX(...,...) OBJECT #,對應 SYS.DBA_OBJECTS.OBJECT_ID
  5. 查詢恢復中物件:SELECT OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS FROM DBA_OBJECTS WHERE OBJECT_ID=...
  6. 刪除該物件以釋放回滾塊

三、檢測與修復壞塊常用方法

(一)初始化參數

  • DB_BLOCK_CHECKING:塊變更時邏輯校驗,防止 10210/10211 錯誤
  • DB_BLOCK_CHECKSUM:計算校驗和

(二)DBMS_REPAIR 套件

由 DBMSRPR.SQL 與 PRVTREPR.PLB 產生,在特定表記錄壞塊資訊。

  1. DBMS_REPAIR.ADMIN_TABLES:建立/刪除儲存壞塊的表。TABLE_TYPE:REPAIR_TABLE(表)、ORPHAN_TABLE(索引);ACTION:CREATE_ACTION、PURGE_ACTION、DROP_ACTION。
  2. DBMS_REPAIR.CHECK_OBJECT:檢查表/索引/分區塊損壞。OBJECT_TYPE:TABLE_OBJECT、INDEX_OBJECT、REPAIR_TABLE_NAME。
  3. 查詢壞塊資訊:SELECT OBJECT_NAME, RELATIVE_FILE_NO, BLOCK_ID, MARKED_CORRUPT, CORRUPT_DESCRIPTION, REPAIR_DESCRIPTION FROM REPAIR_TABLE
  4. 標記壞塊:DBMS_REPAIR.FIX_CORRUPT_BLOCKS
  5. 跳過壞塊:DBMS_REPAIR.SKIP_CORRUPT_BLOCKS
  6. 重建空閒列表:DBMS_REPAIR.REBUILD_FREELISTS
  7. 尋找指向壞塊的索引:DBMS_REPAIR.DUMP_ORPHAN_KEYS → 查詢 ORPHAN_KEY_TABLE → 重建索引

限制:無法分析 Index-organized tables 與 LOB indexes;DUMP_ORPHAN_KEYS 不支援 bitmap 與 function-based indexes。

(三)ANALYZE ... VALIDATE STRUCTURE

UTLVALID.SQL 建立 INVALID_ROWS 表;ANALYZE TABLE VALIDATE STRUCTURE CASCADE 同時驗證表與索引。

(四)DBVERIFY 外部工具

影響資料庫極小,可用於備份檔案還原前驗證完整性、定位壞塊:

DBV FILE=/OPT/ORACLE/DB02/ORADATA/DATA01.DBF START=1 END=500 LOGFILE=DBV.LOG
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved