次の各項では、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
伝播が適切なキューを使用していない場合は、別の伝播を作成します。ご使用の環境に既存の伝播が適さない場合には削除が必要になることがあります。
伝播ジョブでメッセージを伝播するには、伝播が有効であることが必要です。予期したとおりに伝播でメッセージが伝播されないときは、伝播が無効になっている場合があります。
伝播について次の情報を確認できます。
伝播がENABLED
、DISABLED
または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
キューは保護キューであり、ユーザーがその操作を実行できるように、セキュリティを適切に構成する必要があります。DBMS_STREAMS_ADM
パッケージのSET_UP_QUEUE
プロシージャを使用して保護キューANYDATA
を構成する場合、SET_UP_QUEUE
が作成しようとするエージェントがすでに存在し、このプロシージャのqueue_user
で指定されているユーザー以外のユーザーに関連付けられていると、エラーが発生します。この場合は、DBMS_AQADM
パッケージのALTER_AQ_AGENT
プロシージャを使用して既存のエージェントの名前を変更するか、DROP_AQ_AGENT
プロシージャを使用して既存のエージェントを削除します。次に、SET_UP_QUEUE
を再試行します。
また、ANYDATA
キューのセキュリティが適切に構成されていないと、次のいずれかのエラーが発生することがあります。
Oracle Databaseアドバンスト・キューイング(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