24 CDBでのXStreamの使用

マルチテナント・コンテナ・データベース(CDB)では、Oracle Database XStreamを使用できます。

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

XStreamについて

XStreamは、Oracle Databaseコンポーネントおよびアプリケーション・プログラミング・インタフェース(API)で構成され、Oracleデータベースからのデータ変更をクライアント・アプリケーションで受信し、クライアント・アプリケーションからOracleデータベースにデータの変更を送信できるようにします。

これらのデータ変更は、Oracleデータベースと他のシステムで共有できます。他のシステムとは、Oracle以外のデータベース、非RDBMS Oracle製品、ファイル・システム、サード・パーティのソフトウェア・アプリケーションなどです。クライアント・アプリケーションは、ユーザーにより固有の目的およびユースケース用に設計されます。

XStreamは、XStream OutおよびXStream Inの2つの主要な機能で構成されています。XStream Outには、Oracleデータベースでのデータ変更を他のシステムと共有できるようにする、Oracle DatabaseのコンポーネントおよびAPIがあります。XStream Outは、データ操作言語(DML)およびデータ定義言語(DDL)の変更をREDOログから取得し、APIを使用するクライアント・アプリケーションにこれらの変更を送信できます(次の図を参照)。

XStream Inには、他のシステムでのデータ変更をOracleデータベースと共有できるようにする、Oracle DatabaseのコンポーネントおよびAPIがあります。XStream Inは、これらの変更をOracleデータベース内のデータベース・オブジェクトに適用できます(次の図を参照)。

XStreamは、Oracleデータベースの取得機能および適用機能を使用します。これらの機能によって、XStreamの次の機能が使用可能になります。

  • データベース変更をストリーミングするための論理変更レコード(LCR)形式

    LCRは、データベース変更を説明する特定の形式のメッセージです。変更がデータ操作言語(DML)操作だった場合は、行LCRにより、DML操作の結果として発生した行変更がそれぞれカプセル化されます。1つのDML操作によって複数の行変更が発生する場合があるため、1つのDML操作によって複数の行LCRが発生することがあります。変更がデータ定義言語(DDL)操作だった場合、1つのDDL LCRがDDL変更をカプセル化します。

  • 包含ルールや除外ルールなど、動作を制御するルールおよびルール・セット

    ルールによって、データベース・レベル、スキーマ・レベル、表レベルおよび行/列レベルでデータベースの変更がフィルタリング可能になります。

  • 取得したデータ変更を変更するルールベースの変換

  • LOB、LONGLONG RAWXMLTypeなど、データベースのほとんどのデータ型のサポート

  • 単一のデータベース・インスタンスへの複数のインバウンド・ストリーム、単一のデータベース・インスタンスからの複数のアウトバウンド・ストリーム、単一の取得プロセスからの複数のアウトバウンド・ストリームなど、カスタマイズされた構成

  • 最適なパフォーマンスのための並列性の適用、SQLの生成、競合の検出と解決、エラー処理、適用ハンドラによるカスタマイズされた適用など、XStream Inのフル装備の適用

ノート:

XStream Out構成およびXStream In構成のいずれにおいても、クライアント・アプリケーションは専用サーバー接続を使用する必要があります。

システム生成ルールとマルチテナント環境

マルチテナント環境では、移植可能な一連のスキーマ、オブジェクトおよび関連構造をOracleデータベースに含めることができ、アプリケーションには論理的に別のデータベースのように見えます。この自己完結型コレクションは、プラガブル・データベース(PDB)と呼ばれます。CDBにはPDBが含まれています。

アプリケーション・コンテナも含めることができます。アプリケーション・コンテナは、アプリケーション・ルートとそれに関連付けられたアプリケーションPDBから構成されるCDBのオプション・コンポーネントです。アプリケーション・コンテナには、1つ以上のアプリケーションのデータが格納されています。アプリケーション・コンテナは、アプリケーションのメタデータおよび共通データを共有します。CDBでは、CDBルート、各PDB、各アプリケーション・ルートおよび各アプリケーションPDBのそれぞれがコンテナです。

CDBでは、変更が発生したコンテナのグローバル名をsource_database_name属性で、CDBルートのグローバル名をroot_name属性でLCRに含めることができます。XStreamコンポーネントのルールで、これらの属性を考慮できます。

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

CDBのシステム生成ルールとXStream Out

CDBでは、XStream OutをCDBルートで構成する必要があります。そのため、システム生成ルールを作成するDBMS_XSTREAM_ADMパッケージのPL/SQLプロシージャは、CDBルートで実行する必要があり、さらに共通ユーザーとして接続されている必要があります。

伝播のルールを作成するプロシージャを除く、ADD_GLOBAL_RULESプロシージャなどのXStream Outのシステム生成ルールを作成するプロシージャには、次の表に示す主要なパラメータが含まれています。

表24-1 CDBのシステム生成ルールの主要なプロシージャ・パラメータ

パラメータ 説明

source_database

ソース・データベースのグローバル名。CDBでは、ルールに関連するコンテナのグローバル名を指定してください。コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。例: mycdb.example.comまたはhrpdb.example.com

source_root_name

ソースCDBのCDBルートのグローバル名。例: mycdb.example.com

source_container_name

ソース・コンテナの短縮名。コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。例: CDB$ROOTまたはhrpdb

source_databaseまたはsource_root_nameを指定する際にドメイン名を指定しなかった場合は、名前に自動的に追加されます。たとえば、ドメイン名が.EXAMPLE.COMの場合にDBS1を指定すると、自動的にDBS1.EXAMPLE.COMが指定されます。

これらの主要なパラメータの組合せによって、プロシージャで生成されたルールに基づいて、どのコンテナの変更をXStream Outが取得し、クライアント・アプリケーションにストリームするのかが決まります。これらのパラメータの設定に関係なく、システム生成ルールでは、特定のスキーマおよび表に取得され、ストリームされる変更を引き続き制限できます。

ローカル取得とは、ソースCDB上で取得プロセスが実行されることを意味します。ローカル取得構成では、source_root_nameパラメータで、ローカルCDBのCDBルートのグローバル名を指定します。このパラメータがNULLの場合は、ローカルCDBのCDBルートのグローバル名が自動的に指定されます。生成されるルールには、現在のCDBのCDBルートのグローバル名に対する条件が含まれます。

ダウンストリーム取得とは、ソースCDB以外のCDB上で取得プロセスが実行されることを意味します。ダウンストリーム取得構成では、source_root_nameパラメータにNULL以外の値が必要で、リモート・ソースCDBのCDBルートのグローバル名を指定する必要があります。生成されるルールには、リモートCDBのCDBルートのグローバル名に対する条件が含まれます。このパラメータがNULLの場合は、ローカル取得とみなされます。

次の表は、ローカル取得構成でのsource_databaseおよびsource_container_nameの様々なパラメータ設定に対するルール条件を示しています。

表24-2 ローカル取得およびXStream Outコンテナのルール条件

source_databaseパラメータの設定 source_container_nameパラメータの設定 説明

NULL

NULL

XStream Outは、CDBルート、すべてのPDB、すべてのアプリケーション・ルート、すべてのアプリケーションPDBなど、ローカルCDBのコンテナに対する変更を取得してストリームします。

NULL以外

NULL

XStream Outは、ローカルCDBの指定されたソース・コンテナで行われた変更を取得してストリームします。ソース・コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。DBMS_XSTREAM_ADMプロシージャが、CDB_PDBSビューおよびCDB_PROPERTIESビューを問い合せ、source_container_name値を決定します。

NULL

NULL以外

XStream Outは、ローカルCDBの指定されたソース・コンテナで行われた変更を取得してストリームします。ソース・コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。DBMS_XSTREAM_ADMプロシージャが、CDB_PDBSビューおよびCDB_PROPERTIESビューを問い合せ、source_database値を決定します。

NULL以外

NULL以外

XStream Outは、ローカルCDBの指定されたソース・コンテナで行われた変更を取得してストリームします。ソース・コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。

source_database値の接頭辞がsource_container_name値と異なる場合、生成されるルールにはsource_database値に対する条件が含まれ、内部表によりsource_database値がsource_container_name値にマップされます。

次の表は、ダウンストリーム取得構成でのsource_databaseおよびsource_container_nameの様々なパラメータ設定に対するルール条件を示しています。

表24-3 ダウンストリーム取得およびXStream Outコンテナのルール条件

source_databaseパラメータの設定 source_container_nameパラメータの設定 説明

NULL

NULL

XStream Outは、CDBルート、すべてのPDB、すべてのアプリケーション・ルート、すべてのアプリケーションPDBなど、リモート・ソースCDBのコンテナに対する変更を取得してストリームします。

NULL以外

NULL

XStream Outは、リモート・ソースCDBの指定されたソース・コンテナで行われた変更を取得してストリームします。ソース・コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。DBMS_XSTREAM_ADMプロシージャは、source_database値の接頭辞からsource_container_name値を導出します。

NULL

NULL以外

DBMS_XSTREAM_ADMプロシージャでエラーが発生します。

NULL以外

NULL以外

XStream Outは、リモート・ソースCDBの指定されたソース・コンテナで行われた変更を取得してストリームします。ソース・コンテナは、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBにできます。

source_database値の接頭辞がsource_container_name値と異なる場合、生成されるルールにはsource_database値に対する条件が含まれ、内部表によりsource_database値がsource_container_name値にマップされます。

CDBのシステム生成ルールとXStream In

XStream Inは、CDBのルートまたは任意のコンテナで構成できます。

一般的にインバウンド・サーバーはルールまたはルール・セットを使用しません。かわりに、通常はクライアント・アプリケーションから受信したすべてのLCRを処理します。インバウンド・サーバーは、現在のコンテナにのみ変更を適用できます。したがって、インバウンド・サーバーがCDBルートで設定されている場合は、CDBルートにのみ変更を適用できます。インバウンド・サーバーが1つのPDBで構成されている場合は、そのPDBにのみ変更を適用できます。インバウンド・サーバーがアプリケーション・ルートで構成されている場合は、そのアプリケーション・ルートにのみ変更を適用でき、インバウンド・サーバーが1つのアプリケーションPDBで構成されている場合は、そのアプリケーションPDBにのみ変更を適用できます。

XStream Outとマルチテナント環境

マルチテナント環境では、移植可能な一連のスキーマ、オブジェクトおよび関連構造をデータベースに含めることができ、アプリケーションには論理的に別のデータベースのように見えます。

この自己完結型コレクションは、プラガブル・データベース(PDB)と呼ばれます。1つのマルチテナント・コンテナ・データベース(CDB)には複数のPDBが格納されます。CDBでは、XStream OutはCDB以外での場合とほぼ同様に機能します。

CDBには、アプリケーション・コンテナを含めることもできます。アプリケーション・コンテナは、アプリケーション・ルートとそれに関連付けられたすべてのアプリケーションPDBから構成されるCDBのオプション・コンポーネントです。アプリケーション・コンテナには、1つ以上のアプリケーションのデータが格納されています。アプリケーション・コンテナは、アプリケーションのメタデータおよび共通データを共有します。CDBでは、CDBルート、各PDB、各アプリケーション・ルートおよび各アプリケーションPDBのそれぞれがコンテナです。

CDBと非CDBでのXStream Out機能の主な違いは、次のとおりです。

  • XStream OutはCDBルートでのみ構成する必要があります。

  • XStream OutはCDB内の任意のコンテナに適用された変更を表示できます。

  • XStream Out取得ルールは、LCRをクライアント・アプリケーションに必要なLCRに制限できます。システム生成の取得ルールは、DBMS_XSTREAM_ADMパッケージのADD_OUTBOUNDおよびCREATE_OUTBOUNDプロシージャに渡されたパラメータに基づいて適切なLCRを選択します。XStream Outコンポーネントで使用されるルールよりも詳細に制御するために、同じパッケージのADD_*_RULESプロシージャを使用できます。

  • XStream Outタスクを実行するユーザーは、共通ユーザーである必要があります。

XStream環境での操作の切断および接続

XStream Outに関連するPDB、アプリケーション・ルートまたはアプリケーションPDBがそのCDBから切断され、別のCDBに接続された場合、取得プロセスまたはアウトバウンド・サーバーはコンテナの一部とはみなされません。他のCDBで、取得プロセスおよびアウトバウンド・サーバーを再度構成する必要があります。

アウトバウンド・サーバーが取得プロセスとは異なるデータベースに構成されている場合は、切断および接続の操作に対して追加の考慮事項があります。

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

  • CDB1という名前のCDBには、PDB PDB1が含まれています。

  • 取得プロセスはCDB1で構成され、PDB1からCDB2というCDBのアウトバウンド・サーバーにLCRを送信します。

  • PDB1CDB1から切断して、CDB3というCDBに接続します。

PDB1からCDB2のアウトバウンド・サーバーにLCRを引き続き配信するには、CDB3で新しい取得プロセスを構成し、LCRを取得してCDB2に送信する必要があります。

CDB1のルートへの参照をCDB3のルートに変更するように、データベースBのアウトバウンド・サーバーで使用されるルールを変更する必要があります。また、CDB3PDB1に別の名前が指定された場合は、新しいPDBの名前を反映するようにルールを変更する必要があります。

XStream環境のアプリケーション・コンテナ

CDBに1つ以上のアプリケーション・コンテナが含まれている場合は、XStream OutをCDBルートで構成する必要があり、それによってXStream Outは、アプリケーション・ルートやアプリケーションPDBなどのCDBのコンテナに追加された変更を取得できます。アプリケーション・コンテナに取得された変更は、PDB、アプリケーション・ルート、アプリケーションPDBなど、任意のタイプのコンテナに送信できます。

あるアプリケーション・ルートから別のアプリケーション・ルートに変更をレプリケートする場合は、XStreamでALTER PLUGGABLE DATABASE APPLICATION文をレプリケートできます。エラーを回避するには、文を適用するターゲット・アプリケーション・ルートに、ソース・アプリケーション・ルートと同じアプリケーションがインストールされ、両方のアプリケーション・ルートでアプリケーション名が同じである必要があります。

アプリケーション・ルートからアプリケーション・ルートでないコンテナに変更をレプリケートする際にエラーの発生を回避するには、ALTER PLUGGABLE DATABASE APPLICATION文がレプリケートされないようにする必要があります。

XStream OCI APIでは、OCIXStreamOutAttach関数およびOCILCRHeaderGet関数を使用して、ALTER PLUGGABLE DATABASE APPLICATION文が複製されるかどうかを制御できます。XStream Java APIでは、XStreamOut.attachメソッドのmodeパラメータを使用して、この動作を制御できます。

CDBでのXStream Outの構成

CDBでXStream Outを構成する場合は、どのデータベース変更をXStream Outで取得してクライアント・アプリケーションに送信するかを決定する必要があります。

XStream Outでは、CDBルートとすべてのPDB、アプリケーション・ルート、アプリケーションPDBなど、すべてのコンテナに対するすべてのデータベース変更をストリームするか、特定のコンテナからの変更をストリームできます。さらに、ローカル取得を使用するようにXStream Outを構成するか、ダウンストリーム取得を使用するようにXStream Outを構成して、ソース・データベースからの変更を取得するために必要な作業を軽減できます。

CDBでXStream Outを構成する場合は、次の制限が適用されます。

  • 取得プロセスおよびアウトバウンド・サーバーは、CDBルートに存在する必要があります。

  • 取得プロセスおよびアウトバウンド・サーバーは、同じCDBに存在する必要があります。

  • CDBの各コンテナは、XStream Out構成時にオープンされている必要があります。

  • アプリケーション・ルートに対する変更を取得しているときは、ALTER PLUGGABLE DATABASE APPLICATION文が他のアプリケーション・ルートにのみレプリケートされるようにする必要があります。

また、CDBのXStream管理者を正しく作成していることを確認します。

ノート:

非CDBを使用してコンテナが作成されている場合、コンテナでは非CDBからのXStream Outコンポーネントを使用できません。CDBルートで、取得プロセスやアウトバウンド・サーバーなどのXStream Outコンポーネントを削除し、再作成する必要があります。

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

ローカル取得を使用したCDBでのXStream Outの構成

例では、ローカル取得を使用したCDBでのXStream Outの構成を示しています。

前提条件

XStream Outを構成する前に、CDBのすべてのコンテナが、XStream Out構成時に読取り/書込みモードでオープンしているようにします。

想定

この項では、次のことを想定しています。

  • 取得プロセスはローカル取得プロセスであり、アウトバウンド・サーバーと同じデータベースで実行されます。

  • アウトバウンド・サーバーの名前はxoutです。

  • PDB pdb1.example.comoe.orders表およびoe.order_items表に対するデータ操作言語(DML)およびデータ定義言語(DDL)の変更は、アウトバウンド・サーバーに送信されます。

  • PDB pdb1.example.comhrスキーマに対するDML変更およびDDL変更は、アウトバウンド・サーバーに送信されます。

図24-3は、このXStream Out構成の概要を示しています。

図24-3 PDBのCREATE_OUTBOUNDを使用して作成されたサンプルXStream Out構成

図24-3の説明が続きます
「図24-3 PDBのCREATE_OUTBOUNDを使用して作成されたサンプルXStream Out構成」の説明

CREATE_OUTBOUNDプロシージャを使用して、アウトバウンド・サーバーを作成するには:

  1. SQL*Plusで、CDB (PDB pdb1.example.comではなく)のルートにXStream管理者として接続します。

  2. アウトバウンド・サーバーおよび他のXStreamコンポーネントを作成します。

    1. ソースCDB内のすべてのコンテナが読取り/書込みモードでオープンしていることを確認します。

    2. CREATE_OUTBOUNDプロシージャを実行します。

      この例の想定に従って、次のCREATE_OUTBOUNDプロシージャを実行します。

      DECLARE
        tables  DBMS_UTILITY.UNCL_ARRAY;
        schemas DBMS_UTILITY.UNCL_ARRAY;
      BEGIN
          tables(1)  := 'oe.orders';
          tables(2)  := 'oe.order_items';
          schemas(1) := 'hr';
        DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
          server_name     =>  'xout',
          source_database =>  'pdb1.example.com',
          table_names     =>  tables,
          schema_names    =>  schemas);
      END;
      /
      

      ノート:

      CDBルート、すべてのPDB、すべてのアプリケーション・ルート、すべてのアプリケーションPDBなど、CDB内のすべてのコンテナでの変更を取得して、これらの変更内容をXStreamクライアント・アプリケーションに送信するには、CREATE_OUTBOUNDプロシージャを実行する際にsource_databaseパラメータを省略します。

    3. CREATE_OUTBOUNDプロシージャが正常に完了した後、必要に応じて、1つ以上のコンテナのオープン・モードを変更します。

    ステップbでプロシージャを実行すると、次の処理が実行されます。

    • oe.orders表、oe.order_items表、およびpdb1.example.com PDBのhrスキーマ内のすべての表のサプリメンタル・ロギングを構成します。

    • 取得プロセスおよびアウトバウンド・サーバーで使用されるシステム生成の名前でキューを作成します。

    • oe.orders表、oe.order_items表、およびpdb1.example.com PDBのhrスキーマに対するDMLおよびDDL変更を取得するように指示するルール・セットを備えた取得プロセスをシステム生成の名前で作成して起動します。

    • oe.orders表、oe.order_items表およびhrスキーマに対するDMLおよびDDL変更をクライアント・アプリケーションに送信することを指示するルール・セットを備えたxoutという名前のアウトバウンド・サーバーを作成して起動します。

    • 現在のユーザーをアウトバウンド・サーバーの接続ユーザーとして設定します。この例では、現在のユーザーはXStream管理者です。クライアント・アプリケーションは、アウトバウンド・サーバーと相互作用するために接続ユーザーとしてデータベースに接続する必要があります。

    ノート:

    server_name値は30バイトを超過できません。

    ヒント:

    pdb1.example.comデータベースからアウトバウンド・サーバーに、データベースのすべての変更を取得して送信するには、table_namesおよびschema_namesパラメータにNULL(デフォルト)を指定します。

  3. CDBのルートでアウトバウンド・サーバーに接続してLCRを受信するクライアント・アプリケーションを作成して実行します。

    クライアント・アプリケーションを実行すると、アウトバウンド・サーバーが自動的に起動します。

ダウンストリーム取得を使用したCDBでのXStream Outの構成

ダウンストリーム取得を使用して、XStream Outコンポーネントをソース・データベース以外のデータベースに配置できます。

複数のCDBがある場合は、ソース・データベースを1つのCDBに配置し、ダウンストリーム取得を使用して別のCDBでの変更を取得できます。

前提条件

XStream Outを構成する前に、次の前提条件を満たす必要があります。

  • CDBのすべてのコンテナが、XStream Out構成時に読取り/書込みモードでオープンしているようにします。

  • この例では、ダウンストリーム取得を使用します。そのため、ソース・データベースからダウンストリーム・データベースへのログ・ファイル転送を構成する必要があります。

  • リアルタイムのダウンストリーム取得を使用する場合は、必要なスタンバイREDOログも追加する必要があります。

想定

この項では、次のことを想定しています。

  • アウトバウンド・サーバーの名前はxoutです。

  • アウトバウンド・サーバーで使用されるキューはc##xstrmadmin.xstream_queueです。

  • ソース・データベースは、CDB data.example.comのPDB pdb1.example.comです。

  • 取得プロセスは、CDB capture.example.comで実行されます。

  • アウトバウンド・サーバーは、CDB capture.example.comで実行されます。

  • PDB pdb1.example.comからのoe.orders表およびoe.order_items表に対するDML変更およびDDL変更は、アウトバウンド・サーバーに送信されます。

  • PDB pdb1.example.comからのhrスキーマに対するDML変更およびDDL変更は、アウトバウンド・サーバーに送信されます。

次の図は、このXStream Out構成の概要を示しています。

図24-4 複数のCDBおよびダウンストリーム取得を使用したサンプルXStream Out構成

図24-4の説明が続きます
「図24-4 複数のCDBおよびダウンストリーム取得を使用したサンプルXStream Out構成」の説明

ダウンストリーム取得を使用してCDBでXStream Outを構成するには:

  1. SQL*Plusで、ダウンストリーム取得CDBのルートにXStream管理者として接続します。

    この例では、ダウンストリーム取得CDBはcapture.example.comです。

  2. 取得プロセスで使用されるキューを作成します。

    たとえば、次のプロシージャを実行します。

    BEGIN
      DBMS_XSTREAM_ADM.SET_UP_QUEUE(
        queue_table => 'c##xstrmadmin.xstream_queue_table',
        queue_name  => 'c##xstrmadmin.xstream_queue');
    END;
    /
    
  3. 必要に応じて、ダウンストリーム取得CDBのルートからソースCDBのルートに、データベース・リンクを作成します。

    この例では、capture.example.comのルートからdata.example.comのルートに、データベース・リンクを作成します。たとえば、ユーザーc##xstrmadminが両方のデータベースでXStream管理者の場合は、次のようにデータベース・リンクを作成します。

    CREATE DATABASE LINK data.example.com CONNECT TO c##xstrmadmin 
       IDENTIFIED BY password USING 'data.example.com';
    
  4. ソースCDB内のすべてのコンテナが読取り/書込みモードでオープンしていることを確認します。

  5. ステップ3でデータベースを作成しなかった場合は、ソースCDBのルートで追加のステップを完了する必要があります。

    ステップ3でデータベース・リンクを作成した場合、これらのステップは必要ありません。

    BUILDプロシージャを実行し、ソースCDBのデータベース・オブジェクトに対して必要なサプリメンタル・ロギングが指定されていることを確認します。

    1. ソースCDBのルートにXStream管理者として接続します。

    2. DBMS_CAPTURE_ADM.BUILDプロシージャを実行します。次に例を示します。

      SET SERVEROUTPUT ON
      DECLARE
        scn  NUMBER;
      BEGIN
        DBMS_CAPTURE_ADM.BUILD(
          first_scn => scn);
        DBMS_OUTPUT.PUT_LINE('First SCN Value = ' || scn);
      END;
      /
      First SCN Value = 409391
      

      このプロシージャでは、capture.example.com CDBのルートで作成される取得プロセスの有効な先頭SCN値が表示されます。ステップ6で取得プロセスを作成するときに使用できるように、返されたSCN値をノートにとります。

    3. ソースCDBのデータベース・オブジェクトに対して必要なサプリメンタル・ロギングが指定されていることを確認します。

      この例では、hrスキーマ、oe.orders表、およびpdb1.example.com PDBのoe.order_items表に対してサプリメンタル・ロギングが構成されていることを確認してください。

  6. ダウンストリーム取得CDBのルートに接続されているときに、取得プロセスを作成します。

    たとえば、capture.example.comにXStream管理者として接続されているときに、次のプロシージャを実行して取得プロセスを作成します。

    BEGIN
      DBMS_CAPTURE_ADM.CREATE_CAPTURE(
        queue_name         => 'c##xstrmadmin.xstream_queue',
        capture_name       => 'real_time_capture',
        rule_set_name      => NULL,
        start_scn          => NULL,
        source_database    => NULL,
        use_database_link  => TRUE,
        first_scn          => NULL,
        logfile_assignment => 'implicit',
        source_root_name   => 'data.example.com',
        capture_class      => 'xstream');
    END;
    /
    

    ステップ3でデータベースを作成しなかった場合は、DBMS_CAPTURE_ADM.BUILDプロシージャによってfirst_scnパラメータに対して返されるSCN値を指定します。

    取得プロセスは起動しないでください。

  7. 取得プロセスが作成された後、必要に応じて1つ以上のPDBのオープン・モードを変更します。

  8. ADD_OUTBOUNDプロシージャを実行します。

    この項の想定に従って、次のADD_OUTBOUNDプロシージャを実行します。

    DECLARE
      tables  DBMS_UTILITY.UNCL_ARRAY;
      schemas DBMS_UTILITY.UNCL_ARRAY;
    BEGIN
        tables(1)  := 'oe.orders';
        tables(2)  := 'oe.order_items';
        schemas(1) := 'hr';
      DBMS_XSTREAM_ADM.ADD_OUTBOUND(
        server_name           =>  'xout',
        queue_name            =>  'c##xstrmadmin.xstream_queue',
        source_database       =>  'pdb1.example.com',
        table_names           =>  tables,
        schema_names          =>  schemas,
        source_root_name      => 'data.example.com',
        source_container_name => 'pdb1');
    END;
    /
    

    このプロシージャを実行すると、次のアクションが実行されます。

    • xoutという名前のアウトバウンド・サーバーを作成します。アウトバウンド・サーバーには、oe.orders表、oe.order_items表およびhrスキーマに対するDMLおよびDDL変更をクライアント・アプリケーションに送信することを指示するルール・セットがあります。ルールでは、これらの変更がCDB data.example.comのPDB pdb1.example.comで発生している必要があることを指定します。アウトバウンド・サーバーは、このキューc##xstrmadmin.xstream_queueからLCRをデキューします。

    • 現在のユーザーをアウトバウンド・サーバーのconnect_userとして設定します。この例では、current_userはXStream管理者です。クライアント・アプリケーションは、アウトバウンド・サーバーと相互作用するためにconnect_userとしてデータベースに接続する必要があります。

    ノート:

    server_name値は30バイトを超過できません。

  9. アウトバウンド・サーバーに接続してLCRを受信するクライアント・アプリケーションを作成して実行します。

    クライアント・アプリケーションを実行すると、ダウンストリーム取得CDBでアウトバウンド・サーバーが自動的に起動します。

XStream Inとマルチテナント環境

マルチテナント環境では、移植可能な一連のスキーマ、オブジェクトおよび関連構造をOracleデータベースに含めることができ、アプリケーションには論理的に別のデータベースのように見えます。

この自己完結型コレクションは、プラガブル・データベース(PDB)と呼ばれます。1つのマルチテナント・コンテナ・データベース(CDB)には複数のPDBが格納されます。アプリケーション・コンテナも含めることができます。アプリケーション・コンテナは、アプリケーション・ルートとそれに関連付けられたすべてのアプリケーションPDBから構成されるCDBのオプション・コンポーネントです。アプリケーション・コンテナには、1つ以上のアプリケーションのデータが格納されています。アプリケーション・コンテナは、アプリケーションのメタデータおよび共通データを共有します。CDBでは、CDBルート、各PDB、各アプリケーション・ルートおよび各アプリケーションPDBのそれぞれがコンテナです。

CDBでは、インバウンド・サーバーは、単一のソース・データベースからLCRを受信して、現在のコンテナ(PDB、アプリケーション・ルート、アプリケーションPDBまたはCDBルート)でのみ変更を実行するように制限されています。単一のインバウンド・サーバーは、CDBの複数のコンテナに変更を適用できません。

インバウンド・サーバーがCDBルートにある場合、適用ユーザーは共通ユーザーである必要があります。インバウンド・サーバーがアプリケーション・ルートにある場合、適用ユーザーは共通ユーザーまたはアプリケーション共通ユーザーである必要があります。インバウンド・サーバーがPDBまたはアプリケーションPDBにある場合、適用ユーザーは共通ユーザーまたはローカル・ユーザーにできます。

ノート:

XStreamでは、アプリケーション・ルート・コンテナで行われた変更を同期しません。アプリケーション・ルート・コンテナで行われた操作のレプリケートにXStream Inレプリケーションを使用しないでください。ターゲットのアプリケーション・ルート・コンテナでのこれらの変更は手動で適用できます。PDBで行われる操作はレプリケートできることに注意してください。