Oracle CDB、PDBの操作

Oracle12c以降はCDB（グローバルデータベース）、PDB（プラガブル・データベース）の概念が追加となった。
CDB、PDBの操作を試した操作ログの内容を紹介します。

### CDB、PDBのデータベース名
コンテナ|データベース名
---|----
CDB|ORCL
PDB|ORCLPDB

### 1. CDBへ接続（OS認証）
```sql
C:\app\oracle>sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on 月 9月 16 13:59:40 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

SQL> connect / as sysdba    -- OS認証で接続
接続されました。
SQL> select instance_name,status from v$instance;  -- インスタンスの確認

INSTANCE_NAME                    STATUS
-------------------------------- ------------------------
orcl                             OPEN

SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
CDB$ROOT
SQL> disconnect  -- 切断
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0との接続が切断されました。
SQL>
```

### 2. CDBにローカル接続（パスワード認証）
```sql
SQL> connect system/password  --パスワード認証で接続
接続されました。
SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
CDB$ROOT
SQL> disconnect  -- 切断
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0との接続が切断されました。
SQL>
```

### 3. PDBにリモート接続（パスワード認証）
```sql
SQL> connect system/password@localhost:1521/ORCLPDB  --パスワード認証（リモート）で接続
接続されました。
SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
ORCLPDB
SQL> disconnect  -- 切断
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0との接続が切断されました。
SQL>
```

### 4. CDBにローカル接続（OS認証）後、PDBに接続
```sql
SQL> connect / as sysdba    -- OS認証で接続
接続されました。
SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=ORCLPDB;  -- PDBに接続

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

SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
ORCLPDB
SQL>
```

### 5. PDBに接続後、CDBに接続
```sql
SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
ORCLPDB
SQL> alter session set container=CDB$ROOT;  -- CDBに接続

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

SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
CDB$ROOT
SQL>
```

### 6. PDB情報確認
```sql
SQL> show pdbs    -- PDB情報確認

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL> select con_id,name,open_mode,restricted from v$pdbs;    -- PDB情報確認

    CON_ID NAME                            OPEN_MODE            RESTRI
---------- ------------------------------- -------------------- ------
         2 PDB$SEED                        READ ONLY            NO
         3 ORCLPDB                         READ WRITE           NO

SQL> select pdb_name,status from cdb_pdbs;    -- PDB情報確認

PDB_NAME                 STATUS
------------------------ --------------------
ORCLPDB                  NORMAL
PDB$SEED                 NORMAL

SQL>
```

### 7. CDB停止、起動
```sql
SQL> show con_name  -- 接続先の確認

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

Total System Global Area  805304184 bytes
Fixed Size                  9033592 bytes
Variable Size             562036736 bytes
Database Buffers          226492416 bytes
Redo Buffers                7741440 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>
```

### 8. PDB停止、起動
```sql
SQL> show pdbs  -- PDBの状態確認

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL> alter pluggable database ORCLPDB close immediate;  -- PDB(ORCLPDB)の停止（ORCLPDBをallにすると全てのPDBを停止）

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

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        MOUNTED
SQL> alter pluggable database ORCLPDB open;  -- PDB(ORCLPDB)の起動（ORCLPDBをallにすると全てのPDBを起動）

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

SQL> show pdbs  -- PDBの状態確認

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL>
```

### 9. PDBに接続した状態でのPDB停止、起動
```sql
SQL> alter session set container=ORCLPDB;  -- PDBに接続

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

SQL> show con_name  -- 接続先の確認

CON_NAME
------------------------------
ORCLPDB
SQL> shutdown immediate;   -- PDBの停止
プラガブル・データベースがクローズされました。
SQL> select instance_name,status from v$instance;  -- インスタンスの確認

INSTANCE_NAME                    STATUS
-------------------------------- ------------------------
orcl                             MOUNTED

SQL> show pdbs  -- PDBの状態確認

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 ORCLPDB                        MOUNTED
SQL> alter database open;   -- PDBの起動

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

SQL> show pdbs  -- PDBの状態確認

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 ORCLPDB                        READ WRITE NO
SQL>
```

### 10. 現在のPDB起動状態を保存
```sql
SQL> alter session set container=CDB$ROOT;  -- CDBに接続

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

SQL> show con_name    -- 接続先の確認

CON_NAME
------------------------------
CDB$ROOT
SQL> alter pluggable database all save state;  -- 現在のPDB起動状態を保存（allはPDB名としてもよい）

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

SQL>
```

以上