忘れないようにメモ。
起きたこと
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
に接続されました。
なんとか復旧。。。
正常に動くようになった。
初期化パラメータをいじるときは間違えるとやばいと気付かされたので、気をつけます。。。