初始化參數檔決定 SGA 大小、背景進程、資料庫行為核心參數。9i 引入 SPFILE (二進位、支援動態持久化) 並保留 PFILE (文字、可手工編輯)。掌握兩者互轉與修改技巧是 DBA 基本功。
| 檔案類型 | 格式 | 預設名稱 | 位置 | 特點 |
|---|---|---|---|---|
| PFILE (Parameter File) | 純文字 | init | $ORACLE_HOME/dbs (Linux) / database (Windows) | 可用編輯器修改、版本控制、需重啟生效 |
| SPFILE (Server Parameter File) | 二進位 | spfile | 同 PFILE | 支援 ALTER SYSTEM ... SCOPE=SPFILE/BOTH 動態持久化、不可直接編輯 |
啟動搜尋順序 (9i+):
spfile → spfile.ora → init.ora → init
找不到則報錯 ORA-01078,Alert Log 記錄細節。
-- PFILE → SPFILE (需 SYSDBA,實例可關閉或啟動)
CREATE SPFILE FROM PFILE; -- 使用預設路徑
CREATE SPFILE='/custom/path/spfileMYDB.ora' FROM PFILE='/custom/path/initMYDB.ora';
-- SPFILE → PFILE (實例需啟動以讀取記憶體參數)
CREATE PFILE FROM SPFILE; -- 預設產生 $ORACLE_HOME/dbs/init.ora
CREATE PFILE='/custom/path/initMYDB.ora' FROM SPFILE='/custom/path/spfileMYDB.ora';
最佳實踐:維護一份受版本控制的 PFILE 模板,部署時轉為 SPFILE;變更記錄在 PFILE 歷史中可追溯。
STARTUP PFILE='/custom/path/initMYDB.ora';
-- 或
STARTUP NOMOUNT PFILE='/custom/path/initMYDB.ora'; -- 僅啟動實例
ALTER SYSTEM SET parameter_name = value SCOPE = MEMORY | SPFILE | BOTH;
| SCOPE | 生效範圍 | 持久化 | 適用參數類型 |
|---|---|---|---|
| MEMORY | 當前運行實例立即生效 | 否 (重啟失效) | 動態參數 |
| SPFILE | 下次啟動生效 | 是 | 靜態/動態參數 |
| BOTH | 立即生效 + 持久化 | 是 | **僅動態參數** (靜態參數報錯 ORA-32001) |
關鍵限制:SCOPE=BOTH**不可用於靜態參數** (如DB_BLOCK_SIZE,SGA_MAX_SIZE,PROCESSES等),修改靜態參數必須SCOPE=SPFILE並重啟。
-- 立即調整 SGA 目標 (動態參數)
ALTER SYSTEM SET SGA_TARGET = 2G SCOPE=BOTH;
-- 調整程序上限 (靜態參數,需重啟)
ALTER SYSTEM SET PROCESSES = 1000 SCOPE=SPFILE;
-- 修改診斷目錄 (動態)
ALTER SYSTEM SET DIAGNOSTIC_DEST = '/u01/app/oracle' SCOPE=BOTH;
https://host:5500/em 或 11g https://host:1158/em)SCOPE=MEMORYSCOPE=BOTH (勾選複選框)SCOPE=SPFILE (需關閉上述複選框並確保實例不立即生效)-- SQL*Plus 顯示指定前綴參數
SHOW PARAMETER sga;
SHOW PARAMETER optimizer;
-- 動態視圖查詢 (含顯示值、是否動態、描述)
COL NAME FORMAT A40
COL VALUE FORMAT A30
COL DISPLAY_VALUE FORMAT A30
COL TYPE FORMAT A10
SELECT NAME, VALUE, DISPLAY_VALUE, TYPE, ISDEFAULT, DESCRIPTION
FROM V$PARAMETER
WHERE NAME LIKE '%sga%'
ORDER BY NAME;
-- 僅顯示 SPFILE 中設定的參數 (非預設值)
SELECT NAME, VALUE FROM V$SPPARAMETER WHERE VALUE IS NOT NULL;
| 場景 | 操作 |
|---|---|
| 建立新資料庫參數模板 | 複製現有 PFILE → 修改關鍵參數 (DB_NAME, MEMORY_TARGET, CONTROL_FILES, UNDO_TABLESPACE 等) → CREATE SPFILE FROM PFILE → STARTUP |
| 參數調優回滾 | 備份 SPFILE (CREATE PFILE FROM SPFILE) → 修改參數 → 效能變差 → STARTUP PFILE='backup_init.ora' 回滾 |
| 跨環境遷移參數 | 匯出 PFILE → 修改路徑/記憶體參數適配目標機器 → 目標端 CREATE SPFILE FROM PFILE |
| 檢視非預設參數 | SELECT * FROM V$SPPARAMETER WHERE VALUE IS NOT NULL; 或 EM「所有初始化參數」過濾「非預設」 |