安裝 Oracle 10g 時將 Shared Pool 大小從預設 80MB 改為最小值 40MB,安裝進行至約 50% 時拋出:
ORA-22303: type "..."."..." not found
ORA-00604: error occurred at recursive SQL level %
ORA-04031: unable to allocate %s bytes of shared memory
| 錯誤碼 | 含義 |
|---|---|
| ORA-22303 | 嘗試獲取的物件類型在資料字典中不存在 (通常因字典載入失敗)。 |
| ORA-00604 | 遞歸 SQL 執行層發生錯誤 (外層錯誤包裝)。 |
| ORA-04031 | Shared Pool 無法分配請求記憶體,**核心根因**。 |
安裝過程需載入大量 PL/SQL 包體、類型定義、同義詞等字典物件到 Shared Pool。40MB 遠低於安裝階段的峰值需求,導致:
DBMS_REGISTRY 註冊組件) 失敗 → ORA-00604。SHARED_POOL_SIZE / SGA_TARGET。SQL> SHOW PARAMETER shared_pool
NAME TYPE VALUE
shared_pool_size big integer 150M -- 安裝後可調整
MEMORY_TARGET/SGA_TARGET (ASMM/AMM) 讓 Oracle 自動管理記憶體分配。V$SGASTAT、V$SHARED_POOL_ADVICE 判斷是否真需求不足,或因大物件碎片化 (可用 DBMS_SHARED_POOL.KEEP 釘住熱點物件)。安裝時 Shared Pool 設過小是典型「省小錢、花大錢」錯誤。遵循預設、安裝後再調優,能避免 90% 的記憶體相關安裝失敗。