前回のおさらい

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

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

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

CDB/PDBの起動停止

CDBの起動停止方法は従来のデータベースと同じですが、PDBは独自のコマンドにより起動停止を行うことも可能です。

また、CDBが起動した状態であれば、特定のPDBのみを停止することが可能ですので、メンテナンスが必要な際の影響を少なくすることが出来ます。

マルチテナント構成で、2つのPDBが存在

PDB1 TEST122PDB
PDB2 TEST122PDB2

CDBの起動

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
データベースがマウントされました。
データベースがオープンされました。
SQL>
SQL>
SQL>
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL>
SQL> select instance_name, status from v$instance;

INSTANCE_NAME
------------------------------------------------
STATUS
------------------------------------
test122cdb
OPEN

従来型と同様、CDBに接続して startup を実行します。

CDBの停止

SQL>
SQL> shutdown immediate;

データベースがクローズされました。

データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>
SQL>
SQL> show con_name
ERROR:
ORA-01034: ORACLE not available
プロセスID: 0
セッションID: 0、シリアル番号: 0


SP2-1545: この機能にはデータベースの可用性が必要です。

従来型と同様、CDBに接続して shutdown を実行します。
CDBの起動停止はこれまでと変わらないです!

では、続いてPDBの手順です。

PDBの起動

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

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

 

まずは、オーソドックスにCDBから全PDB一斉起動方法をご紹介します。
コマンドはCDBに接続した状態で実行します。

TEST122PDB、TEST122PDB2 共に 「 MOUNTED 」 状態です。

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

 

ここで起動コマンドを一発!

SQL> alter pluggable database all open;

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

 

TEST122PDB、TEST122PDB2 共に 「 READ WRITE (=OPEN)」 状態となりました。

SQL> show pdbs								
								
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED								
---------- ------------------------------ ---------- ----------								
         2 PDB$SEED                       READ ONLY  NO								
         3 TEST122PDB                     READ WRITE NO								
         4 TEST122PDB2                    READ WRITE NO

 

では、次に指定したPDBのみ起動させる手順をご紹介します。

SQL> show pdbs

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

 

先ほどのコマンドで all の場所をPDB名に置き換えて実行します。

SQL> alter pluggable database TEST122PDB open;

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

 

指定したPDBのみ起動に成功しました。

SQL> show pdbs

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

他には、カンマ区切りで複数のPDB起動を制御できたり、except オプションを指定することで特定のPDBを除いてPDBを起動することができます。

 

複数PDB起動例

SQL> alter pluggable database TEST122PDB, TEST122PDB2 open;	
	
プラガブル・データベースが変更されました。

 

特定のPDBを除いたPDB起動例

SQL> alter pluggable database all except TEST122PDB2 open;	
	
プラガブル・データベースが変更されました。

 

上記まではCDBに接続した状態でのPDB起動でしたが、PDBに接続した状態でもPDBを起動できます。
コマンドは特定のPDBに接続した状態で「 alter database open 」 実行です。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 TEST122PDB                     MOUNTED
SQL>
SQL> alter database open;

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

SQL>
SQL> show pdbs

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

 

はい!見事、起動できましたね。
続いて、PDBの停止ですが、基本的に起動とパターンが同じですので、一部説明を割愛しながらご紹介します。

PDBの停止

まず、CDBから全PDB一斉停止方法となります。
コマンドはCDBに接続した状態で実行します。

TEST122PDB、TEST122PDB2 共に 「 READ WRITE (=OPEN)」 状態で、下記コマンド実行となります。

SQL> alter pluggable database all close immediate;			
			
プラガブル・データベースが変更されました。			
			
SQL> show pdbs			
			
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED			
---------- ------------------------------ ---------- ----------			
         2 PDB$SEED                       READ ONLY  NO			
         3 TEST122PDB                     MOUNTED			
         4 TEST122PDB2                    MOUNTED

見事、全PDB停止できました。
コマンドは shutdown ではなく close となっているところに注意ですね!

次に指定したPDBのみ停止させる手順です。

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

 

先ほどのコマンドで all のところをPDB名に置き換えて実行します。

SQL>
SQL>
SQL> alter pluggable database TEST122PDB close immediate;

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

SQL>
SQL> show pdbs

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

指定したPDBのみ停止に成功しました。

起動の時と同様に、カンマ区切りで複数のPDB停止を制御できたり、except オプションにより特定のPDBを除いてPDBを停止することができます。

 

複数PDB停止例

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     READ WRITE NO
         4 TEST122PDB2                    READ WRITE NO
SQL>
SQL> alter pluggable database TEST122PDB, TEST122PDB2 close immediate;

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

 

特定のPDBを除いたPDB停止例

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST122PDB                     READ WRITE NO
         4 TEST122PDB2                    READ WRITE NO
SQL>
SQL>
SQL> alter pluggable database all except TEST122PDB2 close immediate;

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

 

次にPDBに接続した状態でのPDB停止方法です。

コマンドは特定のPDBに接続した状態で「 shutdown immediate 」 実行となります。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 TEST122PDB                     READ WRITE NO
SQL>
SQL> shutdown immediate;
プラガブル・データベースがクローズされました。
SQL>
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 TEST122PDB                     MOUNTED

はい!見事、停止できましたね。

起動/停止の確認については

CDB select instance_name,status from v$instance;
PDB show pdbs
select con_id,name,open_mode from v$pdbs;

などで確認を行ってください。

それではCDB/PDBの起動停止は以上です。

そして、次回は、PDBの自動起動です!
乞うご期待!!!

投稿者プロフィール

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