一早出現EMCC掛了,之后發現EMCC依賴的instance 掛了,重啟startup后發現spfile無法啟動。還是和小伙伴把基礎問題搞清。spfile是動態文件、動態文件、動態文件,linux下vi看起來部分亂碼部分是可編輯的,vi即使可以編輯也需要轉換成pfile這樣的文本文件再使用,記得備份備份備份。
Oracle 數據庫啟動時依賴參數文件配置實例行為:
SPFILE(服務器參數文件)、PFILE(參數文件)和 init.ora 三者關系緊密但存在關鍵差異。
一、核心關系與區別?
?init.ora 與 PFILE?
- init.ora? 是 Oracle 提供的參數模板文件,命名格式通常為 init.ora,用于指導用戶創建自定義的 PFILE
- ?**PFILE?(如 init.ora)是用戶根據 init.ora 模板創建的文本格式參數文件**,需手動編輯,修改后必須重啟數據庫生效
- 關系:init.ora 是模板,PFILE 是實際使用的配置文件。
SPFILE?(動態文件)
- ?二進制文件?(如 spfile.ora),由 Oracle 自動維護,支持動態修改參數(無需重啟)
- - 優先級高于 PFILE:若兩者共存,默認優先加載 SPFILE?
對比??
?特性? | PFILE(含init.ora) | SPFILEspfile.ora) |
?文件類型? | 文本文件(可直接編輯) | 二進制文件(不可直接編輯) |
?修改方式? | 手動編輯文件 | ALTER SYSTEM SET命令動態調整 |
?生效條件? | 需重啟數據庫 | 部分參數可立即生效 |
?備份支持? | 不支持 RMAN | 支持 RMAN 備份 |
創建來源? | 基于init.ora模板創建 | 從PFILE生成 (CREATE SPFILE...) |
二、啟動機制與加載順序?
?1. 默認啟動流程?
- 1.spfile(SID).ora(如 spfileORCL.ora)
- 2.spfile.ora(通用二進制文件)
- 3.init.ora(如 initORCL.ora)
注?:若以上均不存在,啟動失敗。記得備份這個文件,極端的情況從老的備份里扒拉一個出來,編輯關鍵信息強行開
2. 指定文件啟動?
- ?強制使用 PFILE?:
STARTUP PFILE='$ORACLE_HOME/dbs/initORCL.ora';
- 強制使用 SPFILE?:需創建臨時 PFILE 指向 SPFILE,再通過該 PFILE 啟動?
-- 創建臨時 PFILE(內容:SPFILE='路徑/spfile<SID>.ora')
STARTUP PFILE='臨時文件路徑';
3. 狀態查詢?
- ?確認當前使用的文件類型?:
SHOW PARAMETER spfile;
-- 若返回 `spfile` 路徑 → 使用 SPFILE;若為 `VALUE=NULL` → 使用 PFILE
三、相互轉換方法?
- ?PFILE → SPFILE?
CREATE SPFILE='$ORACLE_HOME/dbs/spfileORCL.ora'
FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora';
- ?SPFILE → PFILE
CREATE PFILE='$ORACLE_HOME/dbs/initORCL_new.ora'
FROM SPFILE='$ORACLE_HOME/dbs/spfileORCL.ora';
- ?從內存生成 PFILE(Oracle 11g+)
CREATE PFILE FROM MEMORY; -- 直接基于當前內存參數生成文本文件
四、實操記錄
- 修改了系統參數文件spfile,導致數據庫啟動不了。
報錯:
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
--內存參數錯誤的
ORA-00845: MEMORY_TARGET not supported on this system
--db_recovery_area參數錯誤的
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
- 在修改參數前,應該先備份spfile文件。
[oracle@em24ai:/u01/app/oracle/product/19.3.0/db/dbs]$
cp spfileemcc.ora spfileemcc.ora.bak
- 1、sqlplus / as sysdba
- 2、使用初始化的文件啟動數據庫 啟動數據庫到 nomount 狀態,要使用一個可用的pfile
SQL> startup pfile=$ORACLE_HOME/dbs/init1.ora nomount;
- 3、備份初始化文件,然后修改初始化文件的參數配置與系統物理硬件匹配
vi $ORACLE_HOME/dbs/init1.ora
SYS@emcc SQL> create pfile='/u01/app/oracle/product/19.3.0/db/dbs/init1.ora' from spfile;
File created.SYS@emcc SQL> startup pfile='/u01/app/oracle/product/19.3.0/db/dbs/init1.ora'; ORACLE instance started.Total System Global Area 1.0737E+10 bytes
Fixed Size 13683928 bytes
Variable Size 2382364672 bytes
Database Buffers 8321499136 bytes
Redo Buffers 19869696 bytes
Database mounted.
- 4、創建新的 spfile
SQL> create spfile from pfile='$ORACLE_HOME/dbs/init1.ora';
- 5、重新啟動數據庫
SQL> shutdown immediate;
SQL> startup;
- 6、記得再生成一個可編輯的文本文件,pfile以備下次使用
SYS@emcc SQL> startup mount;
ORACLE instance started.Total System Global Area 1.0737E+10 bytes
Fixed Size 13683928 bytes
Variable Size 2382364672 bytes
Database Buffers 8321499136 bytes
Redo Buffers 19869696 bytes
Database mounted.
SYS@emcc SQL> alter database open;Database altered.SYS@emcc SQL> create pfile='/u01/app/oracle/product/19.3.0/db/dbs/pfileemcc.ora' from spfile;File created.SYS@emcc SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@emcc SQL> startup
ORACLE instance started.Total System Global Area 1.0737E+10 bytes
Fixed Size 13683928 bytes
Variable Size 2382364672 bytes
Database Buffers 8321499136 bytes
Redo Buffers 19869696 bytes
Database mounted.
Database opened.
五、運維實踐與注意事項?
- ?生產環境推薦??優先使用 SPFILE:支持動態調整、RMAN 備份,避免重啟中斷服務
- ?故障恢復場景?
- ?SPFILE 損壞時?:通過備份的 PFILE 啟動,或從內存生成臨時 PFILE 后再重建 SPFILE
- ?參數誤配置?:若因參數錯誤無法啟動,可通過臨時 PFILE 覆蓋錯誤參數,再重建 SPFILE
- ?關鍵命令示例?
- ?動態修改參數?(使用 SPFILE 時):
-- 需重啟生效ALTER SYSTEM SET sga_max_size=4G SCOPE=SPFILE;
注意:SCOPE 的默認值依賴當前參數文件類型
(SPFILE 啟動時默認為 BOTH,RAC環境記得是sid=‘*’;)?
- init.ora → 參數模板,指導創建 PFILE。
- PFILE? → 可編輯的文本配置,需重啟生效。
- ?SPFILE? → 二進制動態配置,支持實時調整,生產環境首選。
- ?啟動優先級?:spfile.ora > spfile.ora > init.ora。
- ?靈活切換?:通過 CREATE SPFILE/PFILE 命令實現互轉,適應不同運維需求。
?建議生產環境統一使用?SPFILE,結合定期備份(RMAN 或導出為 PFILE)確保參數安全