3 Oracle Database Gateway for 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
パラメータを参照してください。
データベース・リンクの処理
分散データベース・システムのデータベースおよびアプリケーション管理者は、Oracle Database Gateway for DRDAへのパスを定義するデータベース・リンクを管理します。 タスクは次のとおりです。
データベース・リンクの作成
データベース・リンクを作成し、リモート・データベースへのパスを定義するには、 CREATE
DATABASE LINK
文を使用します。 CONNECT TO
句では、リモート・データベースでのセッションの作成時に使用するリモート・ユーザーIDおよびパスワードを指定します。 USING
句では、tnsnames.ora接続記述子を示します。
注意:
CONNECT TO
句にユーザーIDおよびパスワードを指定しないと、Oracle DatabaseのユーザーIDおよびパスワードが使用されます。
関連項目:
詳細については、「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」の第15章、"セキュリティに関する考慮事項"を参照してください。
次の例では、データベース・リンクを作成して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プラットフォームの資料を参照してください。
データベース・リンクのガイドライン
データベース・リンクの削除
DROP DATABASE LINK
文を使用すると、データベース・リンクを削除できます。 たとえば、 DBLINK,
という名前のパブリック・データベース・リンクを削除するには、次の文を使用します:
DROP PUBLIC DATABASE LINK dblink;
注意:
インダウト状態の分散トランザクションを解決する必要がある場合は、データベース・リンクを削除しないでください。 データベース・リンクを削除する方法の詳細は、「Oracle Database管理者ガイド」を参照してください。
関連項目:
データベース・リンクの削除の詳細については、「Oracle Database SQL言語リファレンス」を参照してください。
アクティブなデータベース・リンク数の制限
ユーザー・プロセスからリモート・データベースへの接続数は、パラメータOPEN_LINKS
を使用して制限できます。 このパラメータにより、単一のユーザー・プロセスで単一のSQL文と同時に使用できるリモート接続の数を制御します。 アクティブなデータベース・リンクの数の制限についての追加情報は、「Oracle Database管理者ガイド」を参照してください。
ゲートウェイへのアクセス
例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から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
コマンドでは、APPEND
、CREATE
、INSERT
および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トレースとゲートウェイ"」に関するセクションを参照してください。