【Oracle】初期化パラメータ完全ガイド|SPFILE・PFILE の違い・SHOW PARAMETER・ALTER SYSTEM・V$PARAMETER まで解説

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メモリ管理完全ガイドを参照してください。