機械翻訳について

3 Oracle Database Gateway for DRDAの使用方法

Oracle Database Gateway for DRDAを使用する場合、対応するゲートウェイ・システムと、そのゲートウェイに関連付けられたリモートDRDAデータベースに接続します。

DRDAゲートウェイの機能

この項では、次のDRDAゲートウェイ機能について説明します:

CHARセマンティクス

この機能により、ゲートウェイはオプションでCHARセマンティクス・モードで実行できます。 UDBのCHAR列を常にCHAR(n BYTE)と記述するのではなく、CHAR(n CHAR)およびVARCHAR(n CHAR)として記述します。 この概念は、OracleデータベースのCHARセマンティクスに似ています。 このオプションをアクティブにするには、HS_NLS_LENGTH_SEMANTICS=CHARゲートウェイ・パラメータを指定する必要があります。 詳細は「初期化パラメータ」を参照してください。

マルチバイト文字セット比率抑制

この機能は、オプションでマルチバイト文字セットを含むUDBデータベースからOracleデータベースへの比率拡張を抑制します。 デフォルトでは、Oracle Database Gateway for DRDAは、データが切り捨てられたり、バッファ・サイズが不十分な状態になるのを防ぐために、最悪の比率を想定しています。 ただし、UDBデータベースに関する特定の知識があり、拡張が行われないようにするには、HS_KEEP_REMOTE_COLUMN_SIZEパラメータを指定して拡張を抑制します。 詳細は「初期化パラメータ」を参照してください。

IPv6のサポート

Oracleデータベースとゲートウェイ間の完全なIPv6サポートに加えて、IPv6もこのゲートウェイとUDBデータベースの間でサポートされています。 詳細は、「初期化パラメータ」HS_FDS_CONNECT_INFOパラメータを参照してください。

ゲートウェイ・セッションIDLEタイムアウト

必要に応じて、ゲートウェイ・パラメータHS_IDLE_TIMEOUTを使用して、長いアイドル・ゲートウェイ・セッションを自動的に終了することもできます。 具体的には、ゲートウェイ・セッションが指定された制限時間を超えてアイドル状態になると、ゲートウェイ・セッションは、保留中の更新プログラムをロールバックして終了

データベース・リンクの処理

分散データベース・システムのデータベースおよびアプリケーション管理者は、Oracle Database Gateway for DRDAへのパスを定義するデータベース・リンクを管理します。 タスクは次のとおりです。

データベース・リンクの作成

データベース・リンクを作成し、リモート・データベースへのパスを定義するには、 CREATE DATABASE LINK 文を使用します。 CONNECT TO句では、リモート・データベースでのセッションの作成時に使用するリモート・ユーザーIDおよびパスワードを指定します。 USING句では、tnsnames.ora接続記述子を示します。

注意:

CONNECT TO句にユーザーIDおよびパスワードを指定しないと、Oracle DatabaseのユーザーIDおよびパスワードが使用されます。

次の例では、データベース・リンクを作成してDRDAサーバーの情報にアクセスします:

CREATE PUBLIC DATABASE LINK dblink 
CONNECT TO userid IDENTIFIED BY password  
USING 'tns_name_entry';

説明:

dblinkは、完全なデータベース・リンク名です。

user idは、リモート・データベースでのセッションの確立に使用されるユーザーIDです。 このユーザーIDは、DRDAサーバーの有効なユーザーIDである必要があります。 また、SQLコマンドで参照されるDRDAサーバー上の任意の表またはファイルに対する権限を持っている必要があります。 ユーザーIDの長さ制限は、DRDAサーバーによって使用される許可システムに依存します。 多くの場合、この制限は8文字ですが、それ以外の場合は長くなることがあります。 制限事項については、DB2プラットフォームの資料を参照してください。

passwordは、リモート・データベースでのセッションの確立に使用されるパスワードです。 パスワードは、DRDAサーバーの有効なパスワードである必要があります。 パスワードの長さ制限は、DRDAサーバーで使用される認証システムによって異なります。 多くの場合、この制限は8文字ですが、それ以外の場合は長くなることがあります。 制限事項については、DB2プラットフォームの資料を参照してください。

tns_name_entryでは、ゲートウェイの識別に使用されるOracle Net接続記述子を指定します。

データベース・リンクのガイドライン

データベース・リンクは、ゲートウェイ・セッションの継続中はアクティブです。 セッション中にデータベース・リンクをクローズする場合は、 ALTER SESSION CLOSE DATABASE LINK dblink文を使用します。

データベース・リンクの削除

DROP DATABASE LINK文を使用すると、データベース・リンクを削除できます。 たとえば、 DBLINK,という名前のパブリック・データベース・リンクを削除するには、次の文を使用します:

DROP PUBLIC DATABASE LINK dblink;

注意:

インダウト状態の分散トランザクションを解決する必要がある場合は、データベース・リンクを削除しないでください。 データベース・リンクを削除する方法の詳細は、「Oracle Database管理者ガイド」を参照してください。

関連項目:

データベース・リンクの削除の詳細については、Oracle Database SQL言語リファレンスを参照してください。

使用可能なデータベース・リンクの調査

各データベースのデータ・ディクショナリには、そのデータベースに関するすべてのデータベース・リンクの定義が格納されます。 USER_DB_LINKSデータ・ディクショナリ・ビューには、非公開で定義されたデータベース・リンク、つまり現行のOracleユーザーがアクセスできるデータベース・リンクが表示されます。 ALL_DB_LINKSデータ・ディクショナリ・ビューには、アクセス可能なすべての(パブリックおよびプライベートの)データベース・リンクが表示されます。

アクティブなデータベース・リンク数の制限

ユーザー・プロセスからリモート・データベースへの接続数は、パラメータOPEN_LINKSを使用して制限できます。 このパラメータにより、単一のユーザー・プロセスで単一のSQL文と同時に使用できるリモート接続の数を制御します。 アクティブなデータベース・リンクの数の制限についての追加情報は、Oracle Database管理者ガイドを参照してください。

ゲートウェイへのアクセス

ゲートウェイにアクセスするには、Oracle Databaseで次の手順を実行します。

  1. 例3-1
  2. 例3-2
  3. 例3-3

例3-1 Oracle Databaseへのログイン

Oracleデータベースにログインしてゲートウェイにアクセス

例3-2 DRDAデータベースへのデータベース・リンクの作成

たとえば、次のように使用します。

CREATE PUBLIC DATABASE LINK DRDA
CONNECT TO ORADRDA IDENTIFIED BY oracle_pw 
USING 'tns_name_entry' 

例3-3 DRDAデータベースからのデータの取得

この問合せは、ORADRDAという名前をDRDAサーバーのユーザー・プロファイルとして使用して、スキーマSECURE内のTABLE表をフェッチします。 ORADRDAユーザー・プロファイルには、SECURE.TABLEファイルにアクセスするためのDRDAサーバーに対する適切な権限が必要です:

SELECT * FROM SECURE.TABLE@DRDA

次に、権限が不十分な場合に表示されるエラー・メッセージの例を示します。

ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Oracle][ODBC DB2 Wire Protocol driver][UDB DB2 for Windows, UNIX, and
Linux]ORADRDA DOES NOT HAVE PRIVILEGE TO PERFORM OPERATION SELECT ON THIS
OBJECT SECURE.TABLE.
ORA-02063: preceding 2 lines from DRDA

i5/OSファイル・メンバーへのアクセス

i5/OSファイルおよびファイル・メンバーへのアクセスは、DRDAまたはゲートウェイによって特に制御されません。 ただし、DB2 UDB for iSeriesは、ファイル・メンバー名がアドレス指定されているファイルの名前と同じであることを意味する命名規則を使用します。 たとえば、schema.tableにアクセスする場合、tableはファイル名であり、同時にアクセス対象のファイル・メンバー名であるとみなされます。

関連するファイル名と異なる名前のファイル・メンバーにアクセスするには、DB2 UDB for iSeriesが正しいファイル・メンバーを参照できるようにファイル内にビューを作成する必要があります。

このビューを作成する1つのメソッドは、i5/OSコマンドCreate Logical File (CRTLF)を発行することです。 この操作により、ファイル名とファイル・メンバー名の間に論理的な関連付けを作成できます。

関連項目:

追加情報については、i5/OSコマンド言語(CL)の資料またはDB2 UDB for iSeries SQLリファレンス資料を参照してください。

シノニム機能の使用

Oracle Databaseのシノニム機能を使用することで、データ、場所およびネットワークに関する完全な透過性を実現できます。 シノニムを定義すると、ユーザーは、基礎となる表または使用されるネットワーク・プロトコルを意識する必要がなくなります。 シノニムは、すべてのOracleユーザーが使用できるパブリック・シノニムとして指定できます。 シノニムは、作成したユーザーのみが使用できるプライベート・シノニムとしても定義できます。 シノニム機能の詳細については、Oracle Databaseリファレンスを参照してください。

次の文では、ORACLEの所有権でDRDAサーバーにシステム全体で使用できるEMPファイルのシノニムを作成します。

CREATE PUBLIC SYNONYM EMP FOR ORACLE.EMP@DRDA

分散問合せの実行

Oracle Databaseゲートウェイ・テクノロジを使用すると、OracleデータベースおよびDRDAサーバーのデータとOracleがゲートウェイを提供する他のデータ・ストアのデータを結合する分散問合せを実行できます。 これらの複雑な操作は、データをリクエストするユーザーに対して完全に透過的です。

次の例では、Oracleデータベース、DB2 for z/OS、および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)する準備が整ったことが保証されます。

Oracle Databaseでは、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 Gatewayパッケージ・バインディングの考慮事項"を参照してください。

分散DRDAトランザクション

HS_TRANSACTION_LOG表はゲートウェイ・トランザクションのステータスを記録するために使用されるため、この表はDRDAの更新が行われるデータベースに存在する必要があります。 したがって、ゲートウェイを通じて実行されるすべての更新は、IBMデータベースに対してローカルである必要があります。

注意:

  • HS_TRANSACTION_LOG表の更新は、IBM分散トランザクションの一部ではありません。

  • OS400 V5R1以降のデフォルトのコミット・モードはREAD UNCOMMITTED (*CHG)であり、ファイルをジャー・ナリングする必要があります。 したがって、HS_TRANSACTION_LOG初期化パラメータで指定されたオブジェクトをジャー・ナリングする必要があります。

2フェーズ・コミット・プロセスの詳細については、Oracle Database異機種間接続ユーザーズ・ガイドを参照してください。

異機種環境でのレプリケート

Oracle Database Gateway for DRDAには、エンタープライズ全体のOracleおよびOracle以外のデータをレプリケートするための多くのオプションがあります。

Oracle Databaseトリガー

Oracleデータベースを更新すると、 Oracleデータベース・トリガーを使用して、OracleおよびOracle以外のデータの同期コピーを自動的に維持できます。

Oracleスナップショット

Oracle Database Gateway for DRDAでは、Oracleスナップショット機能を使用してOracle以外のデータをOracle Databaseに自動的にレプリケートできます。 Oracleスナップショットの完全リフレッシュ機能の使用により、Oracle以外のデータの完全なコピーまたはそのサブセットをユーザー定義による間隔でOracle Databaseに伝播できます。

Oracle DatabaseからDRDAサーバーへのデータのコピー

このOracle SQL INSERTコマンドは、CALLBACK機能で動作するようになりました:

INSERT INTO DRDA_table SELECT * FROM local_table

あるいは、sqlplus COPYコマンドを使用することもできます。 COPYコマンドにより、Oracle DatabaseからDRDAサーバーにデータをコピーできます。 OracleデータベースからDRDAサーバーにデータをコピーするには、次のものも使用できます:

COPY FROM username/password@connect_identifier - 
INSERT destination_table -  
USING query 

たとえば、ローカルのOracle EMP表からすべての行を選択するには、それらをDRDAサーバーの EMP 表に挿入し、トランザクションをコミットします:

COPY FROM scott/tiger@ORACLE -
INSERT scott.EMP@DRDA -
USING SELECT * FROM EMP

SQL*PlusのCOPYコマンドでは、APPENDCREATEINSERTおよびREPLACEコマンドがサポートされます。 ただし、INSERTは、DRDAサーバーへのコピー時にサポートされる唯一のコマンドです。 COPYコマンドの詳細については、SQL*Plusユーザーズ・ガイドおよびリファレンスを参照してください。

DRDAサーバーからOracle Databaseへのデータのコピー

CREATE TABLEコマンドにより、DRDAサーバーからOracle Databaseにデータをコピーできます。 Oracle Databaseに表を作成してDRDAサーバーの表の行を挿入するには、次のコマンドを使用します。

CREATE TABLE table_name 
AS query 

Oracle表へのSQL INSERTは、次のようにゲートウェイからデータを選択して実行できます:

INSERT INTO local_table SELECT * FROM drda_table

次の例では、ローカルOracleデータベースに表EMPを作成し、EMP表の行をDRDAサーバーに挿入します:

CREATE TABLE EMP
AS SELECT * FROM scott.EMP@DRDA

別の方法として、SQL*PlusのCOPYコマンドを使用してDRDAサーバーからOracle Databaseにデータをコピーできます。 COPYコマンドの詳細については、SQL*Plusユーザーズ・ガイドおよびリファレンスを参照してください。

SQL文のトレース

ゲートウェイを通じて発行されるSQL文は、DRDAデータベースに到達する前に変更されることがあります。 これらの変更の目的は、ゲートウェイに受入れ可能な形式にすることや、Oracle SQLとDRDAサーバーSQLとの互換性を確保することにあります。 Oracle Databaseとゲートウェイでは、状況に応じて文が変更されます。

様々な理由から、ゲートウェイで文が正しく変更されているかどうか、またはパフォーマンスを向上するために文をリライトできるかどうかを評価することがあります。 SQLトレースは、Oracle DatabaseまたはゲートウェイによってSQL文に加えられた変更を表示できる機能です。

SQLトレースにより、ゲートウェイのパフォーマンスは低下します。 テストと アプリケーションのデバッグにのみトレースを使用してください。 アプリケーションが本番環境で実行されているときにSQLトレースを有効化しないでください。 SQLトレースの有効化の詳細については、「エラー・メッセージ_診断と報告」「"SQLトレースとゲートウェイ"」に関するセクションを参照してください。