9 XStream Inの構成
XStreamによって使用されるOracle Databaseコンポーネントを構成できます。
- XStream Inの準備
XStream Inを構成する前に前提条件を満たす必要があります。 - XStream Inの構成
DBMS_XSTREAM_ADM
パッケージのCREATE_INBOUND
プロシージャはインバウンド・サーバーを作成します。インバウンド・サーバーと通信してLCRをインバウンド・サーバーに送信するクライアント・アプリケーションを作成する必要があります。
関連項目:
親トピック: XStream In
9.1 XStream Inの準備
XStream Inを構成する前に、前提条件を満たしておく必要があります。
- XStream管理者の構成
XStream管理者は、XStream In環境でXStreamコンポーネントを構成および管理します。 - 関連する初期化パラメータの設定
一部の初期化パラメータは、XStreamインバウンド・サーバーの構成、操作、信頼性およびパフォーマンスのために重要です。これらのパラメータを適切に設定します。 - Streamsプールの構成
Streamsプールは、Oracle ReplicationおよびXStreamコンポーネントの両方で使用されるシステム・グローバル領域(SGA)内のメモリーの一部です。Streamsプールは、バッファ・キューのLCRをメモリーに格納し、インバウンド・サーバーにメモリーを提供します。 - ソース・データベースでの必要な場合のサプリメンタル・ロギングの指定
XStream構成で、XStream Out構成の取得プロセスによって取得された変更をインバウンド・サーバーが適用する場合、インバウンド・サーバーが変更を適用するソース・データベースの表の列に関するサプリメンタル・ロギングが必要になる場合があります。
親トピック: 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管理者を構成するには:
-
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;
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セキュリティ・ガイドを参照
-
XStream管理者に
CREATE
SESSION
権限を付与します。XStream管理者として機能する新しいユーザーを作成した場合は、このユーザーに
CREATE
SESSION
権限を付与します。たとえば、ユーザー
xstrmadmin
にCREATE
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;
-
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
)である必要があります。
-
-
必要に応じて、XStream管理者に追加の権限を付与します。
XStream管理者への追加の権限の付与を参照してください。
-
環境内の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; /
- XStream管理者への追加権限の付与
XStream管理者に追加権限が必要な場合があります。
親トピック: XStream Inの準備
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
システム権限を取り消すことができます。
-
親トピック: XStream管理者の構成
9.1.2 関連する初期化パラメータの設定
一部の初期化パラメータは、XStreamインバウンド・サーバーの構成、動作、信頼性およびパフォーマンスにとって重要な意味を持ちます。これらのパラメータを適切な値に設定します。
XStreamインバウンド・サーバーに適用される要件は次のとおりです。
-
PROCESSES
初期化パラメータが、インバウンド・サーバーのバックグラウンド・プロセスおよびOracle Databaseの他のすべてのバックグラウンド・プロセスに対応できる十分な大きさの値に設定されていることを確認してください。 -
SESSIONS
初期化パラメータが、インバウンド・サーバーのバックグラウンド・プロセスによって使用されるセッションおよびOracle Databaseの他のすべてのセッションに対応できる十分な大きさの値に設定されていることを確認してください。
親トピック: XStream Inの準備
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_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 Replicationプールの最小値として使用されます。ご使用の環境が、正しく機能するにはOracle Replicationプールの最小メモリー量の指定を必要とする場合は、最小サイズを設定できます。自動共有メモリー管理によってOracle Replicationプールに割り当てられている現在のメモリーを表示するには、V$SGA_DYNAMIC_COMPONENTS
ビューを問い合せます。また、V$STREAMS_POOL_STATISTICS
ビューを問い合せることで、Oracle Replicationプールの現在の使用状況を表示できます。
関連項目:
-
max_sga_size
適用パラメータの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照
親トピック: XStream Inの準備
9.1.4 ソース・データベースでのサプリメンタル・ロギングの指定(必要な場合)
XStream Out構成の取得プロセスによって取得された変更をインバウンド・サーバーが適用するXStream構成では、ソース・データベースでインバウンド・サーバーが変更を適用する表の列に対して、サプリメンタル・ロギングが必要になる場合があります。
必要なサプリメンタル・ロギングは、作成するインバウンド・サーバーの構成によって異なります。
関連項目:
親トピック: XStream Inの準備
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');
親トピック: XStream Inの構成