ヘッダーをスキップ
Oracle Database Gateway for WebSphere MQインストレーションおよびユーザーズ・ガイド
11gリリース1(11.1)
E05710-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

8 ゲートウェイ実行環境

この章では、ゲートウェイ実行環境について説明します。この章の内容は次のとおりです。

8.1 セキュリティ・モデル

WebSphere MQには、独自の認可メカニズムがあります。アプリケーションは、キューまたはキュー・マネージャ上の特定の操作を、有効なユーザーIDが各操作で認可されている場合にのみ、実行できます。通常、オペレーティング・システム・ユーザーである有効なユーザーIDは、実行するWebSphere MQ環境およびプラットフォームにより異なります。

Oracle環境内の有効なユーザーIDは、オペレーティング・システム・アカウントまたはプラットフォームに依存しません。この違いにより、OracleアプリケーションがWebSphere MQと連携するためにゲートウェイが提供する認可モデルは、2つあります。

Oracleおよびオペレーティング・システム・ユーザーIDは12文字を超えて構いませんが、どちらのモデルで使用するユーザーIDの長さも12文字を越えることはできません。Oracleユーザー・アカウントにはパスワードに必要な最低文字数がありませんが、そうではないプラットフォームおよびオペレーティング・システムもあります。パスワードまたはユーザーIDの決定の際、そのような要件を考慮してください。

認可モデルは、ゲートウェイ初期化ファイル内のAUTHORIZATION_MODELパラメータで構成されます。AUTHORIZATION_MODELの詳細は、付録C「ゲートウェイ初期化パラメータ」を参照してください。

8.1.1 Relaxedモデル

このモデルは、Oracleユーザー名およびパスワードを廃棄します。ゲートウェイの有効なユーザーIDに対してキュー・マネージャから付与される認可は、Oracleアプリケーションが持つただ1つの関連付けです。たとえば、メッセージを開くまたは読み取る、もしくはメッセージをキューに配置する権限がゲートウェイ・ユーザーIDに付与される場合、ゲートウェイにアクセスするすべてのOracleアプリケーションがこれらの操作をリクエストできます。

有効なユーザーIDは、ゲートウェイの実行方法により決定されます。

  • ゲートウェイがMQIクライアント・アプリケーションとして実行する場合、ユーザーIDはMQIチャネル定義により決定されます。


    関連項目:

    チャネル定義の詳細は、IBMのドキュメントを参照してください。

  • ゲートウェイがMQIサーバー・アプリケーションとして実行する場合、ゲートウェイの有効なユーザーIDは、Oracle Net Listenerを起動したユーザー・アカウントで、OracleアプリケーションがアクセスするすべてのWebSphere MQオブジェクトに対して認可されます。詳細は、「WebSphere MQオブジェクトの認可」を参照してください。

使用するアプリケーションのセキュリティ要件が最小の場合にのみ、Relaxedモデルを使用することをお薦めします。

8.1.2 Strictモデル

このモデルは、データベースの作成時にCREATE DATABASE LINKで提供されるOracleユーザーIDおよびパスワード、またはCREATE DATABASE LINKで何も提供されない場合は現行のOracleユーザーIDおよびパスワードを使用します。

OracleユーザーIDは

  • ゲートウェイを実行するシステムおよびWebSphere MQキュー・マネージャを実行するシステムのユーザー・アカウントに一致する必要があります。

  • アクセスするWebSphere MQオブジェクトに対して認可されている必要があります。詳細は、「WebSphere MQオブジェクトの認可」を参照してください。

OracleユーザーIDおよびパスワードを検証する認可プロセスは、ゲートウェイの実行方法により異なります。

8.1.2.1 WebSphere MQサーバー・アプリケーションの認可プロセス

ゲートウェイをWebSphere MQサーバー・アプリケーションとして実行する場合、認可プロセスはローカルまたはネットワーク・パスワード・ファイルでユーザーIDおよびパスワードをチェックします。一致する場合、ゲートウェイはユーザーIDに対してSET-UIDを実行し、このユーザーIDを使用して実行を継続します。WebSphere MQ認可チェックが、このユーザーIDに対してさらに発生します。

8.1.2.2 WebSphere MQクライアント・アプリケーションの認可プロセス

ゲートウェイをWebSphere MQクライアント・アプリケーションとして実行する場合、認可プロセスはローカルまたはネットワーク・パスワード・ファイルでユーザーIDおよびパスワードをチェックします。一致する場合、MQ_USER_IDおよびMQ_PASSWORD WebSphere MQ環境変数がユーザーIDおよびパスワードの値に設定されます。チャネル定義で、MCAUSER WebSphere MQ環境変数が空白文字に指定されると、WebSphere MQ認可チェックがユーザーIDに対して実行されます。

MCAUSERが設定される、設定されない、またはセキュリティ・イグジットがMQIチャネルに定義されている場合、これらはゲートウェイの作用を上書きします。


関連項目:

WebSphere MQ環境変数の詳細は、IBMのドキュメントを参照してください。

8.1.3 WebSphere MQオブジェクトの認可

Relaxedモデルの有効なユーザーIDおよびStrictモデルのOracleユーザーIDは、表8-1で説明するWebSphere MQ認可が必要です。

表8-1 WebSphere MQアクセス認可

アクセスのタイプ WebSphere MQ認可キーワード 代替WebSphere MQ認可キーワード

WebSphere MQキュー・マネージャにアクセスする権限

allまたはallmqi

connect

setid

WebSphere MQキュー・マネージャにメッセージを送信する権限

allまたはallmqi

passall

passid

put

setid

WebSphere MQキュー・マネージャからメッセージを受信する権限

allまたはallmqi

browse

get

passall

passid

setid



関連項目:

WebSphere MQ認可の詳細は、IBMのドキュメントを参照してください。

8.2 トランザクション・サポート

ゲートウェイを使用して、WebSphere MQキュー・マネージャ操作を起動するOracleアプリケーションからのトランザクションは、トランザクションを開始するOracleデータベースでトランザクション・コーディネータにより管理されます。

8.2.1 Oracle以外のデータ・ソースおよび分散トランザクション

Oracle分散データベースに、ゲートウェイが含まれる場合、ゲートウェイを正しく構成して、分散トランザクションに加える必要があります。ゲートウェイが関係する分散トランザクションの結果では、すべての関連サイトがロールバックするか、分散トランザクションの関連する部分にコミットする必要があります。分散トランザクション中に更新されるゲートウェイ・サイトを含むすべての参加サイトは、障害から保護され、2フェーズ・コミット・メカニズムの一部である必要があります。

ターゲット・システムを分散トランザクションの一部として更新するゲートウェイは、自動リカバリ・システムの一部である必要があり、ターゲット・システムのトランザクション・メモリーへのリカバリ情報の記録が必要な場合があります。

SQLベース・ゲートウェイが分散トランザクションに関係する場合、分散トランザクションのコミット後に、分散データベースが一貫性の状態である必要があります。

手続き型オプションのあるデータベース・ゲートウェイまたはSQLベース・ゲートウェイは、リモート・プロシージャ・コールをターゲット・システム・コールに翻訳します。Oracleトランザクション・モデルから見ると、ゲートウェイは、Oracleデータベースへのアクセスに使用されるSQL文を含んだSQLブロックを実行中のOracleデータベースに類似しています。

データベース・ゲートウェイでは、ターゲット・システム・コールによりデータが変更されるかどうか知ることができません。分散データベースの一貫姓を保つために、データベース・ゲートウェイがターゲット・システムを更新すると考える必要があります。同時に、データベース・ゲートウェイに送信されるすべてのリモート・プロシージャ・コールは、分散トランザクションの一部であり、2フェーズ・コミットにより保護される必要があります。たとえば、次のSQL*Plus文を発行できます。

EXECUTE REMOTE_PROC@FACTORY;
INSERT INTO DEBIT@FINANCE
ROLLBACK;

この例では、REMOTE_PROCはデータベース・ゲートウェイにアクセスするリモート・プロシージャ・コールで、DEBITはOracleデータベースのあるOracle表、FACTORYおよびFINANCEは、リモート・サイトへのアクセスに使用されるデータベース・リンクです。

8.2.2 トランザクション機能タイプ

ゲートウェイが分散トランザクションに関係する場合、Oracleではないデータ・ソースのトランザクション機能により、データ・ソースが2フェーズ・コミット操作または分散トランザクションに参加するかどうか決定されます。

Oracleではないデータ・ソースの機能により、トランザクションは次のタイプのいずれか1つに分類されます。

タイプ 説明
読取り専用 分散トランザクション中、ゲートウェイはデータ・ソースに読取り専用のアクセスを提供し、ゲートウェイへの問合せが可能になります。読取り専用は、推定コミット・モデルを使用する、またはロールバック・メカニズムをサポートしないターゲット・システムで使用されます。
単一サイト 分散トランザクション中、ターゲット・システムは読取り専用(他のサイトは更新可能)または単一のサイトのみ更新(リモート・トランザクションに参加可能)のいずれかです。単一サイトは、分散トランザクション中および後に発生することを記憶する機能である分散トランザクション・メモリーがないため、ロールバック、コミットおよび推定中断をサポートするが、準備またはコミット確認が不可能なターゲット・システムで使用されます。
コミット確認 ゲートウェイは、Oracleトランザクション・モデルの部分パートナです。更新された分散トランザクション中、ゲートウェイは、コミット・ポイント・サイトである必要があります。コミット確認は、ロールバック、コミット、推定中断およびコミット確認をサポートするが、準備をサポートしないターゲット・システムで使用されます。コミット確認機能には、分散トランザクション・メモリーが必要です。
2フェーズ・コミット ゲートウェイは、Oracleトランザクション・モデルの部分パートナです。分散トランザクション中、ゲートウェイはコミット・ポイント・サイトではありません。2フェーズ・コミットは、ロールバック、コミット、推測中断および準備をサポートするが、分散トランザクション・メモリーがないためにコミット確認をサポートしないターゲット・システムで使用されます。
2フェーズ・コミット・コミット確認 ゲートウェイは、Oracleトランザクション・モデルの完全パートナです。分散トランザクション中、ゲートウェイ初期化ファイル内で定義されるコミット・ポイントの長さにより、ゲートウェイはコミット・ポイント・サイトになることができます。このトランザクション・タイプは、完全2フェーズ・コミットをサポートするターゲット・システムで使用されます。つまり、ターゲット・システムは、ロールバック、コミット、推測中断、準備およびコミット確認をサポートします。

8.2.3 Oracle Database Gateway for WebSphere MQのトランザクション機能タイプ

Oracleアプリケーション(WebSphere MQキュー・マネージャ操作を起動し、ゲートウェイを使用します)からのトランザクションは、トランザクションを開始するOracleデータベースでトランザクション・コーディネータにより管理されます。Oracle Database Gateway for WebSphere MQは、次のトランザクション・タイプを提供します。

  • 単一サイト

  • コミット確認

8.2.3.1 単一サイト・トランザクション

単一サイト・トランザクションは、すべてのWebSphere MQ環境およびプラットフォームでサポートされています。単一サイトは、同一のWebSphere MQマネージャに所属するキューが更新された場合にのみ、ゲートウェイがトランザクションに参加できることを意味します。Oracleアプリケーションは、WebSphere MQキューとメッセージを送受信する同一トランザクション内のOracleデータベース上のデータを選択できますが、更新できません。Oracleデータベース内のオブジェクトを更新するには、WebSphere MQキューに関係するトランザクションを先にコミットまたはロールバックする必要があります。

このゲートウェイのデフォルト・モードは、キュー・マネージャが同期ポイント・コーディネータとして動作するWebSphere MQの単一フェーズを使用して実装されます。

8.2.3.2 コミット確認トランザクション

コミット確認トランザクションは、単一サイトの拡張フォームで、すべてのWebSphere MQ環境およびプラットフォームでサポートされています。 コミット確認は、同一のWebSphere MQキュー・マネージャに所属するキューが更新され、同時にOracleデータベースがいくつでも更新された場合に、ゲートウェイがトランザクションに参加できることを意味します。ゲートウェイがトランザクションの中心として操作するため、コミット確認モデルの1つのゲートウェイのみが分散トランザクションに参加できます。複数のキュー・マネージャのキューを変更する場合、新しいトランザクションが次のキュー・マネージャで開始される前に、1つのキュー・マネージャに適用された更新をコミットする必要があります。

単一サイト・トランザクションでは、コミット確認トランザクションは、WebSphere MQ単一フェーズを使用して実装されますが、トランザクションIDを記録するキュー・マネージャで専用のリカバリ・キューが必要です。コミット時、ゲートウェイは、OracleトランザクションIDに設定されたメッセージIDとメッセージをこのキューに配置します。ゲートウェイがキュー・マネージャをコールしてトランザクションにコミットすると、トランザクション・ログ・キュー上の追加メッセージが、トランザクション全体の一部になります。これにより、システム障害が発生した場合、トランザクションの結果を判別し、失敗したトランザクションをゲートウェイがリカバリできます。トランザクションが正常に完了すると、ゲートウェイは割り当てられたメッセージをキューから削除します。

WebSphere MQ管理者は、キュー・マネージャに予約済キューを作成する必要があります。このキュー名は、TRANSACTION_LOG_QUEUEパラメータを使用してゲートウェイ初期化ファイル内で指定されます。WebSphere MQにゲートウェイを介してアクセスするすべてのOracleユーザーは、このキューへのアクセスを付与されている必要があります。トランザクション・ログ・キューは、トランザクション・ロギングのためにのみ予約され、ゲートウェイ以外は使用、アクセスまたは更新できません。システム障害が発生した場合、Oracleリカバリ・プロセスがトランザクション・ログ・キューをチェックし、リカバリ計画を決定します。

2つのゲートウェイ初期化パラメータ、TRANSACTION_RECOVERY_USERおよびTRANSACTION_RECOVERY_PASSWORDがゲートウェイ初期化ファイルに設定され、リカバリ・プロセスのためのユーザーIDおよびパスワードを指定します。設定されると、ゲートウェイはこのユーザーIDおよびパスワードの組合せを使用して、リカバリします。リカバリ・ユーザーIDは、トランザクション・ログ・キューに対して完全な認可を持つ必要があります。

コミット確認トランザクションのためにゲートウェイを構成する方法の詳細は、付録C「ゲートウェイ初期化パラメータ」を参照してください。

8.3 トラブルシューティング

この項には、メッセージ、エラー・コード、ゲートウェイ・トレースおよびゲートウェイ操作に関する情報が含まれます。

8.3.1メッセージおよびエラー・コードの処理

ゲートウェイ・アーキテクチャには、いくつかのコンポーネントが含まれます。これらのコンポーネントのいずれも、PL/SQLコードの処理中のエラー条件を検知およびレポートできます。エラー条件は複雑で、複数のコンポーネントのエラー・コードおよびサポートするデータを含みます。いずれの場合でも、Oracleアプリケーションは、処理を指定する単一のOracleエラー・コードを受け取ります。

エラー条件は、次の方法で表現されます。

  • Oracleデータベースのエラー

    Oracleデータベースからのメッセージは、ORA-xxxxxまたはPLS-xxxxxの書式で、xxxxxはコード番号です。ORA-xxxxxの次には、エラー・コードを説明するテキストが続きます。これらのエラーの説明は、『Oracle Databaseエラー・メッセージ』を参照してください。

    次に例を示します。

    PLS-00306: wrong number or types of arguments in call to 'MQOPEN'
    ORA-06550: line7, column 3:
    PL/SQL: Statement ignored
    
  • ゲートウェイおよびWebSphere MQのエラー

    可能な場合、WebSphere MQエラー・コードは、Oracleエラー・コードに変換されます。それが不可能な場合、Oracleエラー、ORA-29400および対応するWebSphere MQエラー・コードが戻されます。詳細は、「共通エラー・コード」を参照してください。

    次に例を示します。

    ORA-29400: data cartridge error
    MQI MQCONNX failed. completion code=2, reason code=2058
    

    注意:

    Oracleデータベースは、すべてのユーザー操作の成功または失敗の結果のみを区別するため、警告を戻すMQIコールが、成功した操作としてレポートされます。

8.3.1.1 ゲートウェイ・メッセージの解釈

エラー・コードは、通常、追加メッセージ・テキストを伴い、テキストの他にOracleメッセージ番号に関連付けられています。追加テキストには、エラーに関する詳細が含まれます。

ゲートウェイ・メッセージは、次の書式です。

ORA-nnnnn:error_message_text
gateway_message_line

説明:

  • nnnnは、Oracleエラー番号です。

  • error_message_textは、エラーに関連付けられるメッセージのテキストです。

  • gateway_message_lineは、ゲートウェイにより生成される追加メッセージ・テキストです。

8.3.2 共通エラー・コード

この項で説明するエラー条件は、ゲートウェイの使用中にアプリケーションが受け取る可能性がある共通のエラー条件です。ただし、すべてのエラー状況が対象ではありません。

ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
原因: 無効なユーザー名またはパスワード
処理: ログインの拒否
ORA-29400: MQSeries MQIコール"call_name"は、理由コードmqi_codeにより失敗しました
原因: WebSphere MQキュー・マネージャへのMQIコールが失敗しました。ゲートウェイは、現在の操作を完了できません。
処理: call_nameMQOPENで、mqi_codeが2035の場合、次のようにします。
  • ゲートウェイをRelaxedセキュリティ・モデルに構成している場合、WebSphere MQ管理コマンド・インタフェースを使用して、Oracle Net Listenerを起動したユーザー・アカウントに、十分なメッセージ権限を付与してください。これらの権限により、ユーザーは指定されたWebSphere MQキューにメッセージを送信および受信できます。詳細は、IBMのドキュメントを参照してください。

  • ゲートウェイをStrictセキュリティ・モデルに構成している場合、WebSphere MQ管理コマンド・インタフェースを使用して、CREATE DATABASE LINKで指定されたユーザー名に、メッセージ権限を付与してください。CREATE DATABASE LINK文でユーザー名が指定されていない場合、権限は現在のOracleユーザーIDに付与されます。これらの権限により、ユーザーは指定されたWebSphere MQキューにメッセージを送信および受信できます。詳細は、IBMのドキュメントを参照してください。

call_nameMQOPENで、mqi_codeが2085の場合、WebSphere MQプロファイルで指定されたキューが、アクセスするWebSphere MQキュー・マネージャに存在し、キュー名のスペルが正確で、大文字と小文字が正しく区別されていることを検証してください。


関連項目:

2035および2085以外のmqi_codesの詳細は、IBMのドキュメントを参照してください。

8.3.3 ゲートウェイ・トレース

ゲートウェイにはトレース機能があり、テストおよびデバッグの目的で使用します。トレース機能は、ゲートウェイ実行環境、MQIコールおよびMQIコールのパラメータ値に関する情報を収集します。収集するトレース・データの量は、TRACE_LEVELパラメータで選択されるトレース・レベルに基づきます。トレースの有効化の詳細は、付録C「ゲートウェイ初期化パラメータ」を参照してください。


注意:

アプリケーションが本番環境で実行中の場合、トレースを有効化しないでください。

トレース・データが、LOG_DESTINATIONパラメータで指定されるディレクトリおよびファイルに書き込まれます。

8.3.3.1 LOG_DESTINATIONパラメータ

これは、ゲートウェイ初期化パラメータです。

8.3.3.1.1 ゲートウェイ:

SQLベースおよび手続型です。

8.3.3.1.2 デフォルト値:

デフォルト値は、SID_agt_PID.trcです。

8.3.3.1.3 値の範囲:

なし。

8.3.3.1.4 構文:

LOG_DESTINATION = log_file

パラメータの説明

LOG_DESTINATION = log_file

LOG_DESTINATIONは、ゲートウェイがロギング情報を書き込むファイル名またはディレクトリを指定します。log_fileがすでに存在する場合、ロギング情報がファイルの最後に書き込まれます。

LOG_DESTINATIONを指定しない場合、ゲートウェイが起動する度に、デフォルト・ログ・ファイルが作成されます。

8.3.4 ゲートウェイ操作の検証

使用するアプリケーションがゲートウェイに接続できない場合、ゲートウェイ・トレース機能を有効にしてアプリケーションを再実行してください。LOG_DESTINATIONで指定されたログ・ファイルにトレース情報が書き込まれていない場合、またはログ・ファイルがまったく作成されていない場合、次を検証してください。

Oracle Net構成およびデータベース・リンクが正しく設定されている場合、test.sqlスクリプトを使用してゲートウェイの操作をチェックしてください。

  1. 次のように入力して、ディレクトリをゲートウェイ・サンプル・ディレクトリに変更します。

    Microsoft Windowsの場合:

    > cd %ORACLE_HOME%\dg4mq\sample
    

    UNIXベース・システムの場合:

    $ cd $ORACLE_HOME/dg4mq/sample
    
  2. エディタを使用して、test.sqlスクリプトを次のように変更します。

    1. ゲートウェイに作成したデータベース・リンク名を指定します。これには、文字@dg4mq@dblinkに置換します。ここで、dblinkは、データベース・リンクの作成時に選択した名前です。

    2. 文字YOUR_QUEUE_NAMEを有効なWebSphere MQキュー名と置換します。

  3. SQL*Plusを使用して、有効なユーザーとしてOracleデータベースに接続します。

  4. WebSphere MQとメッセージを送受信するスクリプト、test.sqlを実行します。正常に完了すると、次の結果が表示されます。

    SQL> @test.sql
    message put on queue = 10203040506070809000
    MQPUT: CorrelId length = 24
    MQPUT: MsgId length = 24
    MQPUT returned with reason code 0
    MQGET returned with reason code 0
    message read back = 10203040506070809000
    

    テストが失敗すると、次の結果が表示されます。

    SQL> @test.sql
    message put on queue = 10203040506070809000
    Error: Oracle Database Gateway for WebSphere MQ verification script failed.
    ORA-29400: data cartridge error
    MQI MQOPEN failed. completion code=2, reason code=2085