プライマリ・コンテンツに移動
Oracle® Database管理者ガイド
12cリリース1 (12.1)
B71301-11
目次へ移動
目次
索引へ移動
索引

前
次

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

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

38.1 PDBの作成および削除の概要

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

注意:

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

  • Oracle Database 12cリリース1 (12.1)では、シードを含め、最大253個のPDBをCDBに含めることができます。

関連項目:

38.1.1 PDBを作成する手法

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

PDBの作成は、PDBをCDBに関連付けるプロセスです。PDBをCDBの一部として使用する必要がある場合に、PDBを作成します。

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

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

手法 説明 詳細情報

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

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

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

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

ソースのPDBまたは非CDBをクローニングし、そのクローンをCDBに接続してPDBを作成します。ソースは、ローカルCDBのPDB、リモートCDBのPDB、非CDBのいずれでもかまいません。この手法では、ソースに関連付けられているファイルを新しい場所にコピーし、コピーしたファイルを新しいPDBに関連付けます。

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

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

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

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

非CDBを使用したPDBの作成

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

「非CDBを使用したPDBの作成」

表38-1で説明しているすべての手法では、CREATE PLUGGABLE DATABASE文を使用してPDBを作成します。これらの手法は、コピーおよび接続という2つの主要なカテゴリに分類されます。図38-1は、PDBを作成するためのオプションを表します。

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

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

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

注意:

非CDBのクローニングによるPDBの作成は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

38.1.2 CREATE PLUGGABLE DATABASE文

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

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

関連項目:

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

38.1.2.1 ストレージ制限

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

STORAGE句は、PDBに属するすべての表領域で使用できる記憶域の量を指定します。MAXSIZEおよびsize句を使用して制限を指定するか、またはMAXSIZEUNLIMITEDに設定して制限がないことを指定します。

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によって作成されたファイルには影響しません。

関連項目:

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

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

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/')

関連項目:

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

  • 例43-7

  • Oracle Managed Filesの使用

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

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に関連付けられたすべての相対ディレクトリ・オブジェクト・パスのプリフィックスとして使用される絶対パス。

  • ディレクトリ・オブジェクトに関連付けられているパスを絶対パスとして取り扱うことを示すNONEPATH_PREFIX句の省略は、NONEの指定と同じです。

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

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

ディレクトリ・オブジェクトに絶対パスが使用されている場合、PATH_PREFIX句は無視されます。

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

例38-5 PATH_PREFIX句

このPATH_PREFIX句では、PDBと関連付けられているすべての相対ディレクトリ・オブジェクト・パスが、/disk1/oracle/dbs/salespdbディレクトリと相対的になるようにします。

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

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

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

切断されているPDBをCDBに接続するときに、CREATE PLUGGABLE DATABASE ... USING文でPDBのファイルを識別できる必要があります。

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

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パターンの指定が現実的でない場合に使用すると便利です。

これらの句は相互に排他的です。単一のCREATE PLUGGABLE DATABASE文で両方の句を使用することはできません。

これらの句は、CREATE PLUGGABLE DATABASE ... USING文を使用して、切断されているPDBを接続する場合にのみ使用できます。

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句は、USING句とともにCREATE PLUGGABLE DATABASE文でのみ使用できます。したがって、この句は、切断されている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/')

関連項目:

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

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句は、USING句とともにCREATE PLUGGABLE DATABASE文でのみ使用できます。したがって、この句は、切断されているPDBを接続する場合にのみ使用できます。

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

例38-7 SOURCE_FILE_DIRECTORY句

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

SOURCE_FILE_DIRECTORY = '/oracle/pdb5/'

関連項目:

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

38.1.2.5 SERVICE_NAME_CONVERT句

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句は、シードからPDBを作成するCREATE PLUGGABLE DATABASE文を除く任意の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文のUSER_TABLESPACES句では、新しいPDBで使用できる表領域を指定します。

注意:

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

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

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

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

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

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

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

この句で除外される表領域は新しいPDBでオフラインとなり、このような表領域に属するデータファイルはすべて無名でオフラインとなります。

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

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

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

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

USER_TABLESPACES=('tbs2');

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

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

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

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

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

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

38.1.2.8 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-13 PDBのLOGGING属性の指定

LOGGING

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

NOLOGGING

関連項目:

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

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

注意:

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

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

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

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

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

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

STANDBYS=ALL

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

STANDBYS=NONE

関連項目:

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

38.1.2.10 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-17 NO DATA句

NO DATA

関連項目:

『Oracle Database SQL言語リファレンス』

38.2 PDBの準備

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

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

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

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

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

  • 現在のユーザーは、現在のコンテナがルートである共通ユーザーである必要があります。

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

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

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

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

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

CREATE PLUGGABLE DATABASE文により、シードのファイルを使用してCDBにPDBを作成できます。

関連項目:

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

38.3.1 シードからPDBを作成する方法の概要

CREATE PLUGGABLE DATABASE文により、シードのファイルを使用して新しいPDBを作成できます。

この文では、これらのファイルを新しい場所にコピーし、新しいPDBに関連付けます。図38-2は、この手法で新しいPDBがどのように作成されるかを示しています。

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

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

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

シードを使用してPDBを作成する場合は、表38-3の質問に対処する必要があります。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

表38-3 シードからPDBを作成する場合の句

質問 はい いいえ

STORAGE

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

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

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

DEFAULT TABLESPACE

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

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

Oracle Databaseは、smallfile表領域を作成し、その後、この表領域に対して、別の永続表領域を指定していない、SYSTEM以外のユーザーを割り当てます。

DEFAULT TABLESPACE句を省略します。

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

PATH_PREFIX

PATH_PREFIX句を使用し、PDBと関連付けられているすべての相対ディレクトリ・オブジェクト・パスを、指定のディレクトリまたはそのサブディレクトリに対する相対パスであるとみなしますか。

ディレクトリ・オブジェクトに絶対パスが使用されている場合、PATH_PREFIX句は無視されます。

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

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

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

FILE_NAME_CONVERT

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

ソース・ファイルは、シードに関連付けられたファイルです。

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

FILE_NAME_CONVERT句を省略します。

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

  • CREATE_FILE_DEST

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

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

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

CREATE_FILE_DEST

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

ソース・ファイルは、シードに関連付けられたファイルです。

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

CREATE_FILE_DEST句を省略します。

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

  • FILE_NAME_CONVERT

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

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

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

TEMPFILE REUSE

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

TEMPFILE REUSE句を含めます。

TEMPFILE REUSE句を省略します。

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

USER_TABLESPACES

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

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

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

USER_TABLESPACES句を省略します。

logging_clause

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

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

logging_clauseを含めます。

logging_clauseを省略します。

ROLES

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句を省略します。

ROLES句は、シードからPDBを作成する場合にのみ使用できますが、表38-3で説明しているその他の句は、一般的な句です。一般的な句の詳細は、「CREATE PLUGGABLE DATABASE文」を参照してください。

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

CREATE PLUGGABLE DATABASE文を使用して、シードからPDBを作成できます。

シードからPDBを作成する前に、「PDBの準備」で説明している前提条件を満たす必要があります。

シードからPDBを作成する手順は、次のとおりです。

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

    「現在のコンテナについて」および「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でローカルに付与します。

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

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

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

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

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

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

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

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

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

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

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password;

関連項目:

  • Oracle Managed Filesの使用

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

  • パスワード選択のガイドラインについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

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

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

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

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

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

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

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

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

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

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

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

関連項目:

  • Oracle Managed Filesの使用

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

  • パスワード選択のガイドラインについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

例38-20 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句が必要です。この例では、PDBの相対ディレクトリ・オブジェクト・パスは、/disk1/oracle/dbs/salespdbディレクトリへの相対パスとして扱われる必要があります。

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

    シードのデータファイルの場所を表示するには、例43-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/');

関連項目:

  • DEFAULT TABLESPACE句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • パスワード選択のガイドラインについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

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をクローニングし、そのクローンをCDBに接続します。この手法を使用するには、ソースを指定するFROM句を含める必要があります。

ソースは、コピーされる既存のPDBまたは非CDBです。ターゲットPDBはソースのクローンです。ソースは、ローカルCDBのPDB、リモートCDBのPDB、非CDBのいずれでもかまいません。CREATE PLUGGABLE DATABASE文では、ソースに関連付けられているファイルを新しい場所にコピーし、そのファイルをターゲットPDBに関連付けます。

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

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

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

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

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

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

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

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

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

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

注意:

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

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

表38-4 PDBをクローニングする場合の句

質問 はい いいえ

PATH_PREFIX

PATH_PREFIX句を使用し、PDBと関連付けられているすべての相対ディレクトリ・オブジェクト・パスを、指定のディレクトリまたはそのサブディレクトリに対する相対パスであるとみなしますか。

ディレクトリ・オブジェクトに絶対パスが使用されている場合、PATH_PREFIX句は無視されます。

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

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

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

FILE_NAME_CONVERT

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

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

FILE_NAME_CONVERT句を省略します。

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

  • CREATE_FILE_DEST

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

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

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

CREATE_FILE_DEST

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

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

CREATE_FILE_DEST句を省略します。

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

  • FILE_NAME_CONVERT

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

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

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

SERVICE_NAME_CONVERT

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

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

SERVICE_NAME_CONVERT句を省略します。

STORAGE

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

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

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

TEMPFILE REUSE

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

TEMPFILE REUSE句を含めます。

TEMPFILE REUSE句を省略します。

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

USER_TABLESPACES

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

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

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

USER_TABLESPACES句を省略します。

logging_clause

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

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

logging_clauseを含めます。

logging_clauseを省略します。

NO DATA

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

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

NO DATA句を含めます。

NO DATA句を省略します。

SNAPSHOT COPY

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

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

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

SNAPSHOT COPY句を省略します。

NO DATA句およびSNAPSHOT COPY句を除き、表38-4で説明している句は一般的な句です。一般的な句の詳細は、「CREATE PLUGGABLE DATABASE文」を参照してください。

SNAPSHOT COPY句

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

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

SNAPSHOT COPY句を使用してソースPDBのクローンを作成し、CLONEDB初期化パラメータをTRUEに設定する場合、ソースPDBのファイルの基になるファイル・システムは、ローカル・ファイル・システム、ネットワーク・ファイル・システム(NFS)、Direct NFSが有効になっているクラスタ・ファイル・システムのいずれでもかまいません。ただし、ソース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句を使用して作成したクローンを切断しようとすると、エラーが発生します。

Oracle Real Application Clusters (Oracle RAC)環境でSNAPSHOT COPY句を使用して作成されたPDBの場合、PDBのファイルにアクセスする必要がある各ノードは、マウントされている必要があります。

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

注意:

SNAPSHOT COPY句でソースPDBから作成されたクローンが存在するかぎり、ソースPDBを削除しないでください。ソースPDBが削除されると、クローズされているクローンはオープンできず、オープンされたクローンはエラーを生成します。

関連項目:

  • Oracle ACFSの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

  • Direct NFSクライアントの詳細は、使用しているオペレーティング・システムの『Oracle Grid Infrastructureインストレーション・ガイド』を参照してください。

  • 透過的データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

  • PDBのスナップショット・クローニングをサポートするプラットフォームの詳細は、My Oracle Supportノート1597027.1を参照してください。

    https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1597027.1
    
  • 「現在のコンテナのIDまたは名前の判別」

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

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

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

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

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

  • ソースPDBは、読取り専用モードでオープンしている必要があります。

ローカルPDBをクローニングする手順は、次のとおりです。

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

    「現在のコンテナについて」および「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にクローニングします。

例38-21 句を指定せずにローカル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;

関連項目:

  • Oracle Managed Filesの使用

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

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

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

  • PDBの相対ディレクトリ・オブジェクト・パスは、特定のディレクトリへの相対パスとして扱われる必要があります。したがって、PATH_PREFIX句が必要です。この例では、PDBの相対ディレクトリ・オブジェクト・パスは、/disk2/oracle/pdb2ディレクトリおよびそのサブディレクトリへの相対パスとして扱われる必要があります。

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

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

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

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

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

  • クローニングされるPDB (pdb1)には、salesrepおよびordersという2つのユーザー定義サービスがあります。CDB内でサービス名を一意に保つために、クローニングされたPDB (pdb2)内でこれらのサービス名がそれぞれsalespersonおよびorderentryに変更されます。

  • 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','salesperson','orders','orderentry')
  NOLOGGING;

例38-23 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のデータファイルの場所を表示するには、例43-7の問合せを実行します。

  • PDBにストレージ制限を強制する必要があります。したがって、STORAGE句が必要です。特に、PDBに属する表領域はいずれも2GBを超えることはできません。

  • クローニングされるPDB (pdb1)には、salesrepおよびordersという2つのユーザー定義サービスがあります。CDB内でサービス名を一意に保つために、クローニングされたPDB (pdb2)内でこれらのサービス名がそれぞれsalespersonおよびorderentryに変更されます。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、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','salesperson','orders','orderentry');

例38-24 データをクローニングしないローカル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. ルートを現在のコンテナとして使用し、ソースPDBをオープンの読取り専用モードに変更します。

    ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY;
    
  3. NO DATA句を指定して、ソースPDBをクローニングします。

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

    ALTER PLUGGABLE DATABASE pdb2 OPEN;
    
  5. クローニングした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またはソース非CDBは、オープンの読取り専用モードである必要があります。

  • データベース・リンクは、ターゲットPDBが含まれるCDBからリモート・ソースへの接続を可能にする必要があります。ソースがリモートPDBである場合、データベース・リンクは、リモートCDBのルート、またはリモート・ソースPDBのいずれかに接続できます。

  • リモート・ソースでデータベース・リンクが接続するユーザーは、ソースPDBまたは非CDBでCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

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

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

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

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

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

  • 非CDBをクローニングしてPDBを作成している場合は、CDBと非CDBの両方でOracle Database 12cリリース1 (12.1.0.2)以上が実行されている必要があります。

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

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

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

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

    例38-25を参照してください。

    作成した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を作成できるようにするには、その前に削除する必要があります。

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

CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link;

例38-25 句を使用せずにリモート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-26 リモート非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;

関連項目:

  • Oracle Managed Filesの使用

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

38.4.4 PDBのクローニング後

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

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

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

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

    ターゲットCDBに同じ名前の共通ユーザーがない場合、ユーザー・アカウントはターゲットPDBでロックされます。ロックされたこれらの各ユーザーに関して、次のオプションがあります。

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

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

    • ユーザーをロックしたままにできます。

    • ユーザーを削除できます。

関連項目:

  • 「PDBに関連付けられたサービスの管理」

  • 例43-9

  • 共通ユーザーおよびローカル・ユーザーの詳細は、『Oracle Database概要』を参照してください。

  • ローカル・ユーザーの作成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • CDBでのOracle Data Pumpの使用の詳細は、『Oracle Databaseユーティリティ』を参照してください。

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

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

38.5.1 切断されたPDBの接続の概要

この手法では、切断されたPDBを接続します。この手法では、PDBを記述しているXMLメタデータ・ファイル、およびPDBに関連付けられたファイルを使用して、CDBに接続します。

XMLメタデータ・ファイルは、PDBのファイルの場所を指定し、CREATE PLUGGABLE DATABASE文のUSING句でXMLメタデータ・ファイルを指定します。図38-6は、この手法で新しいPDBがどのように作成されるかを示しています。

図38-6 切断されたPDBの接続

図38-6の説明が続きます
「図38-6 切断されたPDBの接続」の説明

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

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

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

表38-5 切断されたPDBを接続する場合の句

質問 はい いいえ

AS CLONE

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

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

AS CLONE句を省略します。

PATH_PREFIX

PATH_PREFIX句を使用し、PDBと関連付けられているすべての相対ディレクトリ・オブジェクト・パスを、指定のディレクトリまたはそのサブディレクトリに対する相対パスであるとみなしますか。

ディレクトリ・オブジェクトに絶対パスが使用されている場合、PATH_PREFIX句は無視されます。

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

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

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

SERVICE_NAME_CONVERT

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

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

SERVICE_NAME_CONVERT句を省略します。

SOURCE_FILE_NAME_CONVERT

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

SOURCE_FILE_NAME_CONVERT句を省略します。

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

SOURCE_FILE_DIRECTORY

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

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

SOURCE_FILE_DIRECTORY句を省略します。

NOCOPYCOPYMOVEFILE_NAME_CONVERTCREATE_FILE_DEST

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

COPYを指定して、ファイルを新しい場所にコピーします。COPYがデフォルトです。

MOVEを指定して、ファイルを新しい場所に移動します。

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

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

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

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

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

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

NOCOPYを指定します。

STORAGE

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

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

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

TEMPFILE REUSE

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

TEMPFILE REUSE句を含めます。

TEMPFILE REUSE句を省略します。

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

USER_TABLESPACES

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

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

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

USER_TABLESPACES句を省略します。

logging_clause

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

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

logging_clauseを含めます。

logging_clauseを省略します。

AS CLONE句およびSOURCE_FILE_NAME_CONVERT句は、切断されたPDBに接続する場合にのみ使用できますが、表38-5で説明しているその他の句は一般的な句です。一般的な句の詳細は、「CREATE PLUGGABLE DATABASE文」を参照してください。

38.5.2 切断されたPDBの接続

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

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

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

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

    USING句でXMLファイルを指定する必要があります。

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

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

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

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

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

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

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

注意:

  • 透過的データ暗号化を使用して暗号化されたデータが含まれたPDBを接続する場合は、『Oracle Database Advanced Securityガイド』を参照してください。

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

PDBをプラグインする手順は、次のとおりです。

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

    「現在のコンテナについて」および「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ビューをチェックして、互換性がない理由を確認できます。

  3. PDBが切断されていない場合は、切断します。

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

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

    「切断された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ファイルを使用して、salespdbという名前の切断されたPDBを接続します。

例38-27 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-28 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-29 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-30 COPY、PATH_PREFIXおよびFILE_NAME_CONVERTの各句を使用して切断されたPDBを接続する方法

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

  • 新しいPDBは、CDB内に既存のPDBを作成するために使用された同じ切断されたPDBには基づいていません。したがって、AS CLONE句は必要ありません。

  • PDBの相対ディレクトリ・オブジェクト・パスは、特定のディレクトリへの相対パスとして扱われる必要があります。したがって、PATH_PREFIX句が必要です。この例では、PDBの相対ディレクトリ・オブジェクト・パスは、/disk2/oracle/salesディレクトリおよびそのサブディレクトリへの相対パスとして扱われる必要があります。

  • 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-31 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-32 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);

関連項目:

  • Oracle Managed Filesの使用

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

38.5.3 切断されたPDBの接続後

切断されたPDBの接続後に、ユーザーと表領域に関する特定のルールが適用されます。

切断されたPDBの接続後、次の内容が適用されます。

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

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

    ターゲットCDBに同じ名前の共通ユーザーがない場合、ユーザー・アカウントはターゲットPDBでロックされます。ロックされたこれらの各ユーザーに関して、次のオプションがあります。

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

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

    • ユーザーをロックしたままにできます。

    • ユーザーを削除できます。

関連項目:

  • 「PDBに関連付けられたサービスの管理」

  • 例43-9

  • 共通ユーザーおよびローカル・ユーザーの詳細は、『Oracle Database概要』を参照してください。

  • CDBにおける共通ユーザーおよびローカル・ユーザーの作成方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • CDBでのOracle Data Pumpの使用の詳細は、『Oracle Databaseユーティリティ』を参照してください。

38.6 非CDBを使用したPDBの作成

非CDBを様々な方法で使用して、PDBを作成できます。

38.6.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.6.2 非CDBでのDBMS_PDBパッケージの使用

DBMS_PDBパッケージを非CDBで使用して、非CDBをCDBに接続できます。

38.6.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-7 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続

図38-7の説明が続きます
「図38-7 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続」の説明

注意:

この手法を使用するには、非CDBがOracle Database 12cの非CDBである必要があります。

38.6.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.7 CDBからのPDBの切断

PDBをCDBから切断できます。

38.7.1 PDBの切断の概要

PDBを切断すると、CDBへのPDBの関連付けが解除されます。PDBを異なるCDBに移動する場合や、PDBを使用する必要がなくなった場合は、PDBを切断します。

PDBを切断するには、ルートに接続し、ALTER PLUGGABLE DATABASE文を使用して、切断後のPDBに関するメタデータが含まれるXMLファイルを指定します。このSQL文によってXMLファイルが作成され、このXMLファイルには、ターゲットCDBでCREATE PLUGGABLE DATABASE文を使用してPDBに接続できるようにするのに必要な情報が含められます。

PDBは切断する前にクローズする必要があります。PDBをCDBから切断すると、切断されたPDBはマウント・モードになります。この切断操作によって、PDBのデータファイルに対して、PDBが正常に切断されたなどの、記録対象となるなんらかの変更が加えられます。依然としてCDBの一部であるため、切断されたPDBはCDB全体のRMANバックアップに含まれています。このような方法によるバックアップは、切断されたPDBが将来必要になった場合に備えてアーカイブするのに便利です。

PDBをCDBから完全に除去するために、PDBを削除できます。切断されたPDBに対してサポートされている唯一の操作は、PDBの削除です。PDBを再度同じCDBに接続できるようにするには、CDBから削除しておく必要があります。PDBは、CDBに接続している場合にのみ使用できます。

関連項目:

38.7.2 PDBの切断

PDBを切断する場合は、前提条件を満たす必要があります。

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

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

  • PDBは、少なくとも1回はオープンしている必要があります。

  • PDBはクローズされている必要があります。Oracle Real Application Clusters (Oracle RAC)環境では、PDBがすべてのインスタンスでクローズされている必要があります。

注意:

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

PDBを切断する手順は、次のとおりです。

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

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

  2. UNPLUG INTO句を使用してALTER PLUGGABLE DATABASE文を実行し、切断するPDB、およびPDBのXMLメタデータ・ファイルの名前と場所を指定します。

例38-33 PDB salespdbの切断

次のALTER PLUGGABLE DATABASE文により、PDB salespdbが切断され、salespdb.xmlメタデータ・ファイルが/oracle/data/ディレクトリに作成されます。

ALTER PLUGGABLE DATABASE salespdb UNPLUG INTO '/oracle/data/salespdb.xml';

38.8 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で、現在のコンテナがルートであることを確認します。

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

  2. DROP PLUGGABLE DATABASE文を実行し、削除するPDBを指定します。

例38-34 データファイルは保持したままPDB salespdbを削除する方法

DROP PLUGGABLE DATABASE salespdb
  KEEP DATAFILES;

例38-35 PDB salespdbおよびそのデータファイルを削除する方法

DROP PLUGGABLE DATABASE salespdb
  INCLUDING DATAFILES;

関連項目: