16 プラガブル・データベースのサポート
マルチテナント・アーキテクチャにより、Oracle Databaseにスキーマ、スキーマ・オブジェクト、および非スキーマ・オブジェクトのポータブル・コレクションを含めることができ、これらはOracleクライアントに個別のデータベースとして表示されます。
マルチテナント・コンテナ・データベース(CDB)は、1つ以上のユーザー作成のプラガブル・データベース(PDB)を含むOracle Databaseです。
OCIクライアントは、関連するPDBにプラガブル・データベースが適切に設定されているサービスを使用してそのPDBに接続できます。
関連項目:
PDBおよび様々なPDBに接続するサービスの構成の詳細は、Oracle Database管理者ガイドを参照してください。
16.1 マルチテナント・コンテナ・データベース(CDB)が含まれるOCI APIコールの一般的な拡張機能
これらの拡張機能は、Oracle Database 12cリリース2 (12.2)以上で削除された制限の結果です。
次の拡張機能は、Oracle Database 12cリリース2 (12.2)以上で削除された制限の結果です。
-
クライアント結果キャッシュは、プラガブル・データベースへの接続とともに動作します。
16.2 ALTER SESSION SET CONTAINERのOCI拡張機能
ALTER SESSION SET CONTAINER
文の使用に関する一部のOCI制限は削除されました。
これらの操作を実行するには、クライアントがOracle Databaseリリース12cリリース2 (12.2)である必要があります。次の操作のいずれかが試行されると、古いバージョンのクライアントではエラーが戻されます。
-
ALTER SESSION SET CONTAINER
文では、OCIのTIMESTAMP WITH TIMEZONE
またはTIMESTAMP WITH LOCAL TIMEZONE
データ型を使用するアプリケーションがサポートされます。異なるデータベース・タイムゾーン設定または異なるデータベース・タイムゾーン・ファイル・バージョン設定を持つプラガブル・データベース間でアプリケーションの切替えが発生しても、これらの型のセマンティクスは維持されます。 -
ALTER SESSION SET CONTAINER
文では、キャラクタ・セットが異なる2つのプラガブル・データベース間でOCI接続を切り替えるこのコマンドの使用がサポートされます。
16.3 マルチテナント・コンテナ・データベース(CDB)が含まれるOCI APIコールの一般的な制限
一般的な制限について説明します。
-
CDB$ROOT
以外のコンテナに接続されている場合、OCI_PRELIM_AUTH
モードでログインしようとすると、ORA-24542
エラーが発生します。 -
CDB$ROOT
以外のコンテナに接続されている場合、OCIDBStartup()
を発行しようとすると、ORA-24543
エラーが発生します。 -
CDB$ROOT
以外のコンテナに接続されている場合、OCIDBShutdown()
を発行しようとすると、ORA-24543
エラーが発生します。CDB$ROOT
に接続されている場合にOCIDBShutdown()
を発行すると、インスタンス全体が停止します。 -
OCI連続問合せ通知(CQN)は、CDBではサポートされていません。
-
リリース12.1 (またはそれ以上)より古いクライアント・ライブラリにリンクされている、およびプラガブル・データベースに接続されているOCIアプリケーションでは、通常(共通以外)のユーザーとして接続した場合、高速アプリケーション通知(FAN)高可用性(HA)機能は利用できません。回避策として、そのようなアプリケーションは共通ユーザーとして接続します。この制限は、リリース12.1以上のOCIクライアントには存在しません。
16.4 ALTER SESSION SET CONTAINERが含まれるOCIコールの制限
特定の制限について説明します。
ALTER SESSION SET CONTAINER
文を使用して、1つのプラガブル・データベースから別のプラガブル・データベースへのOCI接続を切り替えることができます。ただし、ALTER SESSION SET CONTAINER
文を使用してプラガブル・データベース間の切替えを行うアプリケーションでは、次に示すように使用方法がOCI制限と一貫していることを確認する必要があります。
-
ALTER SESSION SET CONTAINER
文は、OCI移行可能セッション(ログイン中にOCI_MIGRATE
モードで作成されたセッションなど)には使用できず、この組合せではORA-65135
エラーが発生します。 -
ALTER SESSION SET CONTAINER
文はOCI接続プール(古いOCI接続プールAPI)にはサポートされておらず、この組合せではORA-65135
エラーが発生します。 -
ALTER SESSION SET CONTAINER
文は、OCIセッションの切替え(複数のOCIユーザー・ハンドルで同じOCIサーバー・ハンドルを共有)ではサポートされていません。 -
クライアントが最初に
EXTENDED MAX_STRING_SIZE
設定でコンテナに接続された後、同じセッション内で、STANDARD MAX_STRING_SIZE
設定で別のコンテナに切り替えられた(ALTER SESSION SET CONTAINER
文を使用して)場合、4000バイトを超えるバインド変数を使用しようとすると後続のOCIStmtExecute()
コールでORA-14697
エラーが発生します。 -
実行されたものとは異なるコンテナのコンテキスト内で、
OCIStmtFetch()
またはOCIStmtFetch2()
を使用して、OCI文ハンドルからのフェッチを試行すると、ORA-65108
エラーが発生します。 -
ALTER SESSION SET CONTAINER
文をOCIで実行する場合、OCIクライアント結果キャッシュは無効になります。 -
高速アプリケーション通知(FAN)および実行時接続ロード・バランシング通知は、
ALTER SESSION SET CONTAINER
文を使用してプラガブル・データベース間の接続の切替えが行われるアプリケーションにはサポートされていません。 -
ALTER SESSION SET CONTAINER
文は、現在のトランザクションが存在する場合は読取り専用に設定するため、OCIトランザクション・コール(OCITransStart()
、OCITransDetach()
、OCITransCommit()
、OCITransRollback()
、OCITransPrepare()
、OCITransMultiPrepare()
およびOCITransForget()
)を実行しようとするといずれも新しいコンテナでエラーが発生します。これらのコールを発行するには、元のコンテナに切り替える必要があります。 -
OCISubscriptionUnRegister()
コールが、誤ったコンテナ(対応するOCISubscriptionRegister()
コールが実行されたものとは異なるコンテナ)のコンテキスト内で試行される場合、ORA-24950
が戻されます。 -
OCI_PTYPE_DATABASE
を含んだOCIDescribeAny()
コールでは、接続先のデータベースが記述されます。ALTER SESSION SET CONTAINER
文の実行後、アプリケーションで現在のデータベースの記述の確認が求められる場合は、OCIDescribeAny()
コールを再発行する必要があります。 -
異なるコンテナからのオブジェクトを操作するのに使用されるOCI任意データ、コレクションまたはオブジェクト関数へのコールはサポートされていません。
-
OCIObjectFlush()
コールは、OCIObjectNew()
コールを使用してオブジェクト・インスタンスが作成されたコンテナでのみサポートされます。 -
OCIObjectFlush()
は、ALTER SESSION SET CONTAINER
文を使用してコンテナを切り替える前に呼び出すことをお薦めします。OCIObjectFlush()
コールは、いずれのトランザクションも開始されていない場合、トランザクションを開始することに注意してください。 -
コンテナの切替え後に実行された
OCIObjectFlush()
は、トランザクションが同じセッションによって別のコンテナですでに開始されている場合(暗黙的なDMLの結果として、またはOCIObjectFlush()
コールの結果として)、エラーを戻すことがあります。 -
OCIObjectFlush()
コールは、OCIObjectFlush()
コールが発行されたコンテナのコンテキスト内で使用済となったオブジェクトのみをフラッシュします。 -
バージョンのセッション属性は、
ALTER SESSION SET CONTAINER
文で変更することがあります。アプリケーションでこれらの属性がキャッシュされる場合、これらの設定はALTER SESSION SET CONTAINER
文の後、同じでなくなる可能性があります。OCIAttrGet()
コールで取得可能な属性、およびALTER SESSION SET CONTAINER
文で変更する可能性がある属性の例を次に示します。
関連項目:
16.5 ALTER SESSION SWITCH CONTAINER SWITCH SERVICEが含まれるOCIコールの制限
ALTER SESSION SWITCH CONTAINER SWITCH SERVICE
文によるOCIコールの制限について説明します。
Oracle Database 12cリリース2 (12.2)以上では、ALTER SESSION SWITCH CONTAINER SWITCH SERVICE
文が追加されたため、元のサービスに接続する場合とは異なる方法で新しいサービスを構成すると、サービス属性が変更される可能性があります。ただし、OCIは、この文による新しい設定に基づいてその処理を変更することはなく、かわりに、元のサービスに接続する場合と同じように元の設定を使用し続けます。たとえば、FANのオン/オフ設定やTAFのオン/オフ設定などは、元のサービスに最初に接続した場合と同じままです。ALTER SESSION SWITCH CONTAINER SWITCH SERVICE
文の通常の使用例は、切替え後に同じアプリケーションが使用されるマルチテナント環境内に存在するため、これは切替え後に適切な動作であると考えられます。