機械翻訳について

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

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異機種間接続ユーザー・ガイドを参照してください。