この章で説明する各タスクは、特に指定がないかぎり、適切な権限を付与されたOracle Streams管理者が実行する必要があります。
Oracle Streams環境では、メッセージはキューに格納されます。メッセージに対しては、エンキュー、異なるキュー間での伝播、およびデキューの処理を行うことができます。ANYDATA
キューには、ペイロードがANYDATA
タイプのメッセージが格納されます。したがって、ペイロードがANYDATA
ラッパーにラップされている場合は、ほぼすべてのタイプのペイロードを含むメッセージをANYDATA
キューに格納できます。Oracle Streamsの各取得プロセス、同期取得、適用プロセスおよびメッセージ・クライアントが1つのANYDATA
キューに関連付けられ、Oracle Streamsの各伝播が1つのANYDATA
ソース・キューと1つのANYDATA
宛先キューに関連付けられます。
ANYDATA
キューを作成する最も簡単な方法は、DBMS_STREAMS_ADM
パッケージのSET_UP_QUEUE
プロシージャを使用することです。このプロシージャを使用すると、作成するANYDATA
キューについて次の設定を指定できます。
キューのキュー表
キュー表のSTORAGE句
キュー名
キューの保護キュー・ユーザーとして構成され、キューに対するENQUEUE
およびDEQUEUE
権限が付与されるキュー・ユーザー
キューに関するコメント
指定したキュー表が存在しない場合は、キュー表が作成されます。指定したキュー表が存在する場合は、既存のキュー表が新規キュー用に使用されます。キューの作成時にキュー表を指定しないと、デフォルトでstreams_queue_table
が指定されます。
たとえば、SET_UP_QUEUE
プロシージャを使用してANYDATA
キューを作成するには、次の手順を実行します。
ANYDATA
キューを作成する前に、「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてキューを作成するデータベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
SET_UP_QUEUE
プロシージャを実行して、次のキューを作成します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.streams_queue_table', queue_name => 'strmadmin.streams_queue', queue_user => 'hr'); END; /
このプロシージャを実行すると、次のアクションが実行されます。
strmadmin
スキーマ内にキュー表streams_queue_table
が作成されます。このキュー表が作成されるのは、それが存在しない場合のみです。このキュー表に基づくキューには、ANYDATA
タイプのメッセージが格納されます。キュー表の名前は、最大で24バイトです。
strmadmin
スキーマ内にキューstreams_queue
が作成されます。このキューが作成されるのは、それが存在しない場合のみです。キューの名前は、最大で24バイトです。
streams_queue
キューがstrmadmin.streams_queue_table
キュー表に基づくように指定されます。
hr
ユーザーがキューの保護キュー・ユーザーとして構成され、このユーザーにキューに対するENQUEUE
権限とDEQUEUE
権限が付与されます。
キューの起動。
SET_UP_QUEUE
プロシージャで明示的に設定しないパラメータには、デフォルトの設定が使用されます。
SET_UP_QUEUE
プロシージャでキュー表が作成されるとき、次のDBMS_AQADM.CREATE_QUEUE_TABLE
パラメータ設定が指定されます。
データベースがOracle Database 10g リリース2以上の場合、sort_list
設定はcommit_time
です。データベースがOracle Database 10g リリース2より前のリリースの場合、sort_list
設定はenq_time
です。
multiple_consumers
設定はTRUE
です。
message_grouping
設定はtransactional
です。
secure
設定はTRUE
です。
CREATE_QUEUE_TABLE
プロシージャの他のパラメータは、それぞれのデフォルト値に設定されます。
DBMS_AQADM
パッケージのCREATE_QUEUE_TABLE
プロシージャを使用すると、DBMS_STREAMS_ADM
パッケージのSET_UP_QUEUE
プロシージャで指定されたデフォルト・プロパティ以外のプロパティを使用してANYDATA
タイプのキュー表を作成できます。CREATE_QUEUE_TABLE
プロシージャでキュー表を作成した後、そのキュー表を使用するキューを作成できます。そのためには、SET_UP_QUEUE
プロシージャのqueue_table
パラメータにそのキュー表を指定します。
同様に、SET_UP_QUEUE
のかわりに、DBMS_AQADM
パッケージのCREATE_QUEUE
プロシージャを使用してキューを作成できます。CREATE_QUEUE
は、キューにカスタム設定が必要な場合に使用します。たとえば、CREATE_QUEUE
を使用して、カスタムの再試行遅延や保存時間を指定できます。CREATE_QUEUE
を使用する場合は、キューを手動で起動する必要があります。
注意:
|
関連項目:
|
伝播では、Oracle Streamsソース・キューからOracle Streams宛先キューにメッセージを送信します。また、Oracle Databaseアドバンスト・キューイング(AQ)の機能を使用して、Oracle Streamsの伝播を管理できます。
次の任意のプロシージャを使用して、2つのANYDATA
キュー間の伝播を作成できます。
DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES
DBMS_PROPAGATION_ADM.CREATE_PROPAGATION
DBMS_STREAMS_ADM
パッケージのこれらの各プロシージャでは、名前を指定して伝播を作成したり(存在しない場合)、伝播にポジティブ・ルール・セットまたはネガティブ・ルール・セットを作成します(伝播にこれらのルール・セットがない場合)。また、ルール・セットに表ルール、スキーマ・ルールまたはグローバル・ルールを追加することもできます。
CREATE_PROPAGATION
プロシージャでは、伝播は作成しますが、その伝播のルール・セットやルールは作成しません。ただし、CREATE_PROPAGATION
プロシージャを使用すると、伝播にポジティブ・ルール・セットまたはネガティブ・ルール・セットとして関連付ける既存のルール・セットを指定できます。すべての伝播が作成時に自動的に起動されます。
この項の内容は、次のとおりです。
注意: DBMS_STREAMS_ADM パッケージのプロシージャまたはOracle Enterprise Manager Cloud Controlを使用して、Oracle Streams環境全体(伝播を含む)を構成できます。第2章「Oracle Streamsレプリケーションの簡単な構成」を参照してください。 |
関連項目:
|
伝播を作成する前に、次のタスクを完了する必要があります。
「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
存在しない場合は、伝播のソース・キューと宛先キューを作成します。キューは両方ともANYDATA
キューである必要があります。この章の例では、ソース・キューがstrmadmin.strm_a_queue
、宛先キューがstrmadmin.strm_b_queue
であると想定しています。手順については、「ANYDATAキューの作成」を参照してください。
DBMS_STREAMS_ADM
パッケージのADD_TABLE_PROPAGATION_RULES
プロシージャを使用して伝播を作成するには、次の手順を実行します。
「伝播の作成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者として伝播のソース・キューを含むデータベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
ADD_TABLE_PROPAGATION_RULES
プロシージャを実行して、次の伝播を作成します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES( table_name => 'hr.departments', streams_name => 'strm01_propagation', source_queue_name => 'strmadmin.strm_a_queue', destination_queue_name => 'strmadmin.strm_b_queue@dbs2.example.com', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => FALSE, source_database => 'dbs1.example.com', inclusion_rule => TRUE, queue_to_queue => TRUE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
伝播strm01_propagation
が作成されます。この伝播が作成されるのは、それが存在しない場合のみです。
伝播で現行のデータベース内のstrmadmin.strm_a_queue
からdbs2.example.com
データベース内のstrmadmin.strm_b_queue
に論理変更レコード(LCR)を伝播するように指定されます。これらのキューは必ず存在している必要があります。
destination_queue_name
パラメータに@dbs2.example.com
が指定されているため、伝播でdbs2.example.com
データベース・リンクを使用してLCRを伝播させるように指定されます。このデータベース・リンクは必ず存在している必要があります。
inclusion_rule
パラメータがTRUE
に設定されているため、ポジティブ・ルール・セットが作成され、伝播に関連付けられます。このルール・セットでは、評価コンテキストSYS.STREAMS$_EVALUATION_CONTEXT
が使用されます。ルール・セット名は、システムによって生成されます。
2つのルールが作成されます。一方のルールは、hr.departments
表に対するデータ操作言語(DML)変更の結果を含む行LCRについてTRUE
と評価されます。もう一方のルールは、hr.departments
表に対するデータ定義言語(DDL)変更を含むDDL LCRについてTRUE
と評価されます。ルール名は、システムによって生成されます。
この2つのルールが、伝播に関連付けられたポジティブ・ルール・セットに追加されます。inclusion_rule
パラメータがTRUE
に設定されているため、ルールはポジティブ・ルール・セットに追加されます。
include_tagged_lcr
パラメータがFALSE
に設定されているため、NULL
タグがある場合にのみ伝播でLCRを伝播させるように設定されます。この動作は、伝播のシステム作成ルールを介して実行されます。
伝播されているLCRのソース・データベースがdbs1.example.com
であることを指定しますが、これが現行のデータベースになるとはかぎりません。ソース・データベースが異なるソース・キューのLCRは伝播されません。
キュー・ツー・キュー伝播の伝播ジョブが作成されます。
注意: キュー・ツー・キュー伝播を使用するには、伝播に使用されるキューが含まれる各データベースの互換レベルが10.2.0 以上である必要があります。 |
DBMS_PROPAGATION_ADM
パッケージのCREATE_PROPAGATION
プロシージャを使用して伝播を作成するには、次の手順を実行します。
「伝播の作成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者として伝播のソース・キューを含むデータベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
伝播で使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm01_rule_set
であると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。
CREATE_PROPAGATION
プロシージャを実行して、次の伝播を作成します。
BEGIN DBMS_PROPAGATION_ADM.CREATE_PROPAGATION( propagation_name => 'strm02_propagation', source_queue => 'strmadmin.strm_a_queue', destination_queue => 'strmadmin.strm_b_queue', destination_dblink => 'dbs2.example.com', rule_set_name => 'strmadmin.strm01_rule_set', queue_to_queue => TRUE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
伝播strm02_propagation
が作成されます。同じ名前の伝播は存在できません。
伝播で現行のデータベース内のstrmadmin.strm_a_queue
からdbs2.example.com
データベース内のstrmadmin.strm_b_queue
にメッセージを伝播するように指定されます。これらのキューは必ず存在している必要があります。伝播のルール・セット内のルールに応じて、伝播されるメッセージはLCRまたはユーザー・メッセージ(あるいはその両方)になります。
伝播でdbs2.example.com
データベース・リンクを使用してメッセージを伝播するように指定されます。このデータベース・リンクは必ず存在している必要があります。
伝播が、ルール・セットstrmadmin.strm01_rule_set
に関連付けられます。このルール・セットは必ず存在している必要があります。このルール・セットは、伝播のポジティブ・ルール・セットです。
キュー・ツー・キュー伝播の伝播ジョブが作成されます。
注意: キュー・ツー・キュー伝播を使用するには、伝播に使用されるキューが含まれる各データベースの互換レベルが10.2.0 以上である必要があります。 |