Oracleデータベース 初期化パラメータ設定に失敗したので復元してみた


忘れないようにメモ。

起きたこと

sqlplusから初期化パラメータを間違って設定したのに気づかず、勢いでshutdown をしたら二度と起動しなくなった。
初期化パラメータを直してくれないと起動しないよ!と言われてるみたいだったので、なんとかした

環境

  • Oracle Cloud
  • Oracle Linux 7.8
    • ホスト名:odgb
  • Oracle Database 19c (DBCS)
    • ユニーク名:odgb_nrt1ws
    • CDB:odgb

用語のメモ

  • pfile...初期化パラメータファイル。テキストエディタで編集が可能。事故ったときにspfileから変換して作成する。現在のデータベースで、直接使うことは少なくなったらしいが、pfileを直指定して起動もできる。
  • spfile...サーバーパラメータファイル。「alter」文で編集が可能。データベース起動時に毎回このファイルを読み込む。テキストエディタで直接修正することはできない。

やったこと

  • データベースのユニーク名確認
  • $ sudo su - oracle
    $ ls /u01/app/oracle/diag/rdbms/
    odgb_nrt1ws
    
  • spfileを確認

  • $ sudo su - grid
    $ asmcmd ls -l +DATA/odgb_nrt1ws/PARAMETERFILE/
    Type           Redund  Striped  Time             Sys  Name
    PARAMETERFILE  UNPROT  COARSE   OCT 03 16:00:00  Y    spfile.286.1048251613
    
  • spfileを手元にコピー

  • $ sudo su - grid
    $ asmcmd cp +DATA/ODGB_NRT1WS/PARAMETERFILE/spfile.286.1048251613 /tmp
    copying +DATA/ODGB_NRT1WS/PARAMETERFILE/spfile.286.1048251613 -> /tmp/spfile.286.1048251613
    
  • pfile作成

  • $ sudo su - oracle
    $ sqlplus / as sydba
    sql> create pfile='/tmp/tmp.pfile' from spfile='/tmp/spfile.286.1048251613';
    File created.
     
    sql> exit
    $ ls -l /tmp
    -rw-r--r-- 1 oracle asmadmin 3705 Oct  3 16:35 tmp.pfile
    
  • pfile編集
    初期化パラメータ設定の時に間違えて設定したものをvimで編集していく
    編集するときは以下のサイトの「記載内容の優先度」の内容に注意する
    「*.」が付いていないものはいったん削除した。
    https://techlab.sixsquare.co.jp/archives/158

 今回失敗した「sga_max_size」の値もしっかりと修正
「sga_target」も変わってたので、とりあえず修正

$ vim /tmp/tmp.pfile
~
*.sga_max_size=20401094656
*.sga_target=14495514624
~
⬇︎
~
*.sga_max_size=6G
*.sga_target=3G
~
  • 作った「pfile」でデータベース作成
    修正値を間違えた。エラー内容と同じように修正
$ sudo su - oracle
$ sqlplus / as sysdba
sql> startup mount pfile='/tmp/tmp.pfile';
ORA-00821: Specified value of sga_target 3072M is too small, needs to be at least 4656M
ORA-01078: システム・パラメータの処理に失敗しました

修正後、今度はちゃんと起動。。

SQL> startup mount pfile='/tmp/tmp.pfile';
ORACLEインスタンスが起動しました。

Total System Global Area 6442449872 bytes
Fixed Size                  9149392 bytes
Variable Size            4848615424 bytes
Database Buffers         1560281088 bytes
Redo Buffers               24403968 bytes
データベースがマウントされました。
SQL> 
  • 作り直した「pfile」から「spfile」を作成
    作ったら一旦データベースを停止させる
sql> create spfile='+DATA' from pfile='/tmp/tmp.pfile';

ファイルが作成されました。
sql> shutdown  

データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
  • 新しい「spfile」を確認する
    1つ増えてるのがわかる
$ sudo su - grid
$ asmcmd ls -l +DATA/ODGB_NRT1WS/PARAMETERFILE/
Type           Redund  Striped  Time             Sys  Name
PARAMETERFILE  UNPROT  COARSE   OCT 03 17:00:00  Y    spfile.285.1052845549
PARAMETERFILE  UNPROT  COARSE   OCT 03 16:00:00  Y    spfile.286.1048251613
  • 新しい「spfile」でデータベースを起動
$ sudo su - oracle
$ srvctl modify database -db odgb_nrt1ws -spfile +DATA/odgb_nrt1ws/PARAMETERFILE/spfile.285.1052845549
$ srvctl start database -db odgb_nrt1ws
$ srvctl status database -db odgb_nrt1ws
 Instance odgb is running on node odgb
$ sqlplus / as sysdba

racle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0
に接続されました。

なんとか復旧。。。

正常に動くようになった。

初期化パラメータをいじるときは間違えるとやばいと気付かされたので、気をつけます。。。