9 XStream Inの構成
XStreamによって使用されるOracle Databaseコンポーネントを構成できます。
- XStream Inの準備
XStream Inを構成する前に前提条件を満たす必要があります。 - XStream Inの構成
DBMS_XSTREAM_ADM
パッケージのCREATE_INBOUND
プロシージャはインバウンド・サーバーを作成します。インバウンド・サーバーと通信してLCRをインバウンド・サーバーに送信するクライアント・アプリケーションを作成する必要があります。
9.1 XStream Inの準備
XStream Inを構成する前に前提条件を満たす必要があります。
- XStream管理者の構成
XStream管理者は、XStream In環境でXStreamコンポーネントを構成および管理します。 - 関連する初期化パラメータの設定
一部の初期化パラメータは、XStreamインバウンド・サーバーの構成、操作、信頼性およびパフォーマンスのために重要です。これらのパラメータを適切に設定します。 - Streamsプールの構成
Streamsプールは、Oracle StreamsとXStreamコンポーネントの両方で使用されるシステム・グローバル領域(SGA)内のメモリーの一部です。Streamsプールは、バッファ・キューLCRをメモリー内に格納し、インバウンド・サーバーにメモリーを提供します。 - ソース・データベースでの必要な場合のサプリメンタル・ロギングの指定
XStream構成で、XStream Out構成の取得プロセスによって取得された変更をインバウンド・サーバーが適用する場合、インバウンド・サーバーが変更を適用するソース・データベースの表の列に関するサプリメンタル・ロギングが必要になる場合があります。
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管理者を構成するには、次の手順を実行します。
-
SQL*Plusで、ユーザーの作成、権限の付与および表領域の作成を行うことができる管理ユーザーとして接続します。これ以降のすべての手順は、この管理ユーザーとして接続したまま実行します。
関連項目:
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
-
XStream管理者用の表領域を作成するか、既存の表領域を使用します。
この表領域には、XStream管理者のスキーマに作成されたあらゆるオブジェクトが格納されます。
たとえば、次の文では、XStream管理者用の新規表領域が作成されます。
CREATE TABLESPACE xstream_tbs DATAFILE '/usr/oracle/dbs/xstream_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
CDBの共通ユーザーとしてXStream管理者を作成する場合、CDBルートおよびすべてのコンテナに表領域を作成する必要があります。共通ユーザーはすべてのコンテナの表領域へのアクセス権を持つ必要があるため、表領域はすべてのコンテナに必要です。
-
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セキュリティ・ガイドを参照してください
-
XStream管理者に
CREATE
SESSION
権限を付与します。XStream管理者として機能する新しいユーザーを作成した場合、このユーザーに
CREATE
SESSION
権限を付与します。たとえば、ユーザー
xstrmadmin
にCREATE
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;
-
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
)である必要があります。
-
-
必要に応じて、XStream管理者に追加の権限を付与します。
XStream管理者への追加権限の付与を参照してください。
-
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; /
- XStream管理者への追加権限の付与
XStream管理者に追加権限が必要な場合があります。
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
システム権限を取り消すことができます。
-
関連項目:
-
キューを管理する方法の詳細は、Oracle Streams概要および管理を参照してください
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_TARGET
、MEMORY_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プールの現在の使用状況を表示できます。
関連項目:
-
max_sga_size
適用パラメータの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
9.2 XStream Inの構成
DBMS_XSTREAM_ADM
パッケージのCREATE_INBOUND
プロシージャはインバウンド・サーバーを作成します。インバウンド・サーバーと通信してLCRをインバウンド・サーバーに送信するクライアント・アプリケーションを作成する必要があります。
XStream In構成のインバウンド・サーバーは、クライアント・アプリケーションから変更のストリームを受信します。インバウンド・サーバーは、Oracleデータベース内のデータベース・オブジェクトにこれらの変更を適用することも、カスタマイズされた方法で変更を処理することもできます。クライアント・アプリケーションはインバウンド・サーバーに連結し、OCIまたはJavaインタフェースを使用して、LCRにカプセル化された行の変更およびDDLの変更を送信できます。
前提条件
XStream Inを構成する前に、次の前提条件が満たされていることを確認します。
-
XStream Inの準備に記載されているタスクを完了します。
サンプルのXStream In構成のための前提条件
この項では、次のことを想定しています。
-
インバウンド・サーバーの名前は
xin
です。 -
インバウンド・サーバーは、XStreamクライアント・アプリケーションから受信するすべての変更を適用します。
-
インバウンド・サーバーによって使用されるキューは、
xstrmadmin.xin_queue
です。
図9-1は、このXStream In構成の概要を示したものです。
インバウンド・サーバーを作成するには、次のようにします。
-
SQL*Plusで、インバウンド・サーバーを実行するデータベースにXStream管理者として接続します。
CDB内にXStream Inを構成している場合、インバウンド・サーバーが変更を適用するコンテナに接続します。このコンテナは、CDBルート、PDB、アプリケーション・ルート、またはアプリケーションPDBの可能性があります。インバウンド・サーバーは、その固有のコンテナ内にのみ変更を適用できます。
関連項目:
-
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
-
SQL*PlusでのCDBのコンテナへの接続の詳細は、Oracleマルチテナント管理者ガイドを参照してください
-
CDBでのXStream Inの使用方法については、XStream Inおよびマルチテナント環境を参照してください。
-
-
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パッケージおよびタイプ・リファレンスを参照してください。 -
-
必要に応じて、インバウンド・サーバー用の適用ハンドラを作成します。
適用ハンドラはオプションです。適用ハンドラは、インバウンド・サーバーに送信されたLCRをカスタマイズされた方法で処理します。
関連項目:
-
インバウンド・サーバーに接続してインバウンド・サーバーにLCRを送信するクライアント・アプリケーションを作成して、実行します。
関連項目:
サンプル・アプリケーションについては、サンプルXStreamクライアント・アプリケーションを参照してください
-
インバウンド・サーバーが無効な場合、インバウンド・サーバーを起動します。
たとえば、次のように入力します。
exec DBMS_APPLY_ADM.START_APPLY('xin');