spfileを変更したら接続できなくなった

オペレーティング認証、conn / as sysdbaができない状態だったので、Oracleデータベース管理の教科書を参考に初期化パラメータを変更したら、connで接続できないし、startupもできない状態になってしまった。

元に戻す方法をメモしておいた。 

 

■初期化パラメータを変更した

初期化パラメータファイルのREMOTE_LOGIN_PASSWORDFILEパラメータを確認した。

SQL> show parameter remote_login_passwordfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE

 

VALUEをEXCLUSIVEからNONEに変更してみた。

SQL> alter system set remote_login_passwordfile=none scope=spfile;

EXCLUSIVE: GRANT文を使用して、SYS以外のユーザーをパスワードファイルに追加できる。

SHARED: 複数のインスタンスがアクセスできるパスワードファイルを使用できる。SYSユーザだけパスワードファイルに追加できる。

NONE: パスワード・ファイルを無視する。特権ユーザはOSによって認証される必要がある。

 

 

そして、再起動するために一度、シャットダウンした。

SQL> shutdown immediate

 

■そしたら、ひどいことになった

SQL*Plusを一度終了し、再度接続してみたところ、エラーが発生した。

SQL> conn sys as sysdba
Enter password:
Connected to an idle instance.

SQL> startup
ORA-01031: insufficient privileges 

 

 

■元に戻す

Oracleのサポセンに電話して、元に戻す方法を教えてもらった。

spfileの運用から、pfileでの運用に切り換える。

 

ます、spfileを作る。SQL*Plusで作業する。

SQL> conn sys as sysdba

SQL> create pfile from spfile;

File created.

 

spfileを捨てる。spfile + SID名 + .ora というファイル名をリネームすればよい。

$ cd $ORACLE_HOME/dbs
$ mv spfileorcl.ora spfileorcl.ora.OLD

 

 

initorcl.oraを書き換える。init + SID名 + .ora というファイルを編集して、今回変更した初期化パラメータを元に戻す。

変更前
*.remote_login_passwordfile='NONE'

変更後
*.remote_login_passwordfile='EXCLUSIVE' 

  

startupもできるようになった。めでたし。 

SQL> startup
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size 2466304 bytes
Variable Size 395861504 bytes
Database Buffers 1207959552 bytes
Redo Buffers 4325376 bytes
Database mounted.
Database opened. 

 

■pfile運用からspfile運用に戻す

SPFILE運用に戻したければ、spfileをもう一度作り直す。

SQL> create spfile from pfile;