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

Oracle 10g R2 REBUILD INDEX ONLINE 失敗後 SMON 清理延遲 Bug 分析與規避

     編輯:Oracle 資料庫基礎

原理解析

  • 無 ONLINE:直接讀取舊索引數據構建新索引。
  • 有 ONLINE:全表掃描構建索引,同時創建 SYS_JOURNAL_ 臨時日志表(類似 MLOG$),通過內部觸發器記錄重建期間的 DML 變更。新索引建成後,新數據直接寫入,僅需回放日志表變更。

失敗後的清理機制

重建失敗時,SMON 進程負責清理 SYS_JOURNAL_XXX 及不一致對象。清理完成前,無法再次發起 REBUILD INDEX ONLINE。若需強制清理,可調用 DBMS_REPAIR.ONLINE_INDEX_CLEAN。

版本 Bug 影響範圍

版本SMON 清理行為
9.2.0.6 / 9.2.0.7 / 10.2.0.1不會及時清理,大索引重建被中斷後可能長時間殘留臨時對象,阻塞後續操作
9.2.0.8 / 10.2.0.2 / 11gBug 已修復,清理及時

實戰踩坑記錄

大表數據遷移過程中反覆遇到 ksedmp: internal or fatal error,調用棧指向 PRO_BAK_SENDINFO 存儲過程中的 DELETE 語句,懷疑與前期中斷的 REBUILD INDEX ONLINE 殘留對象有關。

規避建議

  1. 受影響版本上,嚴禁人為中斷大索引的 REBUILD INDEX ONLINE 操作。
  2. 如已中斷,優先嘗試 DBMS_REPAIR.ONLINE_INDEX_CLEAN 手動清理。
  3. 條件允許時,升級至 10.2.0.2 或更高版本徹底解決。
  4. 大索引維護窗口期確保無干擾,必要時改用離線重建 (NOPARALLEL 配合低峰期)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved