3.6 分散問合せの実行
Oracle Databaseゲートウェイ・テクノロジを使用すると、Oracleデータベース内のデータ、DRDAサーバー内のデータ、およびOracleがゲートウェイを提供するその他のデータ・ストアからのデータを結合する分散問合せを実行できます。
これらの複雑な操作は、データをリクエストするユーザーに対して完全に透過的です。
次の例では、Oracleデータベース、z/OS用のDB2 UDBおよびDRDAサーバー間でデータを結合します:
SELECT o.custname, p.projno, e.ename, sum(e.rate*p.hours) FROM orders@DB2 o, EMP@ORACLE7 e, projects@DRDA p WHERE o.projno = p.projno AND p.empno = e.empno GROUP BY o.custname, p.projno, e.ename
次のSQL文を使用したビューとシノニムの組合せにより、分散問合せのプロセスをユーザーに対して透過的なまま維持できます。
CREATE SYNONYM orders for orders@DB2; CREATE SYNONYM PROJECTS for PROJECTS@DRDA; CREATE VIEW details (custname,projno,ename,spend) AS SELECT o.custname, p.projno, e.ename, sum(e.rate*p.hours) FROM orders o, EMP e, projects p WHERE o.projno = p.projno AND p.empno = e.empno GROUP BY o.custname, p.projno, e.ename
次のSQL文では、1つのコマンドで前述の3つのデータ・ストアから情報を取得します。
SELECT * FROM DETAILS;
このコマンドの結果は次のとおりです。
CUSTNAME PROJNO ENAME SPEND --------- --------- --------- --------- ABC Co. 1 Jones 400 ABC Co. 1 Smith 180 XYZ Inc. 2 Jones 400 XYZ Inc. 2 Smith 180
- 「2フェーズ・コミット処理」
2フェーズ・コミット・トランザクションに完全に参加するには、サーバーがPREPARE TRANSACTION
文をサポートしている必要があります。PREPARE TRANSACTION
文を使用すると、参加しているすべてのデータベースが、特定の作業単位をCOMMIT
またはROLLBACK
に準備されます。 - 「分散DRDAトランザクション」
HS_TRANSACTION_LOG
表はゲートウェイ・トランザクションのステータスを記録するために使用されるため、この表はDRDA更新が実行されるデータベースに存在する必要があります。
3.6.1 2フェーズ・コミット処理
2フェーズ・コミット・トランザクションに完全に参加するには、サーバーがPREPARE TRANSACTION
文をサポートしている必要があります。 PREPARE TRANSACTION
文を使用すると、参加しているすべてのデータベースが、特定の作業単位をCOMMIT
またはROLLBACK
に準備されます。
Oracleデータベースでは、PREPARE TRANSACTION
文がサポートされています。 任意の数のOracle Databaseが、分散2フェーズ・コミット・トランザクションに参加できます。 PREPARE TRANSACTION
文は、COMMIT
がアプリケーションによって明示的に発行されたとき、またはアプリケーションの通常の端で暗黙的に発行されたときに自動的に実行されます。
ゲートウェイは、PREPARE TRANSACTION
文をサポートしていません。 このため、ゲートウェイが分散トランザクションに参加する場合、2フェーズ・コミット・プロトコルは制限されます。 ゲートウェイは、分散トランザクションの中心的なコミット・ポイント・サイトになります。 ゲートウェイは、コミット/確認として構成されるため、コミット・ポイント強度の設定にかかわらず常にコミット・ポイント・サイトになります。 ゲートウェイは、トランザクションに関連するすべてのOracle Databaseが正常に作業をコミットしたことを確認してから、作業ユニットをコミットします。 ゲートウェイは、1つのゲートウェイ・インスタンスのみが2フェーズ・コミット・トランザクションに参加できるように、分散トランザクションを調整する必要があります。
2フェーズ・コミット・トランザクションは、インストール時に作成されるHS_TRANSACTION_LOG
表(初期化パラメータHS_FDS_TRANSACTION_LOG
を参照)に記録されます。 この表は、o2pc.sql
スクリプトの実行時に作成されます。 この表の所有者は、パッケージも所有します。 詳細は、プラットフォームに応じて、「Oracle Database Gatewayインストレーションおよび構成ガイドfor IBM AIX on POWER Systems (64-Bit)、Linux x86-64、Oracle Solaris on SPARC (64-Bit)、Oracle Solaris on x86-64 (64-Bit)、HP-UX Itanium」または「Oracle Database Gatewayインストレーションおよび構成ガイドfor Microsoft Windows」の「DRDAゲートウェイ・パッケージ・バインディングに関する考慮事項」を参照してください。
親トピック: 分散問合せの実行
3.6.2 分散DRDAトランザクション
HS_TRANSACTION_LOG
表はゲートウェイ・トランザクションのステータスを記録するために使用されるため、この表はDRDA更新が実行されるデータベースに存在する必要があります。
したがって、ゲートウェイを通じて実行されるすべての更新は、IBMデータベースに対してローカルである必要があります。
ノート:
HS_TRANSACTION_LOG
表に対する更新をIBM分散トランザクションに含めることはできません。- OS400 V5R1以降のデフォルトのコミット・モードは
READ UNCOMMITTED (*CHG)
であり、ファイルへの移動が必要です。 したがって、HS_TRANSACTION_LOG
初期化パラメータで指定されたオブジェクトは仕訳化する必要があります。
2フェーズ・コミット・プロセスの詳細は、「Oracle Database異機種間接続ユーザー・ガイド」を参照してください。
親トピック: 分散問合せの実行