Oracle Databaseを運用していると、メモリ関連の初期化パラメータを変更する場面があります。なかでも MEMORY_MAX_TARGET の設定を誤ってしまうと、次回起動時にインスタンスが起動しなくなることがあります。
本記事では、実際の操作例を交えて、MEMORY_MAX_TARGET の設定ミスによって起動できなくなった場合の復旧手順を丁寧に解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 発生したエラーと原因
以下のような操作を行ったとします。
SQL> alter system set memory_max_target=1G scope=spfile;
SQL> shutdown immediate;
SQL> startup;
起動時に以下のエラーが発生:
ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET
ORA-01078: システム・パラメータの処理に失敗しました
SQL> show parameter memory_max_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_max_target big integer 1472M
SQL> show parameter memory_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_target big integer 1472M
SQL> alter system set memory_max_target=1G scope=spfile; ★小さい値に変更
システムが変更されました。
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET ★起動しない
ORA-01078: システム・パラメータの処理に失敗しました
✅ 原因:
MEMORY_TARGETの値が 1472MMEMORY_MAX_TARGETを 1G に設定してしまった
つまり、MEMORY_TARGET > MEMORY_MAX_TARGET という不正な状態になっていたため、Oracleが起動を拒否しました。
2. 問題構成の図解(テキスト)
+----------------------------------------+
| memory_target = 1472M |
| memory_max_target = 1G |
+----------------------------------------+
↓ startup 実行
+------------------------------------------------------+
| ORA-00837: MEMORY_TARGET が MEMORY_MAX_TARGET より大きい |
+------------------------------------------------------+
3. 復旧手順(SPFILE使用時)
Oracleが spfile を使用している場合、初期化パラメータを直接変更できないため、一時的に pfile を使って起動し直し、修正した上で spfile を再作成する必要があります。
手順①:PFILEの作成
まず spfile から pfile を作成します。
SQL> create pfile from spfile;
※PFILE は $ORACLE_HOME/dbs/init<SID>.ora という名前で作成される
手順②:作成したPFILEを修正
init.ora をテキストエディタで開きます(例:viなど)
*.memory_target=1472M
*.memory_max_target=1G
このうち memory_max_target を 1472M以上 に修正します(例:1472Mまたはそれ以上に統一)
*.memory_target=1472M
*.memory_max_target=1472M
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
手順③:修正したPFILEで起動
SQL> startup pfile='$ORACLE_HOME/dbs/initv19.ora';
→ 問題が解消され、正常にインスタンスが起動すればOKです。
手順④:SPFILEを再作成
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initv19.ora';
これで修正済みの spfile が作成され、次回以降の起動も正常に行えます。
SQL> create pfile from spfile; ★PFILE作成
File created.
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
[oracle@v19single ~]$ ll $ORACLE_HOME/dbs
total 24
-rw-rw----. 1 oracle oinstall 1544 Jun 28 18:58 hc_v19.dat
-rw-r--r--. 1 oracle oinstall 3079 May 14 2015 init.ora
-rw-r--r--. 1 oracle oinstall 964 Jun 28 18:59 initv19.ora ★PFILEが作成されている
-rw-r-----. 1 oracle oinstall 24 Nov 26 2023 lkV19
-rw-r-----. 1 oracle oinstall 2048 Nov 26 2023 orapwv19
-rw-r-----. 1 oracle oinstall 2560 Jun 28 18:58 spfilev19.ora
[oracle@v19single ~]$ cat $ORACLE_HOME/dbs/initv19.ora | grep memory
v19.__inmemory_ext_roarea=0
v19.__inmemory_ext_rwarea=0
*.memory_max_target=1073741824 ★1G
*.memory_target=1457m
[oracle@v19single ~]$ vi $ORACLE_HOME/dbs/initv19.ora
[oracle@v19single ~]$ cat $ORACLE_HOME/dbs/initv19.ora | grep memory
v19.__inmemory_ext_roarea=0
v19.__inmemory_ext_rwarea=0
*.memory_max_target=1457m ★修正
*.memory_target=1457m
[oracle@v19single ~]$ vi $ORACLE_HOME/dbs/initv19.ora
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 土 6月 28 19:00:49 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup pfile='$ORACLE_HOME/dbs/initv19.ora' ★PFILE を使用して起動
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN ★起動できる
SQL> set lin 1000
SQL> show parameter memory_max_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_max_target big integer 1472M
SQL> show parameter memory_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_target big integer 1472M
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initv19.ora'; ★PFILE から SPFILE を作成
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN ★起動した
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
spfile string /u01/app/oracle/product/19.0.0
/dbhome_1/dbs/spfilev19.ora
4. 起動確認(SHOW PARAMETER)
正常に起動した後、現在のメモリ設定を確認しましょう。
SQL> show parameter memory_max_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_max_target big integer 1472M
SQL> show parameter memory_target
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
memory_target big integer 1472M
両方の値が揃っていれば、問題なしです。
5. まとめ
| 項目 | 内容 |
|---|---|
| 発生エラー | ORA-00837 |
| 原因 | MEMORY_TARGET > MEMORY_MAX_TARGET |
| 対処方法 | PFILE起動 → パラメータ修正 → SPFILE再作成 |
| 重要ポイント | MEMORY_MAX_TARGET は MEMORY_TARGET 以上に設定する必要あり |
✅ ワンポイントアドバイス
alter system set memory_max_targetを変更する際は、memory_targetよりも大きな値を指定する必要がある。- 逆に
memory_targetを変更したい場合は、memory_max_targetの設定も併せて見直すのが安全です。 scope=spfileを指定したあとに shutdown immediate → startup する運用では、特に注意しましょう。




コメント