Oracle データベースは起動時に初期化パラメータファイルを読み込んで動作設定を決定します。パラメータファイルには2種類あり、テキスト形式の PFILE(Parameter File / init.ora)とバイナリ形式の SPFILE(Server Parameter File)があります。
現在では SPFILE が標準で、ALTER SYSTEM で変更した設定を SPFILE に永続化できます。この記事では確認・変更・バックアップの手順を実例で解説します。
この記事でわかること
- PFILE と SPFILE の違い・どちらが使われているかの確認方法
- SHOW PARAMETER・V$PARAMETER でのパラメータ確認
- ALTER SYSTEM SET の SCOPE オプション(MEMORY / SPFILE / BOTH)の使い分け
- 静的パラメータ(再起動が必要)かどうかの確認方法
- SPFILE から PFILE を作成する・PFILE から SPFILE を作成する手順
- V$SPPARAMETER で SPFILE に保存されている値を確認する
PFILE と SPFILE の違い
| 項目 | PFILE(init.ora) | SPFILE(spfile.ora) |
|---|---|---|
| ファイル形式 | テキスト(直接編集可能) | バイナリ(直接編集不可) |
| デフォルト名 | init{SID}.ora | spfile{SID}.ora |
| デフォルト場所 | $ORACLE_HOME/dbs(Linux) | $ORACLE_HOME/dbs(Linux) |
| ALTER SYSTEM で変更可能か | 不可(手動編集のみ) | 可(SCOPE=SPFILE で永続化) |
| Oracle 標準 | 旧来の方式 | 現在の標準(推奨) |
| RAC での共有 | 各ノードにコピーが必要 | 共有ストレージ上に1つ配置可能 |
SPFILE と PFILE どちらが使われているかを確認する
-- SPFILE が使われている場合は VALUE に SPFILE のパスが表示される -- PFILE の場合は VALUE が空(NULL)になる SHOW PARAMETER spfile; -- 別の確認方法: V$PARAMETER で spfile_name を確認 SELECT name, value FROM V$PARAMETER WHERE name = 'spfile'; -- VALUE が空 = PFILE 起動 -- VALUE にパスが入っている = SPFILE 起動
パラメータの確認方法
SHOW PARAMETER でパラメータを確認する(SQL*Plus / SQLcl)
-- パラメータ名の一部を指定して前方一致・部分一致で検索 SHOW PARAMETER sga -- SGA 関連パラメータ一覧 SHOW PARAMETER db_cache -- db_cache_size を確認 SHOW PARAMETER optimizer -- オプティマイザ関連パラメータ -- 特定のパラメータを正確に確認 SHOW PARAMETER db_block_size
V$PARAMETER でパラメータを詳細確認する(SQL クエリ)
-- パラメータの詳細情報を確認
SELECT
name,
value, -- 現在有効な値
display_value, -- 見やすい形式の値(例: 4G など)
type, -- 1=BOOLEAN, 2=STRING, 3=INTEGER, 4=PARAMETER_FILE, 5=RESERVED, 6=BIG_INTEGER
issys_modifiable, -- ALTER SYSTEM で変更可能か(IMMEDIATE/DEFERRED/FALSE)
isinstance_modifiable, -- 現在の起動中に変更可能か
isses_modifiable, -- ALTER SESSION で変更可能か
ismodified, -- 現在の起動中に変更されたか(MODIFIED/FALSE)
description
FROM V$PARAMETER
WHERE name LIKE '%memory%' -- メモリ関連パラメータを検索
ORDER BY name;
V$SPPARAMETER で SPFILE に保存されている値を確認する
-- V$SPPARAMETER は SPFILE の内容を直接参照する
-- V$PARAMETER(実行中の値)と比較できる
SELECT
name,
value AS spfile_value, -- SPFILE に記録されている値
display_value,
isspecified -- SPFILE に明示的に記録されているか(TRUE/FALSE)
FROM V$SPPARAMETER
WHERE isspecified = TRUE -- 明示的に設定されたパラメータのみ
ORDER BY name;
-- V$PARAMETER と V$SPPARAMETER を比較(再起動後に反映される変更を確認)
SELECT
p.name,
p.value AS current_value, -- 現在の値
sp.value AS spfile_value -- SPFILE に保存されている値(再起動後に適用)
FROM V$PARAMETER p
JOIN V$SPPARAMETER sp ON p.name = sp.name
WHERE sp.isspecified = TRUE
AND p.value != sp.value -- 値が異なるもの(再起動後に変わる)
ORDER BY p.name;
ALTER SYSTEM でパラメータを変更する
ALTER SYSTEM SET パラメータ名 = 値 SCOPE=... で変更します。SCOPE オプションで変更をどこに反映させるかを指定します。
| SCOPE の値 | 反映先 | 再起動後の有効性 |
|---|---|---|
| MEMORY | 実行中のインスタンス(メモリのみ) | 再起動後は元の値に戻る |
| SPFILE | SPFILE のみ(次回起動時から反映) | 再起動後に有効 |
| BOTH(デフォルト) | 実行中のインスタンス + SPFILE | 即時 + 再起動後も有効 |
ALTER SYSTEM でパラメータを変更する例
-- 即時に変更して SPFILE にも永続化する(BOTH = デフォルト) ALTER SYSTEM SET sga_target = 4G SCOPE=BOTH; ALTER SYSTEM SET pga_aggregate_target = 2G; -- SCOPE 省略時は BOTH -- メモリのみ変更(テスト・一時的な変更) ALTER SYSTEM SET optimizer_mode = FIRST_ROWS_10 SCOPE=MEMORY; -- SPFILE のみ変更(静的パラメータ、再起動が必要なもの) ALTER SYSTEM SET db_block_size = 8192 SCOPE=SPFILE; -- 静的パラメータを MEMORY や BOTH に変更しようとするとエラーになる -- ORA-02095: 指定された初期化パラメータは変更できません -- パラメータをデフォルト値に戻す ALTER SYSTEM RESET optimizer_mode SCOPE=BOTH;
静的パラメータ(再起動が必要なもの)の確認
変更に再起動が必要かどうかを確認する
-- issys_modifiable = FALSE のパラメータは ALTER SYSTEM で変更できない(SPFILE のみ可)
SELECT name, value, display_value, issys_modifiable
FROM V$PARAMETER
WHERE name IN (
'db_block_size', -- FALSE: 静的(変更不可)
'sga_target', -- IMMEDIATE: 即時変更可能
'open_cursors', -- IMMEDIATE: 即時変更可能
'pga_aggregate_target' -- IMMEDIATE: 即時変更可能
)
ORDER BY name;
-- issys_modifiable:
-- FALSE = 静的パラメータ(SCOPE=SPFILE のみ、再起動後に反映)
-- IMMEDIATE = 即時変更可能(SCOPE=MEMORY/BOTH が使える)
-- DEFERRED = 変更は次のセッション接続時から有効
SPFILE と PFILE の相互変換
SPFILE から PFILE を作成する(バックアップ・編集用)
-- SPFILE の内容をテキスト形式の PFILE として出力(DBA権限必要)
-- SYS ユーザーで実行する
CREATE PFILE = '/home/oracle/init_backup.ora' FROM SPFILE;
-- ファイルパスを省略するとデフォルトの場所($ORACLE_HOME/dbs/init{SID}.ora)に作成
CREATE PFILE FROM SPFILE;
PFILE から SPFILE を作成する
-- PFILE(テキスト)から SPFILE(バイナリ)を作成する -- DB が起動していない状態(NOMOUNT)またはファイルを直接指定して実行 CREATE SPFILE = '/home/oracle/spfile_new.ora' FROM PFILE = '/home/oracle/init.ora'; -- デフォルトのパスに作成 CREATE SPFILE FROM PFILE;
まとめ
- SPFILEがデフォルト。
SHOW PARAMETER spfileで VALUE が表示されれば SPFILE 起動 - V$PARAMETER:実行中の値・変更可能かどうか(issys_modifiable)・変更済みか(ismodified)を確認する
- V$SPPARAMETER:SPFILE に保存されている値を確認する。V$PARAMETER との差分が「再起動後に反映される変更」
- SCOPE=BOTH:即時 + 永続化(デフォルト)。静的パラメータには SCOPE=SPFILE のみ使用できる
- issys_modifiable=FALSE:静的パラメータ(db_block_size など)。SCOPE=SPFILE で変更して再起動が必要
- CREATE PFILE FROM SPFILE:SPFILE をテキストとして出力してバックアップや確認ができる
メモリ関連パラメータの詳細設定は SGA・PGAメモリ管理完全ガイドを参照してください。