9 XStream Inの構成

XStreamによって使用されるOracle Databaseコンポーネントを構成できます。

9.1 XStream Inの準備

XStream Inを構成する前に、前提条件を満たしておく必要があります。

9.1.1 XStream管理者の構成

XStream管理者は、XStream In環境内のXStreamコンポーネントを構成および管理します。

ユーザーに適切な権限を付与することによって、XStream管理者を構成できます。XStream構成に含まれる各OracleデータベースでXStream管理者を構成する必要があります。

マルチテナント・コンテナ・データベース(CDB)でXStream Inを構成する場合は、インバウンド・サーバーを実行するコンテナでXStream管理者を構成します。このコンテナには、CDBルート、プラガブル・データベース(PDB)、アプリケーション・ルートまたはアプリケーションPDBを使用できます。CDBでのXStream Inの使用の詳細は、XStream Inとマルチテナント環境を参照してください。

前提条件

XStream管理者を構成する前に、次の前提条件が満たされていることを確認してください。

  • XStream構成内の各データベースに、ユーザーの作成、権限の付与および表領域の作成を実行できる管理ユーザーとしてログインできることを確認します。

  • セキュリティ上の構成として、信頼できるユーザー・モデルと信頼されないユーザー・モデルのどちらを使用するかを決定します。詳細はXStreamのセキュリティ・モデルを参照してください。

  • XStream管理者として指定するユーザーを識別します。適切な権限を持つ新規ユーザーを作成するか、これらの権限を既存のユーザーに付与します。

    SYSユーザーまたはSYSTEMユーザーをXStream管理者として使用しないでください。また、XStream管理者が、SYSTEM表領域をデフォルト表領域として使用しないことを確認してください。

  • XStream管理者に新しい表領域が必要な場合は、XStream構成内の各コンピュータ・システムに、その表領域用の十分な空き領域があることを確認します。表領域の推奨サイズは25 MBです。

  • DBMS_XSTREAM_AUTHパッケージのサブプログラムを実行するユーザーにはSYSDBA管理権限が必要であり、接続時にAS SYSDBAを使用してこの権限を行使する必要があります。

前提

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

  • CDB以外の場合のXStream管理者のユーザー名はxstrmadminです。CDBでは、XStream管理者が共通ユーザーであれば、XStream管理者のユーザー名はc##xstrmadminです。CDBのXStream管理者がコンテナのローカル・ユーザーである場合、XStream管理者のユーザー名はxstrmadminです。

  • XStream管理者が使用する表領域はxstream_tbsです。

XStream管理者を構成するには:

  1. SQL*Plusで、ユーザーの作成、権限の付与および表領域の作成を行うことができる管理ユーザーとして接続します。これ以降のすべてのステップは、この管理ユーザーとして接続したまま実行します。

    関連項目:

    SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照

  2. XStream管理者用の表領域を作成するか、既存の表領域を使用します。

    この表領域には、XStream管理者のスキーマで作成されるオブジェクトが格納されます。

    たとえば、次の文では、XStream管理者用の新規表領域が作成されます。

    CREATE TABLESPACE xstream_tbs DATAFILE '/usr/oracle/dbs/xstream_tbs.dbf' 
      SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
    

    CDB内の共通ユーザーとしてXStream管理者を作成する場合は、CDBルートとすべてのコンテナに表領域を作成する必要があります。共通ユーザーはすべてのコンテナの表領域へのアクセス権を持っている必要があるため、表領域はすべてのコンテナに必要です。

  3. XStream管理者として機能する新しいユーザーを作成するか、既存のユーザーを識別します。

    たとえば、xstrmadminという名前のユーザーを作成し、このユーザーがxstream_tbs表領域を使用するように指定するには、次の文を実行します。

    CREATE USER xstrmadmin IDENTIFIED BY password 
      DEFAULT TABLESPACE xstream_tbs
      QUOTA UNLIMITED ON xstream_tbs;
    

    XStream管理者をCDBで作成し、インバウンド・サーバーがCDBルート内に配置されている場合、XStream管理者は共通ユーザーである必要があります。

    XStream管理者をCDBで作成し、インバウンド・サーバーがPDB、アプリケーション・ルートまたはアプリケーションPDBに配置されている場合、XStream管理者は共通ユーザーにすることも、ローカル・ユーザーにすることもできます。ただし、インバウンド・サーバーがCDBルート以外のコンテナに配置されている場合でも、共通ユーザーをXStream管理者として構成することをお薦めします。

    共通ユーザーを作成するには、現在のコンテナがCDBルートになっている状態で、CREATE USER文にCONTAINER=ALL句を含めて実行します。

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

    ノート:

    管理ユーザーの適切なパスワードを入力します。

    関連項目:

    パスワード選択のガイドラインについては、Oracle Databaseセキュリティ・ガイドを参照

  4. XStream管理者にCREATE SESSION権限を付与します。

    XStream管理者として機能する新しいユーザーを作成した場合は、このユーザーにCREATE SESSION権限を付与します。

    たとえば、ユーザーxstrmadminCREATE SESSION権限を付与するには、次の文を実行します。

    GRANT CREATE SESSION TO xstrmadmin;
    

    XStream管理者をCDBの共通ユーザーとして作成する場合は、XStream管理者にCREATE SESSION権限とSET CONTAINER権限を付与し、CONTAINER=ALL句を文に追加します。

    たとえば、CDBでユーザーxstrmadminにこれらの権限を付与するには、次の文を実行します。

    GRANT CREATE SESSION, SET CONTAINER TO c##xstrmadmin CONTAINER=ALL;
    
  5. DBMS_XSTREAM_AUTHパッケージのGRANT_ADMIN_PRIVILEGEプロシージャを実行します。

    ユーザー作成サブプログラム内でパッケージのサブプログラムを実行する場合、ユーザーには、パッケージに対するEXECUTE権限を明示的に付与する必要があります。また、ユーザー作成サブプログラム内のビューを問い合せる場合は、そのデータ・ディクショナリ・ビューに対する明示的なREADまたはSELECT権限が必要です。これらの権限は、ロールでは付与できません。これらの権限をXStream管理者に付与するには、GRANT_ADMIN_PRIVILEGEプロシージャを実行するか、直接付与します。

    GRANT_ADMIN_PRIVILEGEプロシージャのパラメータの設定に応じて、信頼できるXStream管理者または信頼されないXStream管理者のそれぞれに該当する権限を付与できます。また、CDBでもCDB以外でも権限を付与できます。表9-1は、それぞれのケースに対応するキー・パラメータの設定を示したものです。

    表9-1 GRANT_ADMIN_PRIVILEGEのキー・パラメータの設定

    XStream管理者のタイプ grant_select_privilegesパラメータの設定 containerパラメータの設定

    CDB以外で信頼できる管理者

    TRUE

    CURRENT(デフォルト)

    CDB以外で信頼されない管理者

    FALSE(デフォルト)

    CURRENT (デフォルト)

    CDBで信頼できる管理者

    TRUE

    ALLまたはCURRENT

    CDBで信頼されない管理者

    FALSE (デフォルト)

    ALLまたはCURRENT

    ノート:

    • いずれのシナリオでも、XStream管理者がデータベース上のXStream OutとXStream Inの両方の構成を管理する必要がある場合は、privilege_typeパラメータに*を指定します。

    • CDBでは、containerパラメータにALLが指定されている場合、現在のコンテナはCDBルート(CDB$ROOT)である必要があります。

  6. 必要に応じて、XStream管理者に追加の権限を付与します。

    XStream管理者への追加の権限の付与を参照してください。

  7. 環境内のXStreamを使用する各データベースで前述のすべてのステップを繰り返します。

例9-1 CDB以外での信頼できるXStream管理者への権限付与(スクリプト生成なし)

BEGIN
   DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
      grantee                 => 'xstrmadmin',
      privilege_type          => 'APPLY',
      grant_select_privileges => TRUE);
END;
/

例9-2 CDB以外での信頼できるXStream管理者への権限付与とスクリプトの生成

directory_nameパラメータに指定されるディレクトリが存在し、現在のユーザーがそのディレクトリにアクセスできる必要があります。

BEGIN
   DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
      grantee                 => 'xstrmadmin',
      privilege_type          => 'APPLY',
      grant_select_privileges => TRUE,
      do_grants               => TRUE,
      file_name               => 'grant_xstrm_privs.sql',
      directory_name          => 'xstrm_dir');
END;
/

例9-3 CDB以外での信頼されないXStream管理者への権限付与(スクリプト生成なし)

BEGIN
   DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
      grantee                 => 'xstrmadmin',
      privilege_type          => 'APPLY',
      grant_select_privileges => FALSE);
END;
/

例9-4 CDBでの信頼できるXStream管理者への権限付与(スクリプト生成なし)

この例では、XStream管理者は共通ユーザーです。

BEGIN
   DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
      grantee                 => 'c##xstrmadmin',
      privilege_type          => 'APPLY',
      grant_select_privileges => TRUE,
      container               => 'ALL');
END;
/
9.1.1.1 XStream管理者への追加の権限の付与

XStream管理者に追加権限が必要な場合があります。

必要に応じて、次の追加の権限のうちいずれかをXStream管理者に付与します。

  • Oracle Enterprise Manager Cloud Controlを使用してXStreamコンポーネントを含むデータベースを管理する場合は、XStream管理者が信頼されており、DBAロールを付与されている必要があります。また、XStream管理者をOracle Enterprise Manager管理ユーザーとして構成する必要があります。これにより、Oracle Enterprise Manager Cloud Controlジョブの実行に必要な権限など、Oracle Enterprise Manager Cloud Controlで必要な追加の権限が付与されます。Oracle Enterprise Manager管理ユーザーの作成については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照してください。

  • インバウンド・サーバーに適用ユーザーが指定されていない場合は、他のユーザーが所有している適用オブジェクトに対してDML変更およびDDL変更を実行するために必要な権限をXStream管理者に付与します。適用ユーザーが指定されている場合、適用ユーザーにはこれらの権限が必要です。これらの権限は、直接またはロールを介して付与できます。

  • インバウンド・サーバーに適用ユーザーが指定されていない場合は、他のユーザーが所有しており、インバウンド・サーバーが実行するPL/SQLサブプログラムに対するEXECUTE権限を、XStream管理者に付与します。これらのサブプログラムは、適用ハンドラまたはエラー・ハンドラで使用できます。適用ユーザーが指定されている場合、適用ユーザーにはこれらの権限が必要です。これらの権限は、直接付与する必要があります。ロールを介して付与することはできません。

  • 別のユーザーが所有しているPL/SQLファンクションのうち、インバウンド・サーバーで使用されるルールのカスタム・ルールベースの変換で指定されているすべてのファンクションに対するEXECUTE権限を、XStream管理者に付与します。インバウンド・サーバーで適用ユーザーが指定されている場合、その適用ユーザーにはこれらの権限が必要です。これらの権限は、直接付与する必要があります。ロールを介して付与することはできません。

  • XStream管理者がインバウンド・サーバーによって使用されるキューを所有しておらず、キューの作成時にそのキューのキュー・ユーザーとして指定されていない場合、XStream管理者がLCRをキューにエンキューしたり、キューからデキューできるようにするには、XStream管理者をそのキューの保護キュー・ユーザーとして構成する必要があります。また、XStream管理者には、そのキューに対するENQUEUE権限またはDEQUEUE権限(あるいはその両方)が必要な場合があります。

  • XStream管理者がアクセスする必要がある可能性がある任意のオブジェクト・タイプに対するEXECUTE権限をXStream管理者に付与します。これらの権限は、直接またはロールを介して付与できます。

  • Oracle Database Vaultを使用している場合は、次の追加の権限が必要です。

    • インバウンド・サーバーの適用ユーザーに、レプリケートされたデータベース・オブジェクトを含むレルムに変更を適用するための権限を付与する必要があります。レプリケートされたデータベース・オブジェクトは、インバウンド・サーバーが変更を適用するオブジェクトです。

      適用ユーザーにレルムに対する権限を付与するには、DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを実行して、レルムおよび適用ユーザーを指定します。たとえば、salesレルムに対する権限を適用ユーザーxstrmadminに付与するには、次のプロシージャを実行します。

      BEGIN
        DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALM(
          realm_name  => 'sales', 
          grantee     => 'xstrmadmin');
      END;
      /
      
    • インバウンド・サーバーを作成または変更するユーザーに、BECOME USERシステム権限を付与する必要があります。

      Oracle Database Vaultがインストールされていない場合は、これらのアクションを実行するユーザーにBECOME USERシステム権限を付与する必要はありません。必要に応じて、これらのいずれかのアクションの完了後に、ユーザーのBECOME USERシステム権限を取り消すことができます。

9.1.2 関連する初期化パラメータの設定

一部の初期化パラメータは、XStreamインバウンド・サーバーの構成、動作、信頼性およびパフォーマンスにとって重要な意味を持ちます。これらのパラメータを適切な値に設定します。

XStreamインバウンド・サーバーに適用される要件は次のとおりです。

  • PROCESSES初期化パラメータが、インバウンド・サーバーのバックグラウンド・プロセスおよびOracle Databaseの他のすべてのバックグラウンド・プロセスに対応できる十分な大きさの値に設定されていることを確認してください。

  • SESSIONS初期化パラメータが、インバウンド・サーバーのバックグラウンド・プロセスによって使用されるセッションおよびOracle Databaseの他のすべてのセッションに対応できる十分な大きさの値に設定されていることを確認してください。

9.1.3 Streamsプールの構成

Streamsプールは、Oracle ReplicationおよびXStreamコンポーネントの両方で使用されるシステム・グローバル領域(SGA)内のメモリーの一部です。Streamsプールは、バッファ・キューのLCRをメモリーに格納し、インバウンド・サーバーにメモリーを提供します。

Streamsプールの構成に関する考慮事項は次のとおりです。

  • Streamsプール用に300 MB以上のメモリーが必要です。

  • ベスト・プラクティスとして、STREAMS_POOL_SIZE初期化パラメータを、必要なStreamsプールのサイズに明示的に設定することをお薦めします。

  • XStream Inの構成後、max_sga_size適用パラメータを使用して、インバウンド・サーバー専用に割り当てられるSGAメモリーの量を制御できます。

  • 各データベースのStreamsプールに、XStreamコンポーネントを実行し、LCRを格納してコンポーネントを正しく実行するための十分な容量があることを確認してください。

  • Streamsプールは、インバウンド・サーバーの初回起動時に初期化されます。

次の条件が満たされる場合、Streamsプール・サイズはSTREAMS_POOL_SIZEパラメータによって指定される値(バイト単位)になります。

  • MEMORY_TARGETMEMORY_MAX_TARGETおよびSGA_TARGET初期化パラメータがすべて0(ゼロ)に設定されている。

  • STREAMS_POOL_SIZE初期化パラメータが0(ゼロ)以外の値に設定されている。

次の条件が満たされる場合、自動共有メモリー管理機能によってStreamsプールのサイズが自動的に管理されます。

  • MEMORY_TARGETおよびMEMORY_MAX_TARGET初期化パラメータの両方が0(ゼロ)に設定されている。

  • SGA_TARGET初期化パラメータが0(ゼロ)以外の値に設定されている。

自動共有メモリー管理を使用している場合に、STREAMS_POOL_SIZE初期化パラメータも0(ゼロ)以外の値に設定すると、自動共有メモリー管理でその値がOracle Replicationプールの最小値として使用されます。ご使用の環境が、正しく機能するにはOracle Replicationプールの最小メモリー量の指定を必要とする場合は、最小サイズを設定できます。自動共有メモリー管理によってOracle Replicationプールに割り当てられている現在のメモリーを表示するには、V$SGA_DYNAMIC_COMPONENTSビューを問い合せます。また、V$STREAMS_POOL_STATISTICSビューを問い合せることで、Oracle Replicationプールの現在の使用状況を表示できます。

9.1.4 ソース・データベースでのサプリメンタル・ロギングの指定(必要な場合)

XStream Out構成の取得プロセスによって取得された変更をインバウンド・サーバーが適用するXStream構成では、ソース・データベースでインバウンド・サーバーが変更を適用する表の列に対して、サプリメンタル・ロギングが必要になる場合があります。

必要なサプリメンタル・ロギングは、作成するインバウンド・サーバーの構成によって異なります。

9.2 XStream Inの構成

DBMS_XSTREAM_ADMパッケージのCREATE_INBOUNDプロシージャは、インバウンド・サーバーを作成します。インバウンド・サーバーと通信し、LCRをインバウンド・サーバーに送信するクライアント・アプリケーションを作成する必要があります。

XStream In構成のインバウンド・サーバーは、クライアント・アプリケーションから変更のストリームを受信します。インバウンド・サーバーは、これらの変更をOracleデータベース内のデータベース・オブジェクトに適用することも、これらの変更をカスタマイズされた方法でを処理することもできます。クライアント・アプリケーションは、インバウンド・サーバーに接続し、OCIまたはJavaインタフェースを使用して、LCRにカプセル化された行変更とDDL変更を送信できます。

前提条件

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

XStream In構成例の前提

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

  • インバウンド・サーバーの名前はxinです。

  • インバウンド・サーバーは、XStreamクライアント・アプリケーションから受信したすべての変更を適用します。

  • インバウンド・サーバーが使用するキューはxstrmadmin.xin_queueです。

図9-1に、このXStream In構成の概要を示します。

インバウンド・サーバーを作成するには:

  1. SQL*Plusで、インバウンド・サーバーを実行するデータベースにXStream管理者として接続します。

    CDBでXStream Inを構成する場合は、インバウンド・サーバーが変更を適用するコンテナに接続します。このコンテナには、CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBを使用できます。インバウンド・サーバーは、自身が配置されているコンテナでのみ変更を適用できます。

    関連項目:

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

    たとえば、次のCREATE_INBOUNDプロシージャは、xinという名前のインバウンド・サーバーを構成します。

    BEGIN
      DBMS_XSTREAM_ADM.CREATE_INBOUND(
        server_name => 'xin',
        queue_name  => 'xin_queue');
    END;
    /
    

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

    • xinという名前のインバウンド・サーバーを作成します。

    • xin_queueという名前のキューをインバウンド・サーバーのキューとして設定します。このキューが存在しない場合は、これを作成します。このキューは、クライアント・アプリケーションによって送信されたLCRは格納しません。かわりに、LCRでエラーが発生した場合に、エラー・トランザクションを格納します。現在のユーザーはキューの所有者です。この例では、現在のユーザーはXStream管理者です。

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

    ヒント:

    デフォルトでは、インバウンド・サーバーはルールまたはルール・セットを使用しません。このため、クライアント・アプリケーションによって送信されたすべてのLCRが処理されます。ルールおよびルール・セットを追加するには、DBMS_XSTREAM_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照してください。

  3. 必要に応じて、インバウンド・サーバーの適用ハンドラを作成します。

    適用ハンドラはオプションです。適用ハンドラは、インバウンド・サーバーに送信されたLCRをカスタマイズされた方法で処理します。

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

    関連項目:

    サンプル・アプリケーションについては、サンプルXStreamクライアント・アプリケーションを参照

  5. インバウンド・サーバーが使用不可の場合は、インバウンド・サーバーを起動します。

    たとえば、次のように入力します。

    exec DBMS_APPLY_ADM.START_APPLY('xin');