次の各項では、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