SPFILEのリカバリを試す (Oracle Database 19c)

SPFILEを削除してしまった場合にRMANからリストアする手順を確認しました。

# ダミー・インスタンス起動
初期化パラメーターが失われるとインスタンス起動ができなくなります。Recovery Manager (RMAN)を使ってリカバリ処理を行うために接続するインスタンスが必要です。このためダミーのインスタンスを起動し、SPFILEをリストアします。
ダミーのインスタンスはいくつかの初期化パラメーターを指定して初期化パラメーター・ファイルを作成します。

```
$ vi $ORACLE_HOME/dbs/initO19A.ora
db_name=<db_name>
large_pool_size=100m
shared_pool_size=250m
db_cache_size=100m
```
もう一つの方法として環境変数ORA_RMAN_SGA_TARGETにSGAとして確保するメモリー・サイズを指定します。ここでは環境変数を指定してインスタンスを起動します。RMANからFORCEとNOMOUNTオプションを指定してインスタンスを起動します。

```
$ export ORA_RMAN_SGA_TARGET=500M
$ export ORACLE_SID=O19A
$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on 金 12月 25 17:50:45 2020
Version 19.8.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベースに接続しました(起動していません)。

RMAN> STARTUP FORCE NOMOUNT

起動に失敗しました: ORA-01078: failure in processing system parameters
LRM-00109: ??????????????????????????????'/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initO19A.ora'?????????????????????????????????

SPFILE取得用のパラメータ・ファイルのないOracleインスタンスを起動しています
Oracleインスタンスが起動しました

システム・グローバル領域の合計は、    524285856バイトです。

Fixed Size                     8898464バイト
Variable Size                188743680バイト
Database Buffers             318767104バイト
Redo Buffers                   7876608バイト

RMAN> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME IN ('sga_target');

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
sga_target
524288000                                                                       
```

「起動に失敗しました: ORA-01078: failure in processing system parameters」というメッセージが出力されますが、実際には起動されています。

# リストア
以前にバックアップを出力したバックアップ・ファイルをFROM句に指定してRESTORE SPFILEコマンドを実行します。この際、TO句を指定しなかった場合、デフォルト位置にリストアされます。初期化パラメーターSPFILEを指定していた場合、リストア位置は初期化パラメーターで指定されたパスに出力されます。

```
RMAN> RESTORE SPFILE FROM '/u01/app/oracle/admin/O19A/backup/rman_O19A_20201225_5nvivjtr_1_1.bkp';

restoreを20-12-25で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK

チャネルORA_DISK_1: 自動バックアップ/u01/app/oracle/admin/O19A/backup/rman_O19A_20201225_5nvivjtr_1_1.bkpからSPFILEをリストアしています
チャネルORA_DISK_1: 自動バックアップからのSPFILEのリストアが完了しました
restoreを20-12-25で終了しました

RMAN> SHUTDOWN ABORT

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
Oracleインスタンスがシャットダウンしました

RMAN> exit

Recovery Managerが完了しました。
$
```

# 注意
使用中のSPFILEを上書きするようなRESTOREコマンドは失敗します。

```
RMAN> RESTORE SPFILE FROM '/u01/app/oracle/admin/O19A/backup/rman_O19A_20201225_5nvivjtr_1_1.bkp';

restoreを20-12-25で開始しています
チャネルORA_DISK_1の使用

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restoreコマンドが12/25/2020 15:40:10で失敗しました
RMAN-06564: インスタンスがSPFILEで起動されている場合は、TO句を使用する必要があります

RMAN> exit

Recovery Managerが完了しました。
$
```

別のパスにリストアする場合はTO句を指定します。

```
RMAN> RESTORE SPFILE TO '/tmp/spfileO19A.ora' FROM '/u01/app/oracle/admin/O19A/backup/rman_O19A_20201225_5nvivjtr_1_1.bkp';

restoreを20-12-25で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK

チャネルORA_DISK_1: 自動バックアップ/u01/app/oracle/admin/O19A/backup/rman_O19A_20201225_5nvivjtr_1_1.bkpからSPFILEをリストアしています
チャネルORA_DISK_1: 自動バックアップからのSPFILEのリストアが完了しました
restoreを20-12-25で終了しました

RMAN>
```