38 SQL*Plusを使用したPDBの作成および削除

PDBは、シードの使用、既存のPDBまたは非CDBのクローニング、切断されたPDBの接続など、複数の方法で作成できます。PDBをCDBから削除することもできます。

注意:

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

38.1 PDBの作成および削除について

CDBシードまたはアプリケーション・シードの使用、既存のPDBまたは非CDBのクローニング、切断されたPDBのCDBへの接続または非CDBの使用により、マルチテナント・コンテナ・データベース(CDB)にプラガブル・データベース(PDB)を作成できます。PDBを切断するかPDBを削除することで、PDBをCDBから削除できます。PDBをアプリケーション・コンテナに作成することもできます。

注意:

  • この章では、SQL文を使用してPDBを作成および削除する方法について説明します。PDBを作成および削除する簡単な方法は、グラフィカル・ユーザー・インタフェース(Database Configuration Assistant (DBCA)、Oracle Enterprise Manager Cloud Control (Cloud Control)、Oracle Enterprise Manager Database Express (EM Express)など)を使用することです。

  • CDBには、最大4,096個のPDB (PDB、アプリケーション・ルート、アプリケーションPDB、アプリケーション・シードおよびプロキシPDBを含む)を含めることができます。この数には、CDBルートおよびCDBシードは含まれていません。

関連項目:

38.1.1 PDBを作成する手法

様々な手法を使用してPDBを作成できます。

PDBの作成は、PDBをCDBまたはアプリケーション・コンテナに関連付けるプロセスです。CDBまたはアプリケーション・コンテナの一部としてPDBを使用する場合は、PDBを作成します。

表38-1では、PDBの作成に使用できる手法について説明します。

表38-1 PDBを作成する手法

手法 説明 詳細情報

シードを使用したPDBの作成

CDBシードまたはアプリケーション・シードのファイルを使用して、PDBをCDBに作成します。この手法では、シードに関連付けられているファイルを新しい場所にコピーし、コピーしたファイルを新しいPDBに関連付けます。

「シードを使用したPDBの作成」

既存のPDBまたはCDB以外のクローニングによるPDBの作成

ソースPDBまたは非CDBをクローニングしてPDBを作成します。ソースは、ローカルCDB内のPDB、リモートCDB内のPDB、ローカルまたはリモート・アプリケーション・コンテナ内のPDBまたは非CDBにすることができます。この手法では、ソースに関連付けられているファイルを新しい場所にコピーし、コピーしたファイルを新しいPDBに関連付けます。

「既存のPDBまたは非CDBのクローニングによるPDBの作成」

異なるCDBへの再配置によるPDBの作成

あるCDBから別のCDBに再配置することでPDBを作成します。この手法は、PDBに関連付けられているファイルを新しい場所に移動します。

「再配置によるPDBの作成」

CDBへの切断されたPDBの接続によるPDBの作成

PDBを記述しているXMLメタデータ・ファイルを使用してPDBを作成し、これらのファイルをPDBに関連付けてPDBをCDBに接続します。

「CDBへの切断されたPDBの接続によるPDBの作成」

プロキシPDBとしてのPDBの作成

データベース・リンクで別のPDBを参照することで、PDBをプロキシPDBとして作成します。参照先PDBは、プロキシPDBと同じCDBまたは別のCDBに存在できます。

「プロキシPDBとしてのPDBの作成」

非CDBを使用したPDBの作成

PDBに非CDBを適用して、PDBを作成します。DBMS_PDBパッケージを使用して、切断されているPDBを、Oracle Database 12cの非CDBから作成できます。次に、切断されているPDBをCDBに接続できます。

「非CDBを使用したPDBの作成について」

表38-1で説明しているすべての手法では、CREATE PLUGGABLE DATABASE文を使用してPDBを作成します。これらの手法は、再配置、コピー、接続、プロキシPDBとしての参照の4つのメイン・カテゴリに分かれます。図38-1は、PDBを作成するためのオプションを表します。

図38-1 PDBを作成するためのオプション

図38-1の説明が続きます
「図38-1 PDBを作成するためのオプション」の説明

アプリケーション・コンテナの作成は、アプリケーション・コンテナをCDBに関連付けるプロセスです。AS APPLICATION CONTAINER句をCREATE PLUGGABLE DATABASE文に含めることで、これらすべての手法を使用してアプリケーション・コンテナを作成できます。

PDBを作成する際に、それをCDBまたはアプリケーション・コンテナに関連付けることができます。現在のコンテナがCDBルートの場合にPDBを作成すると、PDBがそのCDBルートに関連付けられます。現在のコンテナがアプリケーション・コンテナのアプリケーション・ルートの場合にPDBを作成すると、PDBがそのアプリケーション・ルートに関連付けられます。PDBをアプリケーション・コンテナにクローニングするか、PDBをアプリケーション・コンテナに再配置するか、PDBをアプリケーション・コンテナに接続する場合、PDBのアプリケーション名およびバージョンはアプリケーション・コンテナのアプリケーション名およびバージョンと一致する必要があります。

PDBを異なるCDBに接続する必要がある場合は、そのPDBを切断します。PDBが必要なくなった場合は、そのPDBを切断または削除できます。切断されたPDBは、CDBに接続されるまで使用できません。

注意:

  • CDB以外をクローニングしたPDBの作成は、Oracle Database 12cリリース1(12.1.0.2)より使用可能です。

  • PDBの再配置による作成またはプロキシPDBとしての作成は、Oracle Database 12cリリース2 (12.2.0.1)以上で使用できます。

38.1.2 CREATE PLUGGABLE DATABASE文

CREATE PLUGGABLE DATABASE文を使用してPDBを作成します。この文を使用するには、文の句および各句をいつ使用するかを理解する必要があります。

表38-1で説明しているすべての手法で、この文が使用されます。

注意:

Oracle Database 12cリリース2 (12.2.0.1)以降では、CREATE PLUGGABLE DATABASE文を使用してアプリケーション・コンテナ、アプリケーション・シードおよびアプリケーションPDBを作成することもできます。PDBおよびアプリケーションPDBを作成するSQL文はまったく同じです。CREATE PLUGGABLE DATABASE文をCDBルートで実行した場合、PDBはCDBルートに属します。CREATE PLUGGABLE DATABASE文をアプリケーション・ルートで実行した場合、アプリケーションPDBはアプリケーション・ルートに属します。アプリケーション・ルートを作成するには、CDBルートが現在のコンテナであるときに、AS APPLICATION CONTAINER句を指定したCREATE PLUGGABLE DATABASE文を実行します。
38.1.2.1 ストレージ制限

CREATE PLUGGABLE DATABASE文のオプションのSTORAGE句では、PDBに対してストレージ制限を指定します。

STORAGE句では、次の制限を指定します。

  • PDBに属するすべての表領域が使用できる記憶域の量

    MAXSIZEおよびsize句を使用して制限を指定するか、またはMAXSIZEUNLIMITEDに設定して制限がないことを指定します。

  • PDB内の統合監査OSスピルオーバー(.bin形式)ファイルに使用できるストレージ量

    MAX_AUDIT_SIZEおよびsize句を使用して制限を指定するか、またはMAX_AUDIT_SIZEUNLIMITEDに設定して制限がないことを指定します。

  • PDBが使用できる自動診断リポジトリ(ADR)の診断(トレース・ファイルおよびインシデント・ダンプ)の量

    MAX_DIAG_SIZEおよびsize句を使用して制限を指定するか、またはMAX_DIAG_SIZEUNLIMITEDに設定して制限がないことを指定します。

STORAGE UNLIMITEDが設定されている場合、またはSTORAGE句がない場合は、PDBのストレージ制限はありません。

次に、STORAGE句の使用例を示します。

例38-1 ストレージ制限を指定するSTORAGE句

次のSTORAGE句では、PDBに属するすべての表領域が使用する記憶域が2GBを超えない必要があることを指定しています。

STORAGE (MAXSIZE 2G)

例38-2 無制限の記憶域を指定するSTORAGE句

次のSTORAGE句では、PDBに属するすべての表領域の記憶域に制限がないことを指定しています。

STORAGE (MAXSIZE UNLIMITED)

関連項目:

STORAGE句の構文は、『Oracle Database SQL言語リファレンス』を参照してください。

38.1.2.2 新しいPDBのファイルの場所

CREATE PLUGGABLE DATABASE文で、新しいPDBで使用するファイルの場所を指定できます。

「ファイル名」という用語は、ファイルの名前と場所の両方を意味します。CREATE PLUGGABLE DATABASE文には、作成される新しいPDBのファイル名を示す次の句が含まれています。

  • FILE_NAME_CONVERT句では、PDBが作成された後のPDBのファイル名を指定します。

    ファイルが最終保存先にまだない場合にこの句を使用して、PDBの作成時にこれらのファイルをコピーまたは移動します。この句は、任意のCREATE PLUGGABLE DATABASE文で使用できます。

  • Oracle Database 12cリリース1 (12.1.0.2)からは、CREATE_FILE_DEST句では、PDBのファイル用のデフォルトのOracle Managed Filesファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定します。

    この句を使用して、CDB用にルートで指定したOracle Managed Filesのデフォルトの場所に関係なく、新しいPDBに対してOracle Managed Filesを有効にします。この句は、任意のCREATE PLUGGABLE DATABASE文で使用できます。

必要な場合は、この両方の句を同じCREATE PLUGGABLE DATABASE文で使用できます。さらに、次の初期化パラメータによって新しいPDBのファイルの場所を制御できます。

  • ルートに設定したDB_CREATE_FILE_DEST初期化パラメータ

    この初期化パラメータでは、CDB用のOracle Managed Filesのデフォルトの場所を指定します。このパラメータをPDBで設定する場合、そのPDB用のOracle Managed Filesのデフォルトの場所を指定します。

  • PDB_FILE_NAME_CONVERT初期化パラメータ

    この初期化パラメータは、CREATE PLUGGABLE DATABASE文の処理時に、既存ファイルの名前と新しいファイルの名前をマップします。

次の表に、同じCREATE PLUGGABLE DATABASE文で両方の句を使用し、初期化パラメータをどちらも設定した場合の優先順位を示します。各句と初期化パラメータについて、表ではCREATE PLUGGABLE DATABASE文で作成されたファイルがOracle Managed Filesを使用するかどうかも示します。

表38-2 ファイルの場所の句および初期化パラメータのサマリー

句または初期化パラメータ 優先順位 CREATE PLUGGABLE DATABASEによって作成されたファイルがOracle Managed Filesを使用するか。
FILE_NAME_CONVERT 1 いいえ
CREATE_FILE_DEST 2 はい
DB_CREATE_FILE_DEST初期化パラメータ 3 はい
PDB_FILE_NAME_CONVERT初期化パラメータ 4 いいえ

Oracle Managed Filesの使用について、表はCREATE PLUGGABLE DATABASE文で作成されるファイルにのみ適用されます。PDBが作成された後にPDBに対して作成されたファイルは、Oracle Managed Filesを使用する場合と使用しない場合があります。

また、CREATE PLUGGABLE DATABASE文でFILE_NAME_CONVERTCREATE_FILE_DESTの両方を指定した場合、PDBの作成時、配置されるファイルにはFILE_NAME_CONVERT設定が使用され、PDBでのDB_CREATE_FILE_DEST初期化パラメータの設定にはCREATE_FILE_DEST設定が使用されます。この場合、PDBの作成後、Oracle Managed FilesによってPDBのファイルの場所が制御されます。

注意:

PATH_PREFIX句は、Oracle Managed Filesによって作成されたファイルには影響しません。

関連項目:

38.1.2.2.1 FILE_NAME_CONVERT句

PDBでOracle Managed Filesを使用しない場合、CREATE PLUGGABLE DATABASE文のFILE_NAME_CONVERT句では、既存ファイルの名前を使用してファイル(データファイルなど)の名前を生成する方法を指定します。

この句を使用して、次のいずれかのオプションを指定できます。

  • 1つ以上のファイル名パターンおよび置換ファイル名パターンを次の形式で指定します。

    'string1' , 'string2' , 'string3' , 'string4' , ...
    

    string1ファイル名パターンがstring2ファイル名パターンによって置き換えられ、string3ファイル名パターンがstring4ファイル名パターンによって置き換えられます。ファイル名パターン文字列と置換ファイル名パターン文字列のペアを必要な数だけ使用できます。

    奇数の文字列を指定した(最終文字列に対応する置換文字列が存在しない)場合、エラーが返されます。1つのファイル名またはディレクトリと一致する複数のパターン/置換文字列を指定しないでください。

  • PDBの作成時にいずれのファイルもコピーまたは移動しない場合はNONEを指定します。FILE_NAME_CONVERT句の省略は、NONEの指定と同じです。

FILE_NAME_CONVERT句は、任意のCREATE PLUGGABLE DATABASE文で使用できます。

FILE_NAME_CONVERT句がCREATE PLUGGABLE DATABASE文で指定されていない場合は、Oracle Managed FilesまたはPDB_FILE_NAME_CONVERT初期化パラメータのいずれかによって、ファイルの名前を生成する方法が指定されます。Oracle Managed FilesおよびPDB_FILE_NAME_CONVERT初期化パラメータの両方を使用する場合は、Oracle Managed Filesが優先されます。FILE_NAME_CONVERT句が指定されている場合はこれが優先されます。

FILE_NAME_CONVERT句で指定するファイル名パターンをOracle Managed Filesで管理されているファイルやディレクトリと一致させることはできません。

例38-3 FILE_NAME_CONVERT句

次のFILE_NAME_CONVERT句では、/oracle/dbsディレクトリ内のファイル名を使用して、/oracle/pdb5ディレクトリの新しいPDBのファイル名を生成します。

FILE_NAME_CONVERT = ('/oracle/dbs/', '/oracle/pdb5/')

関連項目:

38.1.2.2.2 CREATE_FILE_DEST句

CREATE PLUGGABLE DATABASE文のCREATE_FILE_DEST句は、PDBに対してOracle Managed Filesを有効にし、PDBのファイル用のデフォルトのファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定します。PDBのデータファイルおよび一時ファイルは、指定されたディレクトリおよびそのサブディレクトリに制限されます。

ファイル・システム・ディレクトリをデフォルトの場所としてこの句に指定する場合、そのディレクトリは存在している必要があります。また、CREATE PLUGGABLE DATABASE文を実行するユーザーには、指定ディレクトリでファイルを作成するために適切な権限が必要です。または、CDBルート(CDB$ROOT)に存在するディレクトリ・オブジェクトの名前を指定できます。ディレクトリ・オブジェクトは、CREATE_FILE_DESTによって使用されるファイル・システム・ディレクトリを指しています。

CDB用のOracle Managed Filesのデフォルトの場所がCDBルートに設定されている場合、CREATE_FILE_DEST設定によってCDBルートの設定が上書きされ、指定したCREATE_FILE_DEST設定がPDBに使用されます。

CREATE_FILE_DEST=NONEを指定すると、PDBに対してOracle Managed Filesは無効になります。

CREATE_FILE_DEST句をNONE以外の値に設定すると、DB_CREATE_FILE_DEST初期化パラメータはPDBでSCOPE=SPFILEと暗黙的に設定されます。

CDBルートでOracle Managed Filesを使用し、この句を指定しない場合、PDBはOracle Managed Filesのデフォルトの場所をCDBルートから継承します。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

例38-4 CREATE_FILE_DEST句

このCREATE_FILE_DEST句では、新しいPDB用のデフォルトのOracle Managed Filesファイル・システム・ディレクトリとして/oracle/pdb2/を指定しています。

CREATE_FILE_DEST = '/oracle/pdb2/'
38.1.2.3 PDBファイルの場所に対する制限

CREATE PLUGGABLE DATABASE文のPATH_PREFIX句は、PDBと関連付けられているすべてのディレクトリ・オブジェクト・パスが、指定したディレクトリまたはそのサブディレクトリに制限されるようにします。また、PDBに関連付けられているファイル(PDBのOracle XMLリポジトリ、CREATE PFILE文で作成されたファイル、およびOracleウォレットのエクスポート・ディレクトリ)が、指定されたディレクトリに制限されるようにします。

PDBのファイルが特定のディレクトリおよびそのサブディレクトリに確実に存在するようにする場合は、この句を使用します。

この句を使用して、次のいずれかのオプションを指定できます。

  • PDBに関連付けられたすべてのファイル・パスのプリフィックスとして使用される絶対パス。

  • CDBルート(CDB$ROOT)に存在するディレクトリ・オブジェクトの名前。ディレクトリ・オブジェクトは、PATH_PREFIXに使用される絶対パスを指しています。

  • NONE。ファイル・パスに制限がないことを示します。PATH_PREFIX句の省略は、NONEの指定と同じです。

PDBが作成された後は、そのPATH_PREFIX設定を変更できなくなります。

PATH_PREFIX句は、CREATE PLUGGABLE DATABASE文で使用できます。

例38-5 PATH_PREFIX句

このPATH_PREFIX句では、PDBと関連付けられているすべてのファイル・パスが、/disk1/oracle/dbs/salespdb/ディレクトリに制限されるようにします。

PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'

ファイル名が付加された際に正しい形式となるよう、パス名は指定してください。たとえば、UNIXシステムでは、パス名はフォワード・スラッシュ(/)で終わるようにします。

注意:

  • PDBにPATH_PREFIX句を指定すると、既存のディレクトリ・オブジェクトが予期したとおりに動作しないことがあります。これは、PATH_PREFIX文字列がPDB内のすべてのローカル・ディレクトリ・オブジェクトの接頭辞として常に追加されるためです。

  • PATH_PREFIX句は、Oracle Managed Filesによって作成されたファイルには影響しません。

  • PATH_PREFIX句は、ユーザーが作成したディレクトリ・オブジェクトにのみ適用されます。Oracleが提供するディレクトリ・オブジェクトには適用されません。

  • PATH_PREFIX句は、データファイルまたは一時ファイルには適用されません。Oracle Managed Filesを使用している場合は、CREATE_FILE_DEST句を使用してデータファイルおよび一時ファイルの場所を制限します。

38.1.2.4 切断されたPDBをプラグインする場合のソース・ファイルの場所

CREATE PLUGGABLE DATABASE ... USING文を使用して、切断されたPDBをCDBに接続します。

XMLメタデータ・ファイルを指定するか、.pdb拡張子のある圧縮されたアーカイブ・ファイルを指定して、PDBを接続できます。アーカイブ・ファイルにはXMLメタデータ・ファイルとPDBのファイル(データファイルやウォレット・ファイルなど)が含まれます。

PDBの接続時に.pdbアーカイブ・ファイルを使用する場合、このファイルはPDBの接続時に抽出され、PDBのファイルは.pdbアーカイブ・ファイルと同じディレクトリに配置されます。したがって、ソース・ファイルの場所を指定する句は、.pdbアーカイブ・ファイルを使用するときには必要ありません。

PDBの接続時にXMLメタデータ・ファイルを指定する場合、このファイルは切断されたPDBのソース・ファイルの名前と場所を記述します。切断されているファイルをあるストレージ・システムから異なるストレージ・システムにトランスポートした場合は、これらのファイルの場所がXMLファイルに正確に記述されていない可能性があります。これらのファイルは新しい場所にありますが、XMLファイル内のファイル・パスは依然として古い場所を示しています。

CREATE PLUGGABLE DATABASE文には、作成される新しいPDBのソース・ファイルの場所を示す次の句があります。

  • SOURCE_FILE_NAME_CONVERT句では、PDBが記述されているXMLファイルにリストされているファイル(データファイルなど)が、XMLファイルで指定されているものとは異なる場所に存在する場合に、それらのファイルを検索する方法を指定します。句には、XMLファイルにリストされた各ファイルに関する情報が含まれます。

  • Oracle Database 12cリリース1 (12.1.0.2)以降では、SOURCE_FILE_DIRECTORY句は新しいPDBの作成に使用されるファイルのソース・ディレクトリを指定します。句では、XMLファイルにリストされているすべてのファイルを含むディレクトリを指定します。この句は、データファイルが大量にあり、各ファイルのSOURCE_FILE_NAME_CONVERTパターンの指定が現実的でない場合に使用すると便利です。

これらの句は、XMLメタデータ・ファイル(.pdbアーカイブ・ファイルではない)とともにCREATE PLUGGABLE DATABASE ... USING文を使用して、切断されているPDBを接続する場合にのみ使用します。これらの句は相互に排他的です。単一のCREATE PLUGGABLE DATABASE文で両方の句を使用することはできません。

38.1.2.4.1 SOURCE_FILE_NAME_CONVERT句

CREATE PLUGGABLE DATABASE ... USING文のSOURCE_FILE_NAME_CONVERT句では、PDBが記述されているXMLファイルにリストされているファイル(データファイルなど)が、XMLファイルで指定されているものとは異なる場所に存在する場合に、それらのファイルを検索する方法を指定します。

この句を使用して、次のいずれかのオプションを指定できます。

  • 1つ以上のファイル名パターンおよび置換ファイル名パターンを次の形式で指定します。

    'string1' , 'string2' , 'string3' , 'string4' , ...
    

    string1ファイル名パターンがstring2ファイル名パターンによって置き換えられ、string3ファイル名パターンがstring4ファイル名パターンによって置き換えられます。ファイル名パターン文字列と置換ファイル名パターン文字列のペアを必要な数だけ使用できます。

    この句を使用する場合は、PDBに使用するファイルが、置換ファイル名パターンに存在することを確認してください。必要な場合は、ファイルをこれらの場所にコピーまたは移動します。

  • PDBのXMLファイルでファイル名が正確に記述されているためにファイル名を検索する必要がない場合はNONESOURCE_FILE_NAME_CONVERT句の省略は、NONEの指定と同じです。

SOURCE_FILE_NAME_CONVERT句は、XMLメタデータ・ファイルを指定するUSING句とともにCREATE PLUGGABLE DATABASE文でのみ使用できます。したがって、この句は、切断されているPDBをXMLメタデータ・ファイルで接続する場合にのみ使用できます。PDBを.pdbアーカイブ・ファイルで接続する場合は、この句を使用できません。

例38-6 SOURCE_FILE_NAME_CONVERT句

次のSOURCE_FILE_NAME_CONVERT句では、/disk1/oracle/pdb7ディレクトリではなく、/disk2/oracle/pdb7ディレクトリのファイルを使用します。この場合、PDBを記述しているXMLファイルでは、/disk1/oracle/pdb7ディレクトリを指定していますが、PDBでは/disk2/oracle/pdb7ディレクトリのファイルを使用する必要があります。

SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/pdb7/', '/disk2/oracle/pdb7/')
38.1.2.4.2 SOURCE_FILE_DIRECTORY句

CREATE PLUGGABLE DATABASE文のSOURCE_FILE_DIRECTORY句では、新しいPDBの作成に使用されるファイルのソース・ディレクトリを指定します。句では、切断されたPDBについてXMLファイルにリストされているすべてのファイルを含むディレクトリを指定します。

PDBを接続する際に、ソース・ファイルがすべて単一ディレクトリに存在する場合は、この句でディレクトリ名を指定できます。切断されたPDBのXMLファイルに基づいて適切なファイルを検索するためにディレクトリがスキャンされます。

この句を使用して、次のいずれかのオプションを指定できます。

  • ソース・ファイル・ディレクトリの絶対パス。

  • PDBの作成時にいずれのファイルもコピーまたは移動しない場合はNONEを指定します。SOURCE_FILE_DIRECTORY句の省略は、NONEの指定と同じです。

SOURCE_FILE_DIRECTORY句は、XMLメタデータ・ファイルを指定するUSING句とともにCREATE PLUGGABLE DATABASE文でのみ使用できます。したがって、この句は、切断されているPDBをXMLメタデータ・ファイルで接続する場合にのみ使用できます。PDBを.pdbアーカイブ・ファイルで接続する場合は、この句を使用できません。

この句は、Oracle Managed Filesを使用する構成とOracle Managed Filesを使用しない構成に対して指定できます。

例38-7 SOURCE_FILE_DIRECTORY句

このSOURCE_FILE_DIRECTORY句は、/oracle/pdb5/ディレクトリ内のソース・ファイルを使用して新しいPDBのファイル名を生成します。

SOURCE_FILE_DIRECTORY = '/oracle/pdb5/'
38.1.2.5 サービス名の変更

CREATE PLUGGABLE DATABASE文のSERVICE_NAME_CONVERT句は、ソースPDBのサービス名に基づいて、新しいPDBのユーザー定義サービスの名前を変更します。

新しいPDBのサービス名がCDB内の既存のサービス名と競合する場合は、プラグイン違反が発生することがあります。SERVICE_NAME_CONVERT句を使用してサービス名を変更し、これらの違反を回避します。

この句を使用して、次のいずれかのオプションを指定できます。

  • 次の形式の1つ以上のサービス名と置換サービス名:

    'string1' , 'string2' , 'string3' , 'string4' , ...
    

    string2サービス名はstring1サービス名を置換し、string4サービス名はstring3サービス名を置換します。サービス名と置換サービス名のペアは、必要に応じていくつでも使用できます。

    奇数の文字列を指定した(最終文字列に対応する置換文字列が存在しない)場合、エラーが返されます。

  • サービス名を変更する必要がない場合はNONESERVICE_NAME_CONVERT句の省略は、NONEの指定と同じです。

SERVICE_NAME_CONVERT句は、CDBシードからPDBを作成するCREATE PLUGGABLE DATABASE文を除く任意のCREATE PLUGGABLE DATABASE文で使用できます。CDBシードはユーザー定義サービスを持つことができません。ただし、アプリケーション・コンテナ内のアプリケーション・シードからアプリケーションPDBを作成するCREATE PLUGGABLE DATABASE文にはこの文を使用できます。

注意:

この句は、PDBのデフォルト・サービスに適用されません。デフォルト・サービスの名前はPDBと同じになります。

例38-8 SERVICE_NAME_CONVERT句

このSERVICE_NAME_CONVERT句は、salesrepサービスの名前をsalespersonに変更します。

SERVICE_NAME_CONVERT = ('salesrep','salesperson')
38.1.2.6 一時ファイルの再利用

CREATE PLUGGABLE DATABASE文のTEMPFILE REUSE句では、ターゲットの場所にある既存の一時ファイルを再利用することを指定します。

この句を指定すると、Oracle Databaseによって一時ファイルがフォーマットされ再利用されます。以前のファイルの内容は失われます。この句を指定し、ターゲットの場所に一時ファイルがない場合は、Oracle DatabaseによってPDBの新しい一時ファイルが作成されます。

この句を指定しない場合、CREATE PLUGGABLE DATABASE文により、PDBの新しい一時ファイルが作成されます。新しい一時ファイルと同じ名前のファイルがターゲットの場所に存在すると、エラーが返され、PDBは作成されません。したがって、TEMPFILE REUSE句を指定しない場合は、そのような一時ファイルがターゲットの場所に存在しないことを確認してください。

例38-9 TEMPFILE REUSE句

TEMPFILE REUSE
38.1.2.7 デフォルト表領域

CREATE PLUGGABLE DATABASE文のDEFAULT TABLESPACE句では、新しいPDBのデフォルト表領域を指定します。

Oracle Databaseによって、別の永続表領域が指定されていないSYSTEM以外のユーザーに対してデフォルト表領域が割り当てられます。

PDBをCDBシードまたはアプリケーション・シードから作成し、DEFAULT TABLESPACE句を指定する場合、Oracle Databaseはsmallfile表領域を作成し、それをPDBのデフォルト表領域として設定します。PDBのクローニングや切断されたPDBの接続など、CDBシードまたはアプリケーション・シード以外の方法を使用してPDBを作成する場合、デフォルト表領域はソースPDBにすでに存在する表領域である必要があります。

例38-10 DEFAULT TABLESPACE句

DEFAULT TABLESPACE sales
38.1.2.8 ユーザー表領域

CREATE PLUGGABLE DATABASE文のUSER_TABLESPACES句では、新しいPDBで使用できる表領域を指定します。

この句を使用すると、複数のスキーマのデータを異なるPDBに分けることができます。たとえば、非CDBをPDBに移動する場合、その非CDBに多数のスキーマがあって、それぞれ異なるアプリケーションをサポートしているとき、非CDBで各スキーマが別個の表領域を使用していたとすると、この句を使用して各スキーマに属するデータを別個のPDBに分けることができます。

この句を使用して、次のいずれかのオプションを指定できます。

  • 含める1つ以上の表領域をリストします。

  • すべての表領域を含める場合はALL (デフォルト)を指定します。

  • リストした表領域を除くすべての表領域を含める場合はALL EXCEPTを指定します。

  • すべての表領域を除外する場合はNONEを指定します。

  • ユーザー表領域の作成モードがオラクル社提供の表領域(SYSTEMSYSAUXなど)の作成モードと異なる必要がある場合は、USER_TABLESPACES句に次のいずれかを指定します。

    • COPY: 表領域のファイルは新しい場所にコピーされます。

    • MOVE: 表領域のファイルは新しい場所に移動されます。

    • NOCOPY: 表領域のファイルはコピーまたは移動されません。

    • SNAPSHOT COPY: 表領域は記憶域スナップショットにクローニングされます。

    • NO DATA: 表領域のデータ・モデル定義はクローニングされますが、表領域のデータはクローニングされません。

CDBの互換性レベルが12.2.0以上の場合、この句によって除外される表領域は新しいPDBにオフラインで作成され、データファイルは関連付けられません。CDBの互換性レベルが12.2.0未満の場合、この句で除外される表領域は新しいPDBでオフラインとなり、このような表領域に属するデータファイルはすべて無名でオフラインとなります。

この句は、SYSTEMSYSAUXまたはTEMPの各表領域には適用されません。これらの表領域は、この句の表領域リストに含めないでください。

次に、USER_TABLESPACES句の使用例を示します。

例38-11 1つの表領域が含まれるUSER_TABLESPACES句

PDBの作成元となる非CDBまたはPDBにはtbs1tbs2およびtbs3の各表領域があるとします。このUSER_TABLESPACES句には、tbs2表領域は含まれますが、tbs1表領域およびtbs3表領域は含まれません。

USER_TABLESPACES=('tbs2')

例38-12 表領域のリストが含まれるUSER_TABLESPACES句

PDBの作成元となる非CDBまたはPDBにはtbs1tbs2tbs3tbs4およびtbs5の各表領域があるとします。このUSER_TABLESPACES句には、tbs1tbs4およびtbs5の各表領域は含まれますが、tbs2表領域およびtbs3表領域は含まれません。

USER_TABLESPACES=('tbs1','tbs4','tbs5')

例38-13 リストした表領域を除くすべての表領域が含まれるUSER_TABLESPACES句

PDBの作成元となる非CDBまたはPDBにはtbs1tbs2tbs3tbs4およびtbs5の各表領域があるとします。このUSER_TABLESPACES句には、tbs2表領域およびtbs3表領域は含まれますが、tbs1tbs4およびtbs5の各表領域は含まれません。

USER_TABLESPACES=ALL EXCEPT('tbs1','tbs4','tbs5')

例38-14 異なる作成モードのUSER_TABLESPACES

この例は、非CDBを接続し、非CDBからtbs3ユーザー表領域のみ含める完全なCREATE PLUGGABLE DATABASE文を示します。例では、オラクル社が提供する表領域(SYSTEMSYSAUXなど)のファイルは新しい場所にコピーしますが、tbs3ユーザー表領域のファイルは移動します。

CREATE PLUGGABLE DATABASE ncdb USING '/disk1/oracle/ncdb.xml'
  COPY
  FILE_NAME_CONVERT = ('/disk1/oracle/dbs/', '/disk2/oracle/ncdb/')
  USER_TABLESPACES=('tbs3') MOVE;
38.1.2.9 PDB表領域ロギング

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

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

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

  • LOGGING (デフォルト)は、PDB内で今後作成される表領域がいずれも、デフォルトでLOGGING属性を使用して作成されることを示します。

  • NOLOGGINGは、PDB内で今後作成される表領域がいずれも、デフォルトでNOLOGGING属性を使用して作成されることを示します。

デフォルトのロギング属性は、CREATE TABLE文などのスキーマ・オブジェクト・レベルでLOGGINGまたはNOLOGGINGを指定することで上書きできます。

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

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

例38-15 PDBのLOGGING属性の指定

LOGGING

例38-16 PDBのNOLOGGING属性の指定

NOLOGGING

関連項目:

38.1.2.10 スタンバイCDBへのPDBの包含

CREATE PLUGGABLE DATABASE文のSTANDBYS句では、新しいPDBをスタンバイCDBに含めるかどうかを指定します。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

STANDBYS句に、次のいずれかの値を指定できます。

  • ALLは、新しいPDBをすべてのスタンバイCDBに含めます。

  • ALL EXCEPTは、指定されたスタンバイCDBを除くすべてのスタンバイCDBに新しいPDBを含めます。複数のスタンバイCDBが除外されている場合は、除外されたスタンバイCDBのカンマ区切りリストを使用します。

  • スタンバイCDBのカンマ区切りリスト。新しいPDBはリストされたスタンバイCDBに含まれます。

  • NONEは、新しいPDBをすべてのスタンバイCDBから除外します。

スタンバイCDBのいずれにもPDBを含めない場合、PDBのデータファイルはすべてのスタンバイCDBでオフラインとなり、無名とマークされます。PDBが作成された後にインスタンス化された新しいスタンバイCDBは、リカバリのために明示的にPDBを無効にし、スタンバイCDBから除外する必要があります。PDBをスタンバイCDBで除外した後に、そのスタンバイCDBで有効にすることができます。

例38-17 新しいPDBをすべてのスタンバイCDBに含めるSTANDBYS句

STANDBYS=ALL

例38-18 指定されたスタンバイCDBを除くすべてのスタンバイCDBに新しいPDBを含めるSTANDBYS句

この例は、スタンバイCDB standby1およびスタンバイCDB standby2を除くすべてのスタンバイCDBに新しいPDBを含めるSTANDBYS句を示しています。

STANDBYS=ALL EXCEPT('standby1','standby2')

例38-19 スタンバイCDBをリストするSTANDBYS句

この例は、スタンバイCDBのリストに新しいPDBを含めるSTANDBYS句を示しています。リストには、スタンバイCDB standby1standby2およびstandby3が含まれます。

STANDBYS=('standby1','standby2','standby3')

例38-20 新しいPDBをすべてのスタンバイCDBから除外するSTANDBYS句

STANDBYS=NONE

関連項目:

スタンバイCDBでのPDBの構成の詳細は、『Oracle Data Guard概要および管理』を参照してください。

38.1.2.11 PDBをクローニングする場合のデータの除外

CREATE PLUGGABLE DATABASE文のNO DATA句では、PDBのデータ・モデル定義をクローニングするが、PDBのデータをクローニングしないことを指定します。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

ソースPDBのディクショナリ・データはクローニングされますが、ソースPDBのユーザーが作成した表および索引データはすべて破棄されます。この句は、オブジェクト定義以外のデータがないPDBのクローンを短時間で作成する場合に役立ちます。この句を使用するのは、CREATE PLUGGABLE DATABASE ... FROM文でPDBをクローニングする場合のみです。

この句は、SYSTEM表領域およびSYSAUX表領域には適用されません。ソースPDBのユーザーが作成したデータベース・オブジェクトがこれらの表領域のいずれかに格納される場合、データベース・オブジェクトにはクローニングされたPDBのデータが含まれます。

NO DATA句がCREATE PLUGGABLE DATABASE文に含まれている場合、ソースPDBに次のタイプの表を含めることはできません。

  • アドバンスト・キュー(AQ)表

  • クラスタ表

  • 表クラスタ

例38-21 NO DATA句

NO DATA
38.1.2.12 PDB作成の並列化

CREATE PLUGGABLE DATABASE文のPARALLEL句は、PDBの作成時にパラレル実行サーバーを使用するかどうか、および必要に応じて、並列度を指定します。

この句を使用して、複数のパラレル実行サーバーを使用して新しいPDBのデータファイルを新しい場所にコピーすることで、PDBの作成を高速にできます。CDBの互換性レベルが12.2.0以上の場合、CDBはデフォルトでPDBの作成に使用する並列度を選択します。または、句で目的の並列度を指定できますが、CDBは現在のデータベース負荷および使用可能なパラレル実行サーバー数に応じて提案を無視できます。

0または1の値が指定されている場合、CDBはPDBの作成を並列化しません。0または1を指定すると、PDBの作成時間が長くなることがあります。

この句は、CDBシードやアプリケーション・シードからPDBを作成する場合、またはPDBのクローニングを行う場合にのみ使用します。

例38-22 CDBがPDB作成の並列度を選択

PARALLEL句を省略するか、CREATE PLUGGABLE DATABASE文に次のように指定します。

PARALLEL

例38-23 PDB作成の並列度の指定

この例では、4の並列度でPDBを作成することを指定します。

PARALLEL 4

例38-24 CDBがPDBの作成を並列化しないことの指定

この例では、パラレル処理なしでPDBを作成することを指定します。

PARALLEL 1
38.1.2.13 PDBのリフレッシュ

CREATE PLUGGABLE DATABASE文のREFRESH MODE句では、クローンとして作成されたPDBを定期的にリフレッシュできるかどうかを指定します。各PDBリフレッシュは、ソースPDBから新しいPDBに変更を伝播します。

この句は、CREATE PLUGGABLE DATABASE ... FROM文でのみサポートされます。この句を使用して、次のいずれかのオプションを指定できます。

  • デフォルトのREFRESH MODE NONEを指定して、リフレッシュ可能でないPDBを作成します。

  • REFRESH MODE MANUALを指定して、手動でリフレッシュする必要のあるリフレッシュ可能PDBを作成します。

  • REFRESH MODE EVERY number_of_minutes MINUTESを指定して、指定した時間(分単位)の経過後に自動的にリフレッシュされるリフレッシュ可能PDBを作成します。自動リフレッシュを使用するリフレッシュ可能PDBを手動でリフレッシュすることもできます。

リフレッシュ可能PDBは読取り専用モードでのみオープンできます。また、リフレッシュ可能PDBはリフレッシュの実行時にクローズする必要があります。自動リフレッシュが試行されたときにクローズされていない場合、リフレッシュは次のスケジュール済リフレッシュまで延期されます。ユーザーが手動リフレッシュの実行を試行したときにクローズされていない場合は、エラーがレポートされます。

ソースPDBでは行われていない同期されていない変更がリフレッシュ可能なPDBで行われないように、リフレッシュ可能なPDBは読取り専用モードにしておく必要があります。リフレッシュ可能なPDBはクローン・マスターとして機能することが意図されているため、リフレッシュされた時点でソースPDBが正確に反映される必要があります。

この句は、リフレッシュ可能PDBのリフレッシュ・モードを変更するALTER PLUGGABLE DATABASE文でもサポートされます。ALTER PLUGGABLE DATABASE文は、手動リフレッシュから自動リフレッシュに、または自動リフレッシュから手動リフレッシュに切り替えることができます。自動リフレッシュの間隔(分単位)を変更することもできます。

注意:

  • リフレッシュ可能なPDBとそのソースは異なるCDBに存在している必要があります。このため、リフレッシュ可能なPDBはソースCDBのリモートにあるCDBで作成する必要があり、作成時にデータベース・リンクを指定する必要があります。

  • リフレッシュ可能でないPDBはリフレッシュ可能PDBに変更できません。一方、リフレッシュ可能なPDBは、PDBにREFRESH MODE NONE句を指定したALTER PLUGGABLE DATABASE文を実行することでリフレッシュ不能のPDBに変更できます。

  • リフレッシュ可能PDBを作成する場合、PDBにREMOTE_RECOVERY_FILE_DEST初期化パラメータを設定できます。この初期化パラメータは、ソースPDBがデータベース・リンク上で使用可能でない場合に、リフレッシュ操作中にアーカイブ・ログ・ファイルを読み取るディレクトリを指定します。

  • ソースPDBに新しいデータファイルが作成された場合は、CDBでPDB_FILE_NAME_CONVERT初期化パラメータを設定して、データファイルのパスをソースPDBからクローンPDBに変換する必要があります。

例38-25 自動リフレッシュを指定したREFRESH MODE句

このリフレッシュ・モード句では、リフレッシュ可能なPDBが2時間(120分)おきに自動的にリフレッシュされることを指定します。

REFRESH MODE EVERY 120 MINUTES
38.1.2.14 アプリケーション・コンテナおよびアプリケーション・シード

CREATE PLUGGABLE DATABASE文では、アプリケーション・コンテナを作成できます。アプリケーション・コンテナにアプリケーション・シードを作成することもできます。

38.1.2.14.1 AS APPLICATION CONTAINER句

アプリケーション・コンテナを作成するには、CREATE PLUGGABLE DATABASE文のAS APPLICATION CONTAINER句を指定します。

この句では、アプリケーション・コンテナ(PDBではない)を作成します。この句をCREATE PLUGGABLE DATABASE文に含めた場合は、PDBの作成に使用される手法と句をすべて使用できます。

この句を含める場合は、現在のコンテナがCDBルートである必要があります。アプリケーション・ルートにすることはできません。

例38-26 AS APPLICATION CONTAINER句

AS APPLICATION CONTAINER
38.1.2.14.2 AS SEED句

アプリケーション・コンテナにアプリケーション・シードを作成するには、CREATE PLUGGABLE DATABASE文のAS SEED句を指定します。

この句では、アプリケーション・コンテナにアプリケーション・シードを作成します。この句をCREATE PLUGGABLE DATABASE文に含めた場合は、PDBの作成に使用される手法と句をすべて使用できます。

この句を含める場合は、現在のコンテナがアプリケーション・ルートである必要があります。CDBルートにすることはできません。

アプリケーション・コンテナには1つのアプリケーション・シードを含めるか、アプリケーション・シードを含めないことができます。複数のアプリケーション・シードを含めることはできません。

アプリケーション・シードの作成後に、アプリケーション・コンテナにアプリケーションPDBを作成するために使用できます。アプリケーション・シードは、アプリケーション・コンテナの要件を満たすアプリケーションPDBを迅速に作成する方法を提供します。

例38-27 AS SEED句

AS SEED
38.1.2.15 PDBリスナーのホスト名とポート番号

PDBのホスト名とポート番号の設定は、プロキシPDBがPDBを参照する場合にのみ重要です。PORT句を使用して、PDBのポート番号を指定します。HOST句を使用して、PDBのホスト名を指定します。

38.1.2.15.1 HOST句

CREATE PLUGGABLE DATABASE文のHOST句では、作成されるPDBのリスナーのホスト名を指定します。

デフォルトでは、リスナーのホスト名は作成されるPDBのホスト名と同じです。次の両方の条件を満たす場合にHOST句を指定します。

  • リスナーのホスト名は、作成されるPDBのホスト名と異なります。

  • 作成されるPDBを参照するプロキシPDBの作成を計画します。

プロキシPDBは、データベース・リンクを使用して、その参照先PDBと通信を確立します。通信が確立されると、プロキシPDBはデータベース・リンクを使用せずに参照先PDBと直接通信します。プロキシPDBが正常に機能するためにはリスナーのホスト名が正しい必要があります。

例38-28 HOST句

HOST='myhost.example.com'
38.1.2.15.2 PORT句

CREATE PLUGGABLE DATABASE文のPORT句では、作成されるPDBのリスナーのポート番号を指定します。

デフォルトでは、作成されるPDBのポート番号は1521です。次の両方の条件を満たす場合にPORT句を指定します。

  • リスナーのポート番号は1521ではありません。

  • 作成されるPDBを参照するプロキシPDBの作成を計画します。

プロキシPDBは、データベース・リンクを使用して、その参照先PDBと通信を確立します。通信が確立されると、プロキシPDBはデータベース・リンクを使用せずに参照先PDBと直接通信します。プロキシPDBが正常に機能するためにはリスナーのポート番号が正しい必要があります。

例38-29 PORT句

PORT=1599

38.1.3 PDB作成のための句の概要

CREATE PLUGGABLE DATABASE文を使用してPDBを作成する場合、PDBの作成に使用している手法などの様々な要因に基づいて様々な句を使用できます。一連の質問に回答することで、使用する句を判断できます。

次の表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

表38-3 PDBを作成する場合の句

使用可能な場合 質問 はい いいえ

AS APPLICATION CONTAINER

CDBでのアプリケーション・コンテナの作成

PDBのかわりにアプリケーション・コンテナを作成しますか。

AS APPLICATION CONTAINER句を指定します。

AS APPLICATION CONTAINER句を省略します。

AS CLONE

切断されたPDBの接続

同じPDBを接続して作成した1つ以上のPDBを含むCDBにPDBを接続しますか。

AS CLONE句を指定して、Oracle Databaseが一意のPDB DBID、GUID、および新しいPDBに予測されるその他の識別子を確実に生成するようにします。このPDBは、すべての識別子が一意であることを保証するため、切断されたPDBのクローンとして接続されます。

AS CLONE句を省略します。

AS SEED

アプリケーション・コンテナでのアプリケーション・シードの作成

アプリケーション・コンテナにアプリケーション・シードを作成しますか。

AS SEED句を指定します。

AS SEED句を省略します。

CREATE_FILE_DEST

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

CREATE_FILE_DEST句を使用して、PDBのファイル用にOracle Managed Filesのデフォルトの場所を指定しますか。

CDBシードまたはアプリケーション・シードからPDBを作成する場合、ソース・ファイルは、シードに関連付けられたファイルです。

PDBのファイル用のデフォルトのファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定するCREATE_FILE_DEST句を含めます。

CREATE_FILE_DEST句を省略します。

次のいずれかの手法を使用して、ファイルのターゲットの場所を指定します。

  • FILE_NAME_CONVERT

  • CDBに対してOracle Managed Filesを有効にして、ターゲットの場所を識別できるようにします。

  • PDB_FILE_NAME_CONVERT初期化パラメータでターゲットの場所を指定します。

「新しいPDBのファイルの場所」を参照してください。

DEFAULT TABLESPACE

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

PDBのデフォルト・パラメータ表領域を指定しますか。

適切な制限を使用してDEFAULT TABLESPACE句を指定します。

この表領域には、Oracle Databaseによって、別の永続表領域が指定されていないSYSTEM以外のユーザーが割り当てられます。

PDBをCDBシードまたはアプリケーション・シードから作成する場合、Oracle Databaseはsmallfile表領域を作成し、それをデフォルト表領域として設定します。CDBシードまたはアプリケーション・シードからの作成以外の手法を使用する場合は、指定した表領域がソースPDBに存在する必要があります。

DEFAULT TABLESPACE句を省略します。

この句を指定しない場合、SYSTEM以外のユーザーに対するデフォルトの永続表領域はSYSTEM表領域です。SYSTEM表領域を非SYSTEMユーザーに使用することはお薦めしません。

FILE_NAME_CONVERT

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

プロキシPDBの作成(SYSTEMおよびSYSAUX表領域のデータファイルにのみ適用されます。)

切断されたPDBの接続

FILE_NAME_CONVERT句を使用して、ファイルのターゲットの場所を指定しますか。

CDBシードまたはアプリケーション・シードからPDBを作成する場合、ソース・ファイルは、シードに関連付けられたファイルです。

ソース・ファイルの名前に基づいてファイルのターゲットの場所を指定するFILE_NAME_CONVERT句を含めます。

FILE_NAME_CONVERT句を省略します。

次のいずれかの手法を使用して、ファイルのターゲットの場所を指定します。

  • CREATE_FILE_DEST

  • CDBに対してOracle Managed Filesを有効にして、ターゲットの場所を識別できるようにします。

  • PDB_FILE_NAME_CONVERT初期化パラメータでターゲットの場所を指定します。

「新しいPDBのファイルの場所」を参照してください。

HOST

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

PDBは依存するプロキシPDBを持つ参照PDBですか? リスナーのホスト名を変更しますか?

HOST句を含め、作成されるPDBのリスナーのホスト名を指定しますたとえば、物理ホスト名およびデフォルトのポートのリスナー・ネットワークがあり、デフォルト以外のポート番号を使用した仮想ホスト名および仮想IPアドレスのための2番目のリスナーが構成されている場合があります。

HOST句を省略します。

logging_clause

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

切断されたPDBの接続

新しいPDBに表領域のロギング属性を指定しますか。

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

logging_clauseを含めます。

logging_clauseを省略します。

NOCOPYCOPYMOVE

「新しいPDBのファイルの場所」を参照してください。

切断されたPDBの接続

ファイルを新しい場所にコピーまたは移動しますか。

COPYを指定して、ファイルを新しい場所にコピーします。COPYがデフォルトです。MOVEを指定して、ファイルを新しい場所に移動します。次のいずれかの手法を使用して、ターゲットの場所を指定します。

  • ソース・ファイルの名前に基づいてターゲットの場所を指定するFILE_NAME_CONVERT句を含めます。

  • PDBのファイル用にOracle Managed Filesのデフォルトの場所を指定するCREATE_FILE_DEST句を含めます。

  • Oracle Managed Filesを有効にして、ターゲットの場所を識別できるようにします。

  • PDB_FILE_NAME_CONVERT初期化パラメータでターゲットの場所を指定します。

NOCOPYを指定します。

NO DATA

PDBのクローニング

ソースPDBのデータ・モデル定義をクローニングするが、ソースPDBのデータをクローニングしないことを指定しますか。

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

NO DATA句を含めます。

NO DATA句を省略します。

PARALLEL

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

複数のパラレル実行サーバーを使用してPDBの作成を並列化しますか。

CDBで並列度を選択するには、PARALLEL句を含めるか省略します。

並列度を指定するには、PARALLEL句で整数を指定します。たとえば、PARALLEL 4を指定して、並列度4を指定します。

PARALLEL 0またはPARALLEL 1を指定します。

PATH_PREFIX

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

ディレクトリ・オブジェクト、PDBのOracle XML リポジトリ、CREATE PFILE文を使用して作成されたファイル、およびOracleウォレットのエクスポート・ディレクトリのためのPDBのファイル・パスを制限するためにPATH_PREFIX句を使用しますか?

PATH_PREFIX句は、Oracle Managed Filesによって作成されたファイルには影響しません。

絶対パスを指定するPATH_PREFIX句を含めます。

PATH_PREFIX句をNONEに設定するか、省略します。

PORT

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

PDBは依存するプロキシPDBを持つ参照PDBですか? リスナーのポート番号を1521以外の値に変更しますか?

PORT句を含め、作成されるPDBのリスナーのポート番号を指定しますたとえば、物理ホスト名およびデフォルトのポートのリスナー・ネットワークがあり、デフォルト以外のポート番号を使用した仮想ホスト名および仮想IPアドレスのための2番目のリスナーが構成されている場合があります。

PORT句を省略します。

REFRESH MODE

PDBのクローニング

ソースPDBからクローンPDBに変更を伝播するためにPDBをリフレッシュできるようにしますか。

リフレッシュ可能PDBは読取り専用モードでオープンする必要があります。

REFRESH MODE MANUALまたはREFRESH MODE EVERY minutes句を含めます。

REFRESH MODE句を省略するかREFRESH MODE NONE句を含めます。

ROLES

CDBシードまたはアプリケーション・シードからのPDBの作成

プロキシPDBの作成

Oracleの事前定義されているロールをPDBでローカルにPDB_DBAロールに付与しますか。

PDBの新しい管理者には、PDB_DBA共通ロールがPDBでローカルに付与されます。デフォルトでは、CREATE PLUGGABLE DATABASE文は管理者またはロールにいずれの権限も付与しません。

ROLES句を含めて、Oracleの事前定義されているロールをPDB_DBAロールに付与することを指定します。指定されたロールは、PDBでローカルにPDB_DBAロールに付与されます。CREATE PLUGGABLE DATABASE文を実行するユーザーには、指定されたロールを割り当てる必要はありません。Oracleの事前定義されているロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ROLES句を省略します。

SERVICE_NAME_CONVERT

CDBシードではなくアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

プロキシPDBの作成(SYSTEMおよびSYSAUX表領域のデータファイルにのみ適用されます。)

切断されたPDBの接続

SERVICE_NAME_CONVERT句を使用して、ソースPDBのサービス名に基づいて新しいPDBのユーザー定義サービス名を変更しますか。

サービスの新しい名前とそれが置換するサービス名を指定するSERVICE_NAME_CONVERT句を含めます。必要に応じて複数のサービス名と置換サービス名を指定します。

SERVICE_NAME_CONVERT句を省略します。

SNAPSHOT COPY

PDBのクローニング

記憶域スナップショットを使用してPDBをクローニングしますか。

SNAPSHOT COPY句を指定して、記憶域スナップショットを使用してクローニングを実行することを示します。

記憶域スナップショットを使用してPDBクローンを作成する場合は、ソースPDBのデータファイルをコピーする必要がないため、ほぼ即時にクローンが作成されます。SNAPSHOT COPYは、基礎となるファイル・システムで記憶域スナップショットがサポートされている場合にのみサポートされます。

SNAPSHOT COPY句を省略します。

SOURCE_FILE_DIRECTORY

XMLファイル・ディレクトリを使用して切断されたPDBを接続します。

この句は、.pdbアーカイブ・ファイルによる切断されたPDBの接続には適用されません。

単一ディレクトリ内のすべてのソース・ファイルが新しいファイル名を持ち、複数のSOURCE_FILE_NAME_CONVERTエントリが必要ですか。

ソース・ファイルへの完全絶対パスでSOURCE_FILE_DIRECTORYを指定します。

SOURCE_FILE_DIRECTORY句を省略します。

SOURCE_FILE_NAME_CONVERT

XMLファイル・ディレクトリを使用して切断されたPDBを接続します。

この句は、.pdbアーカイブ・ファイルによる切断されたPDBの接続には適用されません。

XMLファイルの内容は、ソース・ファイルの場所を正確に記述していますか。

SOURCE_FILE_NAME_CONVERT句を省略します。

SOURCE_FILE_NAME_CONVERT句を使用して、ソース・ファイルの場所を指定します。

STANDBYS

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

1つ以上のスタンバイCDBに新しいPDBを含めますか。

ALLALL EXCEPTまたはスタンバイCDBのリストを指定します。

STANDBYS句を省略するか、NONEを指定します。

STORAGE

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

PDBが使用できる記憶域の量を制限しますか。

適切な制限を使用してSTORAGE句を指定します。

STORAGE句を省略するか、またはSTORAGE句を使用して記憶域に制限がないことを指定します。

TEMPFILE REUSE

CDBシードまたはアプリケーション・シードからのPDBの作成

PDBのクローニング

PDBの再配置

切断されたPDBの接続

ターゲットの場所に一時ファイルがある場合、それを再利用しますか。

TEMPFILE REUSE句を含めます。

TEMPFILE REUSE句を省略します。

ターゲットの場所に新しい一時ファイルと同じ名前のファイルがないことを確認します。

USER_TABLESPACES

非CDBのクローニング

切断されたPDBの接続

新しいPDBに含める表領域および新しいPDBから除外する表領域を指定しますか。

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

USER_TABLESPACES句を含めて、新しいPDBに含める表領域を指定します。

USER_TABLESPACES句を省略します。

38.2 PDBの準備

PDBを作成する前に、前提条件を満たす必要があります。

PDBを作成する前に、次の前提条件が満たされていることを確認してください。

  • CDBが存在していることが必要です。

    CDBの作成および構成を参照してください。

  • CDBは、読取り/書込みモードである必要があります。

  • 現行ユーザーは、現在のコンテナがCDBルートまたはアプリケーション・コンテナである共通ユーザーである必要があります。

  • 現行ユーザーにはCREATE PLUGGABLE DATABASEシステム権限が必要です。

  • 各コンテナに対して一意のコンテナ名を決定する必要があります。各コンテナ名は、1つのCDB内で一意である必要があり、特定のリスナーからアクセスされるインスタンスを持つCDBのスコープ内で一意である必要があります。

    PDB名を使用してPDBとCDB内の他のPDBとを区別します。PDB名のルールは、大文字と小文字が区別されるなど、サービス名のルールと同じです。サービス名のルールの詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。

  • Oracle Data Guard構成にフィジカル・スタンバイ・データベースを使用しPDBを作成する場合、PDBの作成前にその他のタスクも完了する必要があります。詳細は、『Oracle Data Guard概要および管理』を参照してください。

  • 透過的データ暗号化で暗号化されているデータが含まれたPDBを作成する場合は、『Oracle Database Advanced Securityガイド』の指示に従います。

  • Database Vaultに対応したPDBを作成する場合は、『Oracle Database Vault管理者ガイド』の手順に従ってください。

38.3 シードを使用したPDBの作成

CREATE PLUGGABLE DATABASE文により、CDBシードのファイルを使用してCDBにPDBを作成できます。この文を使用すると、アプリケーション・シードまたはCDBシードのファイルを使用して、アプリケーション・コンテナにアプリケーションPDBを作成することもできます。

関連項目:

CREATE PLUGGABLE DATABASE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

38.3.1 シードからPDBを作成する方法について

CREATE PLUGGABLE DATABASE文を使用すると、CDBシードのファイルを使用して新しいPDBを作成したり、アプリケーション・シードまたはCDBシードのファイルからアプリケーションPDBを作成したりできます。

この文では、これらのファイルを新しい場所にコピーし、新しいPDBに関連付けます。図38-2に、この手法でCDBルートを現在のコンテナとして新しいPDBをCDBに作成する方法を示します。

図38-2 CDBシード・ファイルを使用したCDBルートでのPDBの作成

図38-2の説明が続きます
「図38-2 CDBシード・ファイルを使用したCDBルートでのPDBの作成」の説明

図38-3に、この手法でアプリケーション・ルートを現在のコンテナとして新しいアプリケーションPDBをアプリケーション・コンテナに作成する方法を示します。

図38-3 アプリケーション・シード・ファイルを使用したアプリケーション・ルートでのPDBの作成

図38-3の説明が続きます
「図38-3 アプリケーション・シード・ファイルを使用したアプリケーション・ルートでのPDBの作成」の説明

アプリケーション・コンテナにアプリケーション・シードが含まれ、シードからアプリケーションPDBを作成するためにCREATE PLUGGABLE DATABASE文がアプリケーション・ルートで実行されている場合、アプリケーションPDBはアプリケーション・シードを使用して作成されます。一方、アプリケーション・コンテナにアプリケーション・シードが含まれず、シードからアプリケーションPDBを作成するためにCREATE PLUGGABLE DATABASE文がアプリケーション・ルートで実行されている場合、アプリケーションPDBはCDBシード(PDB$SEED)を使用して作成されます。

シードから新しいPDBまたはアプリケーションPDBを作成する場合、CREATE PLUGGABLE DATABASE文でPDBまたはアプリケーションPDBの管理者を指定する必要があります。この文では、管理者をPDBのローカル・ユーザーとして作成し、PDB_DBAロールを管理者にローカルに付与します。

CDBシードまたはアプリケーション・シードを使用してPDBを作成する場合は、表38-3のシードからのPDBの作成に適用される質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

38.3.2 シードからPDBを作成する方法

CREATE PLUGGABLE DATABASE文を使用すると、CDBシードからPDBを作成したり、アプリケーション・シードまたはCDBシードからアプリケーションPDBを作成したりできます。

CDBシード(PDB$SEED)からPDBを作成するか、アプリケーション・シードまたはCDBシードからアプリケーションPDBを作成する前に、「PDBの準備」で説明している前提条件を満たす必要があります。

シードからPDBを作成するには:

  1. SQL*Plusで、現在のコンテナがCDBルートまたはアプリケーション・ルートであることを確認します。

    現在のコンテナがCDBルートの場合、PDBはCDBシードのファイルを使用してCDBに作成されます。

    現在のコンテナがアプリケーション・ルートの場合、アプリケーションPDBはアプリケーション・シードのファイルを使用してアプリケーション・コンテナに作成されます。アプリケーション・コンテナにアプリケーション・シードがない場合、アプリケーションPDBはCDBシードのファイルを使用してアプリケーション・コンテナに作成されます。

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

  2. CREATE PLUGGABLE DATABASE文を実行し、PDBのローカル管理者を指定します。他の句が必要な場合はそれらを指定します。

    「シードからPDBを作成する例」を参照してください。

    作成したPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。 「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  4. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

指定されたローカル管理者の名前を持つローカル・ユーザーが作成され、このユーザーにPDBでローカルにPDB_DBA共通ロールが付与されます。PDBの作成時にユーザーに管理者権限が付与されなかった場合は、SYSおよびSYSTEM共通ユーザーを使用してPDBを管理します。

注意:

PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

シードからPDBを作成する例

次の例では、様々な要因に基づき、salespdbおよびsalesadmという名前の新しいPDBローカル管理者を作成します。

salespdb PDBの作成に加えて、この文では、PDB_DBAロールをPDB管理者であるsalesadmに付与し、指定したOracleの事前定義済ロールをPDB_DBAロールにPDBでローカルに付与します。

各例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

例38-30 句を指定せずにPDBを作成する方法

この例では、次の要因を想定しています。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • PDBにはデフォルトの表領域は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    CDBに対してOracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。CDBシードまたはアプリケーション・シードに関連付けられているファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • Oracleの事前定義されたロールをPDB_DBAロールに付与する必要はありません。

前述の要因に基づき、次の文によってPDBが作成されます。

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password;

関連項目:

例38-31 PDBの作成、およびPDB管理者へのOracleの事前定義されたロールの付与

この例では、次の要因を想定しています。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • PDBにはデフォルトの表領域は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。CDBシードまたはアプリケーション・シードに関連付けられているファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • PDB_DBAロールには、事前定義されたDBA Oracleロールがローカルで付与されている必要があります。

前述の要因に基づき、次の文によってPDBが作成されます。

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
  ROLES=(DBA);

関連項目:

例38-32 STORAGE、DEFAULT TABLESPACE、PATH_PREFIXおよびFILE_NAME_CONVERTの各句を使用したPDBの作成

この例では、次の要因を想定しています。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • 非管理者ユーザーに対してそれぞれ異なる永続表領域を指定しない場合は、デフォルトの永続表領域が必要となります。特に、この例では次の特性を備えたsalesという名前のデフォルト永続表領域を作成します。

    • この表領域の単一データファイルはsales01.dbfであり、文によってこのファイルが/disk1/oracle/dbs/salespdbディレクトリに作成されます。

    • SIZE句では、表領域の初期サイズが250MBであることを指定します。

    • AUTOEXTEND句により、ファイルを自動拡張できます。

  • パス接頭辞をPDBのディレクトリ・パスに追加する必要があります。したがって、PATH_PREFIX句が必要です。この例では、パス接頭辞/disk1/oracle/dbs/salespdb/をPDBのディレクトリ・オブジェクト・パスに追加しています。

  • CREATE_FILE_DEST句が使用されず、Oracle Managed Filesが有効になっておらず、PDB_FILE_NAME_CONVERT初期化パラメータが設定されていません。したがって、FILE_NAME_CONVERT句が必要です。システムにおけるCDBシードまたはアプリケーション・シードのデータファイルの場所を指定します。この例では、Oracle Databaseは/disk1/oracle/dbs/pdbseedのファイルを/disk1/oracle/dbs/salespdbにコピーします。

    CDBシードまたはアプリケーション・シードのデータファイルの場所を表示するには、例45-7の問合せを実行します。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • Oracleの事前定義されたロールをPDB_DBAロールに付与する必要はありません。

前述の要因に基づき、次の文によってPDBが作成されます。

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
  STORAGE (MAXSIZE 2G)
  DEFAULT TABLESPACE sales 
    DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
  PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
  FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');

関連項目:

38.4 既存のPDBまたは非CDBのクローニングによるPDBの作成

ローカルPDB、リモートPDBまたは非CDBをクローニングすることで、PDBを作成できます。

注意:

CDB以外をクローニングしたPDBの作成は、Oracle Database 12cリリース1(12.1.0.2)より使用可能です。

38.4.1 PDBのクローニングについて

CREATE PLUGGABLE DATABASE文を使用して、ソースPDBまたは非CDBからPDBをクローニングできます。

この手法では、ソースPDBまたは非CDBを新しいPDBとしてクローニングし、そのクローンをCDBに自動的に接続します。この手法を使用するには、ソースを指定するFROM句を含める必要があります。

ソースは、コピーされる既存のPDBまたは非CDBです。ターゲットPDBはソースのクローンです。ソースは、ローカルCDBのPDB、リモートCDBのPDB、非CDBのいずれでもかまいません。CREATE PLUGGABLE DATABASE文では、ソースに関連付けられているファイルを新しい場所にコピーし、そのファイルをターゲットPDBに関連付けます。CDBがARCHIVELOGモードおよびローカルUNDOモードの場合、ソースPDBは読取り/書込みモードでオープンでき、動作中に完全に機能します。 したがって、ホットPDBクローニングがサポートされます。

クローニングの用途の1つは、テスト用です。クローニングを使用すると、PDBまたは非CDBのクローンを1つ以上作成し、孤立した状況で安全にテストできます。たとえば、新しいアプリケーションまたは変更されたアプリケーションを、本番PDBで使用する前に、クローニングPDBでテストできます。

図38-4は、ソースがローカルPDBである場合に、この手法で新しいPDBがどのように作成されるかを示しています。

図38-4 ローカルPDBのクローニング

図38-4の説明が続きます
「図38-4 ローカルPDBのクローニング」の説明

ソースがリモートCDB内のPDBである場合は、データベース・リンクを使用してPDBをクローニングする必要があります。データベース・リンクは、クローニングされたPDBが含められるCDBに作成する必要があります。新しいPDBを含めるCDBのルートからCREATE PLUGGABLE DATABASE文を発行する場合は、クローニングされるPDBを含むリモートCDBへのデータベース・リンクをFROM句で指定する必要があります。このデータベース・リンクは、リモートCDBのルート、または新規PDBを含めるCDBからリモート・ソースPDBに接続します。

図38-5は、ソースPDBがリモートである場合に、この手法で新規PDBがどのように作成されるかを示しています。

図38-5 リモートPDBのクローニングによるPDBの作成

図38-5の説明が続きます
「図38-5 リモートPDBのクローニングによるPDBの作成」の説明

ソースが非CDBである場合は、非CDBへのデータベース・リンクをFROM句で指定する必要があります。図38-6は、ソースがリモート非CDBである場合に、この手法で新しいPDBがどのように作成されるかを示しています。

図38-6 非CDBのクローニングによるPDBの作成

図38-6の説明が続きます
「図38-6 非CDBのクローニングによるPDBの作成」の説明

すべてのクローニングの使用例(ローカル、リモートおよび非CDBから)で、CREATE PLUGGABLE DATABASE文の実行時にアプリケーション・ルートが現在のコンテナである場合、クローニングされたPDBはアプリケーション・コンテナに作成されます。この場合、ソースPDBのアプリケーション名およびバージョンは、アプリケーション・コンテナのアプリケーション名およびバージョンと一致する必要があります。図38-7に、この手法でローカル・ソース・アプリケーションPDBをクローニングすることで新しいアプリケーションPDBをアプリケーション・コンテナに作成する方法を示します。ソースPDBは、ローカルCDBルートに接続されたPDB、リモートCDBルートに接続されたPDBまたはリモート・アプリケーション・ルートに接続されたアプリケーションPDBにすることができます。

図38-7 アプリケーション・コンテナ内のPDBのクローニング

図38-7の説明が続きます
「図38-7 アプリケーション・コンテナ内のPDBのクローニング」の説明

注意:

PDBをCDBシード(PDB$SEED)またはアプリケーション・シードから作成する場合に、CREATE PLUGGABLE DATABASE文にFROM句を含めることはできません。PDBをシードから作成する場合の詳細は、「シードを使用したPDBの作成」を参照してください。

PDBをクローニングする場合は、表38-3のPDBのクローニングに適用される質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

注意:

別のPDBをクローニングしてPDBを作成するか、非CDBからPDBを作成するときに、ソース・データベースに暗号化されたデータまたはキーストア・セットがある場合、CREATE PLUGGABLE DATABASE ... FROM SQL文のkeystore_password句によって識別されるキーストアを含めることによって、キーストアのパスワードを提供する必要があります。ソース・データベースで自動ログイン・ソフトウェア・キーストアが使用されている場合でも、このパスワードを指定する必要があります。ソース・データベースに暗号化データまたはキーストアがあるかどうかを判別するには、DBA_ENCRYPTED_COLUMNSデータ・ディクショナリ・ビューに問い合せます。

関連項目:

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

ソースPDBをクローニングし、クローンをリフレッシュ可能として構成できます。そのためには、CREATE PLUGGABLE DATABASE文のREFRESH MODE句を含めます。クローンPDBがリフレッシュされると、ソースPDBに対して行われた変更で更新されます。設定した間隔で自動的にリフレッシュするようにクローンPDBを構成するか、またはALTER PLUGGABLE DATABASE REFRESH文により手動でリフレッシュできます。リフレッシュ可能なクローンPDBとソースPDBは異なるCDBに存在している必要があります。

リフレッシュ可能なクローンPDBは、読取り専用モードであるかクローズされている必要があります。読取り/書込みモードにすることはできません。ただし、ALTER PLUGGABLE DATABASE文にREFRESH MODE NONE句を含め、PDBを読取り/書込みモードでオープンすることにより、リフレッシュ可能なクローンPDBを通常のPDBに変更できます。通常のPDBはリフレッシュ可能なクローンPDBに変更できず、リフレッシュ可能なクローンPDBが通常のPDBに変換された後は、リフレッシュ可能クローンPDBに戻すことができません。

SNAPSHOT COPY句

SNAPSHOT COPY句を使用している場合、ソースPDBのすべてのデータファイルは、同じ記憶域タイプに格納されている必要があります。

SNAPSHOT COPY句を使用してソースPDBのクローンを作成し、CLONEDB初期化パラメータをFALSEに設定する場合、ソースPDBのファイルの基になるファイル・システムが記憶域スナップショットをサポートしている必要があります。そのようなファイル・システムとして、Oracle Automatic Storage Management Cluster File System (Oracle ACFS)およびDirect NFS Client記憶域などがあります。Exadataは、スパースASMグリッド・ディスクを使用して構成されたASMでスナップショット・コピー機能をサポートします。

SNAPSHOT COPY句を使用してソースPDBのクローンを作成し、CLONEDB初期化パラメータをTRUEに設定する場合、ソースPDBのファイルの基になるファイル・システムはローカル・ファイル・システム、ネットワーク・ファイル・システム(NFS)またはDirect NFSを有効にしてスパース・ファイルをサポートするクラスタ・ファイル・システムの可能性があります。ただし、CLONEDB初期化パラメータにTRUEが設定されていて、クローンが存在する場合、ソースPDBはオープン読取り専用モードのままにする必要があります。

Direct NFSクライアントにより、Oracle Databaseは、オペレーティング・システム・カーネルのNFSクライアントを使用するかわりに、ネットワーク接続記憶域(NAS)デバイスに直接アクセスできます。PDBのファイルがDirect NFSクライアント記憶域に格納されている場合は、次の追加要件を満たす必要があります。

  • ソースPDBのファイルはNFSボリューム上に存在する必要があります。

  • 記憶域の資格証明は、透過的データ暗号化キーストアに格納されている必要があります。

  • 記憶域ユーザーは、ソースPDBのファイルをホストするボリューム上でスナップショットを作成および破棄するのに必要な権限を持っている必要があります。

  • 資格証明は、ADMINISTER KEY MANAGEMENT ADD SECRET SQL文を使用してキーストアに格納されている必要があります。

    次の例では、ソフトウェア・キーストアのOracle Databaseシークレットを構成しています。

    ADMINISTER KEY MANAGEMENT  
      ADD SECRET 'secret' FOR CLIENT 'client_name' 
      USING TAG 'storage_user' 
      IDENTIFIED BY  keystore_password  WITH BACKUP;
    

    構成内の各記憶域サーバーに対して個別のエントリを追加するには、この文を実行します。前の例では、次の値を指定する必要があります。

    • secretは、記憶域パスワードです。

    • client_nameは、記憶域サーバーです。LinuxまたはUNIXのプラットフォームでは、/etc/hostsに入力した名前または記憶域サーバーのIPアドレスです。

    • tagは、記憶域サーバーに渡されるユーザー名です。

    • keystore_passwordは、キーストアのパスワードです。

    キーストアおよびシークレットの管理の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

SNAPSHOT COPY句を使用して作成したPDBのクローンは、切断できません。削除のみ可能です。SNAPSHOT COPY句を使用して作成したクローンを切断しようとすると、エラーが発生します。

記憶域クローンには、宛先PDBのGUIDを使用して名前およびタグが付けられます。DBA_PDB_HISTORYビューのCLONETAG列を問い合せて、記憶域クローンのクローン・タグを表示できます。

注意:

スナップショット・コピーの動作および効率性はベンダー固有であり、ベンダーによって異なる場合があります。

関連項目:

38.4.2 ローカルPDBのクローニング

この項では、ローカルPDBのクローニングについて説明します。ローカルPDBのクローニング後、ソースPDBとターゲットPDBは同じCDBに存在します。

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

  • 「PDBの準備」で説明している前提条件を満たします。

  • 現行ユーザーは、ルートおよびソースPDBの両方でCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • ソースPDBはクローズできません。

  • CDBがローカルUNDOモードでない場合、ソースPDBは読取り専用オープン・モードである必要があります。この要件は、CDBがローカルUNDOモードの場合は適用されません。

    「CDB UNDOモードについて」を参照してください。

  • CDBがARCHIVELOGモードでない場合、ソースPDBは読取り専用オープン・モードである必要があります。この要件は、CDBがARCHIVELOGモードの場合は適用されません。

  • アプリケーションPDBを作成している場合、アプリケーションPDBはアプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットである必要があります。

    CDBのデータベース・キャラクタ・セットがAL32UTF8の場合、アプリケーション・コンテナのキャラクタ・セットおよび各国語キャラクタ・セットはCDBと異なっていても構いません。ただし、アプリケーション・コンテナ内のすべてのアプリケーションPDBには、アプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットが必要です。

注意:

REFRESH MODE句を使用して、ローカルPDBのクローンであるリフレッシュ可能なクローンPDBを作成することはできません。リフレッシュ可能なクローンPDBは、リモートCDBに作成する必要があります。

ローカルPDBをクローニングするには:

  1. SQL*Plusで、現在のコンテナがCDBルートまたはアプリケーション・ルートであることを確認します。

    現在のコンテナがCDBルートの場合、PDBはCDBに作成されます。現在のコンテナがアプリケーション・ルートの場合、アプリケーションPDBはアプリケーション・コンテナ内に作成されます。

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

  2. CREATE PLUGGABLE DATABASE文を実行し、ソースPDBをFROM句で指定します。他の句が必要な場合はそれらを指定します。

    「ローカルPDBのクローニングの例」を参照してください。

    作成したPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。 「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  4. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

ローカルPDBのクローニングの例

次の例では、様々な要因に基づき、pdb1という名前のローカル・ソースPDBを、pdb2という名前のターゲットPDBにクローニングします。

各例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

例38-33 句を指定せずにローカルPDBをクローニングする方法

この例では、次の要因を想定しています。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。したがって、FILE_NAME_CONVERT句は必要ありません。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によって、pdb1 PDBからpdb2 PDBがクローニングされます。

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1;

関連項目:

例38-34 PATH_PREFIX句、FILE_NAME_CONVERT句およびSERVICE_NAME_CONVERT句を使用してローカルPDBをクローニングする方法

この例では、次の要因を想定しています。

  • パス接頭辞をPDBのディレクトリ・パスに追加する必要があります。したがって、PATH_PREFIX句が必要です。この例では、パス接頭辞/disk2/oracle/pdb2/をPDBのディレクトリ・オブジェクト・パスに追加しています。

  • コピーしたファイルのターゲットの場所を指定するには、FILE_NAME_CONVERT句が必要です。この例では、ファイルは/disk1/oracle/pdb1から/disk2/oracle/pdb2にコピーされます。

    CREATE_FILE_DEST句は使用されず、Oracle Managed FilesもPDB_FILE_NAME_CONVERT初期化パラメータも、コピーしたファイルのターゲットの場所の指定に使用されません。

    PDBのデータファイルの場所を表示するには、例45-7の問合せを実行します。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • クローニングされるPDB (pdb1)には、カリフォルニア州の営業担当者およびオーダー入力担当者のための2つのユーザー定義のサービス(salesrep_caおよびorders_ca)があります。新しいサービスはオレゴン州の営業担当者およびオーダー入力担当者のためのものであり、クローニングされたPDB (pdb2)でサービス名はsalesrep_orおよびorders_orにそれぞれ名前変更されます。

  • PDB内で今後作成される表領域は、デフォルトでNOLOGGING属性を使用して作成されます。この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

前述の要因に基づき、次の文によって、pdb1 PDBからpdb2 PDBがクローニングされます。

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1 
  PATH_PREFIX = '/disk2/oracle/pdb2/'
  FILE_NAME_CONVERT = ('/disk1/oracle/pdb1/', '/disk2/oracle/pdb2/')
  SERVICE_NAME_CONVERT = ('salesrep_ca','salesrep_or','orders_ca','orders_or')
  NOLOGGING;

例38-35 FILE_NAME_CONVERT句、STORAGE句およびSERVICE_NAME_CONVERT句を使用してローカルPDBをクローニングする方法

この例では、次の要因を想定しています。

  • PATH_PREFIX句は必要ありません。

  • コピーしたファイルのターゲットの場所を指定するには、FILE_NAME_CONVERT句が必要です。この例では、ファイルは/disk1/oracle/pdb1から/disk2/oracle/pdb2にコピーされます。

    CREATE_FILE_DEST句は使用されず、Oracle Managed FilesもPDB_FILE_NAME_CONVERT初期化パラメータも、コピーしたファイルのターゲットの場所の指定に使用されません。

    PDBのデータファイルの場所を表示するには、例45-7の問合せを実行します。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • クローニングされるPDB (pdb1)には、カリフォルニア州の営業担当者およびオーダー入力担当者のための2つのユーザー定義のサービス(salesrep_caおよびorders_ca)があります。新しいサービスはオレゴン州の営業担当者およびオーダー入力担当者のためのものであり、クローニングされたPDB (pdb2)でサービス名はsalesrep_orおよびorders_orにそれぞれ名前変更されます。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によって、pdb1 PDBからpdb2 PDBがクローニングされます。

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1 
  FILE_NAME_CONVERT = ('/disk1/oracle/pdb1/', '/disk2/oracle/pdb2/')
  STORAGE (MAXSIZE 2G)
  SERVICE_NAME_CONVERT = ('salesrep_ca','salesrep_or','orders_ca','orders_or');

例38-36 データをクローニングしないローカルPDBのクローニング

この例では、次の要因を想定しています。

  • NO DATA句は、目的がデータをクローニングせずにソースPDBのデータ・モデル定義をクローニングすることであるため必要です。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。したがって、FILE_NAME_CONVERT句は必要ありません。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

ソースPDB pdb1にデータが大量にあるとします。次のステップに、操作の完了時にソースPDBのデータがどのようにしてクローンに含まれないかを示します。

  1. ソースPDB pdb1を現在のコンテナとして使用し、データが大量にある表を問い合せます。

    SELECT COUNT(*) FROM tpch.lineitem;
    
      COUNT(*)
    ----------
       6001215
    

    表には、600万超の行があります。

  2. NO DATA句を指定して、ソースPDBをクローニングします。

    CREATE PLUGGABLE DATABASE pdb2 FROM pdb1 NO DATA;
    
  3. クローニングしたPDBをオープンします。

    ALTER PLUGGABLE DATABASE pdb2 OPEN;
    
  4. クローニングしたPDB pdb2を現在のコンテナとして使用し、ソースPDB内のデータが大量にある表を問い合せます。

    SELECT COUNT(*) FROM tpch.lineitem;
    
      COUNT(*)
    ----------
             0
    

    クローニングしたPDB内の表には行がありません。

38.4.3 リモートPDBまたは非CDBのクローニング

リモート・ソースのクローニングによってPDBを作成できます。リモート・ソースは、リモートPDBでも非CDBでもかまいません。クローニング操作の完了後、ソースとターゲットPDBは異なる場所にあります。

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

  • 「PDBの準備」で説明している前提条件を満たします。

  • 現行ユーザーは、ターゲットPDBが含まれるCDBのルートでCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • ソースPDBはクローズできません。

  • PDBのクローニング時に、リモートCDBがローカルUNDOモードでない場合、ソースPDBは読取り専用オープン・モードである必要があります。この要件は、ソースPDBを含むリモートCDBがローカルUNDOモードの場合は適用されません。

    「CDB UNDOモードについて」を参照してください。

  • リモートCDBまたは非CDBがARCHIVELOGモードでない場合、ソースPDBまたは非CDBは読取り専用オープン・モードである必要があります。この要件は、ソースPDBを含むリモートCDBまたは非CDBがARCHIVELOGモードの場合は適用されません。

  • 次の前提条件がデータベース・リンクに適用されます。

    • データベース・リンクは、PDBがクローニングされるCDBからソースPDBのCDBへの接続を有効にする必要があります。データベース・リンクは、CDBのルート、アプリケーションPDB (ソースがアプリケーションPDBの場合)、またはPDBのいずれかに接続できます。

    • データベース・リンクが接続するユーザーには、CREATE PLUGGABLE DATABASEシステム権限が必要です。

    • データベース・リンクがソースPDBのCDBのルートに接続する場合、データベース・リンクが接続するユーザーは、共通ユーザーである必要があります。

  • ソースとターゲットのプラットフォームは、次の要件を満たしている必要があります。

    • endiannessが同じである必要があります。

    • ソース・プラットフォームにインストールされているデータベース・オプションは、ターゲット・プラットフォームにインストールされているデータベース・オプションと同じか、サブセットである必要があります。

  • PDBがクローニングされるCDBのキャラクタ・セットがAL32UTF8でない場合、ソースとターゲットには互換性のあるキャラクタ・セットおよび各国語キャラクタ・セットが必要です。互換性のために、キャラクタ・セットおよび各国語キャラクタ・セットは、『Oracle Databaseグローバリゼーション・サポート・ガイド』で指定されている要件をすべて満たす必要があります。

    PDBがクローニングされるCDBのキャラクタ・セットがAL32UTF8である場合、この要件は適用されません。

  • 非CDBをクローニングしてPDBを作成する場合は、次の要件を満たす必要があります。

    • CDBと非CDBでOracle Database 12cリリース1 (12.1.0.2)以上が実行されている必要があります。

    • クローニングされたPDBのデータ・ブロック・サイズは、クローンPDBを配置するCDBと一致する必要があります。

  • アプリケーションPDBを作成している場合、ソースPDBのアプリケーション名およびバージョンは、ターゲット・アプリケーションPDBを含めるアプリケーション・コンテナのアプリケーション名およびバージョンと一致する必要があります。

  • アプリケーションPDBを作成している場合、アプリケーションPDBはアプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットである必要があります。

    CDBのデータベース・キャラクタ・セットがAL32UTF8の場合、アプリケーション・コンテナのキャラクタ・セットおよび各国語キャラクタ・セットはCDBと異なっていても構いません。ただし、アプリケーション・コンテナ内のすべてのアプリケーションPDBには、アプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットが必要です。

  • リフレッシュ可能なPDBを作成している場合、ソースPDBはARCHIVELOGモードおよびローカルUNDOモードである必要があります。

リモートPDBまたは非CDBをクローニングするには:

  1. SQL*Plusで、現在のコンテナが新しいPDBを含めるCDBのルートまたは新しいPDBを含めるアプリケーション・コンテナのアプリケーション・ルートであることを確認します。

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

  2. CREATE PLUGGABLE DATABASE文を実行し、ソースPDBまたはソース非CDBをFROM句で指定します。他の句が必要な場合はそれらを指定します。

    「例38-37」を参照してください。

    作成したPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。「SQL*Plusを使用したCDB内のコンテナへのアクセスについて」を参照してください。

  3. 非CDBからPDBを作成した場合は、ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlスクリプトを実行します。このスクリプトは、PDBを初めてオープンする前に実行する必要があります。

    PDBが非CDBでない場合は、noncdb_to_pdb.sqlスクリプトを実行する必要はありません。

    noncdb_to_pdb.sqlスクリプトを実行するには、次のステップを実行します。

    1. PDBにアクセスします。

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

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

    2. noncdb_to_pdb.sqlスクリプトを次のように実行します。

      @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
      

    スクリプトによって、PDBのオープン、変更の実行、および変更の完了時にPDBのクローズが行われます。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  5. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

リモートPDBまたは非CDBのクローニングの例

次の例は、異なる係数でリモートPDBまたは非CDBをクローニングします。

各例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

例38-37 句を使用せずにリモートPDBからクローニングしてPDBを作成する方法

次の例では、様々な要因に基づき、pdb1という名前のリモート・ソースPDBを、pdb2という名前のターゲットPDBにクローニングします。この例では、次の要因を想定しています。

  • リモートPDBへのデータベース・リンク名はpdb1_linkです。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によって、pdb1 リモートPDBからpdb2 PDBがクローニングされます。

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1@pdb1_link;

例38-38 リモート非CDBのクローニングによるPDBの作成

次の例では、様々な要因に基づき、mydbという名前のリモート・ソース非CDBを、pdb2という名前のターゲットPDBにクローニングして新しいPDBを作成します。この例では、次の要因を想定しています。

  • リモート非CDBへのデータベース・リンク名はmydb_linkです。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によって、mydbという名前のリモート非CDBからpdb2 PDBが作成されます。

CREATE PLUGGABLE DATABASE pdb2 FROM mydb@mydb_link;

ソースが非CDBである場合、非CDBの名前のかわりにNON$CDBを使用できます。たとえば、次の文は前の例と同じです。

CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link;

関連項目:

例38-39 リフレッシュ可能なクローンの作成

次の例では、様々な要因に基づき、pdb1という名前のリモート・ソースPDBを、pdb2という名前のターゲットPDBにクローニングします。クローンはソースPDBのリフレッシュ可能コピーであり、これはソースPDBに対して行われた変更で更新するようにリフレッシュできることを意味します。この例では、次の要因を想定しています。

  • リモートPDBへのデータベース・リンク名はpdb1_linkです。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • リフレッシュ可能なクローンは、60分ごとに自動的にリフレッシュされます。

リフレッシュ可能なPDBを作成するには、ソースPDBがARCHIVELOGモードおよびローカルUNDOモードである必要があります。

前述の要因に基づき、次の文によって、pdb1 リモートPDBからpdb2 PDBがクローニングされます。

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1@pdb1_link REFRESH MODE EVERY 60 MINUTES;

38.4.4 PDBのクローニング後

PDBのクローニング後に、ユーザーと表領域に関する特定のルールが適用されます。

PDBのクローニング後、次の内容が適用されます。

  • ソース非CDBまたはPDBのデフォルト一時表領域を使用していたPDBのユーザーは、クローンPDBのデフォルト一時表領域を使用します。非CDBまたはPDB内のデフォルト以外の一時表領域を使用していたユーザーは、クローンPDB内の同じローカル一時表領域を引き続き使用します。「CDB内表領域の管理について」を参照してください。

  • リモートPDBのクローニング時、ソースCDBに存在するが、ターゲットCDBには存在しない、ユーザーが作成した共通ユーザーには、共通して付与された権限がありません。ただし、ターゲットCDBに共通ユーザーが存在し、PDBの共通ユーザーと同じ名前である場合、後者は前者にリンクされ、ターゲットCDBの共通ユーザーに付与された権限を持ちます。

    クローニングされたPDBまたは接続したPDBに、ターゲットCDBに存在しない共通のユーザー・アカウントがある場合、およびこのユーザーがPDB内のオブジェクトを所有していない場合、同期ステップ中にこのユーザーはOracle Databaseによって削除されます。そうでない場合、ユーザー・アカウントはターゲットPDBでロックされます。ロックされたアカウントに関しては、次の選択肢があります。

    • PDBをクローズし、ルートに接続し、同じ名前の共通ユーザー・アカウントを作成します。PDBを読取り/書込みモードでオープンすると、ユーザー・アカウントに共通して付与されているロールや権限の相違点が解決され、アカウントをロック解除できます。ユーザー・アカウントに対してローカルに付与されている権限やロールは、このプロセス中も変更されません。

    • PDBに新しいローカル・ユーザー・アカウントを作成し、データ・ポンプを使用して、ロックされたユーザーのデータを新しいローカル・ユーザーのスキーマにエクスポート/インポートできます。

    • ユーザー・アカウントをロックされたままにします。

    • ユーザー・アカウントを削除します。

関連項目:

38.5 再配置によるPDB作成

PDBは、別のCDBにそれを再配置することによって作成できます。

38.5.1 PDBの再配置について

CREATE PLUGGABLE DATABASE文を使用して、あるCDBから別のCDBにPDBを再配置できます。

この手法では、あるCDBから別のCDBにPDBを移動します。この手法を使用するには、CREATE PLUGGABLE DATABASE文を実行し、FROM句およびRELOCATE句を含めます。

PDBの現在の場所を指定するFROM句を含める必要があります。RELOCATE句を含めて、PDBがクローニングではなく移動されることを指定する必要もあります。操作の完了後、PDBの再配置先のCDBにPDBが追加されます。CREATE PLUGGABLE DATABASE文は、PDBに関連付けられているファイルも新しい場所に移動します。この手法を使用すると、最小限のダウン・タイムで最も迅速にPDBを再配置できます。

また、再配置されるPDBは読取り/書込みモードでオープンされ、再配置プロセス中も完全に機能します。この手法では、REDOデータを新しい場所のPDBに転送および適用している間、古い場所にあるPDBは自動的に静止します。最後に、PDBの準備ができると、この手法はそのPDBを新しい場所でオンラインにします。PDBの再配置時に、現在のDMLおよびDDL操作は、PDBの新しい場所にリダイレクトされている間、停止します。問合せは一時停止なしで実行を継続します。

データベース・リンクを使用してPDBを再配置する必要があります。データベース・リンクは、再配置されたPDBが含まれるCDBに作成する必要があります。再配置されたPDBを含めるCDBのルートからCREATE PLUGGABLE DATABASE文を発行する場合は、再配置されたPDBを含むリモートCDBへのデータベース・リンクをFROM句で指定する必要があります。データベース・リンクは、新規PDBを含めるCDBからリモートCDBのルートに接続する必要があります。

図38-8に、この手法がPDBをどのように再配置するかを示します。

PDBをアプリケーションPDBとしてアプリケーション・コンテナに再配置したり、アプリケーションPDBをあるアプリケーション・ルートから別のアプリケーション・ルートに再配置したりできます。空のアプリケーション・ルートをあるCDBから別のCDBに再配置することもできますが、そのアプリケーション・ルートにはホストされるアプリケーションPDBが存在しない必要があります。図38-9に、この手法で新しいアプリケーションPDBをアプリケーション・コンテナに作成する方法を示します。

図38-9 アプリケーション・コンテナへのPDBの再配置

図38-9の説明が続きます
「図38-9 アプリケーション・コンテナへのPDBの再配置」の説明

PDBを再配置する場合は、表38-3のPDBの再配置に適用される質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

PDBを再配置する場合は、PDBへの接続に関して2つのオプション(AVAILABILITY MAXおよびAVAILABILITY NORMAL)があります。オプションでAVAILABILITY MAX句を使用して、PDBの古い場所から新しい場所に接続をリダイレクトできます。AVAILABILITY MAX句を指定した場合は、再配置操作によって、新しい場所に接続が再配置されるようにリスナーが構成されます。

PDBの古い場所から新しい場所に接続をリダイレクトするための次のオプションがあります。

  • システムでOracle Internet Directory (OracleのLDAPディレクトリ・サービス)を使用している場合、接続情報は複数のクライアント構成ファイルではなく一元的な場所で更新できます。

  • PDBの古い場所と新しい場所で同じリスナーを使用する場合、再配置が完了すると新しい接続は自動的にPDBの新しい場所にルーティングされます。

  • PDBが異なるリスナーを使用し、local_listenerおよびremote_listenerパラメータの構成を通じてそれぞれのリスナーの相互登録を採用する場合、PDBのサービスの可用性と場所はリスナーに自動的に登録されるため、再配置はシームレスになります。

注意:

Oracle Clusterware環境で、異なるCDB (同じデータベースのCDBインスタンスではない)間でPDBを再配置する場合は、SRVCTLを使用してデフォルトではないサービス・リソースを再作成する必要があります。

再配置操作のソースCDBおよびターゲットCDBが共通のリスナー・ネットワークを共有していない場合は、AVAILABILITY MAX句を使用して、再配置されたPDBの接続を処理する新しいリスナーに接続を転送するように元のリスナーを自動的に構成します。この構成は、Oracle Internet Directory (OID)を更新する間、またはクライアント接続を変更する間に一時的に使用することが意図されています。OIDサーバーまたはクライアント接続が更新されるまで、墓石のPDBはソースCDBに残り、PDBのネームスペースを保護し、リスナー転送構成を維持します。それが完了したら、DROP PLUGGABLE DATABASE文を使用してソースPDBを削除できます。

再配置操作のソースCDBとターゲットCDBが共通のリスナー・ネットワークを共有している場合、共通のリスナー・ネットワークによって暗黙的に処理されるため、クライアント接続の転送は必要ありません。この場合は、再配置操作にAVAILABILITY NORMAL句を使用します。PDBがターゲットCDBに再配置されてオープンされると、ソースCDBのPDBが削除されます。

ローカル・リスナーがOracle RAC構成の単一クライアント・アクセス名(SCAN)リスナーにリダイレクトされる場合、このリスナーはクライアント接続リクエストを別のクラスタ・ノードにさらにリダイレクトすることが必要な場合があります。複数リダイレクトは、Oracle Netリスナーのデフォルトではサポートされません。SCANリスナーは任意のノードに接続リクエストをルーティングできるため、ALLOW_MULTIPLE_REDIRECTS_listener_nameパラメータをすべてのSCANリスナーのlistener_nameに設定して、それをクラスタ内のすべてのlistener.oraファイルで設定します。たとえば、SCANリスナーの名前がlistener_scan1listener_scan2およびlistener_scan3の場合は、すべての宛先ホストのlistener.oraファイルに次の設定が必要になります。

ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN1=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN2=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN3=YES

注意:

ALLOW_MULTIPLE_REDIRECTS_listener_nameパラメータをノード・リスナーに設定すると、特定のネットワーク構成で無限のリダイレクト・ループが可能になるため、設定しないでください。

関連項目:

38.5.2 PDBの再配置

PDBを再配置することで作成できます。操作の完了後、PDBは現在のCDBから削除され、別のCDBに追加されます。

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

  • 「PDBの準備」で説明している前提条件を満たします。

  • 現行ユーザーは、PDBの再配置先となるCDBのルートでCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • 再配置の前にPDBを含むCDBはローカルUNDOモードである必要があります。

    「CDB UNDOモードについて」を参照してください。

  • PDBの再配置先のCDBがARCHIVELOGモードでない場合、操作中にPDBが読取り専用オープン・モードである必要があります。この要件は、PDBの再配置先のCDBがARCHIVELOGモードの場合は適用されません。

  • 次の前提条件がデータベース・リンクに適用されます。

    • データベース・リンクは、PDBが再配置されるCDBからPDBの現在のCDBへの接続を有効にする必要があります。データベース・リンクは、CDBのルートに接続する必要があります。PDBがアプリケーションPDBである場合、データベース・リンクはそのアプリケーション・ルートに接続する必要があります。

    • データベース・リンクによってPDBの現在のCDBに接続されるユーザーには、CREATE PLUGGABLE DATABASEまたはSYSOPER管理権限が必要です。

    • データベース・リンクがPDBの現在のCDBのCDBルートに接続する場合、データベース・リンクが接続するユーザーは、共通ユーザーである必要があります。

  • PDBの現在のCDBおよび再配置先のCDBのプラットフォームは、これらの要件を満たす必要があります。

    • endiannessが同じである必要があります。

    • ソース・プラットフォームにインストールされているデータベース・オプションは、ターゲット・プラットフォームにインストールされているデータベース・オプションと同じか、サブセットである必要があります。

  • PDBの再配置先のCDBのキャラクタ・セットがAL32UTF8でない場合、PDBの現在のCDBおよび再配置先のCDBには互換性のあるキャラクタ・セットおよび各国語キャラクタ・セットが必要です。互換性のために、キャラクタ・セットおよび各国語キャラクタ・セットは、『Oracle Databaseグローバリゼーション・サポート・ガイド』で指定されている要件をすべて満たす必要があります。

    PDBの再配置先のCDBのキャラクタ・セットがAL32UTF8である場合、この要件は適用されません。

  • アプリケーションPDBを作成している場合、再配置されるPDBのアプリケーション名およびバージョンは、再配置後のアプリケーションPDBを含むアプリケーション・コンテナのアプリケーション名およびバージョンと一致する必要があります。

PDBを再配置するには:

  1. SQL*Plusで、現在のコンテナが新しいPDBを含めるCDBのルートまたは新しいPDBを含めるアプリケーション・コンテナのアプリケーション・ルートであることを確認します。

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

  2. CREATE PLUGGABLE DATABASE文を実行します。FROM句でPDBを指定し、RELOCATE句を含めます。AVAILABILITY MAX句を指定して、PDBの古い場所から新しい場所に接続をリダイレクトします。他の句が必要な場合はそれらを指定します。

    再配置したPDBはマウント・モードになり、そのステータスはRELOCATINGです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。 「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  4. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

PDBの再配置時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

例38-40 リモートCDBからのPDBの再配置

この例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

この例では、様々な要因に基づき、pdb1という名前のPDBをリモートCDBから再配置します。この例では、次の要因を想定しています。

  • 現行ユーザーは、PDBの再配置先となるCDBのルートでCREATE PLUGGABLE DATABASEシステム権限を持っています。

  • PDBの現在のCDBへのデータベース・リンク名はmycdbです。このデータベース・リンクは、次のSQL文を使用て作成されました。

    CREATE PUBLIC DATABASE LINK mycdb CONNECT TO c##myadmin IDENTIFIED BY password USING 'MYCDB';

    共通ユーザーc##myadminは、現在PDBを含んでいるCDB内のSYSOPER管理権限とCREATE PLUGGABLE DATABASEシステム権限を持っています。

  • PATH_PREFIX句は必要ありません。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所に移動されます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • ソースPDBから再配置されたPDBに接続を自動的に再配置する必要があります。したがって、AVAILABILITY MAX句が含まれます。

前述の要因に基づき、次の文はpdb1 PDBをリモートCDBから現在のCDBに再配置します。

CREATE PLUGGABLE DATABASE pdb1 FROM pdb1@mycdb RELOCATE AVAILABILITY MAX;

38.6 CDBへの切断されたPDBの接続によるPDBの作成

切断されたPDBをCDBに接続することで、PDBを作成できます。

38.6.1 切断されたPDBの接続について

この手法では、切断されたPDBを接続します。この手法では、PDBを記述しているXMLメタデータ・ファイル、およびPDBに関連付けられたファイルを使用して、CDBに接続します。これらのファイルは、別々であってもよく、または単一の圧縮.pdbアーカイブ・ファイルに含めることもできます。

XMLメタデータ・ファイルを指定するか、.pdb拡張子のある圧縮されたアーカイブ・ファイルを指定して、PDBを接続できます。アーカイブ・ファイルにはXMLメタデータ・ファイルとPDBのファイル(データファイルやウォレット・ファイルなど)が含まれます。CREATE PLUGGABLE DATABASE文のUSING句では、XMLメタデータ・ファイルまたは.pdbアーカイブ・ファイルを指定します。.pdbアーカイブ・ファイルが使用されておらず、USING句でXMLメタデータ・ファイルが指定されている場合、XMLメタデータ・ファイルにはPDBのファイルの場所へのフルパスが含まれます。USING句で.pdbアーカイブ・ファイルが指定され、XMLファイルが.pdbアーカイブ・ファイルに含まれる場合、XMLメタデータ・ファイルにはファイル名のみ含まれます。

図38-10は、この手法で新しいPDBがどのように作成されるかを示しています。

図38-10 切断されたPDBのCDBルートへの接続

図38-10の説明が続きます
「図38-10 切断されたPDBのCDBルートへの接続」の説明

図38-11に、この手法で新しいアプリケーションPDBをアプリケーション・コンテナに作成する方法を示します。

図38-11 切断されたPDBのアプリケーション・ルートへの接続

図38-11の説明が続きます
「図38-11 切断されたPDBのアプリケーション・ルートへの接続」の説明

切断されたPDBは、そのPDBについて記述したXMLファイルおよびPDBのファイル(データファイルやウォレット・ファイルなど)で構成されています。CREATE PLUGGABLE DATABASE文を使用して、切断されたPDBを接続できます。そのためには、PDBを記述しているXMLファイルまたは.pdbアーカイブ・ファイルを指定するUSING句を含める必要があります。

ソースCDBは、PDBが切断されたCDBです。ターゲットCDBは、PDBを接続するCDBです。ソースCDBとターゲットCDBは、同じCDBにすることも異なるCDBにすることもできます。

注意:

PDBの自動ダウングレードはサポートされていません。したがって、ソースCDBがターゲットCDBより上位のOracle Databaseリリースである場合は、PDBを接続できません。

切断されたPDBに接続する場合は、表38-3の切断されたPDBの接続に適用される質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

38.6.2 切断されたPDBの接続

切断されたPDBを接続する前に、前提条件を満たす必要があります。

切断されたPDBを接続するには、次の要件が満たされている必要があります。

  • 「PDBの準備」で説明している前提条件を満たします。

  • PDBを記述しているXMLファイルまたは.pdbアーカイブ・ファイルは、CDBにアクセスできる場所に存在する必要があります。

    USING句でXMLファイルまたは.pdbアーカイブ・ファイルを指定する必要があります。

    PDBのXMLファイルが使用できないか見つからない場合は、DBMS_PDB.RECOVERプロシージャを使用して、PDBのデータファイルでXMLファイルを生成できます。このプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • USING句にXMLファイル(.pdbファイルではなく)を指定する場合、PDBに関連付けられたファイル(データファイルやウォレット・ファイルなど)は、CDBにアクセスできる場所に存在している必要があります。

  • ソースCDBとターゲットCDBのプラットフォームは、次の要件を満たしている必要があります。

    • endiannessが同じである必要があります。

    • ソース・プラットフォームにインストールされているデータベース・オプションは、ターゲット・プラットフォームにインストールされているデータベース・オプションと同じか、サブセットである必要があります。

  • PDBが接続されるCDBのキャラクタ・セットがAL32UTF8でない場合、切断されたPDBを含んでいたCDBとターゲットCDBには互換性のあるキャラクタ・セットおよび各国語キャラクタ・セットが必要です。互換性のために、キャラクタ・セットおよび各国語キャラクタ・セットは、『Oracle Databaseグローバリゼーション・サポート・ガイド』で指定されている要件をすべて満たす必要があります。

    PDBが接続されるCDBのキャラクタ・セットがAL32UTF8である場合、この要件は適用されません。

  • アプリケーションPDBを作成している場合、切断されたPDBのアプリケーション名およびバージョンは、アプリケーションPDBを接続するアプリケーション・コンテナのアプリケーション名およびバージョンと一致する必要があります。

  • アプリケーションPDBを作成している場合、アプリケーションPDBはアプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットである必要があります。

    CDBのデータベース・キャラクタ・セットがAL32UTF8の場合、アプリケーション・コンテナのキャラクタ・セットおよび各国語キャラクタ・セットはCDBと異なっていても構いません。ただし、アプリケーション・コンテナ内のすべてのアプリケーションPDBには、アプリケーション・コンテナと同じキャラクタ・セットおよび各国語キャラクタ・セットが必要です。

これらの要件が満たされているかどうかを判断するために、DBMS_PDB.CHECK_PLUG_COMPATIBILITYファンクションを使用できます。次の手順のステップ2では、このファンクションの使用方法を示しています。

PDBをプラグインするには:

  1. SQL*Plusで、現在のコンテナがPDBをプラグインするCDBのルートまたはアプリケーション・ルートであることを確認します。

    現在のコンテナがCDBルートの場合、PDBはCDBに作成されます。現在のコンテナがアプリケーション・ルートの場合、アプリケーションPDBはアプリケーション・コンテナ内に作成されます。

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

  2. (オプション)DBMS_PDB.CHECK_PLUG_COMPATIBILITYファンクションを実行して、切断されたPDBがCDBと互換性があるかどうかを確認します。

    1. PDBがまだ切断されていない場合は、DBMS_PDB.DESCRIBEプロシージャを実行して、そのPDBを記述するXMLファイルを作成します。

      PDBがすでに切断されている場合は、ステップ2.bに進みます。

      たとえば、salespdb.xmlという名前のXMLファイルを/disk1/oracleディレクトリに生成し、次のプロシージャを実行します。

      BEGIN
        DBMS_PDB.DESCRIBE(
          pdb_descr_file => '/disk1/oracle/salespdb.xml',
          pdb_name       => 'SALESPDB');
      END;
      /
      

      PDBがリモートCDBに存在している場合は、pdb_nameパラメータに@database_link_nameを含めることができます。database_link_nameは、リモートCDBまたはPDBへの有効なデータベース・リンクの名前です。たとえば、リモートCDBへのデータベース・リンクの名前がrcdbの場合、pdb_name値にSALESPDB@rcdbと設定します。

    2. DBMS_PDB.CHECK_PLUG_COMPATIBILITYファンクションを実行します。

      このファンクションを実行する場合は、次のパラメータを設定します。

      - pdb_descr_file: このパラメータをXMLファイルへのフルパスに設定します。

      - pdb_name: 新しいPDBの名前を指定します。このパラメータを省略した場合は、XMLファイル内のPDB名が使用されます。

      たとえば、/disk1/usr/salespdb.xmlファイルで記述されているPDBが現在のCDBと互換性があるかどうかを確認するには、次のPL/SQLブロックを実行します。

      SET SERVEROUTPUT ON
      DECLARE
        compatible CONSTANT VARCHAR2(3) := 
          CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
                 pdb_descr_file => '/disk1/usr/salespdb.xml',
                 pdb_name       => 'SALESPDB')
          WHEN TRUE THEN 'YES'
          ELSE 'NO'
      END;
      BEGIN
        DBMS_OUTPUT.PUT_LINE(compatible);
      END;
      /
      

      出力がYESの場合はPDBに互換性があり、次のステップに進むことができます。

      出力がNOの場合はPDBに互換性がなく、PDB_PLUG_IN_VIOLATIONSビューをチェックして、互換性がない理由を確認できます。

    注意:

    .pdbアーカイブ・ファイルはpdb_descr_fileパラメータで指定できます。
  3. PDBが切断されていない場合は、切断します。

    「CDBからのPDBの切断」を参照してください。

  4. CREATE PLUGGABLE DATABASE文を実行し、USING句でXMLファイルまたは.pdbアーカイブ・ファイルを指定します。他の句が必要な場合はそれらを指定します。

    「切断されたPDBの接続の例」を参照してください。

    作成したPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。 「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  6. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

切断されたPDBの接続の例

次の例では、様々な要因に基づき、/disk1/usr/salespdb.xmlファイルまたは/disk1/usr/sales.pdbファイルを使用して、salespdbという名前の切断されたPDBを接続します。

各例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBに作成されます。

  • 現在のコンテナがアプリケーション・ルートの場合、新しいアプリケーションPDBはアプリケーション・ルートのアプリケーション・コンテナ内に作成されます。

例38-41 NOCOPY句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • XMLファイルにファイルの現在の場所が正確に記述されています。したがって、SOURCE_FILE_NAME_CONVERTまたはSOURCE_FILE_DIRECTORY句は不要です。

  • ファイルは、正しい場所に存在します。したがって、NOCOPYが含まれています。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、XMLファイルで指定されている一時ファイルと同じ名前のファイルがあります。したがって、TEMPFILE REUSE句が必要です。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
  NOCOPY 
  TEMPFILE REUSE;

例38-42 AS CLONE句およびNOCOPY句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBに基づいています。したがって、AS CLONE句が必要です。AS CLONE句は、新しいPDBに一意の識別子があることを保証します。

  • PATH_PREFIX句は必要ありません。

  • XMLファイルにファイルの現在の場所が正確に記述されています。したがって、SOURCE_FILE_NAME_CONVERTまたはSOURCE_FILE_DIRECTORY句は不要です。

  • ファイルは、正しい場所に存在します。したがって、NOCOPYが含まれています。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、XMLファイルで指定されている一時ファイルと同じ名前のファイルがあります。したがって、TEMPFILE REUSE句が必要です。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb AS CLONE USING '/disk1/usr/salespdb.xml' 
  NOCOPY
  TEMPFILE REUSE;

例38-43 SOURCE_FILE_NAME_CONVERT、NOCOPYおよびSTORAGEの各句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • XMLファイルでは、ファイルの現在の場所が正確に記述されていません。したがって、SOURCE_FILE_NAME_CONVERT句またはSOURCE_FILE_DIRECTORY句が必要です。この例では、ファイルが/disk1/oracle/salesに存在することがXMLファイルで示されていますが、ファイルは/disk2/oracle/salesにあり、SOURCE_FILE_NAME_CONVERT句が使用されています。

  • ファイルは、正しい場所に存在します。したがって、NOCOPYが含まれています。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • ターゲットの場所に、XMLファイルで指定されている一時ファイルと同じ名前のファイルがあります。したがって、TEMPFILE REUSE句が必要です。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
  SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/')
  NOCOPY
  STORAGE (MAXSIZE 2G)
  TEMPFILE REUSE;

例38-44 COPY、PATH_PREFIXおよびFILE_NAME_CONVERTの各句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • パス接頭辞をPDBのディレクトリ・パスに追加する必要があります。したがって、PATH_PREFIX句が必要です。この例では、パス接頭辞/disk2/oracle/sales/をPDBのディレクトリ・オブジェクト・パスに追加しています。

  • XMLファイルにファイルの現在の場所が正確に記述されています。したがって、SOURCE_FILE_NAME_CONVERTまたはSOURCE_FILE_DIRECTORY句は不要です。

  • ファイルは、正しい場所に存在しません。したがって、COPYまたはMOVEが含まれている必要があります。この例では、ファイルはコピーされます。

    CREATE_FILE_DEST句が使用されておらず、Oracle Managed Filesが有効になっておらず、PDB_FILE_NAME_CONVERT初期化パラメータが設定されていません。したがって、FILE_NAME_CONVERT句が必要です。この例では、ファイルは/disk1/oracle/salesから/disk2/oracle/salesにコピーされます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
  COPY
  PATH_PREFIX = '/disk2/oracle/sales/'
  FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/');

例38-45 SOURCE_FILE_NAME_CONVERT、MOVE、FILE_NAME_CONVERTおよびSTORAGEの各句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • XMLファイルでは、ファイルの現在の場所が正確に記述されていません。したがって、SOURCE_FILE_NAME_CONVERT句またはSOURCE_FILE_DIRECTORY句が必要です。この例では、ファイルが/disk1/oracle/salesに存在することがXMLファイルで示されていますが、ファイルは/disk2/oracle/salesにあり、SOURCE_FILE_NAME_CONVERT句が使用されています。

  • ファイルは、PDBの正しい最終的な場所に存在しません。したがって、COPYまたはMOVEが含まれている必要があります。この例では、MOVEを指定してファイルを移動します。

    CREATE_FILE_DEST句が使用されておらず、Oracle Managed Filesが有効になっておらず、PDB_FILE_NAME_CONVERT初期化パラメータが設定されていません。したがって、FILE_NAME_CONVERT句が必要です。この例では、ファイルは/disk2/oracle/salesから/disk3/oracle/salesにコピーされます。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
  SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/')
  MOVE
  FILE_NAME_CONVERT = ('/disk2/oracle/sales/', '/disk3/oracle/sales/')
  STORAGE (MAXSIZE 2G);

例38-46 SOURCE_FILE_DIRECTORY、MOVE、FILE_NAME_CONVERTおよびSTORAGEの各句を使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • XMLファイルでは、ファイルの現在の場所が正確に記述されていません。したがって、SOURCE_FILE_NAME_CONVERT句またはSOURCE_FILE_DIRECTORY句が必要です。この例では、ファイルが/disk1/oracle/salesに存在することがXMLファイルで示されていますが、ファイルは/disk2/oracle/salesにあり、SOURCE_FILE_DIRECTORY句が使用されています。

  • ファイルは、PDBの正しい最終的な場所に存在しません。したがって、COPYまたはMOVEが含まれている必要があります。この例では、MOVEを指定してファイルを移動します。

    CREATE_FILE_DEST句が使用されておらず、Oracle Managed Filesが有効になっておらず、PDB_FILE_NAME_CONVERT初期化パラメータが設定されていません。したがって、FILE_NAME_CONVERT句が必要です。この例では、ファイルは/disk2/oracle/salesから/disk3/oracle/salesにコピーされます。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によってPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
  SOURCE_FILE_DIRECTORY = '/disk2/oracle/sales/'  
  MOVE
  FILE_NAME_CONVERT = ('/disk2/oracle/sales/', '/disk3/oracle/sales/')
  STORAGE (MAXSIZE 2G);

例38-47 アーカイブ・ファイルを使用して切断されたPDBを接続する方法

この例では、次の要因を想定しています。

  • 切断されたPDBはsales.pdbという名前の.pdbアーカイブ・ファイルです。アーカイブ・ファイルには、XMLメタデータ・ファイルおよびPDBのファイル(データファイルやウォレット・ファイルなど)が圧縮形式で含まれ、これらのファイルはCREATE PLUGGABLE DATABASE文の実行時に.pdbアーカイブ・ファイルの現在のディレクトリに抽出されます。

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PATH_PREFIX句は必要ありません。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属するすべての表領域が2GBを超えていない必要があります。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

前述の要因に基づき、次の文によってアーカイブ・ファイルを使用してPDBを接続します。

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/sales.pdb' 
  STORAGE (MAXSIZE 2G);

関連項目:

38.6.3 切断されたPDBの接続後

切断されたPDBの接続後に、ユーザーと表領域に関する特定のルールが適用されます。

切断されたPDBの接続後、次の内容が適用されます。

  • ソースPDBのデフォルト一時表領域を使用していたPDBのユーザーは、ターゲットPDBのデフォルト一時表領域を使用します。ソースPDB内のデフォルト以外の一時表領域を使用していたユーザーは、ターゲットPDB内の同じローカル一時表領域を引き続き使用します。「CDB内表領域の管理について」を参照してください。

  • ソースCDBに存在するが、ターゲットには存在しない、ユーザーが作成した共通ユーザーには、権限は共通して付与されていません。ただし、ターゲットCDBに共通ユーザーが存在し、PDBの共通ユーザーと同じ名前である場合、後者は前者にリンクされ、ターゲットCDBの共通ユーザーに付与された権限を持ちます。

    クローニングされたPDBまたは接続したPDBに、ターゲットCDBに存在しない共通のユーザー・アカウントがある場合、およびこのユーザーがPDB内のオブジェクトを所有していない場合、同期ステップ中にこのユーザーはOracle Databaseによって削除されます。そうでない場合、ユーザー・アカウントはターゲットPDBでロックされます。ロックされたアカウントに関しては、次の選択肢があります。

    • PDBをクローズし、ルートに接続し、同じ名前の共通ユーザー・アカウントを作成します。PDBを読取り/書込みモードでオープンすると、ユーザー・アカウントに共通して付与されているロールや権限の相違点が解決され、アカウントをロック解除できます。ユーザー・アカウントに対してローカルに付与されている権限やロールは、このプロセス中も変更されません。

    • PDBに新しいローカル・ユーザー・アカウントを作成し、データ・ポンプを使用して、ロックされたユーザーのデータを新しいローカル・ユーザーのスキーマにエクスポート/インポートできます。

    • ユーザー・アカウントをロックされたままにします。

    • ユーザー・アカウントを削除します。

関連項目:

38.7 プロキシPDBとしてのPDBの作成

リモートCDBのPDBを参照することで、PDBをプロキシPDBとして作成できます。

38.7.1 プロキシPDBの作成について

プロキシPDBはリモートCDB内の別のPDBへのアクセスを提供します。CREATE PLUGGABLE DATABASE文を使用して、別のPDBを参照することでプロキシPDBを作成できます。

この手法では、参照先PDBと呼ばれる別のCDBのPDBを参照することでプロキシPDBを作成します。リモートPDBのローカル・コンテンツが必要な場合は、プロキシPDBを使用できます。また、異なるCDB内のアプリケーション・コンテナが同じアプリケーションを持つ場合、それらのアプリケーション・ルートはプロキシPDBを使用して同期を維持できます。

この手法を使用するには、プロキシPDBを含めるCDBでCREATE PLUGGABLE DATABASE文を実行します。AS PROXY句を含めて、プロキシPDBを作成していることを指定する必要があります。プロキシPDBが参照しているPDBを指定するFROM句を含める必要もあります。

CREATE PLUGGABLE DATABASE文のFROM句で、参照先PDBの現在の場所へのデータベース・リンクを指定する必要があります。データベース・リンクはプロキシPDBを含むCDBのルートに作成する必要があり、データベース・リンクはリモートCDBのルートまたはリモート参照先PDBに接続します。

図38-12は、この手法でリモートCDB内のPDBを参照するプロキシPDBがどのように作成されるかを示しています。

図38-12 リモート・プロキシPDBの作成

図38-12の説明が続きます
「図38-12 リモート・プロキシPDBの作成」の説明

アプリケーション・コンテナにプロキシPDBを作成できます。そのためには、参照先PDBがアプリケーション・ルートまたは別のCDBのアプリケーション・コンテナ内のアプリケーションPDBである必要があります。データベース・リンクはプロキシPDBを含むアプリケーション・コンテナのルートに作成する必要があり、データベース・リンクはリモート・アプリケーション・コンテナのルートまたはリモート参照先アプリケーションPDBに接続します。

図38-13に、この手法でアプリケーション・コンテナ内のリモート参照先PDBに基づいてプロキシPDBをアプリケーション・コンテナに作成する方法を示します。

図38-13 アプリケーション・コンテナ内のリモート・プロキシPDBの作成

図38-13の説明が続きます
「図38-13 アプリケーション・コンテナ内のリモート・プロキシPDBの作成」の説明

プロキシPDBを作成する場合は、表38-3のプロキシPDBの作成に適用される質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

SQL文とプロキシPDB

ALTER PLUGGABLE DATABASEおよびALTER DATABASE文を除外すると、プロキシPDBが現在のコンテナである場合、プロキシPDBの実行のために送信されるすべてのSQL文は参照先PDBに送信され、参照先PDBで実行されます。リモート実行の結果はプロキシPDBに返されます。たとえば、データ定義言語(DDL)文、データ操作言語(DML)文およびプロキシPDBで実行される問合せは、実行のために参照先PDBに送信され、結果はプロキシPDBに返されます。

プロキシPDBが現在のコンテナであり、ALTER PLUGGABLE DATABASEおよびALTER DATABASE文が実行される場合、これらの文はプロキシPDBにのみ影響します。これらは実行のために参照先PDBに送信されません。同様に、現在のコンテナが、プロキシPDBが属するルートである場合、ALTER PLUGGABLE DATABASE文はプロキシPDBにのみ影響します。たとえば、CDBルート、アプリケーション・ルートまたはプロキシPDBで実行されたALTER PLUGGABLE DATABASE文は、プロキシPDBをオープンまたはクローズできますが、この文は参照先PDBをオープンまたはクローズしません。

プロキシPDBおよびデータベース・リンク

前に説明したように、データベース・リンクはプロキシPDBの作成時に常に必要です。ただし、プロキシPDBの作成後、作成時に指定したデータベース・リンクはプロキシPDBで使用されなくなります。かわりに、プロキシPDBは参照先PDBと直接通信します。

この直接通信は、参照先PDBを含むCDBのリスナーのポート番号とホスト名を必要とします。プロキシPDBの作成時に、プロキシPDBはデフォルトで次の値を使用します。

  • リスナー・ポート番号: 1521

    参照先PDBのリスナーがデフォルト・ポート番号を使用しない場合は、PORT句を使用して、リスナーのポート番号を指定する必要があります。プロキシPDBの作成時にポート番号を指定するか、プロキシPDBを変更してポート番号を変更できます。

  • リスナー・ホスト名: 参照先PDBを含むCDBのホスト名

    参照先PDBのリスナーがデフォルト・ホスト名を使用しない場合は、HOST句を使用して、リスナーのホスト名を指定する必要があります。プロキシPDBの作成時にホスト名を指定するか、プロキシPDBを変更してホスト名を変更できます。

プロキシPDBおよび認証

プロキシPDBのセッションでは、パスワード認証のみがサポートされます。

38.7.2 プロキシPDBの作成

別のCDBのPDBを参照することで、プロキシPDBを作成できます。

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

  • 「PDBの準備」で説明している前提条件を満たします。

  • 現行ユーザーは、プロキシPDBが作成されているCDBのルートでCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • 参照先PDBを含むCDBはローカルUNDOモードである必要があります。

    「CDB UNDOモードについて」を参照してください。

  • 参照先PDBを含むCDBはARCHIVELOGモードである必要があります。

  • プロキシPDBの作成時には、参照先PDBが読取り/書込みオープン・モードである必要があります。参照先PDBのオープン・モードは、プロキシPDBの作成後に変更できます。

  • データベース・リンクは、プロキシPDBが作成されているCDBのルートから参照先PDBの場所への接続を有効にする必要があります。データベース・リンクは、リモートCDBのルート、またはリモートPDBのいずれかに接続できます。

  • データベース・リンクが、参照先PDBを含むリモートCDBのルートに接続する場合、データベース・リンクが接続するユーザーは、共通ユーザーである必要があります。

  • データベース・リンクが参照先PDBに接続する場合、データベース・リンクが参照先PDBで接続するユーザーは、CREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • プロキシPDBをアプリケーション・コンテナに作成している場合は、次の前提条件が適用されます。
    • 参照先PDBがアプリケーション・ルートまたはアプリケーション・コンテナ内のアプリケーションPDBである必要があります。

    • プロキシPDBのアプリケーション・コンテナのアプリケーション名およびバージョンは、参照先PDBのアプリケーション名およびバージョンと一致する必要があります。

    • プロキシPDBがアプリケーション・コンテナに作成されている場合、データベース・リンクは、プロキシPDBが作成されているアプリケーション・コンテナのルートから参照先PDBの場所への接続を有効にする必要があります。データベース・リンクは、リモート・アプリケーション・コンテナのルート、またはリモート・アプリケーションPDBのいずれかに接続できます。

    • データベース・リンクが、参照先PDBを含むリモート・アプリケーション・コンテナのルートに接続する場合、データベース・リンクが接続するユーザーは、アプリケーション共通ユーザーである必要があります。

    • データベース・リンクが参照先アプリケーションPDBに接続する場合、データベース・リンクが参照先アプリケーションPDBで接続するユーザーは、CREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

    注意:

    アプリケーション・コンテナ内の参照先PDBに基づいてプロキシPDBをCDBルートに作成できます。

プロキシPDBを作成するには:

  1. SQL*Plusで、現在のコンテナがCDBルートまたはプロキシPDBが作成されているアプリケーション・ルートであることを確認します。

    現在のコンテナがCDBルートの場合、プロキシPDBはCDBに作成されます。現在のコンテナがアプリケーション・ルートの場合、プロキシPDBはアプリケーション・コンテナ内に作成されます。

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

  2. CREATE PLUGGABLE DATABASE文を実行します。AS PROXY句を指定し、FROM句でデータベース・リンク名を指定して参照先PDBを指定します。他の句が必要な場合はそれらを指定します。

    作成したプロキシPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。 「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  4. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

プロキシPDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

例38-48 リモート・プロキシPDBの作成

この例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

この例では、様々な要因に基づいてpdb1という名前のリモート・プロキシPDBを作成します。この例では、次の要因を想定しています。

  • 参照先PDBのCDBへのデータベース・リンク名はpdb1_linkです。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。SYSTEMファイルおよびSYSAUXファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

前述の要因に基づき、次の文によってpdb1プロキシPDBが作成されます。

CREATE PLUGGABLE DATABASE pdb1 AS PROXY FROM pdb1@pdb1_link;

38.8 非CDBを使用したPDBの作成

非CDBを様々な方法で使用して、PDBを作成できます。

38.8.1 非CDBを使用したPDBの作成について

非CDBをPDBに移動できます。

このタスクは、次の方法で実行できます。

  • 非CDBのクローニングによるPDBの作成

    Oracle Database 12cリリース1 (12.1.0.2)からは、非CDBをクローニングしてPDBを作成できます。この方法は、非CDBを使用してPDBを作成する最も簡単な方法ですが、非CDBのファイルを新しい場所にコピーする必要があります。

    手順は、「既存のPDBまたは非CDBのクローニングによるPDBの作成」を参照してください。

    CDBと非CDBの両方でOracle Database 12cリリース1 (12.1.0.2)以上が実行されている必要があります。現在の非CDBでOracle Database 12cリリース1 (12.1.0.2)よりも前のOracle Databaseリリースを使用している場合、この手法を使用するには、非CDBをOracle Database 12cリリース1 (12.1.0.2)にアップグレードする必要があります。アップグレードの詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

  • DBMS_PDBパッケージを使用してXMLメタデータ・ファイルを生成します。

    XMLメタデータ・ファイルで非CDBのデータベース・ファイルを記述しているため、その非CDBをCDBに接続できます。

    この方法は、非CDBをクローニングしてPDBを作成するよりもステップが多くなりますが、場合によっては、非CDBファイルを移動せずに非CDBを使用してPDBを作成することが可能になります。

    「非CDBでのDBMS_PDBパッケージの使用」では、この技術の使用について説明しています。

    この手法を使用するには、非CDBがOracle Database 12cの非CDBである必要があります。現在の非CDBでOracle Database 12cよりも前のOracle Databaseリリースを使用している場合、この手法を使用するには、非CDBをOracle Database 12cにアップグレードする必要があります。アップグレードの詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

  • Oracle Data Pumpエクスポート/インポートを使用します。

    非CDBからデータをエクスポートし、PDBにインポートします。

    インポート時に、ユーザー名の後にPDBの接続識別子を指定します。たとえば、PDBの接続識別子がhrpdbである場合は、Oracle Data Pumpインポート・ユーティリティを実行するとき、次のように入力します。

    impdp user_name@hrpdb ...
    

    非CDBのOracle DatabaseリリースがOracle Database 11g リリース2 (11.2.0.3)以上である場合、完全なトランスポータブル・エクスポート/インポートを使用して、データを移動できます。Oracle Database 11g リリース2 (11.2.0.3)またはOracle Database 11g以上のデータベースからOracle Database 12cに非CDBをトランスポートする場合、VERSIONデータ・ポンプ・エクスポート・パラメータを12.0.0.0.0以上に設定する必要があります。

    非CDBのOracle DatabaseリリースがOracle Database 11g リリース2 (11.2.0.3)より前である場合、トランスポータブル表領域を使用してデータを移動するか、または完全なデータベース・エクスポート/インポートを実行できます。

    「データのトランスポート」を参照してください。

  • GoldenGateレプリケーションを使用します。

    非CDBのデータをPDBにレプリケートします。PDBが非CDBに追い付いている場合は、そのPDBにフェイルオーバーします。

    Oracle GoldenGateのドキュメントを参照してください。

38.8.2 非CDBでのDBMS_PDBパッケージの使用

DBMS_PDBパッケージを非CDBで使用して、非CDBをCDBに接続できます。

38.8.2.1 非CDBでのDBMS_PDBパッケージの使用について

この手法では、DBMS_PDB.DESCRIBEプロシージャを使用して非CDBからPDBを作成します。

非CDBでDBMS_PDB.DESCRIBEプロシージャを実行して、非CDBのデータベース・ファイルを記述するXMLファイルを生成します。XMLファイルが生成された後、切断されたPDBを接続するのと同じ方法で、非CDBを接続できます。具体的には、CREATE PLUGGABLE DATABASE文でUSING句を指定します。非CDBがCDBに接続された場合、その非CDBはPDBになります。

図38-14 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続

図38-14の説明が続きます
「図38-14 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続」の説明

アプリケーション・コンテナに新しいアプリケーションPDBを作成するのと同じ手法を使用できます。

注意:

この手法を使用するには、非CDBがOracle Database 12cの非CDBである必要があります。

38.8.2.2 DBMS_PDBパッケージを使用して切断されたPDBを作成する方法

DBMS_PDB.DESCRIBEプロシージャを使用して非CDBをPDBに移動できます。

DBMS_PDBパッケージを使用して非CDBをPDBに移動するには:

  1. CDBが存在しない場合は作成します。

    「CDBの作成および構成」を参照してください。

  2. 非CDBがトランザクション上一貫した状態にあることを確認し、読取り専用モードにします。

    「データベースを読取り専用モードでオープンする方法」を参照してください。

  3. 非CDBに接続し、DBMS_PDB.DESCRIBEプロシージャを実行して、非CDBを記述するXMLファイルを作成します。

    現行ユーザーには、SYSDBA管理権限が必要です。ユーザーは、接続時にAS SYSDBAを使用して権限を行使する必要があります。

    たとえば、ncdb.xmlという名前のXMLファイルを/disk1/oracleディレクトリに生成し、次のプロシージャを実行します。

    BEGIN
      DBMS_PDB.DESCRIBE(
        pdb_descr_file => '/disk1/oracle/ncdb.xml');
    END;
    /
    

    このプロシージャが正常に完了した後、XMLファイルおよび非CDBのデータベース・ファイルを使用して、非CDBをCDBに接続できます。

  4. DBMS_PDB.CHECK_PLUG_COMPATIBILITYファンクションを実行して、非CDBがCDBと互換性があるかどうかを確認します。

    このファンクションを実行する場合は、次のパラメータを設定します。

    - pdb_descr_file: このパラメータをXMLファイルへのフルパスに設定します。

    - pdb_name: 新しいPDBの名前を指定します。このパラメータを省略した場合は、XMLファイル内のPDB名が使用されます。

    たとえば、/disk1/oracle/ncdb.xmlファイルで記述されている非CDBが現在のCDBと互換性があるかどうかを確認するには、次のPL/SQLブロックを実行します。

    SET SERVEROUTPUT ON
    DECLARE
      compatible CONSTANT VARCHAR2(3) := 
        CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
               pdb_descr_file => '/disk1/oracle/ncdb.xml',
               pdb_name       => 'NCDB')
        WHEN TRUE THEN 'YES'
        ELSE 'NO'
    END;
    BEGIN
      DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /
    

    出力がYESの場合は非CDBに互換性があり、次のステップに進むことができます。

    出力がNOの場合は非CDBに互換性がなく、PDB_PLUG_IN_VIOLATIONSビューをチェックして、互換性がない理由を確認できます。続行する前に、すべての違反を修正する必要があります。たとえば、バージョンまたはパッチの不一致は、アップグレードまたはデータパッチのユーティリティを実行して解決する必要があります。違反を修正した後に、DBMS_PDB.CHECK_PLUG_COMPATIBILITYを再実行して、非CDBがCDBと互換性があることを確認します。

  5. 非CDBを停止します。

    「データベースの停止」を参照してください。

  6. 非CDBを接続します。

    非CDBを接続するには、「CDBへの切断されたPDBの接続によるPDBの作成」の指示に従います。

    たとえば、次のSQL文は非CDBをプラグインし、そのファイルを新しい場所にコピーして、非CDBからtbs3ユーザー表領域のみを含めます。

    CREATE PLUGGABLE DATABASE ncdb USING '/disk1/oracle/ncdb.xml'
      COPY
      FILE_NAME_CONVERT = ('/disk1/oracle/dbs/', '/disk2/oracle/ncdb/')
      USER_TABLESPACES=('tbs3');
    

    違反がない場合は、新しいPDBをオープンしないでください。ステップ8でオープンします。

    USER_TABLESPACES句を使用すると、非CDB内の複数のテナントに使用されたデータを異なるPDBに分けることができます。この句を指定したCREATE PLUGGABLE DATABASE文を複数使用して、非CDBに存在する他の表領域のデータを含む別のPDBを作成できます。

  7. ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlスクリプトを実行します。このスクリプトは、PDBを初めてオープンする前に実行する必要があります。「非CDBを使用したPDBの作成」を参照してください。

    PDBが非CDBでない場合は、noncdb_to_pdb.sqlスクリプトを実行する必要はありません。

    noncdb_to_pdb.sqlスクリプトを実行するには、次のステップを実行します。

    1. PDBにアクセスします。

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

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

    2. noncdb_to_pdb.sqlスクリプトを次のように実行します。

      @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
      

    スクリプトによって、PDBのオープン、変更の実行、および変更の完了時にPDBのクローズが行われます。

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

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

    詳細は、「PDBのオープン・モードの変更」を参照してください。

  9. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    PDBのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

注意:

PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーの詳細を確認できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

38.9 CDBからのPDBの切断

PDBをCDBから切断できます。

38.9.1 PDBの切断について

PDBを切断すると、CDBへのPDBの関連付けが解除されます。PDBを異なるCDBに移動する場合、後で使用できるようにPDBをアーカイブする場合、およびPDBを使用する必要がなくなった場合は、PDBを切断します。

PDBを切断するには、CDBルートまたはアプリケーション・ルートに接続し、ALTER PLUGGABLE DATABASE文を使用して、XMLファイルまたは.pdbファイルを指定します。XMLファイル(.xml extension)を指定すると、それには切断後にPDBに関するメタデータが含まれます。このSQL文によってXMLファイルが作成され、このXMLファイルには、ターゲットCDBでCREATE PLUGGABLE DATABASE文を使用してPDBに接続できるようにするのに必要な情報が含められます。.pdbファイルを指定すると、それにはPDBについて記述したXMLファイルおよびPDBで使用されるファイル(データファイルやウォレット・ファイルなど)の圧縮アーカイブが含まれます。.pdbファイルにより、単一の圧縮されたファイル(複数ファイルではない)を新しい場所にコピーしてPDBをCDBに接続できます。

次の図では、この手法を使用してアプリケーション・コンテナからアプリケーションPDBを切断する方法を示しています。

PDBは切断する前にクローズする必要があります。PDBを切断すると、切断されたPDBはマウント・モードになります。この切断操作によって、PDBのデータファイルに対して、PDBが正常に切断されたなどの、記録対象となるなんらかの変更が加えられます。依然としてCDBの一部であるため、切断されたPDBはCDB全体のRMANバックアップに含まれています。このような方法によるバックアップは、切断されたPDBが将来必要になった場合に備えてアーカイブするのに便利です。

PDBをCDBから完全に除去するために、PDBを削除できます。切断されたPDBに対してサポートされている唯一の操作は、PDBの削除です。PDBを再度同じCDBに接続できるようにするには、CDBから削除しておく必要があります。PDBは、CDBに接続している場合にのみ使用できます。

注意:

アプリケーション・コンテナは、それに属するアプリケーションPDBがない場合にのみ切断できます。

関連項目:

38.9.2 PDBの切断

PDBを切断する場合は、前提条件を満たす必要があります。

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

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

  • PDBは、少なくとも1回はオープンしている必要があります。

注意:

透過的データ暗号化で暗号化されているデータが含まれたPDBを切断する場合は、『Oracle Database Advanced Securityガイド』の指示に従います。

PDBを切断するには:

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

    PDBがCDBルートに接続される場合、現在のコンテナはCDBルートである必要があります。PDBがアプリケーション・ルートに接続される場合、現在のコンテナはアプリケーション・ルートである必要があります。

    アプリケーション・コンテナを切断している場合、現在のコンテナはCDBルートである必要があり、アプリケーション・コンテナにはそれに接続されているアプリケーションPDBがないようにしてください。

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

  2. PDBをクローズします。

    Oracle Real Application Clusters (Oracle RAC)環境では、PDBがすべてのインスタンスでクローズされている必要があります。

  3. UNPLUG INTO句を使用してALTER PLUGGABLE DATABASE文を実行し、切断するPDB、およびPDBのXMLメタデータ・ファイルまたは.pdbの名前と場所を指定します。

例38-49 XMLメタデータ・ファイルへのPDB salespdbの切断

次のALTER PLUGGABLE DATABASE文により、PDB salespdbが切断され、salespdb.xmlメタデータ・ファイルが/oracle/data/ディレクトリに作成されます。

ALTER PLUGGABLE DATABASE salespdb UNPLUG INTO '/oracle/data/salespdb.xml';

例38-50 アーカイブ・ファイルへのPDB salespdbの切断

次のALTER PLUGGABLE DATABASE文により、PDB salespdbが切断され、sales.pdbアーカイブ・ファイルが/oracle/data/ディレクトリに作成されます。sales.pdbアーカイブ・ファイルは、XMLメタデータ・ファイルとPDBのファイル(データファイルやウォレット・ファイルなど)を含む圧縮ファイルです。

ALTER PLUGGABLE DATABASE salespdb UNPLUG INTO '/oracle/data/sales.pdb';

38.10 PDBの削除

DROP PLUGGABLE DATABASE文によりPDBが削除されます。PDBをあるCDBから別のCDBに移動する場合、またはPDBが必要でなくなった場合は、PDBを削除できます。

PDBを削除すると、削除されたPDBへのすべての参照を削除するようにCDBの制御ファイルが変更されます。PDBに関連付けられているアーカイブREDOログ・ファイルおよびバックアップは削除されませんが、Oracle Recovery Manager (RMAN)を使用して削除できます。

PDBを削除する場合は、次のいずれかの句を使用して、PDBのデータファイルを保持または削除できます。

  • KEEP DATAFILESはデフォルトであり、データファイルを保持します。

    KEEP DATAFILESが指定されていても、PDBの一時ファイルは不要になったため削除されます。

    KEEP DATAFILESが指定されている場合は、PDBを切断する必要があります。

  • INCLUDING DATAFILESでは、ディスクからデータファイルを削除します。

    PDBがSNAPSHOT COPY句を使用して作成された場合、PDBを削除する際にINCLUDING DATAFILESを指定する必要があります。

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

  • PDBは、マウント・モードであるか、または切断されている必要があります。

    「PDBのオープン・モードの変更」を参照してください。

    「CDBからのPDBの切断」を参照してください。

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

注意:

これは、破壊的な操作です。

PDBを削除するには:

  1. SQL*Plusで、現在のコンテナがCDBルートであるか、アプリケーションPDBの場合はアプリケーションPDBを含むアプリケーション・ルートであることを確認します。

    PDBがCDBルートに接続される場合、現在のコンテナはCDBルートである必要があります。PDBがアプリケーション・ルートに接続される場合、現在のコンテナはアプリケーション・ルートまたはCDBルートである必要があります。

    アプリケーション・コンテナを削除している場合、現在のコンテナはCDBルートである必要があり、アプリケーション・コンテナにはそれに接続されているアプリケーションPDBがないようにしてください。

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

  2. DROP PLUGGABLE DATABASE文を実行し、削除するPDBを指定します。

例38-51 データファイルは保持したままPDB salespdbを削除する方法

DROP PLUGGABLE DATABASE salespdb
  KEEP DATAFILES;

例38-52 PDB salespdbおよびそのデータファイルを削除する方法

DROP PLUGGABLE DATABASE salespdb
  INCLUDING DATAFILES;