17 伝播のベスト・プラクティス
17.1 伝播の構成のベスト・プラクティス
ここでは、伝播を構成するベスト・プラクティスについて説明します。
17.1.1 キュー・ツー・キュー伝播の使用
伝播は、キュー・ツー・キューまたはキュー・ツー・データベース・リンク(キュー・ツーdblink)です。可能な場合は、キュー・ツー・キュー伝播を使用します。キュー・ツー・キュー伝播は、常に、ソース・キューから接続先キューにメッセージを伝播する独自の排他伝播ジョブを所有しています。各伝播ジョブには独自の伝播スケジュールがあるため、各キュー・ツー・キュー伝播の伝播スケジュールは個別に管理できます。複数のキュー・ツー・キュー伝播が同じデータベース・リンクを使用する場合でも、各伝播の無効化、有効化および伝播スケジュールの設定を個別に行うことができます。
Oracle Database 10gリリース2よりも前に構成された伝播は、キュー・ツーdblink伝播です。また、Oracle Database 10gリリース2よりも前のデータベース内のキューを含むすべての伝播は、キュー・ツーdblink伝播である必要があります。キュー・ツーdblink伝播が使用されると、データベース・リンクが宛先キューの所有するインスタンスに接続しない場合、伝播は成功しません。
Oracle Databaseの以前のリリースで作成されたキュー・ツーdblink伝播を所有する場合、キュー・ツー・キュー伝播を使用するには、メンテナンス・ウィンドウでこれらの伝播を再作成できます。伝播を再作成するには、次の手順を実行します。
- 伝播を停止します。
- ソース・キューが空であることを確認します。
- 伝播を削除する前に、宛先キューが空で、未適用のオーバーフローしたメッセージがないことを確認します。
- 作成プロシージャの
queue_to_queue
パラメータをTRUE
に設定して伝播を再作成します。
「Oracle Streamsレプリケーション構成の自動化」の説明に従って構成を自動化すると、各伝播でキュー・ツー・キュー伝播が自動的に使用されるようになります。
関連項目:
-
Oracle Real Application Clusters(Oracle RAC)環境の伝播の詳細は、「伝播を構成および管理するベスト・プラクティスへの準拠」を参照してください
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
に設定して伝播を停止すると、伝播の統計が消去されます。