本コンテンツはORACLE MASTER Gold DBA 2019(Oracle Database AdministrationⅡ)の試験トピックであるOracle Multitenant Architectureに関する内容をご紹介します。今回は「CDBおよびPDBの起動と停止」についての問題を解きながら詳しく解説していきます。

————————————————-

それでは問題文を確認していきましょう。

コンテナ・データベースCDB1のルート・コンテナにSQL*Plusで接続し、以下の結果を確認しました。

SQL> select con_name, state from dba_pdb_saved_states;

CON_NAME             STATE
———————————– ————–
PDB1                OPEN

SQL> show pdbs

CON_ID          CON_NAME                                   OPEN MODE               RESTRICTED
————– ——————————— ———————- ———-
                   2    PDB$SEED                                       READ ONLY               NO
                   3    PDB1                                                  READ WRITE             NO
                   4    PDB2                                                 READ WRITE             NO

このCDB1のルート・コンテナに接続した状態から以下の操作を実行して正常に処理が完了しました。

SQL> shutdown immediate
SQL> startup

現在のデータベースの状態として正しい内容を述べているものを選択してください。

1.    PDB$SEEDはREAD ONLYで、PDB1とPDB2はREAD WRITEの状態となる。
2.    PDB$SEEDはREAD ONLYで、PDB1とPDB2はMOUNTEDの状態となる。
3.    PDB$SEEDはREAD ONLYで、PDB1はREAD WRITE、PDB2はMOUNTED状態になる。
4.    PDB$SEEDも含めて各コンテナすべてMOUNTED状態になる。
5.    PDB$SEEDとPDB2はMOUNTEDで、PDB1のみREAD WRITEとなる。

(解説)

それでは解説していきましょう。今回の問題はコンテナ・データベース全体を再起動した際にプラガブル・データベース(PDB)の状態がどうなるか?という知識を問う内容となります。

従来の非CDBでもCDBであってもデータベースがオープンするまでにはNOMOUNT→MOUNT→OPENといった状態の移行があります。以下の図でコンテナ・データベース(CDB)の起動の流れを確認しておきましょう。

NOMOUNTやMOUNT、OPEN処理でどのような動作が行われるか?という知識はバックアップ・リカバリの操作にも関係してくる重要な内容なのでしっかりおさえておきましょう。

さて、OPEN処理の部分に着目してください。CDBルートはオープンしている状態ですがPDBはMOUNT状態のままとなっています。PDBについてはこのあとさらに個別のオープン処理が必要となってきます。

ALTER PLUGGABLE DATABASE文を用いてPDBのオープン処理が必要です。尚、停止の場合は、CDBルートからCDB全体を停止(SHUTDOWN)すればPDBもすべて停止しますが、PDBを個別で停止することもできます。これまでの説明について、実機での操作ログも載せておくので参考にしてください。

$ sqlplus / as sysdba  ※CDBルートに接続

Connected to an idle instance.  ※CDBは停止中

SQL> startup ※CDBの起動開始
ORACLE instance started.

Total System Global Area 1426060024 bytes
Fixed Size                  9134840 bytes
Variable Size             536870912 bytes
Database Buffers          872415232 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.

SQL> show pdbs

CON_ID         CON_NAME                                    OPEN MODE                 RESTRICTED
————- ——————————— ———————– ———————
                  2 PDB$SEED                                         READ ONLY                NO  ※CDBシードはREAD ONLYでオープン
                  3 PDB1                                                   MOUNTED                                 ※PDB1はMOUNTED
                  4 PDB2                                                  MOUNTED                                 ※PDB2はMOUNTED

SQL> alter pluggable database pdb1 open;  ※PDB1のオープン処理

Pluggable database altered.

SQL> show pdbs

CON_ID         CON_NAME                                    OPEN MODE                 RESTRICTED
————- ——————————— ———————– ———————
                  2 PDB$SEED                                         READ ONLY                NO  
                  3 PDB1                                                   READ WRITE                      
                  4 PDB2                                                  MOUNTED                       

SQL> alter pluggable database pdb1 close immediate;  ※PDB1の(即時)クローズ処理

Pluggable database altered.

SQL> show pdbs

CON_ID  CON_NAME             OPEN MODE    RESTRICTED
————- ——————————— ———————– ———————
                 2 PDB$SEED                                         READ ONLY                NO  
                 3 PDB1                                                   MOUNTED                     
                 4 PDB2                                                  MOUNTED                      

(補足)

ALTER PLUGGABLE DATABASE文のPDB名のところをALLに指定することでCDB内のすべてのPDBに対してオープン、クローズ処理を行うことが可能です。

さて、ここまでが基本動作の確認になりますね。CDB起動後、PDBはデフォルトでMOUNTモードになることが確認できましたが、別途PDBのオープン処理を実施するのは面倒だな、ということであればCDBの起動と連動させてPDBを自動的にオープンさせる設定があります。ALTER PLUGGABLE DATABASEコマンドのSAVE STATEを使用することでPDBのオープン・モードを保持することが可能です。

PDBにSAVE STATEが設定されているかについてはDBA_PDB_SAVED_STATESで確認が可能です。

SAVE STATEの設定方法や確認についての操作ログを次に記載します。

$ sqlplus / as sysdba  ※CDBルートに接続

SQL> show pdbs

CON_ID  CON_NAME             OPEN MODE    RESTRICTED
————- ——————————— ———————– ———————
                2 PDB$SEED                                         READ ONLY                NO  
                3 PDB1                                                    MOUNTED                     
                4 PDB2                                                   MOUNTED         

SQL> select con_name, state from dba_pdb_saved_states;

no rows selected  ※各PDBに対してオープン・モードの設定は無し

SQL> alter pluggable database all open;  ※PDB1、PDB2を起動

Pluggable database altered.

SQL> show pdbs

CON_ID  CON_NAME             OPEN MODE    RESTRICTED
————- ——————————— ———————– ———————
                2 PDB$SEED                                       READ ONLY                  NO  
                3 PDB1                                                  READ WRITE                NO                     
                4 PDB2                                                 READ WRITE                NO         

SQL> alter pluggable database pdb1 save state;  ※PDB1の現状のオープン・モードを保持

Pluggable database altered.

SQL> select con_name, state from dba_pdb_saved_states;

CON_NAME                     STATE
———————– ————–
PDB1                              OPEN     ※PDB1に対してオープン・モード保持の設定有り


SQL> shutdown immediate

SQL> startup  ※CDBの起動

SQL> show pdbs

CON_ID  CON_NAME             OPEN MODE    RESTRICTED
————- ——————————— ———————– ———————
                2 PDB$SEED                                         READ ONLY                NO  
                3 PDB1                                                    READ WRITE              NO ※SAVE STATEで設定したPDB1は自動起動       
                4 PDB2                                                   MOUNTED                         

こちらの操作ログの内容は、今回ご紹介した問題の正しい選択肢を選ぶために重要な内容が含まれているのでしっかりと確認しておきましょう。また皆さんも是非実機で操作してみてください。

1つ注意点を補足しておきましょう。このSAVE STATE句はあくまで「PDBのオープン・モードを保持する」という機能であることを理解してください。つまりPDBがMOUNTEDの状態でSAVE STATE句を実行しても、CDB起動時にPDBが自動起動してくるわけではありません。PDBのオープン・モードが「READ WRITE」の状態のときにSAVE STATEを設定することで、次回CDB起動時に(READ WRITEの状態を保持しているということで)PDBが自動的にオープンされます。設定を破棄する場合はDISCARD STATE句を使用しますので合わせて覚えておきましょう。

ここまで確認ができましたら問題の正解を選ぶことができます。各選択肢を見ていきましょう。

選択肢1は誤りです。前半部分の「PDB$SEEDはREAD ONLY」は正しいですが、PDB2はREAD WRITEにはなりません。dba_pdb_saved_statesビューでREAD WRITEのSAVE STATEが有効になっているのはPDB1のみです。

選択肢2も前半部分の「PDB$SEEDはREAD ONLY」は正しいですが、後半の「PDB1とPDB2はMOUNTEDの状態となる」が誤りですね。

選択肢3は正しい選択肢になります。前半の「PDB$SEEDはREAD ONLY」も正しいですし、PDB1はSAVE STATEの機能によりREAD WRITEになり、PDB2はMOUNTEDになりますね。

選択肢4は誤りです。各コンテナすべてMOUNTED状態になるというわけではありません。

選択肢5も誤りです。「コンテナ・データベース(CDB)のオープン」の図を確認してください。PDB$SEED(CDBシード)はREAD ONLYになります。

以上を踏まえまして正解は 3 になります。

今回はコンテナ・データベース(CDB)の起動・停止に関する内容について紹介しました。従来の非CDB環境でのオープン処理に加えてプラガブル・データベース(PDB)のオープン処理がありますので、実機操作を通して動作に慣れておくといいでしょう。またDB起動の各ステップでどのような処理が行われているのかを正しく理解しておくと、万が一、データベースに何らかの障害あった際にどのような資源に問題があるか、リカバリ処理は何が必要か、といった知識にもつながりますので正しく理解しておきましょう。

今回の講義はこれまでとします。お疲れ様でした。

————————————————-

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University 講師による ORACLE MASTER Silver SQL 2019 試験トピック解説講座】-トピック一覧-

————————————————-