一條看似簡單的 SELECT,在 Oracle 後台經歷客戶端發送 → 解析 → 執行 → 提取四大階段。理解此流程對 SQL 調優、故障排查、架構設計至關重要。
檢查 Shared Pool 中是否存在相同 SQL 的執行計畫。命中則跳過後續解析步驟,直接執行(軟解析)。未命中則硬解析。
注意:資料庫端 Library Cache ≠ 應用端查詢快取。應用端快取可能導致髒讀,資料庫端保證一致性。
驗證 SQL 是否符合語法規則。錯誤即回饋客戶端(ORA-009xx)。不檢查物件是否存在。
驗證表名、欄位名、權限是否存在於資料字典。錯誤回饋(ORA-00904、ORA-00942)。順序固定:語法 → 語義 → 權限,調試時可利用此順序快速定位。
在查詢物件上加共享鎖,防止 DDL 修改結構導致解析失效。
驗證當前用戶是否具備 SELECT、EXECUTE 等權限。失敗回饋 ORA-01031。權限檢查在語法語義之後,故應用層常自行實作細粒度權限控制。
CBO 根據統計資訊、索引、約束、Hint 等生成最佳計畫,並將 SQL 文本 + 計畫 存入 Library Cache 供下次復用。
服務端進程將結果集透過網路協議(SQL*Net/Net8)傳回客戶端進程,完成一次查詢閉環。
latch: library cache、db file scattered read 等指標定位瓶頸。