Help us understand the problem. What is going on with this article?

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

忘れないようにメモ。

起きたこと

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

環境

  • 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
に接続されました。

なんとか復旧。。。

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away