ヘッダーをスキップ
Oracle® Streams概要および管理
11gリリース2 (11.2)
B61351-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

32 伝播のトラブルシューティング

次の各項では、Oracle Streams環境での伝播の一般的な問題の特定と解決について説明します。


関連項目:


伝播で適切なソース・キューと宛先キューが使用されているか

メッセージが予期したとおりに伝播宛先キューに格納されないときは、適切なソース・キューから適切な宛先キューにメッセージを伝播するように伝播が構成されていない場合があります。

たとえば、dbs1_to_dbs2という伝播のソース・キューと宛先キューをチェックするには、次の問合せを実行します。

COLUMN SOURCE_QUEUE HEADING 'Source Queue' FORMAT A35
COLUMN DESTINATION_QUEUE HEADING 'Destination Queue' FORMAT A35

SELECT 
  p.SOURCE_QUEUE_OWNER||'.'||
    p.SOURCE_QUEUE_NAME||'@'||
    g.GLOBAL_NAME SOURCE_QUEUE, 
  p.DESTINATION_QUEUE_OWNER||'.'||
    p.DESTINATION_QUEUE_NAME||'@'||
    p.DESTINATION_DBLINK DESTINATION_QUEUE 
  FROM DBA_PROPAGATION p, GLOBAL_NAME g
  WHERE p.PROPAGATION_NAME = 'DBS1_TO_DBS2';

出力は次のようになります。

Source Queue                        Destination Queue
----------------------------------- -----------------------------------
STRMADMIN.QUEUE1@DBS1.EXAMPLE.COM   STRMADMIN.QUEUE2@DBS2.EXAMPLE.COM

伝播が適切なキューを使用していない場合は、別の伝播を作成します。ご使用の環境に既存の伝播が適さない場合には削除が必要になることがあります。


関連項目:

  • 伝播の作成の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照

  • 「伝播の削除」


伝播が有効かどうか

伝播ジョブでメッセージを伝播するには、伝播が有効であることが必要です。予期したとおりに伝播でメッセージが伝播されないときは、伝播が無効になっている場合があります。

伝播について次の情報を確認できます。

  • ソース・キューから宛先キューへのメッセージの伝播で使用されるデータベース・リンク

  • 伝播がENABLEDDISABLEDまたはABORTEDのいずれであるか

  • 最後のエラーの日付(伝播エラーが発生した場合)

  • 最後のエラーのエラー番号(伝播エラーが発生した場合)

  • 最後のエラーのエラー・メッセージ(伝播エラーが発生した場合)

たとえば、streams_propagationという伝播が有効かどうかチェックするには、次の問合せを実行します。

COLUMN DESTINATION_DBLINK HEADING 'Database|Link'      FORMAT A15
COLUMN STATUS             HEADING 'Status'             FORMAT A8
COLUMN ERROR_DATE         HEADING 'Error|Date'
COLUMN ERROR_MESSAGE      HEADING 'Error Message'      FORMAT A35
 
SELECT DESTINATION_DBLINK,
       STATUS,
       ERROR_DATE,
       ERROR_MESSAGE
  FROM DBA_PROPAGATION
  WHERE PROPAGATION_NAME = 'STREAMS_PROPAGATION';

伝播が現在無効の場合は、出力が次のようになります。

Database                 Error
Link            Status   Date      Error Message
--------------- -------- --------- -----------------------------------
D2.EXAMPLE.COM  DISABLED 27-APR-05 ORA-25307: Enqueue rate too high, f
                                   low control enabled

問題がある場合は、次の方法を試行して修正してください。

  • 伝播が無効の場合、DBMS_PROPAGATION_ADMパッケージのSTART_PROPAGATIONプロシージャをまだ実行していなければ、これを実行して伝播を有効にできます。

  • 伝播が無効になっているか、中断されていて、Error DateおよびError Messageフィールドに値が移入されている場合は、エラー・メッセージに基づいて問題を診断し、修正します。

  • 伝播が無効になっているか、中断されている場合は、伝播ジョブ・プロセスのトレース・ファイルをチェックします。「伝播ジョブのスケジュールに関する情報の表示」の問合せを実行すると、伝播ジョブ・プロセスが表示されます。

  • 伝播ジョブが有効だが、メッセージが伝播されない場合は、伝播を停止してから再起動します。


関連項目:


ANYDATAキューのセキュリティは適切に構成されているか

ANYDATAキューは保護キューであり、ユーザーがその操作を実行できるように、セキュリティを適切に構成する必要があります。DBMS_STREAMS_ADMパッケージのSET_UP_QUEUEプロシージャを使用して保護キューANYDATAを構成する場合、SET_UP_QUEUEが作成しようとするエージェントがすでに存在し、このプロシージャのqueue_userで指定されているユーザー以外のユーザーに関連付けられていると、エラーが発生します。この場合は、DBMS_AQADMパッケージのALTER_AQ_AGENTプロシージャを使用して既存のエージェントの名前を変更するか、DROP_AQ_AGENTプロシージャを使用して既存のエージェントを削除します。次に、SET_UP_QUEUEを再試行します。

また、ANYDATAキューのセキュリティが適切に構成されていないと、次のいずれかのエラーが発生することがあります。


関連項目:

「保護キュー」

ORA-24093: AQエージェントはデータベース・ユーザーの権限を付与されていません。

Oracle Streamsアドバンスト・キューイング(AQ)エージェントには、エンキュー操作とデキュー操作の両方について、保護キューへのアクセス権が明示的に付与される必要があります。DBMS_AQADMパッケージのENABLE_DB_ACCESSプロシージャを使用して、エージェントにこれらの権限を付与します。

たとえば、explicit_dqというエージェントにデータベース・ユーザーoeの権限を付与するには、次のプロシージャを実行します。

BEGIN
  DBMS_AQADM.ENABLE_DB_ACCESS(
    agent_name  => 'explicit_dq',
    db_username => 'oe');
END;
/

データベースでのエージェントの権限をチェックするには、次の問合せを実行します。

SELECT AGENT_NAME "Agent", DB_USERNAME "User" FROM DBA_AQ_AGENT_PRIVS;

出力は次のようになります。

Agent                          User
------------------------------ ------------------------------
EXPLICIT_ENQ                   OE
APPLY_OE                       OE
EXPLICIT_DQ                    OE

関連項目:

エージェントへの権限付与の詳細な例は、「保護キューでのユーザー操作の有効化」を参照

ORA-25224: セキュア・キューにエンキューするために送信者名を指定する必要があります。

保護キューにエンキューするには、メッセージ・プロパティで、そのキューに対する保護キュー権限を持つOracle Streamsアドバンスト・キューイング(AQ)エージェントにSENDER_IDを設定する必要があります。


関連項目:

エンキューのSENDER_IDを設定する例の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照