16 PDBの管理

PDBの管理には、PDBへの接続、PDBの変更、PDBに関連付けられたサービスの管理などのタスクが含まれます。

PDB管理について

プラガブル・データベース(PDB)の管理には、CDBの管理に必要なタスクのサブセットが含まれます。

タスクのこのサブセットは、ほとんどがPDBとCDBで同じですが、違いもあります。たとえば、PDBのオープン・モードを変更する場合に違いがあります。また、PDB管理者は、単一のPDBの管理に限定され、マルチテナント・コンテナ・データベース(CDB)内の他のPDBは管理できません。

関連項目:

現在のPDBのオープン・モードを変更するには、「データベース・レベルでのPDBの変更」を参照してください

PDBとCDBに共通するタスク

ほとんどの管理タスクがPDBとCDBで同じです。

PDBを管理する場合、ALTER DATABASEALTER PLUGGABLE DATABASEまたはALTER SYSTEM文を使用してPDBを変更できます。また、PDBでDDL文を実行することもできます。次の表は、PDBとCDBに共通する一部のタスクについて説明しています。

表16-1 PDBとCDBに共通する管理タスク

タスク 説明 追加情報

表領域の管理

PDBの表領域を作成、変更および削除できます。各PDBのデフォルト表領域およびデフォルト表領域タイプを指定できます。また、各PDBのデフォルト一時表領域があります。必要に応じて、個々のPDBで使用する追加の一時表領域を作成できます。

「データベース・レベルでのPDBの変更」

表領域の管理の詳細は、『Oracle Database管理者ガイド』を参照してください

データファイルおよび一時ファイルの管理

各PDBには独自のデータファイルがあります。CDBで管理しているのと同じ方法で、データ・ファイルおよび一時ファイルを管理できます。CREATE PLUGGABLE DATABASEまたはALTER PLUGGABLE DATABASE文でSTORAGE句を使用して、PDBのデータファイルが使用する記憶域の量を制限することもできます。

「データベース・レベルでのPDBの変更」

データファイルおよび一時ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

スキーマ・オブジェクトの管理

CDBで行うのと同じ方法で、PDB内のスキーマ・オブジェクトを作成、変更および削除できます。特定のPDBで起動するトリガーを作成することもできます。

CDBのデータベース・リンクを管理する場合、ルートには一意のグローバル・データベース名があり、各PDBも同様です。ルートのグローバル名は、DB_NAMEおよびDB_DOMAIN初期化パラメータで定義されます。PDBのグローバル・データベース名は、PDB名およびDB_DOMAIN初期化パラメータによって定義されます。各PDBのグローバル・データベース名はドメイン内で一意である必要があります。

スキーマ・オブジェクトの詳細は、『Oracle Database管理者ガイド』を参照してください

Oracle Database管理者ガイド

CDBでのトリガーの作成の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください

CDBに固有のタスク

現在のコンテナがPDBである場合に、いくつかの管理タスクを実行できません。

次のタスクは、現在のコンテナがルートである場合にCDB全体またはCDBルートで共通ユーザーが実行します。

  • CDBインスタンスの起動および停止

  • ALTER DATABASE文を使用したCDBまたはルートの変更

  • ALTER SYSTEM文を使用したCDBまたはルートの変更

  • CDBまたはルートでのデータ定義言語(DDL)文の実行

  • 次のコンポーネントの管理:

    • プロセス

    • メモリー

    • エラーおよびアラート

    • 診断データ

    • 制御ファイル

    • オンラインREDOログ・ファイルおよびアーカイブREDOログ・ファイル

    • UNDO

  • PDBの作成、接続、切断および削除

現在のコンテナがルートである共通ユーザーは、1つ以上のPDBのオープン・モードを変更することもできます。同様に、現在のコンテナがPDBである共通ユーザーまたはローカル・ユーザーは、現在のPDBのオープン・モードを変更できます。

関連項目:

PDBへの接続の管理

PDBの接続はCDBと同じ方法で管理しますが、特別な考慮事項がいくつかあります。

PDBへの接続

いくつかの手法を使用して、SQL*Plus CONNECTコマンドでPDBに接続できます。

この項では、SQL*PlusでCDBに接続する方法を理解していることを想定しています。

次の手法を使用して、SQL*Plus CONNECTコマンドでPDBに接続できます。

  • オペレーティング・システム認証を使用したローカル接続

  • 簡易接続を使用したデータベース接続

  • サービス名を使用したデータベース接続

前提条件

次の前提条件を満たしている必要があります。

  • PDBに接続するユーザーは、そのPDBでCREATE SESSION権限を付与されている必要があります。

  • SYSDBASYSOPERSYSBACKUPまたはSYSDGの管理権限を持たないユーザーとしてPDBに接続するには、PDBをオープンにしている必要があります。

ノート:

この項では、PDBに接続するユーザーはローカル・ユーザー・アカウントを使用することを想定しています。共通ユーザーとしてPDBに接続することも可能で、共通ユーザーとしてルートに接続してからPDBに切り替えることができます。

SQL*Plus CONNECTコマンドを使用してPDBに接続するには:

  1. SQL*Plusを起動できるよう、環境を構成します。

  2. /NOLOG引数を使用してSQL*Plusを起動します。

    sqlplus /nolog
    
  3. 簡易接続またはネット・サービス名を使用してCONNECTコマンドを発行し、PDBに接続します。

    PDBに接続するには、PDBプロパティを指定してサービスに接続します。

例16-1 PDBのネット・サービス名を使用したSQL*PlusでのPDBへの接続

次のコマンドでは、hrappサービスを使用してhrユーザーに接続します。hrappサービスには、hrpdb PDBのPDBプロパティが含まれています。この例では、hrappサービスのネット・サービス名を持つようにクライアントが設定されていると想定しています。

CONNECT hr@hrapp

関連項目:

PDBのサービスの管理

PDBのサービスを作成、変更または削除できます。

PDBのサービスについて

各PDBにはデフォルトのサービスがありますが、SRVCTLまたはDBMS_SERVICEを使用して独自のサービスを作成できます。

PDBプロパティ

PDBプロパティによって、PDBにサービスが関連付けられます。PDBプロパティを使用してクライアントがサービスに接続する場合、接続の現在のコンテナはPDBになります。

PDBプロパティは、次のいずれかを行う場合にのみ必要です。

  • サービスの作成

  • サービスのPDBプロパティの変更

サービスを開始、停止または削除するときには、PDBプロパティを指定しません。また、サービスのPDBプロパティを変更せずにサービスを変更する場合、PDBプロパティを指定する必要はありません。

ALL_SERVICESデータ・ディクショナリ・ビューを問い合せると、サービスのPDBプロパティを表示できます。また、SRVCTLユーティリティを使用する場合は、srvctl config serviceコマンドを使用できます。

デフォルトおよびユーザー定義のサービス

PDBを作成すると、PDBの新しいデフォルト・サービスが自動的に作成されます。

各データベース・サービス名は、1つのCDB内で一意である必要があり、特定のリスナーからアクセスされるインスタンスを持つすべてのCDBのスコープ内で一意である必要があります。デフォルト・サービスの名前はPDBと同じになります。このサービスは、ユーザーが管理できず、管理タスクにのみ使用する必要があります。

アプリケーションには常にユーザー定義のサービスを使用します。これは、ユーザー定義のサービスはアプリケーションの要件に適合するようにカスタマイズできるためです。デフォルトのPDBサービスをアプリケーションに使用しないことをお薦めします。

ノート:

サービスをプロキシPDBと関連付けないでください。

Oracle Clusterware環境では、PDBに作成される各サービスにOracle Clusterwareリソースを作成する必要があります。データベースがOracle RestartまたはOracle Clusterwareで管理され、SRVCTLユーティリティを使用して、クローズするPDBのPDBプロパティを指定してサービスを開始する場合、PDBは、サービスが開始されたノードにおいて読取り/書込みモードでオープンされます。ただし、PDBサービスを停止しても、PDBのオープン・モードは変更されません。

PDBを切断または削除した場合、切断または削除されたPDBのサービスは自動的に削除されません。これらのサービスは、手動で削除する必要があります。

サービスを管理するためのツール

サービスの作成および変更にSRVCTLユーティリティを使用することをお薦めします。または、DBMS_SERVICEパッケージも使用できます。

SRVCTL

単一インスタンス・データベースがOracle Restartで管理されている場合、またはOracle RACデータベースがOracle Clusterwareで管理されている場合は、サーバー制御(SRVCTL)ユーティリティを使用して、サービスを作成、変更または削除します。

SRVCTLユーティリティを使用してPDBのサービスを作成する場合は、add serviceコマンドを使用し、-pdbパラメータでPDBを指定します。-pdbを指定しない場合、そのサービスはルートに関連付けられます。

SRVCTLユーティリティを使用してサービスのPDBプロパティを変更する場合は、modify serviceコマンドを使用し、-pdbパラメータでPDBを指定します。SRVCTLユーティリティを使用してPDBのサービスを削除するには、remove serviceコマンドを使用します。

-pdbパラメータが含まれていない場合でも、start servicestop servicerelocate serviceコマンドなどの他のSRVCTLコマンドを使用してサービスを管理できます。

SRVCTLユーティリティを使用してサービスを作成または変更する場合、PDB名は検証されません。ただし、無効なPDB名を使用してサービスを開始しようとすると、エラーが発生します。

DBMS_SERVICE

データベースがOracle RestartまたはOracle Clusterwareで管理されていない場合は、DBMS_SERVICEパッケージを使用して、データベース・サービスを作成または削除します。

DBMS_SERVICEは、ルート・レベルで各PDBに存在します。各レベルのSYSによって所有され、実行されます。PDB管理者は、別のPDBによって所有されているサービスの接続を停止、再配置またはテストできません。

DBMS_SERVICEパッケージを使用してサービスを作成する場合、サービスのPDBプロパティは現在のコンテナに設定されます。したがって、特定のPDBに設定されたPDBプロパティを持つサービスをDBMS_SERVICEパッケージを使用して作成するには、PDBが現在のコンテナであるときにCREATE_SERVICEプロシージャを実行します。現在のコンテナがルートの場合にCREATE_SERVICEプロシージャを使用してサービスを作成すると、そのサービスはルートと関連付けられます。

DBMS_SERVICEパッケージを使用してサービスのPDBプロパティは変更できません。ただし、1つのPDBからサービスを削除し、同様なサービスを別のPDBに作成できます。この場合、新しいサービスのPDBプロパティは、それが作成されたPDBのものになります。

START_SERVICEプロシージャやSTOP_SERVICEプロシージャなど、他のDBMS_SERVICEサブプログラムを使用してサービスを管理することもできます。DBMS_SERVICE.*_CONNECTION_TESTプロシージャを使用して、計画メンテナンス中にデータベース接続の状態をチェックできます。DELETE_SERVICEプロシージャを使用してサービスを削除します。

関連項目:

SRVCTLおよびDBMS_SERVICEを使用したPDBのサービスの管理

PDBプロパティを使用してサービスを作成、変更または削除できます。

SRVCTLユーティリティを使用し、PDBプロパティを使用してサービスを管理するには:

  1. 正しいユーザー・アカウントを使用して、ホスト・コンピュータにログインします。

  2. 正しいOracleホームからSRVCTLを実行していることを確認します。

  3. 次のどちらかの操作を実行します。

    • サービスを作成または変更するには、add serviceコマンドを実行し、-pdbパラメータでPDBを指定します。

    • サービスのPDBプロパティを変更する場合は、modify serviceコマンドを実行し、-pdbパラメータでPDBを指定します。

    • サービスを削除するには、remove serviceコマンドを実行します。

DBMS_SERVICEパッケージを使用してPDBのサービスを作成または削除するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

    「PDBへの接続」を参照してください。

  2. DBMS_SERVICEパッケージ内の適切なサブプログラムを実行します。

ノート:

データベースがOracle RestartまたはOracle Clusterwareで管理されている場合は、SRVCTLユーティリティを使用してサービスを管理します。DBMS_SERVICEパッケージは使用しないでください。

例16-2 SRVCTLユーティリティを使用したPDBのサービスの作成

この例では、DB_UNIQUE_NAME mycdbで指定されたCDB内のPDB salespdbsalesrepサービスを追加します。

srvctl add service -db mycdb -service salesrep -pdb salespdb

例16-3 SRVCTLユーティリティを使用したサービスのPDBプロパティの変更

この例では、DB_UNIQUE_NAME mycdbで指定されたCDBでsalesrepサービスを変更して、このサービスをhrpdb PDBに関連付けます。

srvctl modify service 
  -db mycdb 
  -service salesrep 
  -pdb hrpdb

例16-4 SRVCTLユーティリティを使用したOracle RACでのサービスの再配置

relocate serviceコマンドを使用して、サービスが現在実行中のOracle RACインスタンスから、実行可能な別のインスタンスにサービスを再配置できます。この手法は、管理者管理データベースのサービス、およびポリシー管理データベースのシングルトン・サービスの両方に適用されます。

次のコマンドは、現在実行中のOracle RACインスタンスcdb_inst1から、現在実行されていないインスタンスcdb_inst2に、サービスsvc1を再配置します。

srvctl relocate service 
  ­db cdb 
  ­service svc1 
  ­oldinst cdb_inst1 
  ­newinst cdb_inst2 
  –drain_timeout NNN 
  –stopoption immediate

次のコマンドは、ポリシー管理データベースの場合と同じ操作を実行します。

srvctl relocate service 
  ­db cdb 
  ­service svc1 
  ­currentnode cdb_inst1 
  ­targetnode cdb_inst2 
  –drain_timeout NNN 
  –stopoption immediate

例16-5 SRVCTLユーティリティを使用したサービスの削除

この例では、DB_UNIQUE_NAME mycdbで指定されたCDBでsalesrepサービスを削除します。

srvctl remove service 
  -db mycdb 
  -service salesrep

例16-6 DBMS_SERVICEパッケージを使用したPDBのサービスの作成

この例では、現在のPDBにsalesrepサービスを作成します。

BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'salesrep',
    network_name => 'salesrep.example.com');
END;
/

サービスのPDBプロパティが現在のコンテナに設定されます。たとえば、現在のコンテナがsalespdb PDBの場合、サービスのPDBプロパティはsalespdbになります。

例16-7 DBMS_SERVICEパッケージを使用したサービスの削除

この例では、現在のPDBのsalesrepサービスを削除します。

BEGIN
  DBMS_SERVICE.DELETE_SERVICE(
    service_name => 'salesrep');
END;
/

関連項目:

参照先PDBのリスナー設定の変更

プロキシPDBによって参照されているPDBは参照先PDBと呼ばれます。

参照先PDBのリスナーのポートまたはホスト名が変更された場合は、プロキシPDBが引き続き正しく機能するように参照先PDBのリスナー設定をリセットする必要があります。

参照PDBのリスナー・ホスト名の変更

参照先PDBのリスナーのホスト名が変更された場合は、ALTER PLUGGABLE DATABASE CONTAINERS HOST文を実行して、プロキシPDBが引き続き正しく機能するように参照先PDBのホスト名をリセットする必要があります。

プロキシPDBは、PDBの作成中に、データベース・リンクを使用してその参照先PDBと通信を確立します。通信が確立された後、プロキシPDBはPDBの作成時に使用されたデータベース・リンクを使用せずに参照先PDBと直接通信し、データベース・リンクを削除できます。参照先PDBのリスナー・ホスト名が変更された場合、各プロキシPDBは参照先PDBとの通信を再確立する必要があります。

Oracle Database 19cバージョン19.10以降では、ALTER PLUGGABLE DATABASE CONTAINERS HOSTコマンドを、CDBルート、アプリケーション・ルートまたはPDBで、PDB名を含めることにより実行できます。

現行ユーザーは、ALTER DATABASEシステム権限を持っている必要があり、その権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。
  1. SQL*Plusで、現在のコンテナが参照先PDBであることを確認します。
    「PDBへの接続」を参照してください。
  2. ALTER PLUGGABLE DATABASE CONTAINERS HOST文を実行して新しいホスト名を指定するか、RESETキーワードを指定してホスト名を参照先PDBのホスト名であるデフォルト設定に戻します。
  3. 参照先PDBを参照するプロキシPDBを削除してから再作成し、各プロキシPDBと参照先PDBとの通信を再確立します。

例16-8 参照先PDBのリスナー・ホスト名の変更

この例では、参照先PDBのホスト名をmyhost.example.comに変更しています。

ALTER PLUGGABLE DATABASE CONTAINERS HOST='myhost.example.com';

例16-9 リスナー・ホスト名のデフォルト値へのリセット

この例は、参照先PDBのホスト名をデフォルト値にリセットしています。デフォルト値は参照先PDBのホスト名です。

ALTER PLUGGABLE DATABASE CONTAINERS HOST RESET;

例16-10 リスナー・ホスト名の変更時におけるPDB名の使用

この例では、PDB01という名前のPDBのホスト名をmyhost.example.comに変更します。

ALTER PLUGGABLE DATABASE PDB01 CONTAINERS HOST='myhost.example.com';
参照先PDBのリスナー・ポート番号の変更

参照先PDBのリスナーのポート番号が変更された場合は、ALTER PLUGGABLE DATABASE CONTAINERS PORT文を実行して、プロキシPDBが引き続き正しく機能するように参照先PDBのポート番号をリセットする必要があります。

プロキシPDBは、PDBの作成中に、データベース・リンクを使用してその参照先PDBと通信を確立します。通信が確立された後、プロキシPDBはPDBの作成時に使用されたデータベース・リンクを使用せずに参照先PDBと直接通信し、データベース・リンクを削除できます。参照先PDBのリスナーのポート番号が変更された場合、各プロキシPDBは参照先PDBと通信を再確立する必要があります。

Oracle Database 19cバージョン19.10以降では、ALTER PLUGGABLE DATABASE CONTAINERS PORTコマンドを、CDBルート、アプリケーション・ルートまたはPDBで、PDB名を含めることにより実行できます。

現行ユーザーは、ALTER DATABASEシステム権限を持っている必要があり、その権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。
  1. SQL*Plusで、現在のコンテナが参照先PDBであることを確認します。
  2. ALTER PLUGGABLE DATABASE CONTAINERS PORT文を実行して新しいポート番号を指定するか、RESETキーワードを指定してポート番号をデフォルト設定(1521)に戻します。
  3. 参照先PDBを参照するプロキシPDBを削除して再作成し、各プロキシPDBと参照先PDBの通信を再確立します。

例16-11 参照先PDBのリスナー・ポート番号の変更

この例では、参照先PDBのポート番号を1543に変更しています。

ALTER PLUGGABLE DATABASE CONTAINERS PORT=1543;

例16-12 リスナー・ポート番号のデフォルト値へのリセット

この例は、参照先PDBのポート番号をデフォルト値にリセットしています。ポート番号のデフォルト値は1521です。

ALTER PLUGGABLE DATABASE CONTAINERS PORT RESET;

例16-13 ポート番号の変更時におけるPDB名の使用

この例では、PDB01という名前のPDBのポート番号を1543に変更します。

ALTER PLUGGABLE DATABASE PDB01 CONTAINERS PORT=1543;

システム・レベルでのPDBの変更

ALTER SYSTEM文を使用してPDBを変更できます。

PDBのシステム・レベルの変更について

ALTER SYSTEM文によって、PDBを動的に変更できます。PDBが動作する方法を変更する場合は、ALTER SYSTEM文を発行できます。

現在のコンテナがPDBである場合、次のALTER SYSTEM文を実行できます。

  • ALTER SYSTEM FLUSH { SHARED_POOL | BUFFER_CACHE | FLASH_CACHE }

  • ALTER SYSTEM { ENABLE | DISABLE } RESTRICTED SESSION

  • ALTER SYSTEM SET USE_STORED_OUTLINES

  • ALTER SYSTEM { SUSPEND | RESUME }

  • ALTER SYSTEM CHECKPOINT

  • ALTER SYSTEM CHECK DATAFILES

  • ALTER SYSTEM REGISTER

  • ALTER SYSTEM { KILL | DISCONNECT } SESSION

  • ALTER SYSTEM SET initialization_parameter (初期化パラメータのサブセットの場合)

その他のすべてのALTER SYSTEM文は、CDB全体に影響し、ルートの共通ユーザーによって実行される必要があります。

ALTER SYSTEM SET initialization_parameter文では、PDBの一部の初期化パラメータのみを変更できます。すべての初期化パラメータは、ルートに対して設定できます。初期化パラメータがPDB用に明示的に設定されていない場合、PDBではルートからパラメータ値を継承します。

V$SYSTEM_PARAMETERビューのパラメータのISPDB_MODIFIABLE列がTRUEの場合は、PDBの初期化パラメータを変更できます。次の問合せにより、PDBで変更可能なすべての初期化パラメータがリストされます。

SELECT NAME 
FROM   V$SYSTEM_PARAMETER 
WHERE  ISPDB_MODIFIABLE='TRUE' 
ORDER BY NAME;

現在のコンテナがPDBである場合、ALTER SYSTEM SET initialization_parameter文を実行して、PDBを変更します。この文は、ルートまたは他のPDBには影響しません。次の表は、サーバー・パラメータ・ファイル(SPFILE)を使用し、ALTER SYSTEM SET文をPDBで実行した場合のSCOPE句の動作について説明しています。

SCOPE設定 動作

MEMORY

初期化パラメータ設定は、メモリーで変更され、PDBで即時に有効になります。新しい設定は、PDBにのみ影響を及ぼします。

この設定によって、次のいずれかの場合、ルートで設定された値に戻ります。

  • ALTER SYSTEM SET文によって、SCOPEBOTHまたはMEMORYに等しい場合はルートのパラメータの値が設定され、PDBがクローズして再オープンされます。SCOPESPFILEと等しい場合、PDBをクローズして再オープンしてもPDBのパラメータ値は変更されません。

  • PDBが停止し、再オープンされます。

  • CDBが停止し、再オープンされます。

SPFILE

初期化パラメータ設定は、PDBに対して変更されて永続的に格納されます。新しい設定は、次の場合に有効になります。

  • PDBが停止し、再オープンされます。

  • CDBが停止し、再オープンされます。

これらの場合、新しい設定はPDBにのみ影響を及ぼします。

BOTH

初期化パラメータ設定は、メモリーで変更され、PDBに対して変更されて永続的に格納されます。新しい設定はPDBで即時に有効になり、PDBが停止して再オープンされた後、またはCDBが停止して再オープンされた後も保持されます。新しい設定は、PDBにのみ影響を及ぼします。

PDBがCDBから切断されると、SCOPE=BOTHまたはSCOPE=SPFILEを使用してPDBに指定された初期化パラメータの値は、PDBのXMLメタデータ・ファイルに追加されます。これらの値は、PDBがCDBに接続したときにPDBでリストアされます。

ノート:

テキスト初期化パラメータ・ファイル(PFILE)には、PDB固有のパラメータ値を含めることはできません。

ALTER SYSTEMを使用したPDBの変更

システム・レベルでPDBを変更するには、ALTER SYSTEM文を使用します。

前提条件

現行ユーザーは次の権限を付与されている必要があり、権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。

  • CREATE SESSION

  • ALTER SYSTEM

ALTER SYSTEMを使用してPDBを変更するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

    「PDBへの接続」を参照してください。

  2. ALTER SYSTEM文を実行します。

例16-14 PDBでのセッション制限の有効化

PDBでセッションを制限するには、次の文を発行します。

ALTER SYSTEM ENABLE RESTRICTED SESSION;

例16-15 PDBの統計収集レベルの変更

次のALTER SYSTEM文によって、現在のPDBのSTATISTICS_LEVEL初期化パラメータがALLに設定されます。

ALTER SYSTEM SET STATISTICS_LEVEL = ALL SCOPE = MEMORY;

データベース・レベルでのPDBの変更

ALTER PLUGGABLE DATABASE文を使用してPDBを変更できます。

PDBレベルの変更について

PDBのALTER PLUGGABLE DATABASEは、CDBのALTER DATABASEに似ています。

ノート:

ALTER PLUGGABLE DATABASE文でサポートされている句が含まれ、現在のコンテナがPDBである場合に発行されたALTER DATABASE文は、対応するALTER PLUGGABLE DATABASE文と同じ効果があります。ただし、これらの文には、pdb_storage_clausepdb_change_state_clauselogging_clause,、pdb_recovery_clauseなど、PDBに固有の句を含めることはできません。

記憶域の句

ALTER PLUGGABLE DATABASEを使用して、PDBレベルで記憶域を構成します。

ALTER PLUGGABLE DATABASEの次の句は、PDB記憶域を変更します。

  • database_file_clauses

    この句は、ALTER DATABASE文での場合と同様に機能しますが、文は現在のPDBに適用されます。

  • DEFAULT TABLESPACE

    現在のコンテナがPDBである間に作成されたユーザーの場合、この句では、デフォルト表領域がCREATE USER文で指定されていない場合に、ユーザーのデフォルト表領域を指定します。

  • DEFAULT TEMPORARY TABLESPACE

    現在のコンテナがPDBである間に作成されたユーザーの場合、この句では、デフォルト一時表領域がCREATE USER文で指定されていない場合に、ユーザーのデフォルト一時表領域を指定します。

  • SET DEFAULT { BIGFILE | SMALLFILE } TABLESPACE

    この句によって、PDBで以降に作成される表領域のデフォルト・タイプがbigfileまたはsmallfileに変更されます。この句は、ALTER DATABASE文での場合と同様に機能しますが、現在のPDBに適用されます。

  • pdb_storage_clause

    この句によって、PDBに属するすべての表領域が使用する記憶域の量に対する制限が設定されます。この制限は、PDBに属している表領域を構成するすべてのデータファイルおよび一時ファイルの合計サイズに適用されます。

    この句では、PDB内の統合監査OSスピルオーバー(.bin形式)ファイルに使用できるストレージ量の制限を設定することもできます。この制限に達した場合は、これらのファイルにストレージを追加できません。

    この句では、PDBに接続しているセッションが使用できる共有一時表領域の記憶域の量に対する制限も設定できます。制限に達すると、PDBに接続しているセッションは、共有一時表領域で追加の記憶域を使用できなくなります。

ロギングおよびリカバリの句

ALTER PLUGGABLE DATABASEを使用して、PDBレベルでロギング、リカバリおよびリカバリ・モードを設定します。

logging_clause

ノート:

この句は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

この句では、PDBのロギング属性を指定します。ロギング属性は、特定のDML操作をREDOログ・ファイルに記録する(LOGGING)か記録しない(NOLOGGING)かを制御します。

この句を使用して、次の属性のいずれかを指定できます。

  • LOGGINGは、PDB内で今後作成される表領域がいずれも、デフォルトでLOGGING属性を使用して作成されることを示します。このデフォルトのロギング属性は、CREATE TABLE文などのスキーマ・オブジェクト・レベルでNOLOGGINGを指定することで上書きできます。

  • NOLOGGINGは、PDB内で今後作成される表領域がいずれも、デフォルトでNOLOGGING属性を使用して作成されることを示します。このデフォルトのロギング属性は、CREATE TABLE文などのスキーマ・オブジェクト・レベルでLOGGINGを指定することで上書きできます。

指定の属性は、CREATE TABLESPACE文にlogging_clauseが指定されていない場合に、PDB内で作成される表領域のロギング属性の設定に使用されます。

DBA_PDBSビューには、PDBの現在のロギング属性が表示されます。

ノート:

この句を使用するには、PDBを制限モードでオープンする必要があります。

pdb_force_logging_clause

ノート:

この句は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

この句は、PDBを強制ロギング・モードまたは強制ロギングなしモードにするか、PDBの強制ロギングモードまたは強制ロギングなしモードを解除します。

この句を使用して、次の属性のいずれかを指定できます。

  • ENABLE FORCE LOGGINGはPDBを強制ロギング・モードにし、これにより、一時表領域および一時セグメントでの変更を除いたPDBでの変更はすべて記録されます。強制ロギング・モードは、スキーマ・オブジェクト・レベルで上書きできません。

    PDBレベルの強制ロギング・モードは、PDBの各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、およびPDBの各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。

    ENABLE FORCE LOGGINGは、PDBが強制ロギングなしモードである場合、指定できません。DISABLE FORCE NOLOGGINGは、最初に指定する必要があります。

  • DISABLE FORCE LOGGINGは、現在強制ロギング・モードであるPDBのそのモードを解除します。PDBが現在強制ロギング・モードでない場合、DISABLE FORCE LOGGINGを指定するとエラーになります。

  • ENABLE FORCE NOLOGGINGはPDBを強制ロギングなしモードにし、これにより、PDBでの変更は記録されません。強制ロギングなしモードは、スキーマ・オブジェクト・レベルで上書きできません。

    CDB全体の強制ロギング・モードは、PDBレベルの強制ロギングなしモードより優先されます。PDBレベルの強制ロギングなしモードは、PDBの各表領域で指定するLOGGINGまたはFORCE LOGGING設定、およびPDBの各データベース・オブジェクトで指定するLOGGING設定より優先され、これらの設定には影響されません。

    ENABLE FORCE NOLOGGINGは、PDBが強制ロギング・モードである場合、指定できません。DISABLE FORCE LOGGINGは、最初に指定する必要があります。

  • DISABLE FORCE NOLOGGINGは、現在強制ロギングなしモードであるPDBのそのモードを解除します。PDBが現在強制ロギングなしモードでない場合、DISABLE FORCE NOLOGGINGを指定するとエラーになります。

DBA_PDBSビューには、PDBが強制ロギング・モードであるか、強制ロギングなしモードであるかが表示されます。

ノート:

この句を使用するには、PDBを制限モードでオープンする必要があります。

pdb_recovery_clause

ノート:

この句は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

ALTER PLUGGABLE DATABASE DISABLE RECOVERYは、PDBに属するデータファイルをオフラインにし、PDBのリカバリを無効にします。PDBデータファイルは、リカバリが再度有効になるまで、リカバリ・セッションに含まれません。リカバリ中に作成された新しいデータファイルはいずれも無効になり、PDBの無名ファイルとして作成されます。

ALTER PLUGGABLE DATABASE ENABLE RECOVERYは、PDBに属するデータファイルをオンラインにし、PDBをアクティブ・リカバリとマークします。このようなファイルはリカバリ・セッションに含まれます。

PDBのリカバリ・ステータスを確認するには、V$PDBSビューのRECOVERY_STATUS列を問い合せます。

関連項目:

その他の句

ALTER PLUGGABLE DATABASEを使用して、オープン・モード、グローバル名、タイム・ゾーンおよびデフォルト・エディションを変更できます。

現在のコンテナがPDBである場合、次のいずれかの句が含まれたALTER PLUGGABLE DATABASE文によりPDBが変更されます。

  • pdb_change_state_clause

    この句によって、現在のPDBのオープン・モードが変更されます。

    オプションのRESTRICTEDキーワードを指定すると、PDBへのアクセスはPDB内でRESTRICTED SESSION権限を持つユーザーに限られます。

    この句でFORCEを指定すると、ALTER PLUGGABLE DATABASE文のセマンティクスが変わるため、現在閉じているPDBをオープンする以外に、すでに開いているPDBのオープン・モードを変更するために使用できます。

  • RENAME GLOBAL_NAME

    この句によって、PDBの一意のグローバル・データベース名が変更されます。新しいグローバル・データベース名は、CDB内のいずれのコンテナ名とも異なる必要があります。PDBのグローバル・データベース名を変更すると、そのPDB名は、グローバル・データベース名の、最初のピリオドの前の部分の名前に変更されます。

    グローバル・データベース名を変更する場合は、PDBへの接続に使用するデータベース・サービスのPDBプロパティを変更する必要があります。

  • set_time_zone_clause

    この句は、ALTER DATABASE文での場合と同様に機能しますが、現在のPDBに適用されます。

  • DEFAULT EDITION

    この句は、ALTER DATABASE文での場合と同様に機能しますが、現在のPDBに適用されます。各PDBはエディションに基づく再定義を使用でき、あるPDBのエディションは他のPDBのエディションに影響しません。各PDBに独自のアプリケーションがあるマルチテナント環境では、個別のアプリケーションごとに、エディションに基づく再定義を独立して使用できます。

ALTER PLUGGABLE DATABASE文を使用したPDBの変更

単一のPDBの属性を変更するには、ALTER PLUGGABLE DATABASE文を使用します。

現在のコンテナがPDBである場合は、ALTER PLUGGABLE DATABASE文でPDBを変更します。この変更により、PDBのルートのデフォルト設定が上書きされます。この変更は、CDBルートまたは他のPDBには影響しません。

前提条件

次の前提条件を満たしている必要があります。

  • PDBのオープン・モードをマウントからオープンに、またはオープンからマウントに変更するには、現在のユーザーにSYSDBASYSOPERSYSBACKUPまたはSYSDG管理権限が必要です。権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。ユーザーは、接続時にAS sys_privilege_nameを使用して権限を行使する必要があります。

  • ALTER PLUGGABLE DATABASE文を使用して実行される他のすべての操作については、現在のユーザーにALTER DATABASEシステム権限が必要であり、その権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。

  • PDBをクローズするには、そのPDBがオープンされている必要があります。

ノート:

この項では、ALTER PLUGGABLE DATABASE文を使用したPDBのグローバル・データベース名の変更については説明していません。

PDBを変更するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

  2. ALTER PLUGGABLE DATABASE文を実行します。

例16-16 PDBのオープン・モードの変更

  • ALTER PLUGGABLE DATABASE文によって、現在のPDBのオープン・モードがマウントに変更されます。
    ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
    
  • 次の文では、現在のPDBのオープン・モードを読取り専用に変更します。
    ALTER PLUGGABLE DATABASE OPEN READ ONLY;
    
  • FORCEキーワードを指定する場合を除き、PDBのオープン・モードをハイブリッド読取り専用に変更するには、マウント・モードである必要があります。

    次の文では、現在のPDBのオープン・モードをマウントまたは読取り専用オープンから読取り/書込みオープンに変更します。
    ALTER PLUGGABLE DATABASE OPEN HYBRID READ ONLY;
    
  • FORCEキーワードを指定する場合を除き、PDBのオープン・モードを読取り専用または読取り/書込みに変更するには、マウント・モードである必要があります。

    次の文では、現在のPDBのオープン・モードをマウントまたは読取り専用オープンから読取り/書込みオープンに変更します。

    ALTER PLUGGABLE DATABASE OPEN FORCE;
    
  • 次の文では、現在のPDBのオープン・モードをマウントから移行に変更します。

    ALTER PLUGGABLE DATABASE OPEN UPGRADE;

例16-17 PDBのデータファイルのオンライン化

このALTER PLUGGABLE DATABASE文では、database_file_clauseを使用して、/u03/oracle/pdb1_01.dbfデータファイルをオンラインにします。

ALTER PLUGGABLE DATABASE DATAFILE '/u03/oracle/pdb1_01.dbf' ONLINE;

例16-18 PDBのデフォルト表領域の変更

  • 次のALTER PLUGGABLE DATABASE文では、DEFAULT TABLESPACE句を使用して、PDBのデフォルト表領域をpdb1_tbsに設定します。

    ALTER PLUGGABLE DATABASE DEFAULT TABLESPACE pdb1_tbs;
    
  • 次のALTER PLUGGABLE DATABASE文では、DEFAULT TEMPORARY TABLESPACE句を使用して、PDBのデフォルト一時表領域をpdb1_tempに設定します。

    ALTER PLUGGABLE DATABASE DEFAULT TEMPORARY TABLESPACE pdb1_temp;
    

ALTER PLUGGABLE DATABASE文で指定した表領域または表領域グループは、PDBに存在する必要があります。現在のコンテナがPDBであり、デフォルトの表領域または一時表領域が明示的に割り当てられていないユーザーは、PDBのデフォルトの表領域または一時表領域を使用します。

例16-19 PDBのデフォルト表領域タイプの変更

次のALTER DATABASE文では、SET DEFAULT TABLESPACE句を使用して、PDBのデフォルトの表領域タイプをbigfileに変更します。

ALTER PLUGGABLE DATABASE SET DEFAULT BIGFILE TABLESPACE;

例16-20 PDBのストレージ制限の設定

  • 次の文では、PDBに属しているすべての表領域のストレージ制限を2GBに設定します。

    ALTER PLUGGABLE DATABASE STORAGE(MAXSIZE 2G);
    
  • 次の文では、PDBに属している表領域にストレージ制限がないことを指定します。

    ALTER PLUGGABLE DATABASE STORAGE(MAXSIZE UNLIMITED);
    
  • 次の文では、PDBに属している表領域にストレージ制限がないこと、およびPDBに接続しているセッションが使用できる共有一時表領域にストレージ制限がないことを指定します。

    ALTER PLUGGABLE DATABASE STORAGE UNLIMITED;

例16-21 PDBのロギング属性の設定

PDBが制限モードでオープンしている場合、次の文では、PDBにNOLOGGING属性を指定します。

ALTER PLUGGABLE DATABASE NOLOGGING;

例16-22 PDBの強制ロギング・モードの設定

次の文では、PDBに対して強制ロギング・モードを有効にします。

ALTER PLUGGABLE DATABASE ENABLE FORCE LOGGING;

例16-23 PDBのデフォルト・エディションの設定

この例では、現在のPDBのデフォルト・エディションをPDB1E3に設定します。

ALTER PLUGGABLE DATABASE DEFAULT EDITION = PDB1E3;

関連項目:

PDBのグローバル・データベース名の変更

ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO文を使用して、PDBのグローバル・データベース名を変更できます。

PDBのグローバル・データベース名を変更した場合、新しいグローバル・データベース名は、CDB内のいずれのコンテナ名とも異なる必要があります。

前提条件

次の前提条件を満たしている必要があります。

  • 現行ユーザーは、ALTER DATABASEシステム権限を持っている必要があり、その権限は共通に付与されているか、またはPDBでローカルに付与されている必要があります。

  • Oracle Real Application Clusters (Oracle RAC)データベースでは、現在のインスタンスのみでPDBをオープンする必要があります。その他すべてのインスタンスでは、PDBをクローズする必要があります。

  • 変更するPDBは、PDBでのRESTRICTED SESSION権限を持つユーザーのみがアクセスできるよう、RESTRICTEDを指定して読取り/書込みモードで現在のインスタンス上でオープンされている必要があります。

PDBのグローバル・データベース名を変更するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

  2. ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO文を実行します。

    次の例は、PDBのグローバル・データベース名をsalespdb.example.comに変更します。

    ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO salespdb.example.com;
    
  3. PDBをクローズします。

  4. 読取り/書込みモードでPDBをオープンします。

PDBのグローバル・データベース名を変更すると、そのPDB名は、新しいグローバル名の最初の部分(最初のピリオドの前の部分)に変更されます。また、Oracle DatabaseはPDBのデフォルトのデータベース・サービス名を自動的に変更します。Oracle Databaseは、PDB内のすべてのデータベース・サービスのPDBプロパティを、PDBの新しいグローバル名に変更します。PDBをクローズして読取り/書込みモードでオープンし、Oracle Databaseで新しいPDBのサービス名がCDBに統合されるようにする必要があります。

データベース・サービスにアクセスするクライアントで、Oracle Net Serviceが正しく構成されている必要があります。PDBの名前を変更したため、Oracle Net Servicesの構成の変更も必要になる場合があります。

関連項目:

リフレッシュ可能なクローンPDBの管理

リフレッシュ可能なクローンPDBは、ソースPDBと定期的に同期できる読取り専用クローンです。

PDBのリフレッシュ

リフレッシュ可能なクローンとして作成されたPDBをリフレッシュできます。

PDBを手動でリフレッシュする場合、最後のリフレッシュ以降にソースPDBに対して行った変更は、リフレッシュされているPDBに伝播されます。自動リフレッシュが構成されているPDBを手動でリフレッシュできます。

前提条件

PDBをリフレッシュするには、REFRESH MODE MANUALまたはREFRESH MODE EVERY minutes句を含めてPDBがクローンとして作成されている必要があります。

  1. SQL*Plusで、現在のコンテナがリフレッシュ対象のPDBであることを確認します。
  2. PDBがクローズされていない場合は、PDBをクローズします。たとえば、次のSQL文を発行します。
    ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
  3. 次のSQL文を発行します。
    ALTER PLUGGABLE DATABASE REFRESH;
リフレッシュ可能なクローンPDBのスイッチオーバー

ソースPDBとそのリフレッシュ可能なクローンPDBのロールを切り替えることができます。

次の文は、スイッチオーバーを実行します。

ALTER PLUGGABLE DATABASE refresh_mode FROM clonepdb@dblink SWITCHOVER;

refresh_modeREFRESH MODE NONEを指定しないでください。FROM句で指定されたデータベース・リンクは、クローンPDBが存在するCDBのルートを指し示す必要があります。

スイッチオーバーが完了した後、ソースPDBはリフレッシュ可能なクローンPDBになり、READ ONLYモードでのみオープンできます。

前提条件

次の前提条件を満たしている必要があります。

  • ALTER PLUGGABLE DATABASE ... SWITCHOVERを発行するときに、ソースPDBに接続している必要があります。

  • ソースPDBとクローンPDBが別々のCDB内にある場合、データベース・リンクで指定されたユーザーは、ソースPDBとクローンPDBで同じ名前とパスワードを使用する必要があります。

ソースPDBおよびクローンPDBのロールを切り替えるには:

  1. SQL*PlusまたはSQL Developerで、ソースPDBにログインします。

  2. ALTER PLUGGABLE DATABASE refresh_mode FROM clonepdb@dblink SWITCHOVER文を実行します。

    文が完了すると、現在接続されているPDBがリフレッシュ可能なクローンPDBになります。

  3. 必要に応じて、クローンPDBをリフレッシュします。

    ALTER PLUGGABLE DATABASE REFRESH;

例16-24 リフレッシュ可能なクローンPDBのスイッチオーバー

この例では、使用しているデータ・センターにcdb1およびcdb2という名前のCDBが含まれていることを想定しています。cdb1_pdb1という名前のPDBはcdb1内に存在します。このPDBのリフレッシュ可能なクローンをcdb2に作成し、cdb1_pdb1_refという名前を付けます。目的は、ソースPDBおよびcdb1_pdb1がクローンPDBになるように、cdb1_pdb1_refをスイッチオーバーすることです。

  1. SQL*Plusで、管理者権限を持つユーザーとしてcdb1に接続し、cdb1_pdb1が読取り/書込みモードでオープンしていることを確認します(出力例も示します)。

    CONNECT SYS@cdb1 AS SYSDBA
    Enter password: *******
    
    ALTER PLUGGABLE DATABASE ALL CLOSE;
    ALTER PLUGGABLE DATABASE cdb1_pdb1 OPEN READ WRITE;
    SHOW PDBS;
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 CDB1_PDB1                      READ WRITE NO
    
  2. c##u1という名前の共通ユーザーを作成します(pwdはユーザー指定のパスワードに置き換えます)。

    DROP USER c##u1 CASCADE;
    CREATE USER c##u1 IDENTIFIED BY pwd;
    GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##u1 CONTAINER=ALL;
    GRANT CREATE PLUGGABLE DATABASE TO c##u1 CONTAINER=ALL;
    GRANT SYSOPER TO c##u1 CONTAINER=ALL;
  3. コンテナをcdb1_pdb1に設定し、表t1を作成して、テスト用に使用します(出力例も示します)。

    ALTER SESSION SET CONTAINER = cdb1_pdb1;
    CREATE TABLE t1(n1 NUMBER);
    INSERT INTO t1 VALUES(1);
    COMMIT;
    SELECT * FROM t1;
    
            N1
    ----------
             1
    
  4. 管理者権限を持つユーザーとしてcdb2に接続し、c##u1という名前の共通ユーザーを作成します(pwdはユーザー指定のパスワードに置き換えます)。

    CONNECT SYS@cdb2 AS SYSDBA
    Enter password: *******
    
    DROP USER c##u1 CASCADE;
    CREATE USER c##u1 IDENTIFIED BY pwd;
    GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##u1 CONTAINER=ALL;
    GRANT CREATE PLUGGABLE DATABASE TO c##u1 CONTAINER=ALL;
    GRANT SYSOPER TO c##u1 CONTAINER=ALL;

    これで、cdb1cdb2の両方に、同じ名前(c##u1)とパスワードを持つ共通ユーザーが含まれます。

  5. cdb1へのデータベース・リンクを作成します。

    次のコマンドは、ユーザーc##u1、パスワードpwd、およびサービス名cdb1を指定します。

    CREATE DATABASE LINK cdb1_datalink CONNECT TO c##u1 IDENTIFIED BY pwd USING 'cdb1';
  6. cdb1_pdb1_refという名前の手動でリフレッシュ可能なPDBを作成します。

    次の文は、データベース・リンクcdb1_datalink、およびファイル宛先/dsk1/dfを指定します。

    CREATE PLUGGABLE DATABASE cdb1_pdb1_ref FROM cdb1_pdb1@cdb1_datalink 
      CREATE_FILE_DEST='/dsk1/df' 
      REFRESH MODE MANUAL;
  7. cdb1_pdb1_refをリフレッシュします。

    ALTER SESSION SET CONTAINER = cdb1_pdb1_ref;
    ALTER PLUGGABLE DATABASE REFRESH;
  8. t1を問い合せて、リフレッシュ可能なクローンPDBに正しい内容が含まれていることを確認します(出力例も示します)。

    ALTER PLUGGABLE DATABASE OPEN READ ONLY;
    SELECT * FROM t1;
    
            N1
    ----------
             1
  9. 管理者権限を持つユーザーとしてcdb1に接続し、cdb2へのデータベース・リンクを作成します。

    CONNECT SYS@cdb1 AS SYSDBA
    Enter password: *******
    
    CREATE DATABASE LINK cdb2_datalink CONNECT TO c##u1 IDENTIFIED BY pwd USING 'cdb2';

    前述の文は、ユーザーc##u1、パスワードpwd、およびサービス名cdb2を指定しています。

  10. コンテナをcdb1_pdb1に設定し、cdb1_pdb1_refがプライマリPDBになり、現在のPDBがクローンになるようにスイッチオーバーします。

    ALTER SESSION SET CONTAINER = cdb1_pdb1;
    ALTER PLUGGABLE DATABASE 
      REFRESH MODE MANUAL 
      FROM cdb1_pdb1_ref@cdb2_datalink 
      SWITCHOVER;
  11. t1を問い合せて、リフレッシュ可能なクローンPDBになった現在のPDBに正しい内容が含まれていることを確認します(出力例も示します)。

    ALTER PLUGGABLE DATABASE OPEN READ ONLY;
    SELECT * FROM t1;
    
            N1
    ----------
             1
  12. 管理者権限を持つユーザーとしてcdb2に接続し、コンテナを新しいソースPDB cdb1_pdb1_refに設定して、表t1に新規の行を挿入します(出力例も示します)。

    CONNECT SYS@cdb2 AS SYSDBA
    Enter password: *******
    
    ALTER SESSION SET CONTAINER = cdb1_pdb1_ref;
    SELECT * FROM t1;
    
            N1
    ----------
             1
    
    INSERT INTO t1 VALUES(2);
    COMMIT;
    SELECT * FROM t1;
    
            N1
    ----------
             1
             2
  13. 管理者権限を持つユーザーとしてcdb1に接続し、コンテナをcdb1_pdb1(新しいクローン)に設定し、これをリフレッシュしてからt1を問い合せます。

    CONNECT SYS@cdb1 AS SYSDBA
    Enter password: *******
    
    ALTER SESSION SET CONTAINER = cdb1_pdb1;
    ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE REFRESH;
    ALTER PLUGGABLE DATABASE OPEN READ ONLY;
    SELECT * FROM t1;
    
            N1
    ----------
             1
             2

    前述の出力は、クローンcdb1_pdb1はソースcdb1_pdb1_refからリフレッシュされたことを示しています。

PDBのオープン・モードの変更

PDBのオープン・モードは、ALTER PLUGGABLE DATABASEのSQL文またはSQL*PlusのSTARTUPコマンドを使用して変更できます。

PDBのオープン・モードについて

PDBがマウントされると、読取り/書込み、読取り専用、ハイブリッド読取り専用またはMIGRATEモードでオープンできます。PDBをオープンせずにマウントすることもできます。

PDBのオープン・モードのサマリー

ALTER PLUGGABLE DATABASE OPENで指定したオプションに応じて、PDBは異なるモードでオープンします。

PDBの現在のオープン・モードを表示するには、V$PDBS.OPEN_MODE列を問い合せます。次の表に、使用可能なPDBオープン・モードの説明を示します。

表16-2 PDBのマウントおよびオープン・モード

モード 説明 ノート

読取り/書込み

ALTER PLUGGABLE DATABASE OPEN READ WRITEを実行すると、PDBで問合せおよびユーザー・トランザクションを実行でき、ユーザーはREDOログを生成できます。

これは、PDBがフィジカル・スタンバイ・データベースに属している場合を除き、デフォルトのオープン・モードです。

オプションのRESTRICTEDキーワードを指定すると、PDBへのアクセスはPDB内でRESTRICTED SESSION権限を持つユーザーに限られます。FORCEも指定した場合は、PDB内のRESTRICTED SESSION権限がないPDBに接続されているすべてのセッションが終了し、それらのトランザクションがロールバックされます。

読取り専用

ALTER PLUGGABLE DATABASE OPEN READ ONLYを実行すると、PDBでは問合せが許可されますが、ユーザーによる変更は許可されません。

これは、PDBがフィジカル・スタンバイ・データベースに属している場合の、デフォルトのオープン・モードです。

データベース管理者は、CDB内の共通ユーザーおよびロールを作成、変更または削除できます。これらの変更は、PDBのオープン・モードが読取り/書込みモードに変更されると、CDBによってPDBに適用されます。変更が適用される前には、PDBにおける共通ユーザーおよびロールの記述が、CDBの残りの部分における説明と異なる場合があります。

オプションのRESTRICTEDキーワードを指定すると、PDBへのアクセスはPDB内でRESTRICTED SESSION権限を持つユーザーに限られます。FORCEも指定した場合、PDBのRESTRICTED SESSION権限を持たないPDBに接続されたすべてのセッションは停止され、それらのトランザクションはロールバックされます。

ハイブリッド読取り専用

ALTER PLUGGABLE DATABASE OPEN HYBRID READ ONLYを実行している場合、PDBでは共通ユーザーがDMLとユーザー・トランザクションを発行して処理を進めることができ、これらのユーザーがREDOログを生成できます。

共通ユーザーは、DDL、DMLおよびDCL文を正常に実行する必要があります。

共通ユーザーおよびローカル・ユーザーの両方が、DQL文(問合せおよびその他の読取り操作)を正常に実行する必要があります。

ローカル・ユーザーは、DDL、DMLおよびDCL文の実行に失敗します。ローカル・ユーザーによる書込み操作は失敗します

移行

ALTER PLUGGABLE DATABASE OPEN UPGRADEを実行すると、PDBはMIGRATEモードになります。このPDBに対してデータベース・アップグレード・スクリプトを実行できます。

オプションのRESTRICTEDキーワードを指定すると、PDBへのアクセスはPDB内でRESTRICTED SESSION権限を持つユーザーに限られます。

マウント済

オープンされているPDBでALTER PLUGGABLE DATABASE CLOSEを実行すると、PDBがマウントされます。このPDBでは、オブジェクトに対する変更は許可されません。この状態では、データベース管理者のみがPDBにアクセスできます。PDBは、データ・ファイルからの読取りも、データ・ファイルへの書込みもできません。PDBに関する情報は、メモリー・キャッシュから削除されます。PDBの一貫性バックアップがサポートされています。

データベース管理者は、CDBで共通ユーザーおよびロールを作成、変更または削除できます。PDBのオープン・モードが読取り/書込みモードに変更されると、CDBによってこれらの変更がPDBに適用されます。変更が適用される前には、PDBにおける共通ユーザーおよびロールの記述が、CDBの残りの部分における説明と異なる場合があります。

関連項目:

ALTER PLUGGABLE DATABASE OPENコマンドについてさらに学習するには、『Oracle Database SQL言語リファレンス』を参照してください

重要:

Oracle Real Application Clusters (Oracle RAC)デプロイメントではPDBの状態を設定しないでください。Oracle RACのPDB状態の設定は、PDBのオープン/クローズ操作を実行するデータベース・エージェントと競合します。
ハイブリッド読取り専用モードでのプラガブル・データベースのオープン

ハイブリッド読取り専用オープン・モードは、接続されているユーザーに応じてPDBが読取り/書込みとしても、読取り専用としても動作する特殊なオープン・モードです。

プラガブル・データベースをハイブリッド読取り専用モードでオープンすると、オンライン・データの内容が変更される可能性を排除した上で、オープンしたデータベースを問い合せることができます。

  • CDB共通ユーザーがハイブリッド読取り専用モードでオープンしているPDBに接続すると、PDBは読取り/書込みモードでオープンしているように見えます。PDBへの書込みは共通ユーザーに許可されます。
  • PDBローカル・ユーザーまたはアプリケーション共通ユーザーがそのPDBに接続すると、読取り専用モードでオープンしているように見えます。

ハイブリッド読取り専用モードを使用する利点は、データベース管理者およびアプリケーション管理者が、より高い権限を持つユーザーを含むローカル・ユーザーがPDBの継続的な保守運用を妨害するリスクなしで、オープンPDBの安全なモードでアプリケーションにパッチを適用してメンテナンスできることです。

次の文では、データベースが読取り専用モードでオープンします。

ALTER DATABASE OPEN HYBRID READ ONLY;

表16-3 ユーザー・セッションで有効なオープン・モード

オープン・モード ユーザー・セッションで有効なオープン・モード - CDB共通ユーザー ユーザー・セッションで有効なオープン・モード - アプリケーション共通ユーザー ユーザー・セッションで有効なオープン・モード - PDBローカル・ユーザー
読取り/書込み 読取り/書込み 読取り/書込み 読取り/書込み
読取り専用 読取り専用 読取り専用 読取り専用
ハイブリッド読取り専用 読取り/書込み 読取り専用 読取り専用

関連項目:

ALTER PLUGGABLE DATABASE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください
PDBのオープン状態を変更する句

現在のコンテナがCDBルートである場合にPDBのオープン・モードを変更するには、ALTER PLUGGABLE DATABASEpdb_change_state句を指定します。

OPEN句とCLOSE句

オープンされているPDBが、フィジカル・スタンバイ・データベースとして使用されているCDBに属する場合(この場合は、READ ONLYがデフォルト)を除き、READ WRITEALTER PLUGGABLE DATABASE OPENのデフォルトとなります。

ノート:

ノート:

優先度がいずれかのPDBに設定されている場合、PDBは最も低い優先度(1)から優先度順にオープンされます。

オープンまたはクローズするPDBを指定する場合には、次の操作を実行できます。

  • 1つ以上のPDBをリストします。

  • すべてのPDBを変更するには、ALLを指定します。

  • リストされたPDBを除くすべてのPDBを変更するには、ALL EXCEPTを指定します。

次の表は、PDBのモードを変更するALTER PLUGGABLE DATABASE文の句について説明しています。

表16-4 PDBのモードを変更するALTER PLUGGABLE DATABASEの句

説明

OPEN READ WRITE [RESTRICTED] [FORCE]

読取り/書込みモードでPDBをオープンします。

RESTRICTEDが指定されている場合、PDBにアクセスできるのは、PDBでのRESTRICTED SESSION権限を持つユーザーのみです。PDBでのRESTRICTED SESSION権限を持たないPDBに接続されたすべてのセッションは停止され、それらのトランザクションはロールバックされます。

FORCEを指定した場合、文で現在クローズされているPDBがオープンされ、オープンの読取り専用モードであるPDBのオープン・モードが変更されます。

OPEN READ ONLY[RESTRICTED] [FORCE]

読取り専用モードでPDBをオープンします。

RESTRICTEDが指定されている場合、PDBにアクセスできるのは、PDBでのRESTRICTED SESSION権限を持つユーザーのみです。PDBでのRESTRICTED SESSION権限を持たないPDBに接続されたすべてのセッションは、停止されます。

FORCEを指定した場合、文で現在クローズされているPDBがオープンされ、オープンの読取り/書込みモードであるPDBのオープン・モードが変更されます。

OPEN HYBRID READ ONLY [RESTRICTED][FORCE] ハイブリッド読取り専用モードでPDBをオープンします。

OPEN UPGRADE [RESTRICTED]

移行モードでPDBをオープンします。

RESTRICTEDが指定されている場合、PDBにアクセスできるのは、PDBでのRESTRICTED SESSION権限を持つユーザーのみです。

CLOSE [IMMEDIATE|ABORT]

PDBをマウント・モードにします。

CLOSE文は、PDBでのSQL*Plus SHUTDOWNコマンドに相当します。IMMEDIATEまたはABORTを指定しない場合、PDBは通常モードで停止されます。

IMMEDIATEが指定されている場合、この文は、PDBでは、SQL*PlusのSHUTDOWN IMMEDIATEコマンドに相当します。

CDBがARCHIVELOGモードであり、ABORTが指定されている場合、PDBは強制的にクローズされます。このプロセスの間は、PDBのデータ・ファイルにチェックポイント処理またはアクセスは行われません。他のインスタンスによってPDBがオープンされている場合は、使用可能なインスタンスによって自動的にインスタンス・リカバリが実行されます。この期間に、他のインスタンス上のPDBにアクセスすると、ブラウンアウトになっていると検出される場合があります。どのインスタンスでもPDBがオープンされていない場合は、次にPDBがオープンされると、自動メディア・リカバリが行われる可能性があります。自動メディア・リカバリが失敗した場合(たとえば、ファイルにアクセスできないため)、PDBを、オープンする前に手動でリカバリする必要があります。

PDBキーストアがオープン状態であった場合は、ALTER PLUGGABLE DATABASE CLOSEを実行してもそれはクローズされません。キーストアをクローズするには、ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "pdb_ks_pwd"コマンドを実行します。

SERVICES句

services句を使用して、単一PDBのオープン時に開始されるサービスを指定できます。

この句には次のようなバリエーションがあります。

  • 次の形式で、services句に1つ以上のサービスをリストします。

    SERVICES = ('service_name' [,'service_name'] … )
    
  • 次の例のように、services句にALLを指定してすべてのPDBのサービスを開始します。

    SERVICES = ALL
    
  • 次の形式でservices句にALL EXCEPTを指定して、リストされているサービスを除くすべてのPDBのサービスを開始します。

    SERVICES = ALL EXCEPT('service_name' [,'service_name'] … )
    
  • 次の例のように、services句にNONEを指定して、PDBのデフォルト・サービスのみ開始し、他のPDBのサービスは開始しません。

    SERVICES = NONE

    NONEは、services句のデフォルト設定です。PDBのデフォルト・サービスは、services句の設定にかかわらず、常に開始されます。

INSTANCES句

Oracle RAC CDBでは、instances句を使用して、PDBを変更するインスタンスを指定できます。

PDBは、いくつかのインスタンスでクローズし、別のインスタンスでオープンしておくことができます。instances句には次のようなバリエーションがあります。

  • 次の形式で、instances句に1つ以上のインスタンスをリストします。

    INSTANCES = ('instance_name' [,'instance_name'] … )
    
  • すべての実行中のインスタンスのPDBを変更するには、次の例のように、instances句にALLを指定します。

    INSTANCES = ALL
    
  • リストされたインスタンスを除くすべてのインスタンスのPDBを変更するには、次の形式で、instances句にALL EXCEPTを指定します。

    INSTANCES = ALL EXCEPT('instance_name' [,'instance_name'] … )
    
RELOCATE句

Oracle Real Application Clusters環境では、RELOCATEを使用して、異なるOracle RACインスタンス上でPDBを再オープンするようにデータベースに指示できます。

次のオプションを使用できます。

  • 現行インスタンスでPDBをクローズするには、デフォルトであるNORELOCATEを指定します。

  • 指定したインスタンスでPDBを再オープンするには、RELOCATE TOを指定してインスタンス名を指定します。

  • Oracle Databaseで選択された別のインスタンス上のPDBを再オープンするには、RELOCATEを指定します。

ノート:

services句とinstances句の両方が同じALTER PLUGGABLE DATABASE文に指定されている場合、指定されたサービスは指定したインスタンスで開始されます。
PDBの優先度を設定するには

ALTER PLUGGABLE DATABASE <databasename> Priority <value>を使用して優先度を設定します。

Oracle Database 23cでは、オープン、状態のリストア、アップグレードなどの様々な操作のためにPDB優先度の概念が導入されています。

ノート: PRIORITY句は、PDBのアップグレードの優先度(ALTER PLUGGABLE DATABASE xxx UPGRADE PRIORITY n; )を指定できるようにOracle Database12cR2で導入されました。この構文は、アップグレード・ガイドに記載されています。

様々な種類のPDBを管理するために、次の順序付けルールが適用されます。

  • PDBは、優先度の昇順で処理されます。優先度の値が低いPDBは、優先度の値が大きいPDBより前に処理されます。
  • 同じ優先度を持つPDBは、任意の順序で処理できます。ただし、アプリケーションPDBとアプリケーション・ルートの優先度が同じ場合、または優先度が指定されていない場合でも、アプリケーション・ルートの後でアプリケーションPDBがオープンされます。優先度のないPDBは、最も低い優先度と見なされます。
  • 特定のPDBのPDB優先度は、すべてのRACインスタンスに適用できます。つまり、優先度は特定のRACインスタンスに固有ではありません。
  • 接続/切断またはリフレッシュ可能クローンによって、優先度がソースPDBからターゲットPDBにコピーされることはありません。
  • アプリケーションPDBはアプリケーション・ルートより高い優先度を持つことはできません。
  • アプリケーション・ルート・クローンはアプリケーション・ルートと同じ優先度であり、PDB優先度を明示的に指定することはできません。
  • CDB$ROOTおよびPDB$SEEDはPDB優先度の対象外であり、優先度はOracle RDBMSによって内部的に決定されます。

優先度は、割り当てられた整数値によって決定されます。優先度1が最初にオープンまたはアップグレードされるPDBで、その後に他のPDBが昇順で続きます。優先度が割り当てられていない場合、すべてのPDBを任意の順序で処理できます。同じ優先度を持つPDBは、すべて任意の順序で処理できます。

ALTER PLUGGABLE DATABASE <PDB name> PRIORITY <value>

各項目の意味は次のとおりです。

  • PDB名は必須です
  • PRIORITY <value> - <value>は1から4096までの整数です

優先度が次の文の動作に与える影響

  • ALTER PLUGGABLE DATABASE x OPEN ...
  • ALTER PLUGGABLE DATABASE x CLOSE ...
  • ALTER PLUGGABLE DATABASE x SAVE STATE ...

ここで、xはALL、PDBのリストまたはALL EXCEPT句です。基本的には、複数のPDBを指定する任意の構文です。

OPEN文が複数のPDBに適用される場合、優先度順序付けルールが適用されます。

PDBのオープン時の互換性チェック

PDBをオープンすると、Oracle DatabaseによってPDBとCDBとの互換性がチェックされます。

PDBのオープン時に、PDBとCDBルートの間でバージョンの不一致があった場合は、自動的にアップグレードされます。PDBオープン時のリプレイ・アップグレードの最適化(デフォルト)により、取得表に格納されている文を再実行することによって、手動のエラー修正を回避できます。このメカニズムは、アプリケーションの同期で使用されるものと同じです。Oracle Database 21cでは、次のシナリオでPDBオープン時のリプレイ・アップグレードが使用されます。

  • 以前のリリースのCDBから切断されたPDBを接続する。PDBがオープンされると、データベースでリプレイ・アップグレードが自動的に実行されます。

  • 以前のリリースのCDBはOracle Database 21cにアップグレードされたが、CDB内のPDBはアップグレードされていない。OPEN UPGRADEオプションを指定せずにこのPDBをオープンすると、CDBはPDBのリプレイ・アップグレードを自動的に実行します。

PDBオープン時のリプレイ・アップグレード機能を使用するには、データベース・プロパティPDB_UPGRADE_SYNCおよびUPGRADE_PDB_ON_OPENをデフォルト値のtrueに設定する必要があります。いずれかのプロパティがfalseの場合は、PDBをオープンする前にクラシック・アップグレードを実行する必要があります。リプレイ・アップグレードまたはクラシック・アップグレードの実行中に問題が発生した場合は、CDBで互換性違反が記録されます。

互換性違反は次のいずれかです。

  • 警告

    データベースによってアラート・ログに警告が記録され、PDBが通常どおりにオープンされます。警告メッセージは表示されません

  • エラー

    PDBをオープンすると、PDBがエラーを伴って変更されたというメッセージがデータベースに表示され、アラート・ログにエラーが記録されます。エラーの原因となった状況を修正する必要があります。エラーがある場合、PDBはオープンできますが、PDBへのアクセスは互換性違反に対処できるよう、RESTRICTED SESSION権限を持つユーザーに制限されます。PDB_PLUG_IN_VIOLATIONSビューを問い合せることで、違反の説明を表示できます。

関連項目:

リプレイ・アップグレードを無効または有効にする方法

デフォルトでは、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)方式は、PDBおよびCDBのアップグレードで有効になります。ただし、リプレイ・アップグレード方式の使用を有効または無効にできます。

パラレル・アップグレード・ユーティリティ(catctl.pl)のデフォルトであるリプレイ・アップグレードの実行を無効にするには、次のコマンドをCDB$ROOTまたは特定のPDBで実行します。

ALTER DATABASE UPGRADE SYNC OFF

リプレイ・アップグレード動作を再び有効にするには、次のコマンドを入力します。

ALTER DATABASE UPGRADE SYNC ON

パラレル・アップグレード・ユーティリティ(catctl.pl)のパラメータ-tを設定することによって、リプレイ・アップグレードではないアップグレードを選択することもできます。これにより、リプレイ・アップグレードではない、従来のスクリプトを作成する方法を使用するアップグレードが強制されます。

ノート:

CDB$ROOTまたは特定のPDBのどちらに接続しているかに応じて、CDB全体または個々のPDBのリプレイ・アップグレード方式の使用を管理できます。

  • CDB$ROOTUPGRADE SYNCOFFが設定されている場合、CDBに接続されているPDBではリプレイ・アップグレード方式は使用されません。
  • CDB$ROOTではUPGRADE SYNCONが設定されているが、PDBではOFFが設定されている場合、リプレイ・アップグレード方式は、UPGRADE SYNCOFFのPDBでは使用されませんが、CDBに接続されている他のすべてのPDBでは使用されます。
  • CDB$ROOTUPGRADE SYNCONが設定され、すべてのPDBでONが設定されている場合は(デフォルト)、CDBに接続されているすべてのPDBでリプレイ・アップグレード方式が使用されます。

ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更

pdb_change_state句を指定したALTER PLUGGABLE DATABASE文を使用して、PDBのオープン・モードを変更できます。

前提条件

ALTER PLUGGABLE DATABASE文でPDBのオープン・モードを変更するには、次の前提条件を満たす必要があります。

  • 現在のユーザーに、次のいずれかの管理権限が必要です。これは、共通で付与されているか、またはPDB内でローカルに付与されている必要があります。

    • SYSDBA。接続時にAS SYSDBAを使用することで権限が行使されている。

    • SYSOPER。接続時にAS SYSOPERを使用することで権限が行使されている。

    • SYSBACKUP。接続時にSYSBACKUPを使用することで権限が行使されている。

    • SYSDG。接続時にAS SYSDGを使用することで権限が行使されている。

    ノート:

    現在のコンテナがPDBである場合は、PDBのオープン・モードを変更できます。

  • RESTRICTED SESSIONが有効になっており、PDBがオープンされている場合は、RESTRICTEDを指定する必要があります。

  • Oracle RAC CDBでは、1つ以上のOracle RACインスタンス上でPDBがオープンされている場合に、それをさらに他のインスタンスでもオープンできます。ただし、そのPDBは、それがすでにオープンされているインスタンス上と同じモードでオープンする必要があります。一部のインスタンスでPDBをクローズし、他のインスタンスでオープンできます。

ALTER PLUGGABLE DATABASE文を使用してPDBを特定のターゲット・モードにするには、次の表で説明されている要件を満たす必要があります。

表16-5 ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更

PDBのターゲット・モード ALLキーワードが含まれている FORCEキーワードが含まれている ルートに必要なモード 変更対象のPDBごとに必要なモード

読取り/書込み

はい

はい

読取り/書込み

マウント、読取り専用または読取り/書込み

読取り/書込み

はい

いいえ

読取り/書込み

マウントまたは読取り/書込み

読取り/書込み

いいえ

はい

読取り/書込み

マウント、読取り専用または読取り/書込み

読取り/書込み

いいえ

いいえ

読取り/書込み

マウント

読取り専用

はい

はい

読取り専用または読取り/書込み

マウント、読取り専用または読取り/書込み

読取り専用

はい

いいえ

読取り専用または読取り/書込み

マウント済または読取り専用

読取り専用

いいえ

はい

読取り専用または読取り/書込み

マウント、読取り専用または読取り/書込み

読取り専用

いいえ

いいえ

読取り専用または読取り/書込み

マウント

ハイブリッド読取り専用 はい はい 読取り専用または読取り/書込み  
ハイブリッド読取り専用 はい いいえ 読取り専用または読取り/書込み マウント、読取り専用または読取り/書込み
ハイブリッド読取り専用 いいえ はい 読取り専用または読取り/書込み マウント済または読取り専用
ハイブリッド読取り専用 いいえ いいえ 読取り専用または読取り/書込み マウント、読取り専用または読取り/書込み

移行

はい

該当なし

読取り専用または読取り/書込み

マウント

移行

いいえ

該当なし

読取り専用または読取り/書込み

マウント

マウント

はい

該当なし

読取り専用または読取り/書込み

マウント、読取り専用、移行または読取り/書込み

マウント

いいえ

該当なし

読取り専用または読取り/書込み

読取り専用、移行または読取り/書込み

オープン・モードを変更するには:

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. pdb_change_state句を含むALTER PLUGGABLE DATABASE文を実行します。

例16-25 リストされたPDBのオープン・モードの変更

この文は、PDB salespdbおよびhrpdbのオープン・モードを読取り/書込みモードでオープンするよう変更します。

ALTER PLUGGABLE DATABASE salespdb, hrpdb
   OPEN READ WRITE;

この文は、PDB salespdbのオープン・モードを読取り専用モードでオープンするよう変更します。RESTRICTEDにより、PDBでのRESTRICTED SESSION権限を持つユーザーのみがPDBにアクセスできることを指定します。

ALTER PLUGGABLE DATABASE salespdb
   OPEN READ ONLY RESTRICTED;

この文は、PDB salespdbのオープン・モードを移行モードでオープンするよう変更します。

ALTER PLUGGABLE DATABASE salespdb
   OPEN UPGRADE;

例16-26 すべてのPDBのオープン・モードの変更

次の問合せを実行して、CDBに関連付けられるPDBごとのオープン・モードを表示します。

SELECT NAME, OPEN_MODE FROM V$PDBS WHERE CON_ID > 2;
 
NAME                           OPEN_MODE
------------------------------ ----------
HRPDB                          READ WRITE
SALESPDB                       MOUNTED
DWPDB                          MOUNTED

hrpdbはすでに読取り/書込みモードであることに注意してください。salespdbおよびdwpdbのオープン・モードを読取り/書込みモードでオープンするよう変更するには、次の文を使用します。

ALTER PLUGGABLE DATABASE ALL
   OPEN READ WRITE;

hrpdb PDBはすでに読取り/書込みオープン・モードであるため、変更されません。2つのPDBはマウント・モードであり、1つのPDB (hrpdb)は指定されたモード(読取り/書込み)であるため、この文はエラーを返しません。同様に、すべてのPDBがマウント・モードである場合、この文はエラーを返しません。

ただし、いずれかのPDBが読取り専用モードである場合、この文はエラーを返します。エラーを回避してCDB内ですべてのPDBを読取り/書込みモードで開くには、FORCEキーワードを指定します。

ALTER PLUGGABLE DATABASE ALL
   OPEN READ WRITE FORCE;

FORCEのキーワードが含まれていると、読取り専用モードのPDBを含むすべてのPDBは読取り/書込みモードでオープンされます。

例16-27 リストされたPDBを除くすべてのPDBのオープン・モードの変更

この文は、salespdbおよびhrpdbを除くすべてのPDBのモードをマウント・モードに変更します。

ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb
   CLOSE IMMEDIATE;

ノート:

PDBのオープン・モードを変更するALTER PLUGGABLE DATABASE文は、インスタンス固有です。したがって、Oracle RACインスタンスに接続しているときにこの文を発行する場合、この文はそのインスタンスのPDBのオープン・モードにのみ影響を及ぼします。

関連項目:

PDBユーザーの読取り専用アクセス権の設定

ALTER USER文やCREATE USER文を使用して、PDBへのローカル・ユーザーのアクセス権をREAD ONLYまたはREAD WRITEに設定できます。

PDBユーザーの読取り専用アクセス権を設定するには

ALTER USER文またはCREATE USER文でREAD ONLY句を使用して、PDBユーザーに読取り専用アクセス権を設定できます。PDBユーザーに対して読取り専用アクセス権を有効にした場合は、そのユーザーがPDBに接続したときは常に、セッションの動作が、データベースが読取り専用モードでオープンされているのと同様になり、ユーザーが書込み操作を実行できなくなります。この文は、ALTER USERまたはCREATE USER権限を持つすべてのユーザーが実行できます。ローカル・ユーザーの状態は*_USERSビューで確認できます。

例16-28 PDBユーザーの読取り専用アクセス権の有効化

PDBローカル・ユーザーに対して読取り専用アクセス権を有効にするには、READ ONLY句を指定してALTER USER文を使用します。READ ONLY句をCREATE USER文で使用することもできます。

alter user user1 read only;

例16-29 READ WRITE句によるPDBユーザーの読取り専用アクセス権の取消し

PDBローカル・ユーザーの読取り専用アクセス権を取り消すには、READ WRITE句を指定してALTER USER文を使用します。

alter user user1 read write;

例16-30 CREATE USER句によるPDBユーザーの読取り専用アクセス権の設定

PDBローカル・ユーザーの読取り専用アクセス権の設定には、READ ONLY句を指定してCREATE USER文を使用するという方法もあります。

create user u1 identified by u1 read only;

CDB再起動時のPDBのオープン・モードの保持または破棄

pdb_save_or_discard_state句を指定してALTER PLUGGABLE DATABASE SQL文を使用すると、CDBの再起動時に1つ以上のPDBのオープン・モードを保持できます。

次に示す方法で実行できます。

  • CDBの再起動時にPDBのモードを保持するには、SAVE STATEを指定します。

    たとえば、CDBの再起動前にPDBがオープンの読取り/書込みモードである場合、CDBの再起動後のPDBはオープンの読取り/書込みモードです。CDBの再起動前にPDBがマウント・モードの場合、CDBの再起動後のPDBはマウント・モードです。

  • CDBの再起動時にPDBのオープン・モードを無視するには、DISCARD STATEを指定します。

    PDBにDISCARD STATEを指定すると、CDBの再起動後のPDBは常にマウントされます。

変更するPDBは、次の方法で指定できます。

  • 1つ以上のPDBをリストします。

  • すべてのPDBを変更するには、ALLを指定します。

  • リストされたPDBを除くすべてのPDBを変更するには、ALL EXCEPTを指定します。

Oracle RAC CDBの場合、pdb_save_or_discard_state句でinstances句を使用すると、PDBのオープン・モードを保持するインスタンスを次の方法で指定できます。

  • 次の形式で、instances句に1つ以上のインスタンスをリストします。

    INSTANCES = ('instance_name' [,'instance_name'] … )
    
  • すべての実行中のインスタンスのPDBを変更するには、次の例のように、instances句にALLを指定します。

    INSTANCES = ALL
    
  • リストされたインスタンスを除くすべてのインスタンスのPDBを変更するには、次の形式で、instances句にALL EXCEPTを指定します。

    INSTANCES = ALL EXCEPT('instance_name' [,'instance_name'] … )
    

Oracle RAC CDBのPDBの場合、SAVE STATEおよびDISCARD STATEは現行インスタンスのモードにのみ作用します。instances句に複数のインスタンスを指定している場合でも、他のインスタンスのモードには作用しません。

pdb_save_or_discard_state句を指定してALTER PLUGGABLE DATABASE SQL文を発行するには、現行ユーザーにルートでのALTER DATABASE権限が必要です。

CDBのPDBについて保存された状態を確認するには、DBA_PDB_SAVED_STATESビューを問い合せます。

CDBの再起動時にPDBのオープン・モードを保持または破棄するには:

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. pdb_save_or_discard_state句を指定してALTER PLUGGABLE DATABASE文を実行します。

次の例では、CDBの再起動時に、1つ以上のPDBのオープン・モードを保持または破棄しています。

例16-31 CDB再起動時のPDBのオープン・モードの保持

この文は、CDBの再起動時にsalespdbのオープン・モードを保持します。

ALTER PLUGGABLE DATABASE salespdb SAVE STATE;

例16-32 CDB再起動時のPDBのオープン・モードの破棄

この文は、CDBの再起動時にsalespdbのオープン・モードを破棄します。

ALTER PLUGGABLE DATABASE salespdb DISCARD STATE;

例16-33 CDB再起動時のすべてのPDBのオープン・モードの保持

この文は、CDBの再起動時にすべてのPDBのオープン・モードを保持します。

ALTER PLUGGABLE DATABASE ALL SAVE STATE;

例16-34 CDB再起動時のリストされたPDBのオープン・モードの保持

この文は、CDBの再起動時にsalespdbおよびhrpdbのオープン・モードを保持します。

ALTER PLUGGABLE DATABASE salespdb, hrpdb SAVE STATE;

例16-35 CDB再起動時のリストされたPDB以外のすべてのPDBのオープン・モードの保持

この文は、salespdbおよびhrpdbを除くすべてのPDBのオープン・モードを保持します。

ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb SAVE STATE;

STARTUPおよびSHUTDOWNを使用したPDBのオープン・モードの変更

現在のコンテナがPDBの場合、SQL*PlusのSTARTUPコマンドを使用してPDBをオープンし、SQL*PlusのSHUTDOWNコマンドを使用してPDBをクローズできます。

SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更について

現在のコンテナがルートである場合、STARTUP PLUGGABLE DATABASEコマンドを使用すると、単一のPDBをオープンできます。

STARTUP PLUGGABLE DATABASEコマンドの次のオプションを使用して、PDBをオープンします。

  • FORCE

    読取り/書込みモードで再オープンする前に、オープン状態のPDBをクローズします。このオプションが指定されている場合、他のオプションは使用できません。

  • RESTRICT

    PDBでRESTRICTED SESSIONシステム権限を持つユーザーのみがそのPDBにアクセスできるようにします。

    OPEN READ WRITEOPEN READ ONLYも指定されていない場合、PDBは、属しているCDBがフィジカル・スタンバイ・データベースのときは読取り専用モードでオープンされます。そうでないときは、PDBは読取り/書込みモードでオープンされます。

  • OPEN open_pdb_options

    PDBを読取り/書込みモードまたは読取り専用モードでオープンします。OPEN READ WRITEまたはOPEN READ ONLYを指定できます。他のオプションを使用しないでOPENを指定した場合は、READ WRITEがデフォルトになります。

次の前提条件を満たしている必要があります。

  • 現行ユーザーには、SYSDBASYSOPERSYSBACKUPまたはSYSDG管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS SYSDBAAS SYSOPERAS SYSBACKUPまたはAS SYSDGをそれぞれ使用して、権限を行使する必要があります。

  • RESTRICTED SESSIONを有効にした場合、RESTRICTはPDBがオープンされているときに指定する必要があります。

また、STARTUP PLUGGABLE DATABASEコマンドを使用してPDBを特定のターゲット・モードにするには、次の表で説明されている要件を満たす必要があります。

表16-6 STARTUP PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更

PDBのターゲット・モード FORCEオプションが含まれている ルートに必要なモード 変更対象のPDBの必要なモード

読取り/書込み

はい

読取り/書込み

マウント、読取り専用または読取り/書込み

読取り/書込み

いいえ

読取り/書込み

マウント

読取り専用

いいえ

読取り専用または読取り/書込み

マウント

ノート:

現在のコンテナがPDBである場合にPDBのオープン・モードを変更するには、STARTUPコマンドを使用することもできます。

STARTUPコマンドを使用したPDBの起動

現在のコンテナがPDBである場合、SQL*PlusのSTARTUPコマンドでPDBをオープンできます。

STARTUPコマンドの次のオプションを使用して、PDBをオープンします。

  • FORCE

    読取り/書込みモードで再オープンする前に、オープン状態のPDBをクローズします。このオプションが指定されている場合、他のオプションは使用できません。

  • RESTRICT

    PDBでRESTRICTED SESSIONシステム権限を持つユーザーのみがそのPDBにアクセスできるようにします。

    OPEN READ WRITEOPEN READ ONLYも指定されず、RESTRICTが指定されている場合、PDBは、属しているCDBがフィジカル・スタンバイ・データベースのときに読取り専用でオープンされます。そうでないときは、PDBは読取り/書込みモードでオープンされます。

  • OPEN open_pdb_options

    PDBを読取り/書込みモードまたは読取り専用モードでオープンします。OPEN READ WRITEまたはOPEN READ ONLYを指定します。RESTRICTが指定されていない場合、READ WRITEが常にデフォルトです。

現在のコンテナがPDBの場合にSTARTUPコマンドを発行するには、次の前提条件を満たしている必要があります。

  • 現行ユーザーには、SYSDBASYSOPERSYSBACKUPまたはSYSDG管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS SYSDBAAS SYSOPERAS SYSBACKUPまたはAS SYSDGをそれぞれ使用して、権限を行使する必要があります。

  • FORCEオプションを使用する場合を除き、PDBをオープンするには、PDBがマウント・モードである必要があります。

  • PDBをマウント・モードにするには、そのPDBが読取り専用オープン・モードまたは読取り/書込みオープン・モードであることが必要です。

STARTUPコマンドを使用してPDBを変更するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

  2. STARTUPコマンドを実行します。

例16-36 STARTUPコマンドを使用してPDBを読取り/書込みモードでオープンする方法

STARTUP OPEN

例16-37 STARTUPコマンドを使用してPDBを読取り専用モードでオープンする方法

STARTUP OPEN READ ONLY

例16-38 STARTUPコマンドを使用してPDBを読取り専用制限モードでオープンする方法

STARTUP RESTRICT OPEN READ ONLY

例16-39 STARTUPコマンドおよびFORCEオプションを使用してPDBを読取り/書込みモードでオープンする方法

この例では、PDBが現在オープンしていると想定しています。FORCEオプションによって、PDBがクローズされ、その後、読取り/書込みモードでオープンされます。

STARTUP FORCE
SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更

STARTUP PLUGGABLE DATABASEコマンドを使用して、単一のPDBをオープンできます。

STARTUP PLUGGABLE DATABASEコマンドを使用してPDBを変更するには:

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. STARTUP PLUGGABLE DATABASEコマンドを実行します。

ノート:

現在のコンテナがルートである場合、CDBインスタンスはSQL*PlusのSHUTDOWNコマンドで常に停止されます。これを使用して個々のPDBをクローズすることはできません。

例16-40 STARTUPコマンドを使用してPDBを読取り/書込みモードでオープンする方法

STARTUP PLUGGABLE DATABASE hrpdb OPEN

例16-41 STARTUPコマンドを使用してPDBを読取り/書込み制限モードでオープンする方法

STARTUP PLUGGABLE DATABASE hrpdb RESTRICT

例16-42 STARTUPコマンドを使用してPDBを読取り専用制限モードでオープンする方法

STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY RESTRICT

例16-43 STARTUPコマンドを使用してPDBを読取り専用モードでオープンする方法

STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY

例16-44 STARTUPコマンドおよびFORCEオプションを使用してPDBを読取り/書込みモードでオープンする方法

この例では、hrpdb PDBが現在オープンしていることを想定しています。FORCEオプションによって、PDBがクローズされ、その後、読取り/書込みモードでオープンされます。

STARTUP PLUGGABLE DATABASE hrpdb FORCE
SHUTDOWNコマンドを使用したPDBの停止

現在のコンテナがPDBである場合、SQL*PlusのSHUTDOWNコマンドでPDBをクローズできます。

SHUTDOWNコマンドがPDBで正常に発行されると、PDBはマウント・モードになります。

SHUTDOWNモードは次のいずれかになります。

  • SHUTDOWNのみ指定した場合、PDBはNORMALモードで停止されます。

  • SHUTDOWN IMMEDIATEを指定した場合、PDBはIMMEDIATEモードで停止されます。

  • SHUTDOWN ABORTを指定した場合、PDBは強制的にクローズされます。

    単一インスタンスCDBでは、SHUTDOWN ABORTを指定する場合にPDBメディア・リカバリが必要です。Oracle Real Application Clusters (Oracle RAC) CDBでは、SHUTDOWN ABORTコマンドが最後のオープン・インスタンスをクローズする場合にPDBメディア・リカバリが必要です。

PDBキーストアがオープン状態であった場合にはPDBレベルでSHUTDOWNを発行してもそれはクローズされないということに注意してください。キーストアを閉じるには、ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "pdb_ks_pwd"コマンドを実行します。

前提条件

現在のコンテナがPDBである場合にSHUTDOWNコマンドを発行するには、次の前提条件を満たしている必要があります。

  • 現行ユーザーには、SYSDBASYSOPERSYSBACKUPまたはSYSDG管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS SYSDBAAS SYSOPERAS SYSBACKUPまたはAS SYSDGをそれぞれ使用して、権限を行使する必要があります。

  • PDBをクローズするには、そのPDBがオープンされている必要があります。

SHUTDOWNコマンドを使用してPDBを変更するには:

  1. SQL*Plusで、現在のコンテナがPDBであることを確認します。

  2. SHUTDOWNコマンドを実行します。

ノート:

  • 現在のコンテナがPDBの場合、SHUTDOWNコマンドは、CDBインスタンスではなくPDBのみをクローズします。

  • CDBで使用できるSHUTDOWN TRANSACTIONALと同等のSHUTDOWNコマンドは、PDBにはありません。

例16-45 SHUTDOWN IMMEDIATEコマンドを使用してPDBをクローズする方法

SHUTDOWN IMMEDIATE

Oracle RACでのPDBの起動および停止

SRVCTLコマンドを使用してPDBを管理できます。

ノート:

Oracle Database 21c以降では、非CDBのOracle Databaseアーキテクチャのインストールはサポートされなくなりました。ポリシー管理型のデータベース・デプロイメント・オプションは、Oracle Database 23cではサポートされなくなりました。

Oracle Database 21c以降では、PDBはOracle Clusterwareによって管理されるリソースです。sparkというPDBがあるraccontという管理者管理CDBを考えてみます。

ノート:

最初にPDBを作成せずにサービスを作成しようとすると、PDBリソースを最初に作成する必要があることを示すエラー・メッセージが表示されます。

カーディナリティに1、2またはALLを設定してPDB sparkが作成されていて、PDBにplugというサービスを作成する場合は、そのサービスに–cardinality引数も使用できます。-cardinality引数を指定せずにspark PDBを作成した場合、PDBに作成した新しいサービスでは、–cardinality引数ではなく-preferredまたは-available引数を使用します。

PDBはOracle Clusterwareのリソースとして管理されるため、一般的なOracle RACベースの管理動作が適用されます。このため、PDB sparkがオンライン状態で、このサービスをホストしているサーバー上でOracle Clusterwareが停止している場合、このサーバー上のOracle Clusterwareの再起動後に、PDBは元の状態にリストアされます。したがって、PDBの起動は、他のOracle RACデータベースと同様に自動化されます。

プラガブル・データベースを起動するには:
$ srvctl start pdb -db db_name -pdb pdb_name [-startoption start_options]
特定のノードでプラガブル・データベースを起動するには:
$ srvctl start pdb -db db_name -pdb pdb_name -node node_list 
   [-startoption start_options]

IMMEDIATEオプションを使用して、データベース内のすべてのノードでPDBおよびそのすべてのサービスを停止するには:

$ srvctl stop pdb -db db_name -pdb pdb_name -stopoption IMMEDIATE -drain_timeout 0
  -stopsvcoption IMMEDIATE 
特定のノードでプラガブル・データベースを停止するには:
$ srvctl stop pdb -db db_name -pdb pdb_name -node node_list
   [-stopoption stop_options] [-stopsvcoption stop_service_options 
   [-drain_timeout timeout]

Oracle RACデータベースをすべてのノードまたは特定のノードで再起動するときに、PDB sparkが再起動されないようにする場合は、次のコマンドを使用します。

srvctl disable pdb -db raccont -pdb spark [-node node_name]

PDBのplugサービスのステータスを表示するには、次のコマンドを使用します。

srvctl status service -db raccont -service plug -verbose

PDB sparkのステータスを表示するには、次のコマンドを使用します。

srvctl status pdb -db raccont -pdb plug -detail

PDBの構成を変更するには、次のコマンドを使用します。

srvctl modify pdb -db db_unique_name -pdb pdb_name 
     [-cardinality {num_of_instances | ALL}]
     [-maxcpu max_cpu_usage] [-mincpuunit min_cpu_usage] 
     [-rank rank] [-startoption start_options] 
     [-stopoption stop_options] [-policy policy]

ノート:

-cardinalityパラメータは、PDBの作成時に-cardinalityパラメータを設定した場合にのみ変更できます。