8 Oracle Database Gateway for WebSphere MQ実行環境
- 「セキュリティ・モデル」
WebSphere MQには独自の許可メカニズムがあります。 アプリケーションは、キューまたはキュー・マネージャ上の特定の操作を、有効なユーザーIDが各操作で認可されている場合にのみ、実行できます。 - 「トランザクション・サポート」
ゲートウェイを使用し、WebSphere MQメッセージ・キュー操作を呼び出すOracleアプリケーションからのトランザクションは、トランザクションが発生したOracleデータベースのトランザクション・コーディネータによって管理されます。 - 「トラブルシューティング」
このセクションには、メッセージ、エラー・コード、ゲートウェイ・トレース、およびゲートウェイ操作に関する情報が含まれています。
セキュリティ・モデル
WebSphere MQには、独自の認可メカニズムがあります。 アプリケーションは、キューまたはキュー・マネージャ上の特定の操作を、有効なユーザーIDが各操作で認可されている場合にのみ、実行できます。
通常、オペレーティング・システム・ユーザーである有効なユーザーIDは、実行するWebSphere MQ環境およびプラットフォームにより異なります。
Oracle環境内の有効なユーザーIDは、オペレーティング・システム・アカウントまたはプラットフォームに依存しません。 この違いにより、OracleアプリケーションがWebSphere MQと連携するためにゲートウェイが提供する認可モデルは、2つあります。
-
寛容
-
Strict
Oracleおよびオペレーティング・システム・ユーザーIDは12文字を超えて構いませんが、どちらのモデルで使用するユーザーIDの長さも12文字を越えることはできません。 Oracleユーザー・アカウントにはパスワードに必要な最低文字数がありませんが、そうではないプラットフォームおよびオペレーティング・システムもあります。 パスワードまたはユーザーIDの決定の際、そのような要件を考慮してください。
- 「リラックス・モデル」
このモデルは、Oracleユーザー名とパスワードを破棄します。 - 「厳格なモデル」
このモデルでは、データベース・リンクの作成時にCREATE DATABASE LINK
文で指定されたOracleユーザーIDとパスワード、またはCREATE DATABASE LINK
で提供されていない場合は現行のOracleユーザーIDとパスワードを使用します。 - 「WebSphere MQオブジェクトの許可」
このトピックでは、WebSphere MQオブジェクトのアクセス許可について説明します。
Relaxedモデル
このモデルは、Oracleユーザー名およびパスワードを廃棄します。
ゲートウェイの有効なユーザーIDに対してキュー・マネージャから付与される認可は、Oracleアプリケーションが持つただ1つの関連付けです。 たとえば、メッセージを開くまたは読み取る、もしくはメッセージをキューに配置する権限がゲートウェイ・ユーザーIDに付与される場合、ゲートウェイにアクセスするすべてのOracleアプリケーションがこれらの操作をリクエストできます。
有効なユーザーIDは、ゲートウェイの実行方法により決定されます。
-
ゲートウェイがMQIクライアント・アプリケーションとして実行する場合、ユーザーIDはMQIチャネル定義により決定されます。
関連項目:
チャネル定義の詳細は、IBMのドキュメントを参照してください。
-
ゲートウェイがMQIサーバー・アプリケーションとして実行する場合、ゲートウェイの有効なユーザーIDは、Oracle Net Listenerを起動したユーザー・アカウントで、OracleアプリケーションがアクセスするすべてのWebSphere MQオブジェクトに対して認可されます。
使用するアプリケーションのセキュリティ要件が最小の場合にのみ、Relaxedモデルを使用することをお薦めします。
関連トピック
Strictモデル
このモデルでは、データベース・リンクの作成時にCREATE DATABASE LINK
文で指定されたOracleユーザーIDとパスワード、またはCREATE DATABASE LINK
で提供されていない場合は現行のOracleユーザーIDとパスワードを使用します。
-
ゲートウェイを実行するシステムおよびWebSphere MQキュー・マネージャを実行するシステムのユーザー・アカウントに一致する必要があります。
-
アクセスするWebSphere MQオブジェクトに対して認可されている必要があります。
OracleユーザーIDおよびパスワードを検証する認可プロセスは、ゲートウェイの実行方法により異なります。
- 「WebSphere MQ Serverアプリケーションの認可プロセス」
ゲートウェイがWebSphere MQサーバー・アプリケーションとして実行されている場合、許可プロセスはユーザーIDとパスワードをローカルまたはネットワーク・パスワード・ファイルと照合します。 - 「WebSphere MQクライアント・アプリケーションの認可プロセス」
ゲートウェイがWebSphere MQクライアント・アプリケーションとして実行されている場合、許可プロセスはユーザーIDとパスワードをローカルまたはネットワーク・パスワード・ファイルと照合します。
関連トピック
WebSphere MQサーバー・アプリケーションの認可プロセス
ゲートウェイをWebSphere MQサーバー・アプリケーションとして実行する場合、認可プロセスはローカルまたはネットワーク・パスワード・ファイルでユーザーIDおよびパスワードをチェックします。
一致する場合、ゲートウェイはユーザーIDに対してSET-UIDを実行し、このユーザーIDを使用して実行を継続します。 WebSphere MQ認可チェックが、このユーザーIDに対してさらに発生します。
WebSphere MQクライアント・アプリケーションの認可プロセス
ゲートウェイをWebSphere MQクライアント・アプリケーションとして実行する場合、認可プロセスはローカルまたはネットワーク・パスワード・ファイルでユーザーIDおよびパスワードをチェックします。
一致する場合、MQ_USER_ID
およびMQ_PASSWORD
WebSphere MQ環境変数がユーザーIDおよびパスワードの値に設定されます。 チャネル定義で、MCAUSER
WebSphere MQ環境変数が空白文字に指定されると、WebSphere MQ認可チェックがユーザーIDに対して実行されます。
MCAUSERが設定される、設定されない、またはセキュリティ・イグジットがMQIチャネルに定義されている場合、これらはゲートウェイの作用を上書きします。
関連項目:
WebSphere MQ環境変数の詳細は、IBMのドキュメントを参照してください。
WebSphere MQオブジェクトの認可
このトピックでは、WebSphere MQオブジェクトのアクセス許可について説明します。
Relaxedモデルの有効なユーザーIDおよびStrictモデルのOracleユーザーIDは、表8-1で説明するWebSphere MQ認可が必要です。
表8-1 WebSphere MQアクセス認可
アクセスのタイプ | WebSphere MQ認可キーワード | 代替WebSphere MQ認可キーワード |
---|---|---|
WebSphere MQキュー・マネージャにアクセスする権限 |
|
|
WebSphere MQキュー・マネージャにメッセージを送信する権限 |
|
|
WebSphere MQキュー・マネージャからメッセージを受信する権限 |
|
|
関連項目:
WebSphere MQ認可の詳細は、IBMのドキュメントを参照してください。
トランザクションのサポート
ゲートウェイを使用して、WebSphere MQキュー・マネージャ操作を起動するOracleアプリケーションからのトランザクションは、トランザクションを開始するOracleデータベースでトランザクション・コーディネータにより管理されます。
- 「Oracle以外のデータ・ソースおよび分散トランザクション」
Oracle分散データベースにゲートウェイが含まれている場合、分散トランザクションに参加するようにゲートウェイを適切に構成する必要があります。 - 「トランザクション能力タイプ」
ゲートウェイが分散トランザクションに関与する場合、Oracle以外のデータソースのトランザクション機能によって、データソースが2フェーズ・コミット操作または分散トランザクションに参加できるかどうかが決まります。 - 「Oracle Database Gateway for WebSphere MQのトランザクション機能タイプ」
Oracleアプリケーション(WebSphere MQメッセージ・キュー操作を起動し、ゲートウェイを使用している)からのトランザクションは、トランザクションが発生したOracleデータベースのOracleトランザクション・コーディネータによって管理されます。
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
は、リモート・サイトへのアクセスに使用されるデータベース・リンクです。
トランザクション機能タイプ
ゲートウェイが分散トランザクションに関与する場合、Oracle以外のデータソースのトランザクション機能によって、データソースが2フェーズ・コミット操作または分散トランザクションに参加できるかどうかが決まります。
Oracle以外のデータ・ソースの機能に応じて、トランザクションは次のタイプのいずれかに分類できます:
タイプ | 説明 |
---|---|
読取り専用 |
分散トランザクション中、ゲートウェイはデータ・ソースに読取り専用のアクセスを提供し、ゲートウェイへの問合せが可能になります。 読取り専用は、推定コミット・モデルを使用する、またはロールバック・メカニズムをサポートしないターゲット・システムで使用されます。 |
単一サイト |
分散トランザクション中、ターゲット・システムは読取り専用(他のサイトは更新可能)または単一のサイトのみ更新(リモート・トランザクションに参加可能)のいずれかです。 単一サイトは、分散トランザクション中および後に発生することを記憶する機能である分散トランザクション・メモリーがないため、ロールバック、コミットおよび推定中断をサポートするが、準備またはコミット確認が不可能なターゲット・システムで使用されます。 |
コミット確認 |
ゲートウェイは、Oracleトランザクション・モデルの部分パートナです。 更新された分散トランザクション中、ゲートウェイは、コミット・ポイント・サイトである必要があります。 コミット確認は、ロールバック、コミット、推定中断およびコミット確認をサポートするが、準備をサポートしないターゲット・システムで使用されます。 コミット確認機能には、分散トランザクション・メモリーが必要です。 |
2フェーズ・コミット |
ゲートウェイは、Oracleトランザクション・モデルの部分的なパートナです。 分散トランザクション中は、ゲートウェイはコミット・ポイントになることはできません。site.Two-phase commitは、ロールバック、コミット、推定停止、および準備をサポートするターゲット・システムで使用されますが、Commit-Confirmはサポートしていません。 |
2フェーズ・コミット・コミット確認 |
ゲートウェイは、Oracleトランザクション・モデルの完全なパートナです。 分散トランザクション中、ゲートウェイは、ゲートウェイの初期化で定義されたコミット・ポイントの強さに応じて、コミット・ポイント・サイトにすることができます。file.Thisトランザクション・タイプは、完全な2段階コミット・トランザクション・モデルをサポートするターゲット・システムで使用されます。 つまり、ターゲット・システムは、ロールバック、コミット、推定アボート、準備、Commit-Confirmをサポートしています。 |
Oracle Database Gateway for WebSphere MQのトランザクション機能タイプ
Oracleアプリケーション(WebSphere MQキュー・マネージャ操作を起動し、ゲートウェイを使用します)からのトランザクションは、トランザクションを開始するOracleデータベースでトランザクション・コーディネータにより管理されます。
Oracle Database Gateway for WebSphere MQは、次のトランザクション・タイプを提供します。
- 「シングル・サイト・トランザクション」
単一サイト・トランザクションは、すべてのWebSphere MQ環境およびプラットフォームでサポートされています。 - 「Commit-Confirmトランザクション」
Commit-Confirmトランザクションは、単一サイト・トランザクションの拡張形式であり、すべてのWebSphere MQ環境およびプラットフォームでサポートされています。
単一サイト・トランザクション
単一サイト・トランザクションは、すべてのWebSphere MQ環境およびプラットフォームでサポートされています。
単一サイトは、同一のWebSphere MQマネージャに所属するキューが更新された場合にのみ、ゲートウェイがトランザクションに参加できることを意味します。 Oracleアプリケーションは、WebSphere MQキューとメッセージを送受信する同一トランザクション内のOracleデータベース上のデータを選択できますが、更新できません。 Oracleデータベース内のオブジェクトを更新するには、WebSphere MQキューに関係するトランザクションを先にコミットまたはロールバックする必要があります。
このゲートウェイのデフォルト・モードは、キュー・マネージャが同期ポイント・コーディネータとして動作するWebSphere MQの単一フェーズを使用して実装されます。
コミット確認トランザクション
コミット確認トランザクションは、単一サイトの拡張フォームで、すべての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は、トランザクション・ログ・キューに対して完全な認可を持つ必要があります。
トラブルシューティング
この項には、メッセージ、エラー・コード、ゲートウェイ・トレースおよびゲートウェイ操作に関する情報が含まれます。
- 「メッセージとエラー・コードの処理」
ゲートウェイ・アーキテクチャにはいくつかのコンポーネントが含まれています。 これらのコンポーネントのいずれも、PL/SQLコードの処理中のエラー条件を検知およびレポートできます。 - 「一般的なエラー・コード」
このセクションで説明するエラー条件は、ゲートウェイを使用しているときにアプリケーションが受け取る可能性のある一般的なエラー状態です。 - 「ゲートウェイ・トレース」
ゲートウェイには、テストとデバッグのためのトレース機能があります。 - 「ゲートウェイの動作の確認」
アプリケーションがゲートウェイに接続できない場合は、ゲートウェイ・トレース機能を有効にしてアプリケーションを再実行します。
メッセージおよびエラー・コードの処理
ゲートウェイ・アーキテクチャには、いくつかのコンポーネントが含まれます。 これらのコンポーネントのいずれも、PL/SQLコードの処理中のエラー条件を検知およびレポートできます。
エラー条件は複雑で、複数のコンポーネントのエラー・コードおよびサポートするデータを含みます。 いずれの場合でも、Oracleアプリケーションは、処理を指定する単一のOracleエラー・コードを受け取ります。
エラー条件は、次の方法で表現されます。
-
Oracleデータベースからのメッセージの形式は、ORA‐xxxxxまたはPLS‐xxxxx,です。ここでxxxxxはコード番号です。 ORA-xxxxxの次には、エラー・コードを説明するテキストが続きます。
次に例を示します。
PLS‐00306: wrong number or types of arguments in call to 'MQOPEN' ORA‐06550: line7, column 3: PL/SQL: Statement ignored
-
可能な場合、WebSphere MQエラー・コードは、Oracleエラー・コードに変換されます。 それが不可能な場合、Oracleエラー、ORA-29400および対応するWebSphere MQエラー・コードが戻されます。
次に例を示します。
ORA-29400: data cartridge error MQI MQCONNX failed. completion code=2, reason code=2058
注意:
Oracleデータベースは、すべてのユーザー操作の成功または失敗の結果のみを区別するため、警告を戻すMQIコールが、成功した操作としてレポートされます。
- 「ゲートウェイ・メッセージの解釈」
エラー・コードには通常、Oracleメッセージ番号に関連付けられたテキスト以外の追加のメッセージ・テキストが付いています。
関連トピック
ゲートウェイ・トレース
ゲートウェイにはトレース機能があり、テストおよびデバッグの目的で使用します。
トレース機能は、ゲートウェイ実行環境、MQI呼び出し、およびMQI呼び出しのパラメータ値に関する情報を収集します。 収集するトレース・データの量は、TRACE_LEVEL
パラメータで選択されるトレース・レベルに基づきます。
注意:
アプリケーションが本番環境で実行中の場合、トレースを有効化しないでください。
- 「LOG_DESTINATIONパラメータ」
これはゲートウェイ初期化パラメータです。
ゲートウェイ操作の検証
使用するアプリケーションがゲートウェイに接続できない場合、ゲートウェイ・トレース機能を有効にしてアプリケーションを再実行してください。
LOG_DESTINATION
で指定されたログ・ファイルにトレース情報が書き込まれていない場合、またはログ・ファイルがまったく作成されていない場合、次を検証してください。
-
ゲートウェイとOracleデータベースのOracle Net構成が適切に設定されています。
-
Oracleデータベースとゲートウェイ間のデータベース・リンクが作成されました。
Oracle Net構成およびデータベース・リンクが正しく設定されている場合、test.sql
スクリプトを使用してゲートウェイの操作をチェックしてください。
-
次のように入力して、ディレクトリをゲートウェイ・サンプル・ディレクトリに変更します。
Microsoft Windowsの場合:
> cd %ORACLE_HOME%\dg4mq\sample
UNIXベース・システムの場合:
$ cd $ORACLE_HOME/dg4mq/sample
-
エディタを使用して、
test.sql
スクリプトを次のように変更します。-
ゲートウェイ用に作成したデータベース・リンク名を指定します。 これを行うには、文字
@dg4mq
を@
dblink
に置き換えます。ここで、dblink
は、データベース・リンクの作成時に選択した名前です。 -
YOUR_QUEUE_NAME
という文字を有効なWebSphere MQキュー名に置き換えます。
-
-
SQL*Plusを使用して、有効なユーザーとしてOracleデータベースに接続します。
-
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