次の各項では、キューでのメッセージのステージングやキュー間でのメッセージの伝播の概念について説明します。
関連項目:
|
Oracle Streams伝播は、Oracle Schedulerを使用して内部的に構成されます。したがって、伝播ジョブは、ソース・キューから宛先キューにメッセージを伝播するジョブです。他のOracle Schedulerジョブと同様に、伝播ジョブには所有者が存在し、必要に応じてスレーブ・プロセス(j
nnn
)を使用してジョブを実行します。
次のプロシージャでは、これらのプロシージャによって伝播が作成されるときに、伝播ジョブを作成できます。
DBMS_STREAMS_ADM
パッケージのADD_GLOBAL_PROPAGATION_RULES
プロシージャ
DBMS_STREAMS_ADM
パッケージのADD_SCHEMA_PROPAGATION_RULES
プロシージャ
DBMS_STREAMS_ADM
パッケージのADD_TABLE_PROPAGATION_RULES
プロシージャ
DBMS_STREAMS_ADM
パッケージのADD_SUBSET_PROPAGATION_RULE
プロシージャ
DBMS_PROPAGATION_ADM
パッケージのCREATE_PROPAGATION
プロシージャ
このいずれかのプロシージャによって伝播が作成されると、次の場合に新しい伝播ジョブが作成されます。
queue_to_queue
パラメータをTRUE
に設定した場合、常に伝播に対して新しい伝播ジョブが作成されます。各キュー・ツー・キュー伝播には独自の伝播ジョブが作成されます。ただし、スレーブ・プロセスは複数の伝播ジョブで使用できます。
queue_to_queue
パラメータをFALSE
に設定した場合、指定されたソース・キューおよびデータベース・リンクの伝播ジョブが存在しない場合に伝播ジョブが作成されます。指定したソース・キューおよびデータベース・リンクの伝播ジョブがすでに存在する場合、新しい伝播は、既存の伝播ジョブを使用し、この伝播ジョブが、同じデータベース・リンクを使用する他のすべてのキュー・ツーdblink伝播と、この伝播ジョブを共有します。
この項の内容は次のとおりです。
注意: ソース・キューの所有者が伝播を実行しますが、伝播ジョブの所有者はそれを作成したユーザーです。この2人のユーザーは同一であっても異なっていてもかまいません。 |
伝播スケジュールでは、伝播ジョブでソース・キューから宛先キューにメッセージを伝播する頻度を指定します。各キュー・ツー・キュー伝播には独自の伝播ジョブおよび伝播スケジュールがありますが、同じ伝播ジョブを使用するキュー・ツーdblink伝播では同じ伝播スケジュールが共有されます。
デフォルトの伝播スケジュールは、DBMS_STREAMS_ADM
またはDBMS_PROPAGATION_ADM
パッケージのプロシージャによって新しい伝播ジョブが作成されるときに設定されます。
デフォルトのスケジュールのプロパティは次のとおりです。
開始時間はSYSDATE()
です。
継続期間は無限を意味するNULL
です。
次回の時刻はNULL
で、これは現行の期間が終了した直後に伝播が再開されることを意味します。
待機時間は3秒で、これはキューが空になってから伝播ジョブを再発行するまでの待機時間です。したがって、メッセージがエンキューされてから伝播されるまでの伝播期間での最大待機時間(秒単位)です。
DBMS_AQADM
パッケージのALTER_PROPAGATION_SCHEDULE
プロシージャを使用すると、伝播ジョブのスケジュールを変更できます。伝播ジョブに対する変更は、伝播ジョブを使用するすべての伝播に影響を及ぼします。
システム起動時にSTARTUP
RESTRICT
文を発行して制限付きセッションが有効化された場合、伝播スケジュールが有効化された伝播ジョブでのメッセージの伝播は行われません。制限付きセッションが無効化されると、有効化されて実行準備が整っている各伝播スケジュールは、使用可能なスレーブ・プロセスがあるときに実行されます。
SQL文ALTER
SYSTEM
ENABLE
RESTRICTED
SESSION
によって実行中のデータベースで制限付きセッションが有効化された場合、実行中の伝播ジョブは完了するまで引き続き実行されます。ただし、伝播スケジュールに対して発行された新規の伝播ジョブは開始しません。したがって、有効化されたスケジュールの伝播が最終的に停止する可能性があります。
ソース・データベースでデータベース・オブジェクトのインスタンス化が準備されている場合、オブジェクトに対する変更が取得プロセスによって取得されるデータベースで、Oracle Streamsデータ・ディクショナリが自動的に移入されます。Oracle Streamsデータ・ディクショナリは、ソース・データベースのプライマリ・データ・ディクショナリ内の一部の情報のマルチバージョン・コピーです。Oracle Streamsデータ・ディクショナリでは、ソース・データベースのオブジェクト番号、オブジェクト・バージョン情報および内部列番号が表名、列名および列のデータ型にマップされます。このマッピングによって、メッセージ内部に名前ではなく番号を格納できるため、各取得LCRのサイズが最小に保たれます。
ソース・データベースで取得LCRを伝播するデータベースでルールを評価するために、ソース・データベースにあるOracle Streamsデータ・ディクショナリ内のマッピング情報が必要になります。このマッピング情報を伝播で使用できるように、OracleはOracle Streamsの伝播がある各データベースでマルチバージョンのOracle Streamsデータ・ディクショナリを自動的に移入します。ソース・データベースにあるOracle Streamsデータ・ディクショナリからの関連情報を含む内部メッセージは、ソース・データベースから取得LCRを受信する他のすべてのデータベースに自動的に送信されます。
キュー内のこれらの内部メッセージに含まれるOracle Streamsデータ・ディクショナリ情報は、伝播によって伝播される場合と、伝播されない場合があります。どのOracle Streamsデータ・ディクショナリ情報が伝播されるかは、伝播のルール・セットによって決定されます。伝播が表のOracle Streamsデータ・ディクショナリ情報を検出すると、ソース・データベース名、表名および表の所有者などの特定の情報を使用して、その伝播のルール・セットが評価されます。これらのルール・セットの特定のルールを評価した結果、指定されたデータベースの特定の表に関連するLCRがあると判断された場合、その表のOracle Streamsデータ・ディクショナリ情報が伝播されます。
Oracle Streamsデータ・ディクショナリ情報が宛先キューに伝播されると、宛先キューにエンキューされるのみでなく、宛先キューを含むデータベースのOracle Streamsデータ・ディクショナリにも取り込まれます。したがって、有向ネットワーク構成で宛先キューを読み込む伝播は、Oracle Streamsデータ・ディクショナリの移入を待たずに、LCRを即時に転送できます。この方法により、ソース・データベースのOracle Streamsデータ・ディクショナリは常に、関連するデータベース・オブジェクトの正しい状態を、これらのデータベース・オブジェクトに関連するLCRに反映します。
Oracle Streamsを使用すると、データベース間でバイナリ・ファイルを伝播できます。これを行うには、1つ以上のBFILE
属性をメッセージ・ペイロードに入れ、メッセージをリモート・キューに伝播します。ペイロードで参照される各BFILE
は、メッセージが伝播された後、メッセージの伝播がコミットされる前にリモート・データベースに転送されます。伝播された各BFILE
のディレクトリ・オブジェクトとファイル名は保持されますが、ソース・データベースと宛先データベースの異なるディレクトリにディレクトリ・オブジェクトをマップできます。メッセージ・ペイロードは、ANYDATA
ペイロードにラップされたBFILE
、またはANYDATA
ペイロードにラップされたオブジェクトの1つ以上のBFILE
属性になります。
メッセージのペイロードでは、次のものがサポートされません。
1つ以上のBFILE
属性を含むVARRAY
1つ以上のBFILE
属性を含むANYDATA
属性を持つ、ユーザー定義型オブジェクト
Oracle StreamsでのBFILE
の伝播には、DBMS_FILE_TRANSFER.PUT_FILE
プロシージャと同じ制限があります。
関連項目: DBMS_FILE_TRANSFER パッケージを使用したファイルの転送方法の詳細は、『Oracle Database管理者ガイド』および『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照 |