PL/SQL Developer 執行特定 SQL 時拋出:
ORA-07445: exception encountered: core dump [evaopn2()+128] [SIGSEGV] [Address not mapped to object] [0x000000000]
Alert Log 記錄相同堆疊資訊,資料庫版本:10.2.0.4.0。
經 Oracle MOS (Metalink) 確認,此為 Bug 6843129 / Bug 7297764:
| 方案 | 操作 | 影響範圍 | 推薦等級 |
|---|---|---|---|
| 方案一:隱藏參數 | ALTER SYSTEM SET "_complex_view_merging"=FALSE SCOPE=BOTH; | 全資料庫所有視圖合併行為關閉,可能導致部分查詢計劃退化 | ⭐⭐ (臨時緩解) |
| 方案二:HINT 干預(推薦) | 在問題 SQL 中加入 /*+ NO_MERGE */ 或 /*+ NO_MERGE(view_alias) */ | 僅影響目標語句,精準規避 Bug,零副作用 | ⭐⭐⭐⭐⭐ (最佳實踐) |
| 方案三:升級補丁 | 應用 Patch 6843129 或升級至 10.2.0.5+ | 徹底修復,但需停機維護窗口 | ⭐⭐⭐⭐ (長期方案) |
SELECT /*+ NO_MERGE(v_complex) */ * FROM v_complex WHERE ...;
或針對整個查詢塊禁用合併:
SELECT /*+ NO_MERGE */ * FROM (SELECT ... FROM ...) v1 JOIN ...;
VIEW MERGE 操作-- 檢查參數狀態 SHOW PARAMETER _complex_view_merging; -- 確認 Hint 生效 EXPLAIN PLAN FOR SELECT /*+ NO_MERGE */ ...; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
ORA-07445 [evaopn2()] 屬於已知優化器 Bug,**首選 NO_MERGE Hint 精準規避**,避免全局參數副作用;條件允許時建議規劃升級至 10.2.0.5 或 11.2.0.4+ 徹底解決。若生產環境頻繁遇到類似核心轉儲,請開啟 SQL Trace 收集完整 Trace 檔提交 Oracle Support 確認具體 Bug 編號。