17 伝播のベスト・プラクティス

この章では、Oracle Streamsレプリケーション環境でメッセージを伝播するベスト・プラクティスについて説明します。この章の内容は、次のとおりです。

17.1 伝播の構成のベスト・プラクティス

ここでは、伝播を構成するベスト・プラクティスについて説明します。

17.1.1 キュー・ツー・キュー伝播の使用

伝播は、キュー・ツー・キューまたはキュー・ツー・データベース・リンク(キュー・ツーdblink)です。可能な場合は、キュー・ツー・キュー伝播を使用します。キュー・ツー・キュー伝播は、常に、ソース・キューから接続先キューにメッセージを伝播する独自の排他伝播ジョブを所有しています。各伝播ジョブには独自の伝播スケジュールがあるため、各キュー・ツー・キュー伝播の伝播スケジュールは個別に管理できます。複数のキュー・ツー・キュー伝播が同じデータベース・リンクを使用する場合でも、各伝播の無効化、有効化および伝播スケジュールの設定を個別に行うことができます。

Oracle Database 10gリリース2よりも前に構成された伝播は、キュー・ツーdblink伝播です。また、Oracle Database 10gリリース2よりも前のデータベース内のキューを含むすべての伝播は、キュー・ツーdblink伝播である必要があります。キュー・ツーdblink伝播が使用されると、データベース・リンクが宛先キューの所有するインスタンスに接続しない場合、伝播は成功しません。

Oracle Databaseの以前のリリースで作成されたキュー・ツーdblink伝播を所有する場合、キュー・ツー・キュー伝播を使用するには、メンテナンス・ウィンドウでこれらの伝播を再作成できます。伝播を再作成するには、次の手順を実行します。

  1. 伝播を停止します。
  2. ソース・キューが空であることを確認します。
  3. 伝播を削除する前に、宛先キューが空で、未適用のオーバーフローしたメッセージがないことを確認します。
  4. 作成プロシージャのqueue_to_queueパラメータをTRUEに設定して伝播を再作成します。

「Oracle Streamsレプリケーション構成の自動化」の説明に従って構成を自動化すると、各伝播でキュー・ツー・キュー伝播が自動的に使用されるようになります。

関連項目:

17.1.2 各伝播の伝播待機時間の設定

伝播待機時間は、メッセージがエンキューされてから伝播されるまでの伝播期間における最大待機時間(秒単位)です。伝播待機時間を、Oracle Streamsレプリケーション環境内の各伝播に対する適切な値に設定します。デフォルトの伝播待機時間の値は60です。

次の例では、指定された、異なる伝播待機時間の値に対する伝播の動作について説明します。

  • 待機時間を60に設定し、伝播期間中にエンキューされたメッセージがない場合、メッセージが特定の宛先に伝播される60秒間、キューはチェックされません。つまり、伝播宛先のキューにエンキューされたメッセージは、60秒間以上は伝播されません。

  • 待機時間を600に設定し、伝播期間中にエンキューされたメッセージがない場合、メッセージが特定の宛先に伝播される10分間、キューはチェックされません。つまり、伝播宛先に対するキューにエンキューされたメッセージは、10分間以上は伝播されません。

  • 待機時間を0に設定した場合、ジョブ・スレーブは、メッセージが宛先に対してエンキューされるまで待機しており、メッセージがエンキューされると、すぐに伝播されます。NORMALモードで停止するデータベースの機能に影響する場合があるため、待機時間を0に設定することはお薦めしません。

DBMS_AQADMパッケージからのALTER_PROPAGATION_SCHEDULEプロシージャを使用して伝播パラメータを設定できます。たとえば、strmadminが所有するq1ソース・キューからグローバル名がdbs2.example.comであるデータベースの宛先キューq2への伝播の待機時間を設定するには、Oracle Streams管理者としてログインし、次のプロシージャを実行します。

BEGIN
  DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE(
   queue_name        => 'strmadmin.q1',
   destination       => 'dbs2.example.com',
   latency           => 5,
   destination_queue => 'strmadmin.q2'); 
END;
/

注意:

latencyパラメータを設定しない場合、伝播待機時間はデフォルト値60に設定されます。

17.1.3 ネットワーク・パフォーマンス向上のためのWide Area NetworkにおけるSDUの増加

Wide Area Network(WAN)でOracle Streams伝播を使用する際に、伝播パフォーマンスを向上するためにセッション・データ・ユニット(SDU)を増加します。SDUの最大値は、32K(32767)です。ネットワーク転送のSDU値は、接続の送信側と受信側で折衝し、2つのエンドポイントの最小SDU値がすべての個々の接続に対して使用されます。Oracle Streams伝播の増加したSDUを利用するには、受信側のsqlnet.oraファイルにDEFAULT_SDU_SIZEパラメータが含まれる必要があります。受信側のlistener.oraファイルでは、システム識別子(SID)に対してSDUの変更を示す必要があります。また、送信側のtnsnames.oraファイルの接続文字列には、特定のサービスに対するSDUの変更が含まれる必要があります。

また、listener.oraおよびtnsnames.oraファイルのSEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータによって、システム上の伝播のパフォーマンスが向上します。これらのパラメータによって、伝播されたメッセージを送信または受信するために使用するバッファのサイズが増加します。これらのパラメータは、システム・パフォーマンスに対する全体の影響を注意深く分析してから増やす必要があります。

17.2 伝播の操作のベスト・プラクティス

ここでは、既存の伝播を操作するベスト・プラクティスについて説明します。

17.2.1 故障した伝播の再起動

伝播の伝播ジョブは、エラーの発生後またはデータベースの再起動後に「故障」になったり、起動に失敗する場合があります。通常、伝播を停止して再起動すると、問題は解決されます。たとえば、prop1という伝播を停止して再起動するには、次の手順を実行します。

BEGIN
  DBMS_PROPAGATION_ADM.STOP_PROPAGATION(
    propagation_name => 'prop1');
END;
/

BEGIN
  DBMS_PROPAGATION_ADM.START_PROPAGATION(
    propagation_name => 'prop1');
END;
/

これらの手順を実行しても問題が解決されない場合は、forceパラメータをTRUEに設定して、STOP_PROPAGATIONプロシージャを実行して、伝播を再起動します。次に例を示します。

BEGIN
  DBMS_PROPAGATION_ADM.STOP_PROPAGATION(
    propagation_name => 'prop1',
    force            => TRUE);
END;
/

BEGIN
  DBMS_PROPAGATION_ADM.START_PROPAGATION(
    propagation_name => 'prop1');
END;
/

forceパラメータをTRUEに設定して伝播を停止すると、伝播の統計が消去されます。