PDBの Save State と Disable /Enable

## はじめに
CDB構成におけるPDBはデフォルトでは、CLOSE状態です。Alter Pluggable Database コマンドなどで OPEN状態にし、CDBが再起動された際に自動的にPDBまでOPENさせたい場合などでは SAVE STATE などで状態を維持する事ができます。
![Q12-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/244810f1-710d-04cf-e02a-524b9c6f5958.png)
ただ、これはシングル・インスタンスの場合であり、21c以降のRAC環境においては違います。21cにおいてPDBは GI (Clusterware) の1リソースとして管理される事になった事に起因します。
RAC環境で再起動時に特定のPDBをCLOSE状態の維持をする場合は、クラスタリソースとして登録されたPDBのプロパティを変更する事で可能になります。
![Q12-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/abd406e6-57be-db70-f733-beb3209ee60d.png)
ただし、このような状態は推奨されませんのでご注意下さい。
## RAC環境で再起動時のPDBについて確認
- srvctlコマンドでRACの稼働状況を確認します
```
[oracle@node01 ~]$ srvctl status pdb -db orcl23ai -pdb ORCL23AIPDB1
プラガブル・データベースORCL23AIPDB1は有効です。
データベースorcl23aiのプラガブル・データベースORCL23AIPDB1は、ノード: node01,node02で実行中です
```
(node01から sys で接続)
```
SQL> show pdbs
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL23AIPDB1                   READ WRITE NO
```
- node01で 対象のPDBをCLOSEしてSAVE STATE を試します
```
SQL> alter pluggable database ORCL23AIPDB1 close;
プラガブル・データベースが変更されました。
 
経過: 00:00:09.45
SQL> show pdbs
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL23AIPDB1                   MOUNTED
SQL> alter pluggable database ORCL23AIPDB1 save state;
プラガブル・データベースが変更されました。
```
```
[oracle@node01 ~]$ srvctl status pdb -db orcl23ai -pdb ORCL23AIPDB1
プラガブル・データベースORCL23AIPDB1は有効です。
データベースorcl23aiのプラガブル・データベースORCL23AIPDB1は、ノード: node02で実行中です
```
node01では停止した状態で Save State しました。
- CDBを再起動します
```
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 4946727280 bytes
Fixed Size                  5370224 bytes
Variable Size            3019898880 bytes
Database Buffers         1912602624 bytes
Redo Buffers                8855552 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show pdbs
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL23AIPDB1                   READ WRITE NO
```
```
[oracle@node01 ~]$ srvctl status pdb -db orcl23ai -pdb ORCL23AIPDB1
プラガブル・データベースORCL23AIPDB1は有効です。
データベースorcl23aiのプラガブル・データベースORCL23AIPDB1は、ノード: node01,node02で実行中です
```
node01および node02 でOPENされた事が確認されます。(Save State が無効)
## クラスタ・リソースPDB のプロパティを変更する
- Srvctl -help よりシンタックスを確認
使用方法: srvctl enable pdb -db <db_unique_name> -pdb <pluggable_database> [-node <node_name>]
使用方法: srvctl disable pdb -db <db_unique_name> -pdb <pluggable_database> [-node <node_name>]
- node1で起動されないように srvctl disable pdb します
```
[oracle@node01 ~]$srvctl disable pdb -db orcl23ai -pdb ORCL23AIPDB1  -node node01
[oracle@node01 ~]$ srvctl status pdb -db orcl23ai -pdb ORCL23AIPDB1
プラガブル・データベースORCL23AIPDB1は有効です。
データベースorcl23aiのプラガブル・データベースORCL23AIPDB1は、ノード: node02で実行中です
```
- リブート後、node1で起動されない事を確認
(node01から sys で接続)
```
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 4946727280 bytes
Fixed Size                  5370224 bytes
Variable Size            3019898880 bytes
Database Buffers         1912602624 bytes
Redo Buffers                8855552 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL23AIPDB1                   MOUNTED
```
disable 設定が機能しています。
- 元の状態に戻す
```
[oracle@node01 ~]srvctl enable pdb -db orcl23ai -pdb ORCL23AIPDB1  -node node01
```
```
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL23AIPDB1                   MOUNTED
```
※	Enable だけでは OPENされないことに注意
```
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 4946727280 bytes
Fixed Size                  5370224 bytes
Variable Size            3019898880 bytes
Database Buffers         1912602624 bytes
Redo Buffers                8855552 bytes
データベースがマウントされました。
データベースがオープンされました。
```
```
[oracle@node01 ~]$ srvctl status pdb -db orcl23ai -pdb ORCL23AIPDB1
プラガブル・データベースORCL23AIPDB1は有効です。
データベースorcl23aiのプラガブル・データベースORCL23AIPDB1は、ノード: node01,node02で実行中です
```
## 最後に
Oracle Database 21cからの仕様変更により PDBは GI – Clusterware のリソースとして登録・管理され、よりCDBからの分離性が高まっています。これにより有益な面が増える半面、19cまでの設定や運用が変更を求められるケースや、その変更やリスクに気付けずにトラブルを引き起こす事もあるかも知れません。
推奨されない運用形態だとはされていますが、このようなケースでも可能な範囲で拾っていきたいと思います。