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構成の各コンピュータ・システム上に、表領域のためのディスクの空き領域が十分あることを確認します。表領域の推奨サイズは25MBです。

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

前提条件

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

  • XStream管理者のユーザー名は、非CDBの場合は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;
    

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

    CDBでXStream管理者を作成し、インバウンド・サーバーが、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;
    

    CDBで共通ユーザーとしてXStream管理者を作成する場合、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管理者の適切な権限を付与でき、非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を使用する環境内の各Oracleデータベースで前述のすべての手順を繰り返します。

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

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

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

  • ベスト・プラクティスは、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 Streamsプールの最小値として使用されます。環境が適切に動作するためにOracle Streamsプールに最小メモリー量が必要な場合は、最小サイズを設定できます。自動共有メモリー管理によってOracle Streamsプールに割り当てられている現行のメモリーを表示するには、V$SGA_DYNAMIC_COMPONENTSビューを問い合せます。また、V$STREAMS_POOL_STATISTICSビューを問い合せて、Oracle Streamsプールの現在の使用状況を表示できます。

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

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

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

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構成の概要を示したものです。

図9-1 サンプルのXStream In構成

図9-1の説明が続きます
「図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');