D:\Oracle (Windows) 或 /u01/app/oracle (Linux)ORCL (對應 initORCL.ora、spfileORCL.ora)
D:\Oracle> sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> CREATE PFILE FROM SPFILE; -- 產生 D:\Oracle\ora92\database\INITORCL.ORA
SQL> SHUTDOWN IMMEDIATE
SQL> EXIT
打開 D:\Oracle\ora92\database\INITORCL.ORA,修改/新增下列參數:
*.db_cache_size = 819M
*.shared_pool_size = 256M
*.pga_aggregate_target = 256M
*.large_pool_size = 64M
*.java_pool_size = 64M
參數說明:
| 參數 | 用途 | 建議值 (視實體記憶體) |
|---|---|---|
DB_CACHE_SIZE | 預設 Buffer Cache (標準塊大小) | 實體記憶體 40~50% |
SHARED_POOL_SIZE | Shared Pool (Library Cache, Dictionary Cache) | 實體記憶體 10~15% |
PGA_AGGREGATE_TARGET | PGA 總量目標 (排序、雜湊、Bitmap) | 實體記憶體 20~30% |
LARGE_POOL_SIZE | 並行、備份、共用伺服器 | 64M~256M |
JAVA_POOL_SIZE | Java Stored Procedure / EJB | 64M~256M (若無用 Java 可設 0) |
注意:若啟用 AMM (MEMORY_TARGET),上述手動參數會被忽略。建議關閉 AMM 後手動調優。
-- 作業系統層面刪除
DEL D:\Oracle\ora92\database\SPFILEORCL.ORA
-- 再次啟動
D:\Oracle> sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> CREATE SPFILE FROM PFILE; -- 產生新 SPFILE
SQL> EXIT
SQL> SHOW PARAMETER db_cache_size;
SQL> SHOW PARAMETER pga_aggregate_target;
SQL> SELECT * FROM V$SGAINFO;
| 檔案類型 | 預設路徑 |
|---|---|
| PFILE | $ORACLE_HOME/dbs/init<SID>.ora |
| SPFILE | $ORACLE_HOME/dbs/spfile<SID>.ora |
| 參數檔備份建議 | $ORACLE_BASE/admin/<SID>/pfile/ |
| 模式 | 關鍵參數 | 適用場景 |
|---|---|---|
| 手動 SGA + 手動 PGA | SGA_TARGET=0, PGA_AGGREGATE_TARGET 手動 | 精細控制、舊版相容、特殊工作負載 |
| 自動共用記憶體 (ASMM) | SGA_TARGET > 0, PGA_AGGREGATE_TARGET 手動 | **推薦**:SGA 內部自動再平衡、PGA 手動控制 |
| 自動記憶體管理 (AMM) | MEMORY_TARGET > 0, MEMORY_MAX_TARGET | 簡單部署、開發/測試、不需精細控制 |
生產環境最佳實務:採用 ASMM (SGA_TARGET + PGA_AGGREGATE_TARGET),保留彈性同時避免 AMM 在 Linux 上 /dev/shm 不足導致啟動失敗。
| 參數 | SCOPE=MEMORY | SCOPE=SPFILE | SCOPE=BOTH |
|---|---|---|---|
| DB_CACHE_SIZE | 立即生效 (縮小需空間) | 下次啟動 | 立即 + 持久 |
| SHARED_POOL_SIZE | 立即生效 | 下次啟動 | 立即 + 持久 |
| PGA_AGGREGATE_TARGET | 立即生效 | 下次啟動 | 立即 + 持久 |
| PROCESSES | 不可動態 | 下次啟動 | 下次啟動 |
| MEMORY_TARGET | 立即 (有上限) | 下次啟動 | 立即 + 持久 |
習慣使用 ALTER SYSTEM SET ... SCOPE=BOTH 確保即時與持久同步。