ORA-12514やORA-12516の記事でも書きましたが、DBのインスタンス起動時に表題のORA-00838エラーが発生するようになってしまいました。 今日はその原因と解消方法について書きます。
原因:初期化パラメータの値を変更したこと
前回『ORA-12516:リスナーは、一致するプロトコル・スタックが使用可能なハンドラを検出できませんでした。』というエラーが起きた時に、今後エラーが起きないようにするため、初期化パラメータPROCESSES(最大ユーザープロセス数)の値を変更しました。
変更時には以下のSQL文を実行しました。
alter system set processes=500 scope = spfile;
上記のSQL文は最大ユーザープロセス数を500に変更するものです。
元々のPROCESSESの値は50だったので、10倍に増やしたことになります。
本来、この初期化パラメータ変更時に合わせて他のパラメータも変更しなければならなかったようですが、
それを行わなかったためORA-00838エラーが発生してしまったようです。
10倍に増やしたことで必要なメモリが増えたということでしょうか、何にせよ安易に変更するんじゃなかった…
調べてみたらこういう場合はパラメータ・ファイル(pfile)から起動すれば良いとのこと。
pfileを使って起動してみる
pfileで起動するために、まずは現在の初期化パラメータに基づいたpfileを作成します。 pfileを作成するためのSQL文は以下の通り。
create pfile='C:/Database/initorcl.ora' from spfile='C:/Oracle/Administrator/product/12.1.0/dbhome_1/database/SPFILETESTDB.ORA';
spfileはサーバー・パラメータ・ファイルというものです。 こちらも初期化パラメータを設定するファイルですが、DBで管理しているようです。(pfileは管理していない)
上記のSQL文を実行することで、指定したフォルダにinitorcl.oraというファイルが作成されます。 そのままpfileを使って起動してもMEMORY_TARGETは小さいままですので、エディタでpfileを開き以下のように修正しました。
*.processes=500 -> 250
*.memory_target=512m -> 1024m
修正後、インスタンスを起動したところ…
SQL> connect / as sysdba アイドル・インスタンスに接続しました。 SQL> startup pfile='C:/Database/initorcl.ora' ORACLEインスタンスが起動しました。 Total System Global Area 1073741824 bytes Fixed Size 3053880 bytes Variable Size 805308104 bytes Database Buffers 260046848 bytes Redo Buffers 5332992 bytes データベースがマウントされました。 データベースがオープンされました。 SQL>
無事起動できました。
最後にpfileからspfileを再作成する
そのままではpfileの内容のみ変わっていてspfileはエラーの出る内容のままになっています。 そうなると、また再起動時にエラーが起こることになってしまうので、修正したpfileを基にspfileを作成します。 pfileからspfileを作成するSQL文は以下の通り。
SQL> create spfile='C:\Oracle\Administrator\product\12.1.0\dbhome_1\database/spfiletestdb.ora' from pfile='C:/Database/initorcl.ora'; ファイルが作成されました。
spfileの名前はspfile[インスタンス名].oraになるように指定してください。 基本的には既にspfileが存在するはずなので同名を記述すればOKです。 spfileの書き換えが済んだところでもう一度確認の為にSQL*Plus上から再起動をかけてみます。
SQL> shutdown データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 1073741824 bytes Fixed Size 3053880 bytes Variable Size 805308104 bytes Database Buffers 260046848 bytes Redo Buffers 5332992 bytes データベースがマウントされました。 データベースがオープンされました。 SQL>
良かった、spfile経由でも無事起動できました。
初期化パラメータ関係で起動しなくなった場合はこの方法で対処できそうです。