前回のおさらい

こんにちは。プラチナホルダー浜辺です。
前回はCDB/PDBの起動停止をお伝えしました。

本ビジネスブログの右側の「最新の投稿」の下にある
カテゴリー > [連載]マルチテナント
から確認できます。

こちらに更新していきますので、宜しくお願いします。

PDBの自動起動

前回、下記紹介したことを覚えていらっしゃいますか?

【PDBの起動】

まず、PDBに関して、デフォルトの場合、CDBが起動した状態ではMOUNT状態で起動しています。
インスタンス、制御ファイルはCDB管理であるため、PDBがSHUTDOWN状態ではなく、MOUNT状態というのは頷けますね。

「覚えてまーす」という人、ありがとうございます。

「え?そんなこと書いてあった?」という人、データベースを運用する上で大切なことですので、これを機に覚えていただければ幸いです。

 

CDBを起動しただけでは、PDBはMOUNT状態となっており、データファイルにアクセスできません。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     MOUNTED
         4 TEST122PDB2                    MOUNTED

 

試しにPDBに接続して、ユーザ表にアクセスしてみます。

SQL> alter session set container=TEST122PDB;

セッションが変更されました。

SQL> select * from test_tab;
select * from test_tab
              *
行1でエラーが発生しました。:
ORA-01219: データベースまたはプラガブル・データベースがオープンしていません:
固定の表またはビューに対する問合せのみ可能です

想定どおり、アクセス出来ません。
MOUNT状態なので当然の結果ですね!

では、前回の復習も兼ねて、PDBを起動させてユーザ表にアクセスしてみましょう。

SQL> alter database open;

データベースが変更されました。

SQL>
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 TEST122PDB                     READ WRITE NO

PDBがOPENできました!

 

SQL> select * from test_tab;

COL1                                 COL2
------------------------------ ----------
data1

PDBがOPEN状態であれば、勿論ユーザ表にアクセスできます。

でも、CDBを起動する度に、PDBを起動するのは手間ですよね?

ご安心ください。PDBも自動起動設定できます。

自動起動の設定方法はDatabaseのバージョンが12.1.0.1と12.1.0.2以降で異なりますが、今回は改善された12.1.0.2以降の方法をご紹介させていただきます。

PDB 自動起動設定

CDBを起動した状態から始めます。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     MOUNTED
         4 TEST122PDB2                    MOUNTED

 

まず、自動起動させたいPDBを起動させます。

SQL> alter pluggable database TEST122PDB open;

プラガブル・データベースが変更されました。

 

PDB「TEST122PDB」が起動しました。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     READ WRITE NO
         4 TEST122PDB2                    MOUNTED

 

次に下記のコマンドを実行し、自動起動となるように設定します。

SQL> alter pluggable database all save state;

プラガブル・データベースが変更されました。

 

これで次回からPDB「TEST122PDB」はCDB起動時に自動で起動します。
試しにCDBを再起動してみましょう。

SQL> shutdown immediate;
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 3539992576 bytes
Fixed Size                  8798840 bytes
Variable Size             822087048 bytes
Database Buffers         2701131776 bytes
Redo Buffers                7974912 bytes
データベースがマウントされました。
データベースがオープンされました。

 

はい!見事、自動起動設定を行ったPDB「TEST122PDB」のみ起動しています。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     READ WRITE NO
         4 TEST122PDB2                    MOUNTED

 

このような形で自動起動の設定を行いますが、1点注意事項があります。

「 alter pluggable database all save state; 」のコマンドに関して、現在のPDB起動状態をセーブするコマンドなので自動起動させたいPDBが停止している状態で実行しても、自動起動とならないので注意してくださいね!

PDB「TEST122PDB2」が自動起動されてないのは、PDBが停止した状態で「 alter pluggable database all save state; 」のコマンドを実行したからです!

以上で、PDBの自動起動の紹介は終わりです。
いかがでしたでしょうか?

個人的にはPDBの自動起動の設定が容易に行えて便利だと感じました!

 

次回は、いよいよPDBの作成方法をご紹介します。
乞うご期待!!!

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!