13 CDBの管理

マルチテナント・コンテナ・データベース(CDB)の管理には、コンテナへのアクセス、CDBの変更、DDL文の実行、およびオラクル社が提供するSQLスクリプトの実行などのタスクが含まれます。

注意:

この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。

この章のトピックは、次のとおりです:

13.1 CDB管理について

CDBの管理は非CDBの管理と似ていますが、いくつかの違いがあります。

ほとんどの違いは、一部の管理タスクはCDB全体に適用されますが、それ以外のタスクは特定のコンテナに適用されるために発生します。

この項では、次の項目について説明します。

13.1.1 現在のコンテナについて

CDB内の各コンテナのデータ・ディクショナリは分かれており、現在のコンテナのデータ・ディクショナリは、名前解決と権限の承認に使用されます。

現在のコンテナは、CDBルート、アプリケーション・ルート、PDBまたはアプリケーションPDBにできます。各セッションには、任意の時点で現在のコンテナがそれぞれ1つのみ含まれます。ただし、セッションでは、あるコンテナから別のコンテナへ切替えができます。

各コンテナにはCDB内で一意のIDと名前があります。USERENVネームスペースのCON_IDおよびCON_NAMEパラメータを使用すると、SYS_CONTEXTファンクションで現在のコンテナのIDと名前を判断できます。たとえば、次の問合せは現在のコンテナ名を返します。

SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;

コンテナには様々な方法でアクセスできます。たとえば、SQL*PlusのCONNECTコマンドを使用し、ALTER SESSION SET CONTAINER文を使用すると、現在のセッションのコンテナを切り替えることができます。

CDBの現在のコンテナには、次のルールが適用されます。

  • 共通ユーザーの場合にのみ、現在のコンテナはCDB$ROOT (CDBルート)にできます。

  • 共通ユーザーおよびローカル・ユーザーの場合に、現在のコンテナは特定のPDBにできます。

  • アプリケーション・ルートで作成された共通ユーザーまたはアプリケーション共通ユーザーの場合、現在のコンテナにできるのはアプリケーション・ルートのみです。

  • 共通ユーザー、アプリケーション共通ユーザーおよびローカル・ユーザーの場合に、現在のコンテナは特定のアプリケーションPDBにできます。

  • SQL文にCONTAINER = ALLが含まれる場合、現在のコンテナはCDBルートまたはアプリケーション・ルートである必要があります。

    CONTAINER句は、CREATE USERALTER USERCREATE ROLEGRANTREVOKEおよびALTER SYSTEM文などのいくつかのSQL文に含めることができます。CONTAINER = ALLに関する次のルールに注意してください。

    • SQL文にCONTAINER = ALLが含まれ、現在のコンテナがCDBルートの場合、SQL文は、すべてのPDB、アプリケーション・ルートおよびアプリケーションPDBを含む、CDB内のすべてのコンテナに影響します。

    • SQL文にCONTAINER = ALLが含まれ、現在のコンテナがアプリケーション・ルートの場合、SQL文は、アプリケーション・ルートおよびアプリケーション・ルートに属するすべてのアプリケーションPDBを含む、アプリケーション・コンテナ内のすべてのコンテナに影響します。SQL文は、CDBルート、PDB、または現在のアプリケーション・ルートに属さないアプリケーションPDBには影響しません。

    • 共通にSET CONTAINER権限が付与されている共通ユーザーまたはアプリケーション共通ユーザーのみ、CONTAINER = ALLを含むSQL文を実行できます。

13.1.2 CDBにおける管理タスクの概要

共通ユーザーがCDBの管理タスクを実行します。

共通ユーザーは1つのIDを持ち、CDBルート、アプリケーション・ルート、PDBまたは権限を持つアプリケーションPDBにログインできます。CDBインスタンスの起動などの一部のタスクは、共通ユーザーのみが実行できます。

その他の管理タスクについては、CDBと非CDBとで違いはありません。次の表は、これらのタスクの一部についての説明と、関連ドキュメントへのポインタを示しています。

表13-1 CDBと非CDBに共通する管理タスク

タスク 説明 追加情報

CDBインスタンスの起動

CDBインスタンスを起動するには、現在のユーザーは、その現在のコンテナがCDBルートである共通ユーザーである必要があります。

CDBをオープンすると、CDBルートがオープンされますが他のコンテナはマウントされます。ALTER PLUGGABLE DATABASE文を使用して、1つ以上のコンテナのオープン・モードを変更します。

データベースの起動の詳細は、『Oracle Database管理者ガイド』を参照してください

「1つ以上のPDBのオープン・モードの変更」

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

「現在のコンテナについて」

プロセスの管理

CDBには、CDBルートとすべてのコンテナによって共有された1セットのバックグラウンド・プロセスが存在します。

プロセスの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

メモリーの管理

CDBには、単一のシステム・グローバル領域(SGA)および単一の集計プログラム・グローバル領域(PGA)があります。CDBで必要なメモリーは、CDBに含められるすべてのコンテナのメモリー要件の合計となります。

メモリーの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

セキュリティの管理

CDBでは、共通ユーザー、アプリケーション共通ユーザーおよびローカル・ユーザーを作成および削除できます。また、これらのユーザーに対して権限の追加および取消しを行うこともできます。共通ユーザーおよびアプリケーション共通ユーザーのCONTAINER_DATA属性を管理することもできます。

さらに、次のロールを適切なユーザーに付与します。

  • CDB_DBAロールをCDB管理者に付与します。

  • アプリケーション・コンテナ管理者とPDB管理者にPDB_DBAロールを付与します。

『Oracle Databaseセキュリティ・ガイド』

エラーおよびアラートの監視

CDBには、CDB全体について1つのアラート・ログが存在します。アプリケーション・コンテナ、PDBまたはアプリケーションPDBの名前は、該当する場合にトレース・ファイルのレコードに含まれます。

エラーおよびアラートの監視の詳細は、『Oracle Database管理者ガイド』を参照してください

診断データの管理

CDBでは、Oracle Databaseの障害診断インフラストラクチャおよび自動診断リポジトリ(ADR)を使用できます。

診断データの管理の詳細は、『Oracle Database管理者ガイド』 を参照してください。

制御ファイルの管理

CDBには1つの制御ファイルが存在します。

制御ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

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

CDBには、1つのオンラインREDOログ・ファイルおよび1セットのアーカイブREDOログ・ファイルが存在します。

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

アーカイブREDOログ・ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

表領域の管理

CDBルートおよび個々のコンテナの表領域および一時表領域を作成、変更および削除できます。また、CDBルートのデフォルトの表領域、デフォルトの表領域タイプおよびデフォルトの一時表領域を指定することもできます。CDBルートには、オラクル社が提供する表領域(SYSTEM表領域など)の独自のセットがあり、他のコンテナにはオラクル社が提供する表領域の独自のセットがあります。

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

「CDBルートへの接続時のコンテナの変更について」

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

CDBルートには独自のデータファイルがあり、他のコンテナには独自のデータファイルがあります。CDBでは、非CDBの場合と基本的に同じ方法でデータファイルと一時ファイルを管理できます。ただし、CDBには次の例外が適用されます。

  • CREATE PLUGGABLE DATABASEまたはALTER PLUGGABLE DATABASE文でSTORAGE句を使用して、コンテナのデータファイルで使用される記憶域の量を制限できます。

  • CDBルートおよび個々のコンテナについてデフォルト一時表領域が存在します。

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

「CDBルートへの接続時のコンテナの変更について」

「ストレージ制限」

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

UNDOの管理

CDBは、ローカルUNDOモードまたは共有UNDOモードで実行できます。ローカルUNDOモードは、CDB内のすべてのコンテナがローカルUNDOを使用することを意味します。共有UNDOモードは、単一インスタンスCDBに1つのアクティブなUNDO表領域があるか、Oracle RAC CDBの場合はインスタンスごとに1つのアクティブなUNDO表領域があることを意味します。

CDBでは、UNDO_MANAGEMENT初期化パラメータをAUTOに設定する必要があり、UNDOデータの管理にUNDO表領域が必要です。

「ALTER DATABASEを使用したCDBのUNDOモードの設定」

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

「現在のコンテナについて」

コンテナ間のデータの移動

非CDB間でデータを移動する場合と同じ方法を使用して、コンテナ間でデータを移動できます。たとえば、データをトランスポートしたり、データ・ポンプ・エクスポートおよびインポートを使用してデータを移動できます。

データのトランスポートの詳細は、『Oracle Database管理者ガイド』を参照してください

『Oracle Databaseユーティリティ』

Oracle Managed Filesの使用

Oracle Managed Filesを使用すると、CDBと非CDB両方の管理を簡素化できます。

Oracle Managed Filesの使用の詳細は、『Oracle Database管理者ガイド』を参照してください

透過的データ暗号化の使用

透過的データ暗号化は、個々の表の列をデータファイルに格納する前に暗号化するか、表領域全体を暗号化する機能です。CDBには、コンテナごとに透過的データ暗号化の独自のマスター・キーが存在し、適用可能な場合、ADMINISTER KEY MANAGEMENT SQL文によって、コンテナごとにCDBレベルでキー管理を行うことができます。

Oracle Database Advanced Securityガイド

「現在のコンテナについて」

スタンバイ・データベースの使用

Oracle Data Guardを使用すると、CDBのフィジカル・スタンバイまたはロジカル・スタンバイを構成できます。Data Guardは、CDB内の個々のコンテナではなくCDB全体を操作します。

『Oracle Data Guard概要および管理』

Oracle Database Vaultの使用

Oracle Database Vault共通レルムは、共通オブジェクトのアプリケーション・ルートにスコープ指定できます。Database Vault共通コマンド・ルールは、CDBまたはアプリケーション・ルートにスコープ指定できます。ローカル・レルムとコマンド・ルールは、個々のPDBまたはアプリケーションPDBにローカルにスコープ指定できます。Oracle Database Vaultセキュリティ・オブジェクトがCDBルートまたはアプリケーション・ルートにある場合は、セキュリティ・オブジェクトの施行はOracle Database Vaultが有効になっているコンテナにのみ適用されます。

Oracle Database Vaultの管理者ガイド

データベースの削除

CDBを削除すると、CDB内のすべてのコンテナがデータとともに削除されます。これらのコンテナには、CDBルートおよびPDBシードと、すべてのアプリケーション・コンテナ、アプリケーション・シード、PDBおよびアプリケーションPDBが含まれます。

DROP PLUGGABLE DATABASE文を使用して、個々のアプリケーション・コンテナ、アプリケーション・シード、PDBおよびアプリケーションPDBを削除することもできます。

データベースの削除の詳細は、『Oracle Database管理者ガイド』を参照してください

「PDBの削除」

関連項目:

CDBのアーキテクチャの詳細は、「マルチテナント・アーキテクチャの概要」を参照してください

13.1.3 CDBにおける管理性機能の使用の概要

CDB内のOracle Databaseの各管理機能について、データの場所とデータの可視性を理解することが重要です。

CDBにおいて、Oracle Databaseの管理性機能のためのデータがどこに格納されるかを理解することは重要です。この機能のためデータがCDBルートにのみ格納されている場合、PDBが切断されていると、PDBに関連するデータは含められません。ただし、この機能のためデータがPDBに格納されている場合、PDBに関連するデータはPDBが切断されていても含められ、PDBが同じCDBまたは別のCDBに接続されると、このデータはPDBの一部として存続します。

また、異なるユーザーに対して表示されるデータについて理解することも重要です。通常、CDBでは、共有ユーザーの現在のコンテナがCDBルートである場合、共通ユーザーはCDBルートおよび複数のPDBのデータを表示できます。共通ユーザーは、コンテナ・データ・オブジェクトを問い合せてこのデータを表示できます。表示できる特定のデータは、管理性機能によって異なります。現在のコンテナがPDBであるユーザーは、そのPDBのデータのみを表示できます。

次の表で、CDBにおける管理性機能の動作について説明します。

表13-2 CDBにおける管理性機能

管理性機能 データの場所 データの可視性 追加情報

アクティブ・セッション履歴(ASH)

ASHにより、アクティブ・データベース・セッションに関する情報が収集されます。この情報を使用して、パフォーマンス上の問題を分析および識別できます。

ほとんどのASHデータは、メモリーに格納されます。ごく一部のASHデータ・サンプルは、CDBルートに格納されます。

PDBが切断されていると、PDBに関連するASHデータは含まれません。

現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのASHデータを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのASHデータのみを表示できます。

Oracle Database 2日でパフォーマンス・チューニング・ガイド

Oracle Databaseパフォーマンス・チューニング・ガイド

アラート

アラートとは、考えられる問題の通知です。

PDBに関連するしきい値設定は、PDBに格納されます。

しきい値に違反したときに転送されるアラートは、CDBルートのアラート・キューにエンキューされます。

PDBに関連するしきい値設定は、PDBが切断されていても含まれます。PDBが切断されていると、PDBに関連するアラートは含まれません。

現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのアラートを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのアラートしきい値およびアラートのみを表示できます。

エラーおよびアラートの監視の詳細は、『Oracle Database管理者ガイド』を参照してください

自動データベース・メンテナンス・タスク

自動化データベース・メンテナンス・タスクとは、データベースのメンテナンス操作を実行するために、一定の間隔をおいて自動的に開始されるタスクです。自動タスクには、自動オプティマイザ統計収集、自動セグメント・アドバイザ・タスクおよび自動SQLチューニング・アドバイザ・タスクが含まれます。

ENABLE_AUTOMATIC_MAINTENANCE_PDB初期化パラメータは、CDB内のすべてのPDBまたはCDB内の個別のPDBでの自動メンテナンス・タスクの実行を有効または無効にできます。

AUTOTASK_MAX_ACTIVE_PDBS初期化パラメータは、自動メンテナンス・タスクを同時(メンテナンス・ウィンドウ中)にスケジュールできるPDBの数を制限します。

ユーザーは、メンテナンス期間をスケジュールして、現在のコンテナのみのメンテナンス・タスクを有効または無効にできます。現在のコンテナがCDBルートである場合、変更はCDBルートにのみ適用されます。現在のコンテナがPDBの場合、変更はPDBにのみ適用されます。

PDBに関連するデータは、自動オプティマイザ統計収集および自動セグメント・アドバイザのPDBに格納されます。このデータは、PDBが切断されていても含まれます。

自動SQLチューニング・アドバイザは、CDBルートでのみ実行されます。自動SQLチューニング・アドバイザによって収集されたデータの詳細は、この表のSQLチューニング・アドバイザの行を参照してください。

管理性機能(自動オプティマイザ統計収集、オプティマイザ統計アドバイザ、自動セグメント・アドバイザおよび自動SQLチューニング・アドバイザ)に関するデータの可視性の詳細は、この表の適切な行を参照してください。

データベースの自動メンテナンス・タスクの詳細は、『Oracle Database管理者ガイド』を参照してください

ENABLE_AUTOMATIC_MAINTENANCE_PDB初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください

AUTOTASK_MAX_ACTIVE_PDBS初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください

自動データベース診断モニター(ADDM)

ADDMを使用すると、データベースのパフォーマンスを診断して、識別された問題の解決方法を判断できます。

ADDMによって実行されるものはすべて、CDBルートで実行する必要があります。すべてのADDM結果はCDBルートに格納されます。

ADDMにより、現在の分析ターゲットのコンテキスト内でPDBのアクティビティが分析されます。ADDMでは、一度に1つのPDBを分析するわけではありません。以前のリリースと同様に、ADDMは、インスタンス全体またはOracle Real Application Clusters (Oracle RAC)データベースのいずれかのターゲットを使用して実行されます。

PDBが切断されていると、PDBに関連するADDM結果は含まれません。

ADDM結果は、現在のコンテナがCDBルートである共通ユーザーにのみ表示されます。ADDM結果には、複数のPDBに関する情報が含まれる場合があります。現在のコンテナがPDBである場合、ADDM結果を表示することはできません。

Oracle Database 2日でデータベース管理者

Oracle Databaseパフォーマンス・チューニング・ガイド

自動オプティマイザ統計収集

自動オプティマイザ統計収集により、データベース内に統計がないか、古い統計のみがあるすべてのスキーマ・オブジェクトに関するオプティマイザ統計を収集します。このタスクで収集された統計は、SQLの実行パフォーマンスを改善するためにSQL問合せオプティマイザによって使用されます。

自動オプティマイザ統計収集タスクによりPDBのデータが収集されると、このデータはPDBに格納されます。このデータは、PDBが切断されていても含まれます。

現在のコンテナがCDBルートである共通ユーザーは、PDBのオプティマイザ統計データを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのオプティマイザ統計データのみを表示できます。

「PDBに対するOracle Resource Managerの使用」

Oracle Database SQLチューニング・ガイド

自動セグメント・アドバイザ

自動セグメント・アドバイザでは、再生可能な領域が存在しているセグメントを識別し、それらのセグメントの断片化を解消する方法について推奨事項を生成します。

自動セグメント・アドバイザによってPDBのデータが収集されると、このデータはPDBに格納されます。このデータは、PDBが切断されていても含まれます。

現在のコンテナがCDBルートである共通ユーザーは、PDBの自動セグメント・アドバイザ・データを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBの自動セグメント・アドバイザ・データのみを表示できます。

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

「PDBに対するOracle Resource Managerの使用」

自動ワークロード・リポジトリ(AWR)

AWRにより、問題の検出および自己チューニングを目的として、パフォーマンス統計を収集、処理およびメンテナンスします。このデータはデータベースに格納されます。収集されたデータは、レポートとビューに表示できます。

AWRレポートは、CDBルートまたはPDBで生成できます。CDBルートで生成されたAWRレポートはCDB全体に関係し、PDBが現在のコンテナであるときに生成されたAWRレポートはそのPDBにのみ関係します。

CDBルートで生成されたAWRデータは、そのCDBルートに格納されます。PDBで生成されたAWRデータは、PDBに格納されます。

PDBが切断されている場合、CDBルートに格納されているAWRデータは含められません。

PDBに格納されたAWRデータは、PDBが切断されていても含められます。

現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのAWRデータを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのAWRデータのみを表示できます。

Oracle Databaseパフォーマンス・チューニング・ガイド

データベース・リプレイ

データベース・リプレイは、Oracle Real Application Testingの機能です。データベース・リプレイは、データベースのワークロードを取得して、テスト・データベースで正確にそれをリプレイします。

データベースの取得およびリプレイに関する情報は、CDBルートに保存されます。

現在のコンテナがCDBルートである共通ユーザーは、データベースの取得およびリプレイの情報を表示できます。

『Oracle Databaseテスト・ガイド』

オプティマイザ統計アドバイザ

オプティマイザ統計アドバイザは、統計の収集方法を分析し、統計収集を微調整するために行うことのできる変更を提案します。

PDBに関連するデータは、オプティマイザ統計アドバイザのPDBに格納されます。このデータは、PDBが切断されていても含まれます。

現在のコンテナがCDBルートである共通ユーザーは、PDBのオプティマイザ統計アドバイザ・データを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのオプティマイザ統計アドバイザ・データのみを表示できます。

Oracle Database SQLチューニング・ガイド

SQL管理ベース(SMB)

SMBにより、文のログ、計画履歴、SQL計画ベースラインおよびSQLプロファイルが、データ・ディクショナリに格納されます。

PDBに関連するSMBデータは、PDBに格納されます。PDBに関連するSMBデータは、PDBが切断されていても含められます。

現在のコンテナがCDBルートである共通ユーザーは、PDBのSMBデータを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのSMBデータのみを表示できます。

Oracle Database SQLチューニング・ガイド

SQLパフォーマンス・アナライザ(SPA)

SPAでは、SQLチューニングおよびその他のシステム変更がSQLパフォーマンスに及ぼす影響を分析できます。通常、SPAはデータベース・リプレイで使用されます。

現在のコンテナがCDBルートである共通ユーザーは、任意のPDBのSPAを実行できます。この場合、SPAの結果データはCDBルートに格納され、PDBが切断されている場合は含められません。

現在のコンテナがPDBであるユーザーは、そのPDBについてSPAを実行できます。この場合、SPA結果データはPDBに格納され、PDBが切断されていても含められます。

現在のコンテナがCDBルートである共通ユーザーは、PDBのSPA結果データを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのSPA結果データのみを表示できます。

『Oracle Databaseテスト・ガイド』

SQLチューニング・セット(STS)

STSは、1つ以上のSQL文とその実行統計および実行コンテキストを含むデータベース・オブジェクトで、ユーザーの優先順位ランキングを含む場合があります。

STSを使用すると、SQL文のグループをチューニングしたり、SPAを使用してパフォーマンスをテストできます。

STSはCDBルートまたは任意のPDBに格納できます。CDBルートに格納されている場合は、任意のPDBからSQL文をロードできます。

PDBが切断されていると、STSにPDBからのSQL文が含まれている場合でも、CDBルートに格納されたSTSは含められません。

PDBに格納されたSTSは、PDBが切断されていても含められます。

現在のコンテナがCDBルートである共通ユーザーは、CDBルートに格納されたSTSデータのみを表示できます。

現在のコンテナがPDBであるユーザーは、そのPDBのSTSデータのみを表示できます。

Oracle Database SQLチューニング・ガイド

SQLチューニング・アドバイザ

SQLチューニング・アドバイザでは、高負荷SQL文として識別されたSQL文が最適化されます。

自動SQLチューニング・アドバイザ・データは、CDBルートに格納されます。このデータには、PDBで実行され、アドバイザによって分析されたSQL文に関する結果が含まれていることがありますが、PDBが切断されている場合、これらの結果は含まれません。

現在のコンテナがCDBルートである共通ユーザーは、任意のPDBからのSQL文についてSQLチューニング・アドバイザを手動で実行できます。文をチューニングすると、その文を実行する任意のコンテナでチューニングされます。

現在のコンテナがPDBであるユーザーも、PDBからのSQL文についてSQLチューニング・アドバイザを手動で実行できます。SQLチューニング・アドバイザがPDBから手動で実行される場合、その結果は実行元のPDBに格納されます。この場合、文は現在のPDB用にのみチューニングされ、PDBが切断されているとPDBに関連する結果が含まれます。

SQLチューニング・アドバイザが自動的に実行される場合、その結果は、現在のコンテナがCDBルートである共通ユーザーにのみ表示されます。現在のコンテナがPDBである場合、これらの結果を表示することはできません。

SQLチューニング・アドバイザが、現在のコンテナがPDBであるユーザーによって手動で実行された場合、結果は現在のコンテナがそのPDBであるユーザーにのみ表示されます。

Oracle Database 2日でパフォーマンス・チューニング・ガイド

Oracle Database SQLチューニング・ガイド

SPAまたはSQLチューニング・アドバイザをPDBからのSQL文について実行するには、共通ユーザーに次の権限が必要です。

  • PDBにおける共通権限SET CONTAINERまたはローカル権限SET CONTAINER

  • PDBでSQL文を実行するために必要な権限

関連項目:

13.1.4 CDB内表領域の管理の概要

表領域とは、記憶域を使用するデータベース・オブジェクト(表や索引など)の論理記憶域コンテナです。

物理レベルでは、表領域のデータは、1つ以上のデータファイルまたは一時ファイルに格納されます。ALTER DATABASE文を使用すると、CDB内の表領域を管理できます。

CDBの表領域については、次のことを考慮する必要があります。

  • 永続表領域を関連付けることができるコンテナは厳密に1つです。

  • コンテナに表領域を作成する場合、表領域はそのコンテナに関連付けられます。

  • ローカルUNDOがCDBに対して無効になっている場合、CDBには、アクティブなUNDO表領域が1つのみ存在するか、またはOracle RAC CDBのインスタンスごとにアクティブなUNDO表領域が1つ存在します。ローカルUNDOがCDBに対して有効になっている場合、CDB内の各コンテナには独自のUNDO表領域があります。

  • PDBがオープンされるOracle Real Application Clusters (Oracle RAC)クラスタの各ノードに、ローカルUNDO表領域が必要となります。

  • CDBルート、各PDB、各アプリケーション・ルート、各アプリケーションPDBなど、CDB内のコンテナごとに1つのデフォルト一時表領域があります。

この項では、次の項目について説明します。

13.1.4.1 CDB内永続表領域の管理の概要

永続表領域を関連付けることができるコンテナは1つのみです。したがって、永続表領域はルートまたは1つのPDBと関連付けることができます。

CDB内のコンテナごとに独自のデフォルト永続表領域が存在する必要があり、デフォルト永続表領域をコンテナ間で共有することはできません。表領域を明示的に割り当てられていないユーザーがコンテナに接続された場合、コンテナのデフォルト永続表領域を使用します。

13.1.4.2 CDB内の一時表領域の管理の概要

CDB内の各コンテナには、独自のデフォルト一時表領域(または表領域グループ)があります。

追加の一時表領域を個々のコンテナに作成して、コンテナの特定のユーザーをこれらの一時表領域に割り当てることができます。PDBを切断すると、その一時表領域も切断されます。

ユーザーにコンテナ内の一時表領域が明示的に割り当てられていない場合、ユーザーの一時表領域はコンテナのデフォルト一時表領域です。

13.1.5 CDBにおけるデータベース・オブジェクトの管理の概要

CDBでは、異なるコンテナに異なるデータベース・オブジェクトを含めることができます。

Oracle Databaseには、表、索引、ディレクトリなどのデータベース・オブジェクトが格納されます。スキーマに所有されているデータベース・オブジェクトはスキーマ・オブジェクトと呼ばれ、スキーマによって所有されていないデータベース・オブジェクトは非スキーマ・オブジェクトと呼ばれます。ルートおよびPDBにはスキーマが含まれ、スキーマにはスキーマ・オブジェクトが含まれています。ルートおよびPDBに、ユーザー、ロール、表領域、ディレクトリ、エディションなどの非スキーマ・オブジェクトを含めることもできます。

CDBでは、ルートにはオラクル社が提供するスキーマおよびデータベース・オブジェクトが含まれています。SYSSYSTEMなどのオラクル社が提供する共通ユーザーは、これらのスキーマおよび共通データベース・オブジェクトを所有します。また、これらのユーザーは、ルートとPDBの両方にローカル・オブジェクトを所有することもできます。

ルートに共通ユーザーを作成して、CDBのコンテナを管理できます。ユーザーが作成した共通ユーザーは、ルートにデータベース・オブジェクトを作成できます。ルートでは、ユーザーが作成した共通ユーザーによって所有されるスキーマには、データベース・トリガーおよびそれらの定義で使用されるオブジェクトのみを含めることをお薦めします。ユーザーが作成した共通ユーザーは、PDBの任意のタイプのローカル・オブジェクトを所有することもできます。

PDBにローカル・ユーザーを作成できます。PDBのローカル・ユーザーは、PDBにスキーマ・オブジェクトおよび非スキーマ・オブジェクトを作成できます。ルートにローカル・ユーザーを作成することはできません。

CDBでの名前解決は、非CDBでの名前解決と似ていますが、ユーザーの現在のコンテナの、ディクショナリのコンテキストで名前が解決されることが異なります。

関連項目:

13.1.6 PDBのフラッシュ・バックについて

FLASHBACK PLUGGABLE DATABASE文を使用して、PDBを過去の時点またはシステム変更番号(SCN)に戻すことができます。

PDBのリストア・ポイントを作成して、CDBまたは他のPDBに影響を与えずに、PDBをリストア・ポイントにフラッシュバックできます。

13.1.7 セキュリティを強化するためのPDBユーザーの制限について

セキュリティを強化するためにPDBユーザーを制限する方法はいくつかあります。

PDBロックダウン・プロファイルは、PDB内のユーザーが使用可能な機能とオプションを制限します。PDB_OS_CREDENTIAL初期化パラメータでは、PDBに一意のオペレーティング・システム・ユーザーを指定して、オペレーティング・システム・アクセスを制限できます。また、PATH_PREFIXおよびCREATE_FILE_DEST句がPDBの作成時に指定された場合は、ファイル・システム・アクセスを制限します。

この項では、次の項目について説明します。

13.1.7.1 PDBロックダウン・プロファイル

アイデンティティがPDB間で共有される場合は、過剰な権限が存在することがあります。ロックダウン・プロファイルを使用すると、この権限の昇格を防ぐことができます。

IDは、次の状況で共有できます。

  • オペレーティング・システム・レベルでは、データベースがファイルやプロセスなどのオペレーティング・システム・リソースと対話するとき

  • ネットワーク・レベルでは、データベースが他のシステムと通信するとき

  • データベースの内部では、PDBが共通オブジェクトをアクセスまたは作成するか、データベース・リンクなどの機能を使用してコンテナ境界を越えて通信するとき

セキュリティを高めるために、CDB管理者はPDBロックダウン・プロファイルを使用して特定のPDBのユーザーを制限できます。PDBロックダウン・プロファイルでは、ALTER SYSTEM文などの指定したSQL文をユーザーが実行できないようにしたり、UTL_SMTPなど、ネットワークにアクセスできるパッケージへのアクセスを無効にしたりできます。PDBロックダウン・プロファイルでは、共通ユーザー、共通オブジェクトおよび管理ツール(Oracle XML DB、管理機能(例: カーソル共有)、データベース・オプション(例: Oracle Databaseアドバンスト・キューイング)など)へのアクセスも制限できます。PDBロックダウン・プロファイルでは、XDB_PROTOCOLS機能でPDBによるXDBプロトコル(FTP、HTTP、HTTPS)の使用を禁止できます。

CDBルートまたはアプリケーション・ルートにログインするときに、次のオプション句をサポートしているCREATE LOCKDOWN PROFILE文を発行して、ロックダウン・プロファイルを作成します。

  • FROM static_base_profileは、既存のプロファイルの値を使用して、新しいロックダウン・プロファイルを作成します。既存のプロファイルへの以降の変更は、新しいプロファイルには影響しません。

  • INCLUDING dynamic_base_profileは、既存のプロファイルの値を使用して新しいロックダウン・プロファイルを作成しますが、この新しいロックダウン・プロファイルは、基本プロファイルを構成するDISABLE STATEMENTルール、および基本プロファイルへの以降の変更を継承するという点が異なります。

文を発行するユーザーは、現在のコンテナでCREATE LOCKDOWN PROFILEシステム権限を持っている必要があります。制約を追加および削除するには、ALTER LOCKDOWN PROFILE文を使用します。ユーザーはCDBルートまたはアプリケーション・ルートでALTER文を発行する必要があり、現在のコンテナでALTER LOCKDOWN PROFILEシステム権限を持っている必要があります。

ロックダウン・プロファイルは、PDB_LOCKDOWN初期化パラメータを使用して指定します。このパラメータによって、PDBロックダウン・プロファイルが指定のPDBに適用されるかどうかが決定します。このパラメータは、次のレベルで設定できます。

  • PDB

    プロファイルは、設定されるPDBにのみ適用されます。

  • アプリケーション・コンテナ

    プロファイルは、アプリケーション・コンテナ内のすべてのアプリケーションPDBに適用されます。値を変更できるのは、アプリケーション共通のSYSDBA権限または共通のALTER SYSTEM権限を持つアプリケーション共通ユーザー、あるいは共通のSYSDBA権限または共通のALTER SYSTEM権限を持つCDB共通ユーザーのみです。

  • CDB

    プロファイルはすべてのPDBに適用されます。共通のSYSDBA権限または共通のALTER SYSTEM権限を持つ共通ユーザーは、特定のPDBに対するCDB全体の設定をオーバーライドできます。

PDBのPDB_LOCKDOWNパラメータが、このPDBのコンテナ(CDBまたはアプリケーション・コンテナ)とは異なるロックダウン・プロファイルの名前に設定されている場合は、一連のルールによって制限の間の相互作用が制御されます。

関連項目:

13.1.7.2 PDB_OS_CREDENTIAL初期化パラメータ

データベースがextprocエージェントで外部プロシージャにアクセスする際に、PDB_OS_CREDENTIAL初期化パラメータはPDBからオペレーティング・システムと対話するときに採用されるオペレーティング・システム・ユーザーのIDを決定します。

名前がPDB_OS_CREDENTIAL初期化パラメータの値として指定された資格証明で記述されるOSユーザーを使用すると、オペレーティング・システムの対話が強力な権限を持たないユーザーとして実行されます。このようにして、あるPDBに属するデータを別のPDBに接続しているユーザーからアクセスできないように保護する機能が提供されます。資格証明は、DBMS_CREDENTIALパッケージ内のCREATE_CREDENTIALプロシージャを使用して作成されるオブジェクトです。

通常、Oracle OSユーザーは高い権限を持つユーザーです。オペレーティング・システムの対話にこのアカウントを使用することはお薦めしません。また、異なるPDBからのオペレーティング・システムの対話に同じOSユーザーを使用すると、特定のPDBに属するデータが危険にさらされる可能性があります。

関連項目:

13.1.7.3 PATH_PREFIXおよびCREATE_FILE_DEST PDB作成句

CREATE PLUGGABLE DATABASEPATH_PREFIX句は、PDBと関連付けられているすべてのディレクトリ・オブジェクト・パスが、指定したディレクトリまたはそのサブディレクトリに制限されるようにします。

また、PATH_PREFIXは、PDBと関連付けられている次のファイルが、指定したディレクトリに制限されるようにします。

  • PDBのOracle XMLリポジトリ

  • CREATE PFILE文で作成されたファイル

  • Oracleウォレットのエクスポート・ディレクトリ

  • CREATE LIBRARY文で作成されたライブラリ・オブジェクト

注意:

ライブラリでは、ディレクトリ・オブジェクトを使用する必要があります。PDBで事前定義済のPATH_PREFIXが使用されている場合、ディレクトリ・オブジェクトを使用しないライブラリ・オブジェクトを使用しようとすると、ORA-65394エラーが発生します。ライブラリ・オブジェクトは無効になりませんが、ライブラリ・オブジェクトを使用可能にするには、ディレクトリ・オブジェクトを使用して再作成する必要があります。

CREATE PLUGGABLE DATABASE文のCREATE_FILE_DEST句は、PDBに属するすべてのデータベース・ファイルが、指定したディレクトリまたはそのサブディレクトリに制限されるようにします。この句を使用すると、PDBでOracle Managed Filesが有効になり、PDBファイルのデフォルトのファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定できます。

13.1.8 Oracle RACを含むOracle Multitenantの概要

Oracle MultitenantはOracle Database 12cのオプションで、統合、プロビジョニング、アップグレードなどを簡略化します。

これは、マルチテナント・コンテナ・データベース(CDB)に複数のプラガブル・データベース(PDB)を保持することができるアーキテクチャに基づいています。アプリケーション層を変更することなく、既存のデータベースをPDBとして採用できます。このアーキテクチャでは、1つのシステム上で様々なビジネスで重要なアプリケーションを統合するときに必要なローカルの高可用性を、Oracle RACが提供します。

Oracle RACでPDBを使用する場合、マルチテナントCDBはOracle RACに基づきます。各PDBをOracle RAC CDBの各インスタンスまたはインスタンスのサブセットで使用可能にすることができます。いずれの場合も、PDBへのアクセスおよび管理は、動的データベース・サービスを使用して調整されます。これは接続にOracle Net Servicesを使用する1つのインスタンスOracleデータベース内なので、アプリケーションにより使用されて各PDBに接続することもあります。

同じOracle RACデータベースまたはデータベース・インスタンスを共有している別のPDBを妨害する可能性のある、特定のPDBでの特定の操作が実行されないようにするために、PDBを分離できます。PDBの分離により、Oracle Multitenantを使用した高度な統合が可能になります。

Oracle RACデータベースをCDBとして作成し、そのCDBに1つ以上のPDBを接続する場合、Oracle RACのCDBのどのインスタンスでもPDBはデフォルトで自動起動されません。PDBに(データベース名と同じ名前のデフォルトのデータベース・サービス以外の)最初の動的なデータベース・サービスが割り当てられると、PDBはサービスが実行されるインスタンスで有効になります。

Oracle RACの1つ以上のインスタンスでPDBが有効かどうかにかかわらず、CDBは通常、PDBで実行されるサービスで管理されます。インスタンス上でPDBを手動で起動することによって、Oracle RAC CDBの各インスタンス上でPDBアクセスを手動で有効化できます。

13.2 CDB内のコンテナへのアクセス

SQL*Plus CONNECTコマンドを使用してコンテナに接続できます。または、ALTER SESSION SET CONTAINER SQL文を使用してコンテナに切り替えることができます。

注意:

Oracle Enterprise Manager Cloud Control (Cloud Control)を使用してログインすることもできます。「Enterprise Managerによるマルチテナント環境へのログイン」を参照してください。

この項では、次の項目について説明します。

13.2.1 CDB内のコンテナへのアクセスについて

SQL*Plusを使用してCDB内のルートまたはPDBにアクセスできます。

注意:

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

この項では、次の項目について説明します。

関連項目:

13.2.1.1 CDBのサービス

クライアントからは、データベース・サービスを使用してルートまたはPDBにアクセスします。

データベース・サービスには、オプションのPDBプロパティがあります。PDBが作成されると、PDBの新しいデフォルト・サービスが自動的に作成されます。サービスには、PDBと同じ名前が付いています。サービス名を使用すると、簡易接続構文またはtnsnames.oraファイル内のネット・サービス名を使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。

ユーザーがnull以外のPDBプロパティを含むサービスを使用して接続する場合、ユーザー名は指定したPDBのコンテキストで解決されます。ユーザーがサービスを指定しないか、またはnullのPDBプロパティを含むサービス名を使用して接続する場合、ユーザー名はルートのコンテキストで解決されます。サービスのPDBプロパティを表示するには、CDB_SERVICESデータ・ディクショナリ・ビューを問い合せるか、またはconfig serviceコマンドをSRVCTLユーティリティで実行します。

注意:

同じコンピュータ・システム上の2つ以上のCDBで同じリスナーが使用され、これらのCDB内で2つ以上のPDBが同じサービス名を持つ場合、このサービス名を指定する接続は、そのサービス名のPDBの1つにランダムに接続します。不正に接続されることを回避するには、コンピュータ・システム上のPDBのすべてのサービス名が一意であることを確認するか、コンピュータ・システム上の各CDBに別のリスナーを構成します。

13.2.1.2 CDBでのセッション制限

SESSIONS初期化パラメータの設定によって、PDBに接続されたセッションなどのCDBで使用できるセッションの合計数が制限されます。

CDBの制限に達すると、ユーザーはPDBに接続できなくなります。1つのPDBで過剰なセッションが使用されないようにするには、PDBでSESSIONS初期化パラメータを設定して、PDBで使用できるセッションの数を制限できます。

13.2.1.3 マルチテナント環境のユーザー名

各PDB内のユーザー名は、そのPDB内の他のユーザー名およびロールと比較して一意である必要があります。

以下の制限に注意してください。

  • ローカル・ユーザー名の場合、名前をC## (またはc##)で始めることはできません。

  • ユーザーとロールに同じ名前を付けることはできません。

13.2.1.4 管理ユーザーのパスワード・ファイルに対するマルチテナント・オプションの影響

マルチテナント環境では、ローカル管理ユーザーと共通管理ユーザーのパスワード情報はそれぞれ異なる場所に保存されます。

  • CDB管理ユーザーの場合: CDBルートで管理権限が付与されたCDB共通管理ユーザーのパスワード情報(パスワードのハッシュ)は、パスワード・ファイルに格納されます。

  • CDBルート外で管理権限が付与された、CDB内のすべてのユーザーの場合: これらのユーザーのパスワード・ハッシュ情報に関する情報を確認するには、$PWFILE_USERS動的ビューを問い合せます。

13.2.2 CDB内のコンテナへのアクセス

SQL*PlusのCONNECTまたはALTER SESSIONコマンドを発行して、CDB内のコンテナにアクセスします。

この項では、次の項目について説明します。

13.2.2.1 SQL*Plus CONNECTコマンドを使用したコンテナへの接続

SQL*Plus CONNECTコマンドを使用してルートまたはPDBに接続できます。

この項では、次の項目について説明します。

13.2.2.1.1 SQL*Plus CONNECTコマンドを使用したルートへの接続

非CDBに接続する場合と同じ方法でルートに接続できます。

具体的には、SQL*Plus CONNECTコマンドでルートに接続するために、次の手法を使用できます。

  • ローカル接続

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

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

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

  • 外部認証を使用したリモート・データベース接続

ユーザーがルートに接続するには、次の前提条件を満たしている必要があります。

  • ユーザーは共通ユーザーである必要があります。

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

SQL*Plus CONNECTコマンドを使用してルートに接続する手順は、次のとおりです。

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

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

    sqlplus /nolog
    
  3. 次の例のように、SQL*PlusのCONNECTコマンドを発行し、ルートとして接続します。

例13-1 ローカル接続を使用したルートへの接続

この例では、ユーザーSYSTEMとしてローカルCDBのルートに接続します。SQL*Plusによって、ユーザーSYSTEMのパスワードの入力が求められます。

connect system

例13-2 オペレーティング・システム認証を使用したrootへの接続

この例では、オペレーティング・システム認証を使用してSYSDBA管理権限でルートにローカルに接続します。

connect / as sysdba

例13-3 ネット・サービス名を使用したrootへの接続

CDBのルートのネット・サービス名が含まれるようにクライアントが構成されていると想定します。たとえば、ネット・サービス名をtnsnames.oraファイルのエントリに含めることができます。

この例では、共通ユーザーc##dbaとして、ネット・サービス名mycdbによって指定されたデータベース・サービスに接続します。SQL*Plusによって、ユーザーc##dbaのパスワードの入力が求められます。

connect c##dba@mycdb

関連項目:

データベースに対するコマンドおよびSQLの発行の詳細は、『Oracle Database管理者ガイド』を参照してください

13.2.2.1.2 SQL*Plus CONNECTコマンドを使用したPDBへの接続

SQL*Plus CONNECTコマンドを使用してPDBに接続するには、簡易接続またはネット・サービス名を使用できます。

PDBに接続するには、ユーザーは次のいずれかである必要があります。

  • CREATE SESSION権限が共通に付与されているか、PDBでローカルに付与されている共通ユーザー

  • CREATE SESSION権限を持つPDBで定義されたローカル・ユーザー

SYSDBASYSOPERSYSBACKUPまたはSYSDG権限を持つユーザーのみが、マウント・モードのPDBに接続できます。PDBのオープン・モードを変更するには、「1つ以上のPDBのオープン・モードの変更」を参照してください。

SQL*Plus CONNECTコマンドを使用してPDBに接続する手順は、次のとおりです。

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

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

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

例13-4 PDBへの接続

PDBごとに各PDB名と一致するネット・サービス名を持つように、クライアントが構成されていると想定します。たとえば、ネット・サービス名をtnsnames.oraファイルのエントリに含めることができます。

次のコマンドにより、salespdb PDB内のshローカル・ユーザーに接続します。

CONNECT sh@salespdb

次のコマンドにより、salespdb PDB内のSYSTEM共通ユーザーに接続します。

CONNECT system@salespdb

関連項目:

SQL*Plus CONNECTコマンドの発行の詳細は、『Oracle Database管理者ガイド』を参照してください
13.2.2.2 ALTER SESSION文を使用したコンテナへの切替え

共通ユーザーとしてコンテナに接続している場合、ALTER SESSION文を使用して、別のコンテナおよびアプリケーション・サービスに切り替えることができます。

次の文を使用して、別のコンテナおよびアプリケーション・サービスに切り替えることができます。

ALTER SESSION SET CONTAINER = container_name [SERVICE = service_name]

container_nameについては、次のいずれかを指定します。

  • CDBルートに切り替えるにはCDB$ROOT

  • PDBシードに切り替えるにはPDB$SEED

  • PDBに切り替えるにはPDB名

    現在のコンテナがルートである場合、DBA_PDBSビューを問い合せると、CDB内のPDBの名前を表示できます。

service_nameには、PDBで実行されているサービスを指定します。CDBルートを除くCDBのコンテナで実行されているサービスをリストするには、CDBルートが現在のコンテナであるときに次の問合せを発行します。

COL NAME FORMAT A30
COL CON_NAME FORMAT A20

SELECT NAME,CON_NAME, CON_ID
  FROM V$ACTIVE_SERVICES
  WHERE UPPER(NAME) != CON_NAME
  AND CON_ID !=1
  ORDER BY CON_ID;

デフォルトでは、コンテナに切り替えると、セッションはコンテナのデフォルト・サービスを使用します。ただし、PDBのデフォルト・サービスでは、すべてのサービス属性および機能(サービス・メトリック、高速アプリケーション通知(FAN)、ロード・バランシング、リソース・マネージャ、トランザクション・ガード、アプリケーション・コンティニュイティなど)がサポートされているわけではありません。ベスト・プラクティスは、SERVICE = service_name (service_nameはサービスの名前)を指定することによって、コンテナにデフォルト以外のサービスを使用することです。

この新しい機能によって、接続プールでサービスを切り替えたり、プールの接続を使用した接続でPDBが必要な場合に切り替えることができます。Oracle Database 12cリリース2 (12.2.0.1)以降では、接続プールはUCP (Universal Connection Pool)を使用して複数のデータベース・サービスをサポートします。スタンドアロンで使用することもできます。

サービスを切り替える場合は、データベース・サービスの識別、優先順位、測定および高可用性が維持されたままで、アプリケーションをCDBに統合できます。デフォルト以外のサービスに切り替えると、次のような利点があります。

  • サービス属性および機能が維持されます。

  • これらのテナントに使用される接続が多すぎる過剰な接続プールがなくなります。

  • アプリケーションが、接続プールを過剰に消費することなく、ワークロード制御のためにデータベース・サービスをさらに使用できます。顧客は、データベース接続のサイズが大きくなりすぎることなく、サービスを使用したワークロードを識別して優先できます。

ALTER SESSION SET CONTAINER文を使用する場合は、次のことを考慮する必要があります。

  • 文が正常に完了した後、セッションの現行スキーマは、指定されたコンテナの共通ユーザーが所有するスキーマに設定されます。

  • 文が正常に完了した後、セキュリティ・コンテキストは、指定されたコンテナの共通ユーザーが所有するスキーマのセキュリティ・コンテキストにリセットされます。

  • 文が正常に完了した後、指定されたコンテナのログイン・トリガーは起動されません。

    トリガーが必要な場合は、ALTER SESSION SET CONTAINER文が実行される前または後に起動するように、BEFOREまたはAFTER SET CONTAINERトリガーをPDBで定義できます。

  • この文が正常に完了し、SERVICE句によってPDBにデフォルト以外のサービスが指定されている場合、セッションは設定されている属性(新しいサービスのメトリック、FAN、TAF、アプリケーション・コンティニュイティ、トランザクション・ガード、drain_timeoutおよびstop_optionを含む)を使用して新しいサービスを使用します。

  • パッケージの状態は複数のコンテナにわたって共有されません。

  • PDBをクローズするとき、PDBに切り替えられたセッションおよびPDBに直接接続されたセッションは同様に処理されます。

  • トランザクションを複数のコンテナにわたって実行することはできません。トランザクションを開始し、ALTER SESSION SET CONTAINERを使用して別のコンテナに切り替えると、そのトランザクションを開始したコンテナに再び切り替えるまで、DML、DDL、COMMITまたはROLLBACK文を発行できなくなります。

  • カーソルをオープンし、ALTER SESSION SET CONTAINERを使用して別のコンテナに切り替えると、カーソルをオープンしたコンテナに再び切り替えるまで、このカーソルからデータをフェッチできなくなります。

  • 接続プーリングおよび拡張CDB管理に、SERVICE句を指定したALTER SESSION SET CONTAINER文を使用できます。

    たとえば、マルチテナント・アプリケーションのPDBで、この文を接続プーリングに使用できます。マルチテナント・アプリケーションでは、サーバー上のソフトウェアの単一インスタンスを使用して、複数の顧客(テナント)に対処します。非CDBでは、通常、アプリケーションで使用されるすべての表にテナントを識別する余分な列を追加することでマルチテナントがサポートされていて、テナントは接続プールから接続をチェック・アウトします。PDBが含まれるCDBでは、テナントごとに独自のPDBを設定でき、接続プーリング構成でALTER SESSION SET CONTAINER文を使用できます。

  • 複数のアプリケーションを処理する接続プールを使用している場合、アプリケーションは別のサービスのデータ・ソースを使用できます。SERVICE句を指定してALTER SESSION SET CONTAINER文を使用すると、接続プールで多数のアプリケーションに同じ接続を使用して、サービスを共有できます。

ALTER SESSION SET CONTAINER文を使用するには、次の前提条件を満たしている必要があります。

  • 現在のユーザーは共通ユーザーである必要があります。初期接続は、SQL*Plus CONNECTコマンドを使用して確立する必要があります。

  • Oracle Databaseで提供されていない共通ユーザーとして、セッションを変更してPDBに切り替える場合、現在のユーザーには、SET CONTAINER権限が共通に付与されているか、またはこの権限がPDBでローカルに付与されている必要があります。

注意:

ALTER SESSION SET CONTAINER文を使用して現在のコンテナを切り替える場合、このような前提条件は強制されず、満たされていない場合、エラー・メッセージは返されません。

SERVICE句を指定してALTER SESSION SET CONTAINER文を発行する前に、次の前提条件を満たしている必要があります。

  • 切り替える先のサービスがアクティブである必要があります。実行されていないサービスに切り替えることはできません。

  • サービス間で切り替える場合は、切り替える元のサービスと切り替える先のサービスのサービス属性が一致している必要があります。たとえば、切り替える元と切り替える先のサービスの両方が、TAFを持っているか、アプリケーション・コンティニュイティを使用しているか、drain_timeout設定がある必要があります。

ALTER SESSION文を使用してコンテナに切り替える手順は、次のとおりです。

  1. SQL*Plusで、必要な権限を持つ共通ユーザーとしてコンテナに接続します。

  2. 切替え先のコンテナの現在のオープン・モードを確認します。

    ルートまたはPDBの現在のオープン・モードを確認するには、現在のコンテナがルートのときに、V$CONTAINERSビューでOPEN_MODE列を問い合せます。

    ルートのオープン・モードを変更する必要がある場合は、『Oracle Database管理者ガイド』のデータベースの可用性の変更に関する項の手順に従って、オープン・モードを変更します。

    PDBのオープン・モードを変更する必要がある場合は、「1つ以上のPDBのオープン・モードの変更」の手順に従って、オープン・モードを変更します。

    ルートのオープン・モードにより、PDBのオープン・モードが制限されます。たとえば、PDBをオープンするには、ルートがオープンしている必要があります。したがって、PDBのオープン・モードを変更する前に、ルートのオープン・モードを変更することが必要な場合があります。

  3. 特定のサービスに切り替える場合は、そのサービスが実行されていることを確認します。

    サービスのアクティブ・ステータスを確認するには、現在のコンテナがCDBルートであるときにV$ACTIVE_SERVICESビューを問い合せます。

    サービスが実行されていない場合は、SRVCTLユーティリティまたはDBMS_SERVICEパッケージを使用して、サービスを開始します。

  4. ALTER SESSION SET CONTAINER文を実行して、切替え先のコンテナを指定します。

    SERVICE句を含めて、特定のアプリケーション・サービスに切り替えます。

次の例では、ALTER SESSIONを使用して様々なコンテナに切り替えます。

例13-5 PDB salespdbへの切替えとsalesrepサービスの使用

ALTER SESSION SET CONTAINER = salespdb SERVICE = salesrep;

例13-6 PDB salespdbへの切替えとデフォルト・サービスの使用

ALTER SESSION SET CONTAINER = salespdb;

例13-7 CDBルートへの切替え

ALTER SESSION SET CONTAINER = CDB$ROOT;

例13-8 PDBシードへの切替え

ALTER SESSION SET CONTAINER = PDB$SEED;

例13-9 CDBルートのダミー・サービスを使用したサービスの切替え

コンテナおよびサービスを切り替える接続プールを設計するには、CDBルートにダミー・サービスを作成し、必要なすべての属性(たとえば、drain_timeout、TAFまたはアプリケーション・コンティニュイティ)をこのダミー・サービスに設定することが1つの方法です。サービス属性は、CDBルートおよびPDB間で一致している必要があります。この方法を使用するには、次のステップを実行します。

  1. 最初に接続プールを作成するとき、および新しい接続を作成するときに、ダミー・サービスに接続します。

  2. サービスが各PDBに追加されると、これらの実際のサービスに同じ属性が設定されます。

  3. アプリケーションが接続を必要とする場合は、次のいずれかのアクションを実行します。

    • ダミー・サービスへの新しい接続を作成し、そのPDBおよびサービスに切替えます。

    • プールの空き接続を使用して、PDBおよびサービスに切り替えます。

      PDB間で切り替える場合、CDBに戻る必要はありません。

PDB間で切り替える場合、CDBに戻る必要はありません。

関連項目:

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

初期化パラメータはCDBレベルで設定できます。場合によっては、これらのパラメータをPDBレベルで上書きできます。

この項では、次の項目について説明します。

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

ALTER SYSTEM SET文は、1つ以上のコンテナの初期化パラメータを動的に設定します。

CDBでは初期化パラメータの継承モデルが使用されます。このモデルでは、PDBがルートから初期化パラメータの値を継承します。この場合、継承は、ルートの特定のパラメータ値が特定のPDBに適用されることを意味します。

PDBは、一部のパラメータのルート設定を上書きできます。このような場合、PDBには初期化パラメータごとに継承プロパティ(trueまたはfalse)があります。あるパラメータでPDBがルートの値を継承する場合、そのパラメータの継承プロパティはtrueです。それ以外の場合、プロパティはfalseです。

一部のパラメータについては、継承プロパティがtrueである必要があります。その他のパラメータでは、現在のコンテナがPDBである場合、ALTER SYSTEM SET文を実行して継承プロパティを変更できます。初期化パラメータのV$SYSTEM_PARAMETER.ISPDB_MODIFIABLETRUEの場合は、そのパラメータの継承プロパティをfalseに設定できます。

現在のコンテナがルートである場合、ALTER SYSTEM SET文のCONTAINER句で設定されるパラメータ値を継承するPDBが制御されます。CONTAINER句の構文は次のとおりです。

CONTAINER = { CURRENT | ALL }

次の設定を使用できます。

  • CURRENT

    パラメータ設定は現在のコンテナのみに適用されます。これは、CONTAINERのデフォルト設定です。現在のコンテナがルートである場合は、ルートと、そのパラメータについてtrueの継承プロパティを持つすべてのPDBにそのパラメータ設定が適用されます。

  • ALL

    パラメータ設定は、ルートおよびすべてのPDBを含むCDB内のすべてのコンテナに適用されます。ALLを指定すると、すべてのPDB内のパラメータの継承プロパティはtrueに設定されます。

関連項目:

CONTAINER句およびそれに適用するルールの詳細は、「現在のコンテナについて」を参照してください

13.3.2 ALTER SYSTEMを使用したCDBの変更

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

前提条件

現在のユーザーには、ALTER SYSTEM権限が共通して付与されている必要があります。

CDBのルートでALTER SYSTEM SETは、次のように使用します。

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

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

注意:

PDBのパラメータの継承プロパティをfalseからtrueに変更するには、現在のコンテナがPDBであるときにALTER SYSTEM RESET文を実行して、パラメータをリセットします。次のサンプル文は、OPEN_CURSORSパラメータをリセットします。

ALTER SYSTEM RESET OPEN_CURSORS SCOPE = SPFILE;

例13-10 すべてのコンテナへの初期化パラメータの設定

このALTER SYSTEM SET文では、すべてのコンテナのOPEN_CURSORS初期化パラメータを200に設定し、各PDBの継承プロパティをTRUEに設定します。

ALTER SYSTEM SET OPEN_CURSORS = 200 CONTAINER = ALL;

例13-11 ルートの初期化パラメータの設定

このALTER SYSTEM SET文では、ルートおよびPDBのOPEN_CURSORS初期化パラメータを200に設定します(このとき、パラメータの継承プロパティはtrueです)。

ALTER SYSTEM SET OPEN_CURSORS = 200 CONTAINER = CURRENT;

関連項目:

13.4 CDBルートへの接続時のコンテナの変更

ALTER DATABASE文を使用してCDB全体またはルートを変更できます。

この項では、次の項目について説明します。

13.4.1 CDBルートへの接続時のコンテナの変更について

ALTER DATABASE文はCDBを変更します。CDBルートに接続するとき、ALTER PLUGGABLE DATABASE文では、1つ以上のPDBのオープン・モードを変更できます。

ALTER DATABASEおよびALTER PLUGGABLE DATABASEの動作は、文を使用するときに接続されているコンテナによって異なります。

  • 共通ユーザーとしてCDBルートに接続されている場合

    この場合、ALTER DATABASE文は非CDBの場合と同様に機能します。RENAME GLOBAL_NAME句を含むALTER DATABASE文を使用すると、CDBのドメインが変更され、CDBのドメインにデフォルト設定された各PDBのドメインに影響を及ぼします。pdb_change_state句を含むALTER PLUGGABLE DATABASE文は、1つ以上のPDBのオープン・モードを変更します。

  • PDBに接続されている場合

    この場合、ALTER DATABASEおよびALTER PLUGGABLE DATABASE文は現在のPDBのみを変更します。

次の表に、ALTER DATABASEおよびALTER PLUGGABLE DATABASE文の句によって変更されるコンテナを示します。

表13-3 CDBのコンテナを変更する文

CDB全体の変更 ルートのみの変更 1つ以上のPDBの変更

現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含むALTER DATABASE文を使用すると、CDB全体が変更されます。

現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含むALTER DATABASE文を使用すると、ルートのみが変更されます。

次の句を含むALTER DATABASE文を使用すると、ルートが変更され、PDBにデフォルト値が設定されます。

これらの句を使用すると、特定のPDBにデフォルト以外の値を設定できます。

現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含むALTER PLUGGABLE DATABASE文を使用すると、1つ以上のPDBのオープン・モードを変更できます。

現在のコンテナがPDBである場合、この句を含むALTER PLUGGABLE DATABASE文を使用すると、現在のPDBのオープン・モードを変更できます。

現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含むALTER PLUGGABLE DATABASE文を使用すると、CDBの再起動時にPDBのオープン・モードを保持することも破棄することもできます。

13.4.2 ALTER DATABASEを使用したCDB全体の変更

ALTER DATABASE文を使用して、ルートおよびPDBすべてを含むCDB全体を変更できます。ほとんどのALTER DATABASE文は、CDB全体を変更します。

ルートまたは個々のPDBではなくCDB全体を変更する文のリストは、「CDBルートへの接続時のコンテナの変更について」の「CDB全体の変更」列を参照してください。

前提条件

CDB全体を変更するには、次の前提条件を満たしている必要があります。

  • 現在のユーザーは、ALTER DATABASE権限を持つ共通ユーザーである必要があります。

  • recovery_clauseを含むALTER DATABASE文を実行するには、現在のユーザーにSYSDBA管理権限が共通に付与されている必要があります。この場合、接続時にAS SYSDBAを使用して、この権限を行使する必要があります。

CDB全体を変更する手順は、次のとおりです。

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

  2. CDB全体を変更する句を含むALTER DATABASE文を使用します。

例13-12 CDBの制御ファイルのバックアップ

次のALTER DATABASE文では、recovery_clauseを使用して制御ファイルをバックアップします。

ALTER DATABASE BACKUP CONTROLFILE TO '+DATA/dbs/backup/control.bkp';

例13-13 CDBへのREDOログ・ファイルの追加

次のALTER DATABASE文では、logfile_clauseを使用してREDOログ・ファイルを追加します。

ALTER DATABASE cdb ADD LOGFILE
  GROUP 4 ('/u01/logs/orcl/redo04a.log','/u02/logs/orcl/redo04b.log')
  SIZE 100M BLOCKSIZE 512 REUSE;

13.4.3 ALTER DATABASEを使用したCDBのUNDOモードの設定

ローカルUNDOが有効になっている場合、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があります。ローカルUNDOが無効になっている場合は、CDB全体に対して1つのUNDO表領域があります。

この項では、次の項目について説明します。

13.4.3.1 CDBのUNDOモードについて

すべてのコンテナでローカルUNDOを使用するか、CDB全体で共有UNDOを使用するようにCDBを構成できます。

CDBは、ローカルまたは共有UNDOモードで実行できます。UNDOモードはCDB全体に適用されます。したがって、すべてのコンテナは共有UNDOまたはローカルUNDOを使用します。

CREATE DATABASE文のENABLE PLUGGABLE DATABASE句で、CDB作成時にCDBのUNDOモードを指定します。CDBの作成後にALTER DATABASE文を発行し、CDBを再起動することで、CDBのUNDOモードを変更できます。

現在のCDB UNDOモードを判断するには、CDBルートで次の問合せを実行します。
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM   DATABASE_PROPERTIES
WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';

問合せでPROPERTY_VALUEに対してTRUEが返された場合、CDBはローカルUNDOモードです。そうでない場合、CDBは共有UNDOモードです。

この項では、次の項目について説明します。

13.4.3.1.1 ローカルUNDOモードについて

ローカルUNDOモードは、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があることを意味します。

このモードでは、Oracle DatabaseはCDB内のすべてのコンテナ用のUNDO表領域を自動的に作成します。Oracle RAC CDBの場合、アクティブなUNDO表領域はローカルUNDOモードの各PDBのインスタンスごとに1つ存在します。

ローカルUNDOモードでは、各コンテナの分離が向上し、コンテナの切断やコンテナに対するポイント・イン・タイム・リカバリの実行など、一部の操作の効率が向上します。またローカルUNDOモードは、PDBの再配置やオープン読取り/書込みモードでのPDBのクローニングなど、いくつかの操作をサポートするために必要です。

CDBがローカルUNDOモードの場合は、次のことが適用されます。

  • 現在のコンテナに対する適切な権限を持つユーザーは、コンテナのUNDO表領域を作成できます。

  • UNDO表領域は、CDB内のすべてのコンテナの静的データ・ディクショナリ・ビューおよび動的パフォーマンス(V$)ビューに表示されます。

関連項目:

必要な権限の詳細は、『Oracle Database SQL言語リファレンス』を参照してください

13.4.3.1.2 共有UNDOモードについて

共有UNDOモードは、シングル・インスタンスCDBに対して1つのアクティブなUNDO表領域のみが存在することを意味します。Oracle RAC CDBの場合、アクティブなUNDO表領域はインスタンスごとに1つ存在します。

CDBが共有UNDOモードの場合は、次のことが適用されます。

  • 適切な権限を持ち、現在のコンテナがCDBルートである共通ユーザーのみが、UNDO表領域を作成できます。

  • 現在のコンテナがCDBルートでない場合、UNDO表領域を作成しようとすると失敗し、エラーが返されます。

  • 現在のコンテナがCDBルートである場合、UNDO表領域は静的データ・ディクショナリ・ビューおよび動的パフォーマンス(V$)・ビューに表示されます。現在のコンテナがPDB、アプリケーション・ルートまたはアプリケーションPDBである場合、UNDO表領域は動的パフォーマンス・ビューにのみ表示されます。

注意:

  • CDBのUNDOモードを変更した場合、新しいUNDOモードは変更後にコンテナが初めてオープンされたときに個別のコンテナに適用されます。

  • CDBのUNDOモードを変更した場合、CDB内のコンテナは変更前の時間またはSCNにフラッシュ・バックできません。

13.4.3.2 ローカルUNDOモードを使用するようにCDBを構成する方法

ALTER DATABASE LOCAL UNDO ON文を発行し、データベースを再起動することによって、CDBをローカルUNDOモードに変更できます。

CDBがローカルUNDOモードである場合、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があります。Oracle Databaseは、UNDO表領域を持たないCDB内のコンテナにUNDO表領域を自動的に作成します。UNDO表領域のないPDBがローカルUNDOモードを使用するように構成されたCDBにクローニング、再配置または接続される場合、Oracle Databaseは初めてオープンされるときにPDBのUNDO表領域を自動的に作成します。

CDBを共有UNDOモードからローカルUNDOモードに切り替えると、Oracle Databaseによって必要なUNDO表領域が自動的に作成されます。

  1. CDBインスタンスがオープンしている場合は、停止します。
  2. CDBインスタンスをOPEN UPGRADEモードで起動します。次に例を示します。
    STARTUP UPGRADE
  3. SQL*Plusで、現在のコンテナがCDBルートであることを確認します。たとえば、次のように入力します。
    SHOW CON_NAME
    
    CON_NAME
    ------------------------------
    CDB$ROOT
    
  4. CDBの現在のUNDOモードを問い合せます。
    SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
  5. ローカルUNDOを有効にするには、次のSQL文を発行します。
    ALTER DATABASE LOCAL UNDO ON;
  6. CDBインスタンスを停止し、再起動します。
  7. オプション: PDBシードにUNDO表領域を手動で作成します。
    Oracle DatabaseはローカルUNDOモードでPDBシードにUNDO表領域を自動的に作成しますが、UNDO表領域を手動で作成することによって、UNDO表領域のサイズおよび構成を制御する場合があります。PDBシードから作成されるPDBが、自動作成されたUNDO表領域ではなく手動で作成したUNDO表領域を使用するようにするには、UNDO_TABLESPACE初期化パラメータに手動で作成したUNDO表領域を設定するか、自動作成されたUNDO表領域を削除する必要があります。
    1. SQL*Plusで、現在のコンテナがルートであることを確認します。
    2. PDBシードを読取り/書込みオープン・モードにします。
      ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ WRITE FORCE;
    3. コンテナをPDBシードに切り替えます。
      ALTER SESSION SET CONTAINER=PDB$SEED;
    4. PDBシードにUNDO表領域を作成します。次に例を示します。
      CREATE UNDO TABLESPACE seedundots1
         DATAFILE 'seedundotbs_1a.dbf'
         SIZE 10M AUTOEXTEND ON
         RETENTION GUARANTEE;
    5. コンテナをルートに切り替えます。
      ALTER SESSION SET CONTAINER=CDB$ROOT;
    6. PDBシードを読取り専用オープン・モードにします。
      ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ ONLY FORCE;
13.4.3.3 共有UNDOモードを使用するようにCDBを構成する方法

共有UNDOモードを使用するようにCDBを変更するには、ALTER DATABASE LOCAL UNDO OFF文を使用します。

  1. CDBインスタンスがオープンしている場合は、停止します。
  2. CDBインスタンスをOPEN UPGRADEモードで起動します。次に例を示します。
    STARTUP UPGRADE
  3. SQL*Plusで、現在のコンテナがCDBルートであることを確認します。たとえば、次のように入力します。
    SHOW CON_NAME
    
    CON_NAME
    ------------------------------
    CDB$ROOT
    
  4. 必要に応じて、CDBの現在のUNDOモードを問い合せます。
    SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
  5. ローカルUNDOをオフにするには、次のSQL文を発行します。
    ALTER DATABASE LOCAL UNDO OFF;
  6. CDBインスタンスを停止し、再起動します。
共有UNDOモードの場合、CDBはローカルUNDOモードのときに作成されたローカルUNDO表領域を無視します。使用しないローカルUNDO表領域を削除することをお薦めします。

13.4.4 ALTER DATABASEを使用したCDBルートの変更

CDBのルートのみを変更するには、ALTER DATABASE文を使用します。

現在のコンテナがルートである場合、一部のALTER DATABASE文を使用すると、PDBのいずれかを直接変更することなくルートが変更されます。これらの文のリストは、表13-3の「ルートのみの変更」列を参照してください。

一部の文は、CDB内のPDBにデフォルトを設定します。PDBのこれらのデフォルトを上書きするには、ALTER PLUGGABLE DATABASE文を使用します。

前提条件

ルートを変更するには、現在のユーザーにルートでのALTER DATABASE権限が必要です。

ルートを変更する手順は、次のとおりです。

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

  2. ルートを変更する句を含むALTER DATABASE文を実行します。

次の例では、ルートが変更されています。

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

この文を実行すると、これ以降にルートで作成される表領域のデフォルトタイプはbigfileになります。この設定はPDBのデフォルトでもあります。

ALTER DATABASE文で指定された表領域または表領域グループは、ルートに存在している必要があります。

例13-14 ルートのデフォルト永続表領域の変更

このALTER DATABASE文では、DEFAULT TABLESPACE句を使用して、ルートのデフォルト永続表領域をroot_tbsに設定します。

ALTER DATABASE DEFAULT TABLESPACE root_tbs;

例13-15 ルートのデータファイルのオンライン化

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

ALTER DATABASE DATAFILE '/u02/oracle/cdb_01.dbf' ONLINE;

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

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

ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;

例13-17 ルートのデフォルト一時表領域の変更

このALTER DATABASE文では、DEFAULT TEMPORARY TABLESPACE句を使用して、ルートのデフォルト一時表領域をroot_tempに設定します。

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE root_temp;

13.4.5 1つ以上のPDBのオープン・モードの変更

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

この項では、次の項目について説明します。

13.4.5.1 PDBのオープン・モードの概要

PDBは様々なモードにすることができます。

次の表に、使用可能なPDBモードの説明を示します。

表13-4 PDBモード

モード 説明

OPEN READ WRITE

読取り/書込みオープン・モードのPDBでは、問合せおよびユーザー・トランザクションを実行でき、ユーザーはREDOログを生成できます。

OPEN READ ONLY

読取り専用オープン・モードのPDBでは、問合せは実行できますが、ユーザー変更を実行することはできません。

OPEN MIGRATE

PDBが移行オープン・モードの場合は、PDBでデータベース・アップグレード・スクリプトを実行できます。

ALTER DATABASE OPEN UPGRADEを実行すると、PDBはこのモードになります。

MOUNTED

PDBは、マウント・モードでは、マウント・モードの非CDBと同じように動作します。どのオブジェクトの変更も行えず、またデータベース管理者のみがアクセス可能です。データファイルからの読取りも、データファイルへの書込みもできません。PDBに関する情報は、メモリー・キャッシュから削除されます。PDBのコールド・バックアップを実行できます。

読取り/書込み、読取り専用、移行の各オープン・モードは、PDBでのRESTRICTED SESSION権限を持つユーザーに制限できます。

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

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

この項では、次の項目について説明します。

関連項目:

13.4.5.1.1 ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更について

現在のコンテナがルートである場合、pdb_change_state句を含むALTER PLUGGABLE DATABASE文を使用すると、指定されたPDBのオープン・モードが変更されます。

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

表13-5 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 UPGRADE [RESTRICTED]

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

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

CLOSE [IMMEDIATE|ABORT]

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

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

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

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

ALTER PLUGGABLE DATABASE OPEN文を発行するとき、オープンするPDBが、フィジカル・スタンバイ・データベースとして使用されているCDBに属している場合にはREAD ONLYがデフォルトとなり、それ以外の場合はREAD WRITEがデフォルトとなります。

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

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

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

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

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 Real Application Clusters (Oracle RAC) CDBの場合、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をクローズする場合、次のオプションを含むrelocate句を使用できます。

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

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

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

注意:

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

relocate

Oracle RAC CDBでPDBをクローズする場合、次のオプションを含むrelocate句を使用できます。

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

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

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

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

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

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

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

ALTER PLUGGABLE DATABASE文の要件のサマリー

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

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

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

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

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

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

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

読取り/書込み

はい

はい

読取り/書込み

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

読取り/書込み

はい

いいえ

読取り/書込み

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

読取り/書込み

いいえ

はい

読取り/書込み

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

読取り/書込み

いいえ

いいえ

読取り/書込み

マウント

読取り専用

はい

はい

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

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

読取り専用

はい

いいえ

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

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

読取り専用

いいえ

はい

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

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

読取り専用

いいえ

いいえ

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

マウント

移行

はい

該当なし

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

マウント

移行

いいえ

該当なし

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

マウント

マウント

はい

該当なし

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

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

マウント

いいえ

該当なし

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

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

注意:

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

13.4.5.1.2 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を特定のターゲット・モードにするには、次の表で説明されている要件を満たす必要があります。

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

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

読取り/書込み

はい

読取り/書込み

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

読取り/書込み

いいえ

読取り/書込み

マウント

読取り専用

いいえ

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

マウント

注意:

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

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

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

オープン・モードを変更する手順は、次のとおりです。

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

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

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

例13-18 リストされた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;

例13-19 すべての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は読取り/書込みモードでオープンされます。

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

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

ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb
   CLOSE IMMEDIATE;

注意:

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

関連項目:

13.4.5.3 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をクローズすることはできません。

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

STARTUP PLUGGABLE DATABASE hrpdb OPEN

例13-22 STARTUPコマンドを使用した読取り/書込み制限モードでのPDBのオープン

STARTUP PLUGGABLE DATABASE hrpdb RESTRICT

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

STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY RESTRICT

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

STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY

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

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

STARTUP PLUGGABLE DATABASE hrpdb FORCE
13.4.5.4 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のオープン・モードを保持または破棄しています。

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

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

ALTER PLUGGABLE DATABASE salespdb SAVE STATE;

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

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

ALTER PLUGGABLE DATABASE salespdb DISCARD STATE;

例13-28 CDB再起動時の全PDBのオープン・モードの保持

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

ALTER PLUGGABLE DATABASE ALL SAVE STATE;

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

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

ALTER PLUGGABLE DATABASE salespdb, hrpdb SAVE STATE;

例13-30 CDB再起動時のリストされたPDB以外全部のオープン・モードの保持

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

ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb SAVE STATE;
13.4.5.5 Oracle RACでのPDBの起動および停止

プラガブル・データベース(PDB)の管理には、非CDBを管理するために必要なタスクのごく一部が必要です。

Oracle RACベースのマルチテナント・コンテナ・データベース(CDB)の管理は、非CDBの管理に似ています。違いは、ある管理タスクはCDB全体に適用され、ある管理タスクはCDBルートにのみ適用され、ある管理タスクは特定のPDBに適用されることです。この一部のタスクでは、ほとんどがPDBおよび非CDBに対して同じです。ただし、PDBのオープン・モードを変更する場合など、いくつかの違いがあります。また、PDB管理者は、単一PDBの管理のみを行い、CDB内の他のPDBによる影響は受けません。

Oracle RAC CDB内のPDBは、サービスを管理することによって管理します。これは、PDBがポリシー管理か、または管理者管理かに関係なく同じです。1つの動的データベース・サービスを各PDBに割り当てて、クラスタ化コンテナ・データベース内のインスタンスにわたってPDBの起動、停止および配置を調整します。

たとえば、prodというサーバー・プールにsparkというポリシー管理PDBを備えたraccontというCDBを所有している場合、次のコマンドを使用してplugというサービスをこのデータベースに割り当てます。

srvctl add service –db raccont –pdb spark –service plug –serverpool prod

サービスplugは、サーバー・プール内のすべてのノードにわたって均一に管理されます。同じサーバー・プールでこのサービスをシングルトン・サービスとして実行する場合は、前述のコマンドとともに-cardinality singletonパラメータを使用します。

PDB sparkを開くには、次のように、サービスplugを起動する必要があります。

srvctl start service -db raccont -service plug

サービスplugを停止する手順は、次のとおりです。

srvctl stop service -db raccont -service plug

PDB sparkは、SQLコマンドALTER PLUGGABLE DATABASE PDB_NAME CLOSE IMMEDIATEを使用してPDBを閉じるまで開いたままです。srvctl status serviceコマンドを使用すると、データベースのステータスを確認できます。

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

注意:

SQL*Plusとは異なり、SRVCTLは、クラスタ・データベース全体を操作します。したがって、サービスが同時に複数のサーバー上で実行されるように定義され、クラスタの現行のステータスがこの配置を可能にしている場合、サービスを使用したPDBの起動は、クラスタ化されたCDBの複数のインスタンスに同時に適用されます。

13.5別のコンテナでのSQLの実行

別のコンテナでSQLを実行するには、DMLのCONTAINERS句、またはDDLのCONTAINER句を使用します。

この項では、次の項目について説明します。

13.5.1 CDB内のコンテナに対するDML文の発行

CDBまたはアプリケーション・ルートで発行されるDML (データ操作言語)文では、CDB内の別のコンテナを変更できます。また、DML文に対してデフォルト・コンテナ・ターゲットを指定できます。

この項では、次の項目について説明します。

13.5.1.1 CDB内のコンテナに対するDML文の発行について

DML文は、CDB内の指定したコンテナ内のデータベース・オブジェクトに影響することがあります。

コンテナはコンテナIDによって指定されます。コンテナIDは複数の場所に表示されることがあるため、データベースでは次の優先順位が使用されます。

  1. DML文のWHERE句に指定されたCON_ID

  2. CONTAINERS_DEFAULT_TARGETデータベース・プロパティ

  3. 現在のコンテナ(CDBルートまたはアプリケーション・ルートのいずれか)

CDBルートまたはアプリケーション・ルートで、CONTAINERS句を含むDML文は、CDBまたはアプリケーション・コンテナ内の単一コンテナ内の表またはビューを変更できます。CONTAINERS句を使用するには、変更される表またはビューをCONTAINERS句に指定し、影響を受けるコンテナIDをWHERE句に指定します。

INSERT VALUES文でターゲット・コンテナを指定するには、VALUES句にCON_ID値を指定します。また、UPDATE文またはDELETE文でターゲット・コンテナを指定するには、WHERE句にCON_ID述語を指定します。たとえば、次のDML文はコンテナ内のsales.customers表を7CON_IDで更新します。
UPDATE CONTAINERS(sales.customers) ctab 
   SET ctab.city_name='MIAMI' 
   WHERE ctab.CON_ID=7 
   AND CUSTOMER_ID=3425;

CONTAINERS句には、次の制限事項が適用されます。

  • 指定したスキーマは、CON_IDで指定されたコンテナ、および文が実行されるCDBまたはアプリケーション・ルートの両方に存在する必要があります。

  • WHERE句のCON_IDに指定する値は、CDB内のPDB、アプリケーション・ルートまたはアプリケーションPDBを参照する必要があります。

  • INSERTのターゲットがCONTAINERS()内にあるSELECT文を使用したINSERT文はサポートされません。

  • INSERTのターゲットがCONTAINERS()内にある、複数表に対するINSERT文はサポートされません。

  • CONTAINERS句を使用するDML文では、データベース・リスナーがTCP (IPCではなく)を使用して構成され、PORT値およびHOST値がPORT句およびHOST句を使用して各ターゲットPDBに指定されている必要があります。

13.5.1.2 CDBにおけるDML文のデフォルト・コンテナの指定

CDB内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET句を指定したALTER DATABASE文を発行します。

WHERE句でコンテナを指定せずにDML文がCDBルートで発行されている場合、DML文はCDBのデフォルト・コンテナに影響します。デフォルト・コンテナには、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBを含む、CDB内の任意のコンテナを指定できます。1つのデフォルトのコンテナのみを使用できます。

CONTAINERS_DEFAULT_TARGETデータベース・プロパティは、デフォルト・コンテナを設定します。デフォルトでは、このプロパティは設定されていません。次の問合せを実行することで、CDBのデフォルト・ターゲット・コンテナを決定できます。
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='CONTAINERS_DEFAULT_TARGET';
  1. SQL*Plusで、現在のコンテナがCDBルートまたはアプリケーション・ルートであることを確認します。
    現在のユーザーには、ALTER DATABASE権限が共通して付与されている必要があります。
  2. CONTAINERS DEFAULT TARGET句を指定してALTER DATABASE文を実行します。

例13-31 CDB内のDML文のデフォルト・コンテナの指定

この例では、PDB1がCDB内のDML文のデフォルト・コンテナであることを指定します。

ALTER DATABASE CONTAINERS DEFAULT TARGET = (PDB1);

例13-32 デフォルト・コンテナのクリア

この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはCDBルートです。

ALTER DATABASE CONTAINERS DEFAULT TARGET = NONE;

13.5.2 CDBでのDDL文の実行

CDBでは、現在のコンテナまたはすべてのコンテナでデータ定義言語(DDL)文を実行できます。

この項では、次の項目について説明します。

13.5.2.1 CDBにおけるDDL文の実行の概要

CDBでは、DDL文をすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。

影響を受けるコンテナを指定するには、CONTAINER句を使用します。

CONTAINER = { CURRENT | ALL }

次の設定を使用できます。

  • CURRENTは、文は現在のコンテナのみに適用されることを意味します。

  • ALLは、ルートおよびすべてのPDBを含むCDB内のすべてのコンテナに文が適用されることを意味します。

DDL文のCONTAINER句には、次の制限があります。

表13-8 CDBでのDDL文およびCONTAINER句

DDL文 CONTAINER = CURRENT CONTAINER = ALL

CREATE USER

現在のPDBにローカル・ユーザーを作成します。

共通ユーザーを作成します。

ALTER USER

現在のPDBのローカル・ユーザーを変更します。

共通ユーザーを変更します。

CREATE ROLE

現在のPDBにローカル・ロールを作成します。

共通ロールを作成します。

GRANT

ローカル・コンテナでの権限をローカル・ユーザー、共通ユーザーまたはローカル・ロールに付与します。

SET CONTAINER権限を、現在のPDBでユーザーが作成した共通ユーザーに付与できます。

共通オブジェクトに対するシステム権限またはオブジェクト権限を、共通ユーザーまたは共通ロールに付与します。指定された権限は、CDB全体にわたってユーザーまたはロールに付与されます。

REVOKE

ローカル・コンテナでの権限をローカル・ユーザー、共通ユーザーまたはローカル・ロールから取り消します。

この文では、ローカル・コンテナの指定されたユーザーまたはロールから、CONTAINER句にCURRENTを指定して付与された権限のみを取り消すことができます。この文は、CONTAINER句にALLを指定して付与された権限には影響しません。

SET CONTAINER権限を、現在のPDBでユーザーが作成した共通ユーザーから取り消すことができます。

共通オブジェクトに対するシステム権限またはオブジェクト権限を、共通ユーザーまたは共通ロールから取り消します。指定された権限は、CDB全体にわたってユーザーまたはロールから取り消されます。

この文では、指定された共通ユーザーまたは共通ロールから、CONTAINER句にALLを指定して付与された権限のみを取り消すことができます。この文は、CONTAINER句にCURRENTを指定して付与された権限には影響しません。ただし、取消し対象の共通付与権限に依存するローカル付与権限も取り消されます。

他のすべてのDDL文は、現在のコンテナにのみ適用されます。

ユーザー、ロールおよびプロファイルの名前の通常のルールに加えて、CDBでユーザー、ロールまたはプロファイルを作成する場合には、次のルールおよびベスト・プラクティスが適用されます。

  • 共通のユーザー、ロールおよびプロファイルの名前のベスト・プラクティスは、共通のユーザー、ロールおよびプロファイルとローカルのユーザー、ロールおよびプロファイルの間に名前の競合が発生しないように、接頭辞で開始することです。この接頭辞は、CDBルートでCOMMON_USER_PREFIX初期化パラメータを使用して指定します。デフォルトでは、CDBルートでの接頭辞はC##またはc##です。

  • アプリケーション・コンテナでの共通ユーザー、ロールおよびプロファイルの名前のベスト・プラクティスは、アプリケーションの共通ユーザー、ロールおよびプロファイルとローカルのユーザー、ロールおよびプロファイルとの間に名前の競合が発生しないように接頭辞で開始することです。この接頭辞は、アプリケーション・ルートでCOMMON_USER_PREFIX初期化パラメータを使用して指定します。デフォルトでは、アプリケーション・ルートでの接頭辞はNULLです。

  • COMMON_USER_PREFIX初期化パラメータがアプリケーション・ルートで設定されている場合、設定はアプリケーション・コンテナ内のアプリケーション共通ユーザー、ロールおよびプロファイルの名前に適用されます。接頭辞はCDBルートとアプリケーション・ルートで異なる場合があり、各アプリケーション・コンテナでも異なる場合があります。

  • 共通のユーザー、ロールおよびプロファイルの名前は、ASCII文字のみで構成する必要があります。この制限は、アプリケーションの共通のユーザー、ロールおよびプロファイルの名前には適用されません。

  • ローカルのユーザー、ロールおよびプロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで共通ユーザーに指定した接頭辞で始めることができません。

  • ローカルのユーザー、ロールおよびプロファイルの名前は、C##またはc##で始めないでください。

  • CDBルートのCOMMON_USER_PREFIXの値に関係なく、アプリケーションの共通ユーザー、ロールおよびプロファイルの名前をC##またはc##で開始することはできません。

  • アプリケーションの共通ユーザー、ロールおよびプロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで共通ユーザーに指定した接頭辞で始めることができません。

関連項目:

13.5.2.2 現在のコンテナにおけるDDL文の実行

DDL文のCONTAINER句にCURRENTを指定して、現在のコンテナで文を実行します。

サポートされるDDL文を表13-8に示します。

現在のユーザーは、現在のコンテナでDDL文を実行するために必要な権限を付与されている必要があります。たとえば、ユーザーを作成するには、現在のユーザーに現在のコンテナでのCREATE USERシステム権限が付与されている必要があります。

現在のコンテナでDDL文を実行する手順は、次のとおりです。

  1. SQL*Plusでコンテナにアクセスします。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. CONTAINERCURRENTに設定されたDDL文を実行します。

ローカル・ユーザーのユーザー名は、COMMON_USER_PREFIX初期化パラメータで指定した接頭辞で始めることができません。デフォルトでは、CDBルートでは接頭辞はC##またはc##です。アプリケーション・ルートでは、アプリケーション・コンテナに独自の接頭辞を指定できます。さらに、共通ユーザーの名前はASCII文字のみで構成する必要があります。指定する表領域は、PDBに存在している必要があります。

例13-33 PDBでのローカル・ユーザーの作成

この例では、現在のPDBにローカル・ユーザーtestpdbを作成します。

CREATE USER testpdb IDENTIFIED BY password 
   DEFAULT TABLESPACE pdb1_tbs
   QUOTA UNLIMITED ON pdb1_tbs
   CONTAINER = CURRENT;
13.5.2.3 CDB内のすべてのコンテナにおけるDDL文の実行

DDL文のCONTAINER句にALLを指定して、CDB内のすべてのコンテナで文を実行します。

サポートされるDDL文を表13-8に示します。

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

  • 現在のユーザーは共通ユーザーである必要があります。

  • 現在のユーザーは、DDL文を実行するために必要な権限を共通に付与されている必要があります。たとえば、ユーザーを作成するには、現在のユーザーには共通でCREATE USERシステム権限を付与する必要があります。

CDB内のすべてのコンテナでDDL文を実行する手順は、次のとおりです。

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

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

  2. CONTAINERALLに設定されたDDL文を実行します。

共通ユーザーのユーザー名は、COMMON_USER_PREFIX初期化パラメータで指定した接頭辞で始める必要があります。デフォルトでは、CDBルートでは接頭辞はC##またはc##です。アプリケーション・ルートでは、アプリケーション・コンテナに独自の接頭辞を指定できます。さらに、共通ユーザーの名前はASCII文字のみで構成する必要があります。指定する表領域は、ルートおよびすべてのPDBに存在している必要があります。

例13-34 CDBでの共通ユーザーの作成

この例では、共通ユーザーc##testcdbを作成します。

CREATE USER c##testcdb IDENTIFIED BY password 
   DEFAULT TABLESPACE cdb_tbs
   QUOTA UNLIMITED ON cdb_tbs
   CONTAINER = ALL;

13.5.3 CDBでのオラクル社が提供するSQLスクリプトの実行

catcon.plスクリプトを使用して、Oracleが提供するSQLまたはSQLスクリプトをCDB内で実行できます。スクリプトは、指定した任意のコンテナに対して実行できます。

この項では、次の項目について説明します。

13.5.3.1 CDBでのオラクル社が提供するSQLスクリプトの実行の概要

CDBでは、SQLスクリプトおよびSQL文を実行する場合、catcon.plスクリプトが最良の方法となります。

Oracle Databaseインストールには、複数のSQLスクリプトが含まれています。これらのスクリプトにより、データ・ディクショナリ・ビューの作成やオプションのインストールなどの操作が実行されます。

catcon.plスクリプトは、ルートおよび指定したPDBでスクリプトを正しい順序で実行でき、SQLスクリプトまたはSQL文で予期しないエラーが生成されなかったことを確認するために表示できるログ・ファイルを生成します。また、これにより、複数のプロセスが開始され、それらのプロセスが、事前に割り当てられたスクリプトの実行を完了すると、新しいスクリプトがプロセスに割り当てられます。

注意:

  • catcon.plを実行するときにPDBシードを除外しないかぎり、SQLスクリプトまたはSQL文はPDBシード上で実行されます。

  • catcon.plスクリプトを使用して、CDBと非CDBの両方でスクリプトを実行できます。

13.5.3.2 catcon.plの構文およびパラメータ

catcon.plスクリプトはPerlスクリプトであり、オペレーティング・システムのプロンプトで実行される必要があります。

catcon.plスクリプトには、次の構文およびパラメータが含まれています。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl  
[--usr username[/password]] [--int_usr username[/password]] [--script_dir directory] 
[--log_dir directory] [{--incl_con|--excl_con} container] [--echo] [--spool] 
[--error_logging { ON | errorlogging-table-other-than-SPERRORLOG } ] [--app_con application_root] 
[--no_set_errlog_ident] [--diag] [-ignore_unavailable_pdbs] [--verbose] [--force_pdb_mode pdb_mode] 
[--recover] --log_file_base log_file_name_base 
-- { SQL_script [arguments] | --x'SQL_statement' }

--x SQL_statementは、1文字のパラメータが続く場合、前に--を付けます。--x SQL_statementの前にスクリプト名または別の--x SQL_statementを指定する場合、前の--は付けません。また、SQL文は一重引用符で囲む必要があります。

SQLスクリプトにコマンドライン・パラメータは、--pを使用して導入します。SQLスクリプトに対話型(シークレット)パラメータは、--Pを使用して導入します。

catcon.plスクリプトのヘルプを表示するには、ディレクトリを$ORACLE_HOME/perl/bin/に変更してから、次のコマンドを実行します。

perl $ORACLE_HOME/rdbms/admin/catcon.pl --help

表13-9で、catcon.plパラメータについて説明します。必須と指定されていないかぎり、パラメータはオプションです。

次の表に示す短いパラメータ名は、下位互換性があります。短縮名がないパラメータもあります。

表13-9 catcon.plパラメータ

パラメータ 説明

--usr

短縮名: -u

ルートおよび指定されたPDBに接続するユーザー名およびパスワードを指定します。SQLスクリプトまたはSQL文を実行するために必要な権限を持つ共通ユーザーを指定します。デフォルトは/ AS SYSDBAです。パスワードを入力しないと、catcon.plによってパスワードが求められます。

--int_usr

短縮名: -U

ルートおよび指定されたPDBに接続するユーザー名およびパスワードを指定します。CDBメタデータを問い合せるなどの内部タスクを実行する場合は、必要な権限を持つ共通ユーザーを指定します。デフォルトは、/ AS SYSDBAです。パスワードを入力しないと、catcon.plによってパスワードが求められます。

--script_dir

短縮名: -d

SQLスクリプトを含むディレクトリ。デフォルトは、現行のディレクトリです。

--log_dir

短縮名: -l

catcon.plによってログ・ファイルが書き込まれるディレクトリ。デフォルトは、現行のディレクトリです。

{--incl_con|--excl_con}

短縮名: {-c|-C}

SQLスクリプトを実行するコンテナまたは実行しないコンテナ。

--incl_conパラメータには、SQLスクリプトを実行するコンテナをリストします。

--excl_conパラメータには、SQLスクリプトを実行しないコンテナをリストします。

一重引用符で囲まれたPDB名のスペース区切りリストで、コンテナを指定します。

--incl_conパラメータと--excl_conパラメータは、両方同時には指定できません。

このパラメータを使用する場合、--app_conパラメータは使用できません。

--echo

短縮名: -e

スクリプト実行時のエコーをONに設定します。デフォルトでのエコーはOFFです。

--spool

短縮名: -s

すべてのスクリプトの出力を次の名前でファイルにスプーリングします。

log-file-name-base_script-name-without-extension_[container-name-if-any].default-extension

--error_logging

短縮名: -E

ONに設定されている場合、デフォルトのエラー・ロギング表が使用されます。デフォルト設定はONです。ONに設定されている場合、エラーは、SQLスクリプトを実行する各コンテナの現行スキーマ内の表SPERRORLOGに書き込まれます。この表がコンテナに存在しない場合は、自動的に作成されます。

SPERRORLOG以外の表が指定されている場合、エラーは指定された表に書き込まれます。この表はSQLスクリプトを実行する各コンテナに存在している必要があり、現在のユーザーには、これらのコンテナごとの表にDML操作を実行するために必要な権限がある必要があります。

エラー・ロギング表の詳細は、SQL*Plusユーザーズ・ガイドおよびリファレンスを参照してください。

--app_con

短縮名: -F

アプリケーション・ルートを指定します。スクリプトは、アプリケーション・ルートと、アプリケーション・ルートにプラグインされるアプリケーションPDBで実行されます。

このパラメータを使用する場合、--incl_conパラメータと--excl_conパラメータは使用できません。

--no_set_errlog_ident

短縮名: -I

SET ERRORLOGGING識別子を発行しないでください。このオプションは、SET ERRORLOGGING識別子がすでに設定され、上書きしない場合を対象としています。

--diag

短縮名: -g

デバッグ情報の生成をオンにします。

--verbose

短縮名: -v

冗長出力をオンにします

--ignore_unavailable_pdbs

短縮名: -f

クローズされているPDBあるいは--incl_conまたは--excl_conオプションを使用している場合は存在しないPDBを無視し、明示的または暗黙的に指定したオープンPDBのみを処理します。

このオプションを指定せず、指定されたPDBの一部が存在しなかったり、オープンされていない場合、エラーが返されてコンテナは処理されません。

--force_pdb_mode

スクリプトを実行する対象のPDBすべてに必要なオープン・モード。次のいずれかの値を指定します。

  • UNCHANGED

  • READ WRITE

  • READ ONLY

  • UPGRADE

  • DOWNGRADE

UNCHANGED以外の値を指定した場合、スクリプトを実行する対象のPDBはすべて、指定したオープン・モードに変更されます。PDBが異なるモードでオープンされている場合、PDBはクローズされ、指定したモードで再オープンされます。スクリプトがすべて実行されると、PDBは元のオープン・モードにリストアされます。

デフォルトのUNCHANGEDを指定した場合、PDBのオープン・モードは変更されません。

--recover

短縮名: -R

catcon.plによって起動されたSQL*Plusプロセスが予期せず終了した場合に、catcon.plでSQL*Plusプロセスのリカバリを試みます。このパラメータを指定しない場合、catcon.plはプロセスのリカバリを試行せずにクローズします。

--log_file_base

短縮名: -b

(必須)ログ・ファイル名のベース名。

13.5.3.3 catcon.plスクリプトの実行

catcon.plスクリプトの実行を例で示します。

catcon.plで実行されるSQLスクリプトまたはSQL文によって、データ操作言語(DML)またはデータ定義言語(DDL)の各操作を実行する場合、変更対象のコンテナは、読取り/書込みモードである必要があります。

catcon.plスクリプトを実行する手順は、次のとおりです。

  1. コマンドライン・プロンプトをオープンします。

  2. catcon.plスクリプトを実行し、1つ以上のSQLスクリプトまたはSQL文を指定します。

    cd $ORACLE_HOME/perl/bin/
    perl $ORACLE_HOME/rdbms/admin/catcon.pl parameters SQL_script
    perl $ORACLE_HOME/rdbms/admin/catcon.pl parameters -- --xSQL_statement
    

例13-35 CDB内のすべてのコンテナにおけるcatblock.sqlスクリプトの実行

次の例では、CDBのすべてのコンテナでcatblock.sqlスクリプトを実行します。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS 
--script_dir $ORACLE_HOME/rdbms/admin --log_file_base catblock_output catblock.sql

次のパラメータが指定されます。

  • --usrパラメータは、SYSユーザーが各コンテナでスクリプトを実行することを指定します。

  • --script_dirパラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。

  • --log_file_baseパラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。

デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。--incl_con--excl_conのいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてスクリプトが実行されます。

例13-36 特定のPDBにおけるcatblock.sqlスクリプトの実行

次の例では、CDB内のPDB hrpdbおよびsalespdbで、catblock.sqlスクリプトが実行されます。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --int_usr SYS 
--script_dir $ORACLE_HOME/rdbms/admin --log_dir '/disk1/script_output' --incl_con 'HRPDB SALESPDB' 
--log_file_base catblock_output catblock.sql

次のパラメータが指定されます。

  • --usrパラメータは、SYSユーザーが各コンテナでスクリプトを実行することを指定します。

  • --int_usrパラメータは、SYSユーザーが内部タスクを実行することを指定します。

  • --script_dirパラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。

  • --log_dirパラメータは、出力ファイルが/disk1/script_outputディレクトリに配置されることを指定します。

  • --incl_conパラメータは、SQLスクリプトがPDB hrpdbおよびsalespdbで実行されることを指定します。スクリプトは、CDB内の他のコンテナでは実行されません。

  • --log_file_baseパラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。

例13-37 特定のPDBを除くすべてのコンテナにおけるcatblock.sqlスクリプトの実行

次の例では、PDB hrpdbおよびsalespdbを除くCDB内のすべてのコンテナで、catblock.sqlスクリプトを実行します。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS 
--script_dir $ORACLE_HOME/rdbms/admin --log_dir '/disk1/script_output' --excl_con 'HRPDB SALESPDB' 
--log_file_base catblock_output catblock.sql

次のパラメータが指定されます。

  • --usrパラメータは、SYSユーザーが各コンテナでスクリプトを実行することを指定します。

  • --script_dirパラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。

  • --log_dirパラメータは、出力ファイルが/disk1/script_outputディレクトリに配置されることを指定します。

  • --excl_conパラメータは、PDB hrpdbおよびsalespdbを除くCDB内のすべてのコンテナで、SQLスクリプトを実行することを指定します。

  • --log_file_baseパラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。

例13-38 コマンドライン・パラメータを使用したSQLスクリプトの実行

次の例では、CDB内のすべてのコンテナに対し、custom_script.sqlスクリプトを実行します。

cd $ORACLE_HOME/perl/bin/
perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --script_dir /u01/scripts --log_file_base custom_script_output custom_script.sql '--phr' '--PEnter password for user hr:'

次のパラメータが指定されます。

  • --usrパラメータは、SYSユーザーが各コンテナでスクリプトを実行することを指定します。

  • --script_dirパラメータは、SQLスクリプトが/u01/scriptsディレクトリ内にあることを指定します。

  • --log_file_baseパラメータは、ログ・ファイル名のベース名がcustom_script_outputであることを指定します。

  • --pパラメータは、コマンドライン・パラメータに対してhrを指定します。

  • --Pパラメータは、ユーザーhrのパスワードを求める対話型パラメータを指定します。

デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。-incl_con-excl_conのいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてスクリプトが実行されます。

例13-39 CDB内のすべてのコンテナにおけるSQL文の実行

次の例では、CDBのすべてのコンテナでSQL文を実行します。

cd $ORACLE_HOME/perl/bin/
perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --echo --log_file_base select_output -- --x"SELECT * FROM DUAL"

次のパラメータが指定されます。

  • --usrパラメータは、SYSユーザーが各コンテナでスクリプトを実行することを指定します。

  • --echoパラメータは、SQL文に対する出力を表示します。

  • --log_file_baseパラメータは、ログ・ファイル名のベース名がselect_outputであることを指定します。

  • SQL文SELECT * FROM DUALは引用符で囲まれ、前に--xが付きます。--xの前にはパラメータ(--log_file_base)が指定されているため、--を前に付ける必要があります。

デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。-incl_con-excl_conのいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてSQL文が実行されます。

関連項目:

13.5.4 DBMS_SQLパッケージを使用したコンテナのコードの実行

CDBのコンテナ内でPL/SQLコードを実行する場合に別のコンテナで1つ以上のSQL文を実行する場合、DBMS_SQLパッケージを使用してコンテナを切り替えます。

たとえば、複数のコンテナで同じアクションを実行する必要がある場合は、DBMS_SQLパッケージを使用してコンテナを切り替えることができます。

コンテナの切替えにDBMS_SQLを使用する場合、次を考慮します。

  • トランザクションを複数のコンテナにわたって実行することはできません。

    ターゲット・コンテナ内で実行する必要のあるアクションのセットがトランザクションである必要がある場合、最終アクションとしてコミットまたはロールバックを行う、自律型のトランザクションの使用を検討します。

  • SET ROLE文は許可されていません。

例13-40 複数のコンテナでの同一のアクションの実行

次の例のPL/SQLブロックは、2つのPDB (pdb1およびpdb2)のhrスキーマにidentact表を作成します。この例では、両方のPDBのidentact表に行も挿入します。

DECLARE
  c1 INTEGER;
  rowcount INTEGER;
  taskList VARCHAR2(32767) :=
    'DECLARE
      PRAGMA AUTONOMOUS TRANSACTION;
     BEGIN
       -- Create the hr.identact table.
       EXECUTE IMMEDIATE
         ''CREATE TABLE hr.identact
             (actionno NUMBER(4) NOT NULL,
              action VARCHAR2 (10))'';
       EXECUTE IMMEDIATE
         ''INSERT INTO identact VALUES(1, 'ACTION1')'';
       -- A commit is required if the tasks include DML.
       COMMIT;
       EXCEPTION
         WHEN OTHERS THEN
           -- If there are errors, then drop the table.
           BEGIN
             EXECUTE IMMEDIATE ''DROP TABLE identact'';
           EXCEPTION
            WHEN OTHERS THEN
              NULL;
            END;
        END;';
  TYPE containerListType IS TABLE OF VARCHAR2(128) INDEX BY PLS_INTEGER;
  containerList  containerListType;
BEGIN
  containerList(1) := 'PDB1';
  containerList(2) := 'PDB2';
  c1 := DBMS_SQL.OPEN_CURSOR;
  FOR conIndex IN containerList.first..containerList.last LOOP
    DBMS_OUTPUT.PUT_LINE('Creating in container: ' || containerList(conIndex));
    DBMS_SQL.PARSE(c => c1 ,
                   statement => taskList,
                   language_flag => DBMS_SQL.NATIVE,
                   edition= > NULL,
                   apply_crossedition_trigger => NULL,
                   fire_apply_trigger => NULL,
                   schema => 'HR',
                   container => containerList(conIndex));
     rowcount := DBMS_SQL.EXECUTE(c=>c1);
  END LOOP;
  DBMS_SQL.CLOSE_CURSOR(c=>c1);
END;
/

関連項目:

13.6 CDBインスタンスの停止

CDBインスタンスは、非CDBインスタンスを停止する場合と同じ方法で停止できます。

前提条件

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

  • CDBインスタンスは、マウントされているか、またはオープンしている必要があります。

  • 現在のユーザーは、SYSDBASYSOPERSYSBACKUPまたはSYSDGの管理権限を持つ共通ユーザーである必要があります。CDBを停止するには、ユーザーは接続時にAS SYSDBAAS SYSOPERAS SYSBACKUPまたはAS SYSDGをそれぞれ使用して、権限を行使する必要があります。

CDBを停止する手順は、次のとおりです。

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

    「SQL*Plus CONNECTコマンドを使用したコンテナへの接続」を参照してください。

  2. CDBインスタンスを停止します。

関連項目: