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

Oracle 字典表誤 TRUNCATE 故障搶救實錄:IDL$ 系列表損毀導致 ORA-600 [17069] 完整恢復案例

     編輯:Oracle 資料庫基礎

故障現場與影響範圍

  • 環境:Oracle 9.2.0.7 RAC,事務量極大,無備份。
  • 操作失誤:技術人員 TRUNCATE 多個字典表。
  • 核心受損表:IDL_CHAR$、IDL_SB4$、IDL_UB1$、IDL_UB2$。
  • 癥狀:大量 ORA-00600 [17069],所有 PL/SQL 程序單元 (Procedure/Package/Trigger) 無法執行,追蹤檔暴增至 5GB。

IDL$ 系列表核心作用

儲存 PL/SQL 編譯後的 DIANA 樹狀中間語言與 m-code (機器碼)。
Part 0 = DIANA,Part 1 = 可移植 p-code,Part 2 = 機器相關 p-code。

資料遺失 → 共享池無法載入編譯單元 → 所有 PL/SQL 執行失敗 → 系統癱瘓。

恢復策略與關鍵步驟 (耗時 6 小時)

  1. 執行核心腳本重建編譯中繼資料:
    • @?/rdbms/admin/catalog.sql
    • @?/rdbms/admin/catproc.sql
    • 相關 PL/SQL 套件重新編譯腳本 (utlrp.sql 等)
  2. 系統級 Package 重新編譯: 依賴順序逐一編譯 DBMS_STANDARD、DBMS_UTILITY 等核心套件。
  3. 解決殘留 ORA-600 [17069]: 針對特定物件手動編譯、清除共享池、必要時重啟執行個體。
  4. 驗證: 所有應用 PL/SQL 正常執行,追蹤檔不再增長,告警日誌無新 ORA-600。

教訓與鐵律

DBA 四大守則之一:備份重於一切。
DBA 基本素質之一:嚴謹。
字典表操作需三思、雙人複核、變更管理流程管控。無備份環境下的字典表損毀恢復屬「高難度搶險」,不應成為常態。

預防措施清單

  • 啟用 DDL トリガー 記錄/阻擋字典表 DDL 操作。
  • 關鍵 Schema (SYS, SYSTEM) 禁止直接登入,使用代理使用者。
  • 建立字典表完整性定期檢查作業 (比對 DBA_OBJECTS 與已知基線)。
  • RAC 環境確保備份策略覆蓋所有節點,含控制檔、SPFILE、密碼檔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved