ヘッダーをスキップ

Oracle9i Heterogeneous Connectivity管理者ガイド
リリース2(9.2)

部品番号B13816-01
Go To Table Of Contents
目次
Go To Index
索引

Go to previous page Go to next page

4
異機種間サービス・エージェントの使用

この章では、異機種間サービス(HS)エージェントの使用方法について説明します。この章の内容は、次のとおりです。

Oracle以外のシステムへのアクセスの設定

この項では、Oracle以外のシステムへのアクセスに関する一般的な構成手順について説明します。


注意:

エージェントの構成手順は、後述の手順とは少し異なる場合があります。 インストールの詳細は、使用しているエージェントのインストレーションおよびユーザーズ・ガイドを参照してください。


Oracle以外のシステムへのアクセスを設定する手順は、次のとおりです。

手順1: 異機種間サービスのデータ・ディクショナリのインストール

手順2: 異機種間サービス・エージェントにアクセスするための環境の設定

手順3: Oracle以外のシステムへのデータベース・リンクの作成

手順4: 接続のテスト

手順1: 異機種間サービスのデータ・ディクショナリのインストール

異機種間サービスのデータ・ディクショナリ表およびビューをインストールするには、異機種間サービスのデータ・ディクショナリ表、ビューおよびパッケージをすべて作成するスクリプトを実行する必要があります。 ほとんどのシステムでは、このスクリプトはcaths.sqlと呼ばれ、$ORACLE_HOME/rdbms/adminに常駐します。


注意:

データ・ディクショナリ表、ビューおよびパッケージは、すでにOracle9iサーバーにインストールされている可能性があります。 異機種間サービスのデータ・ディクショナリ・ビュー(SYS.HS_FDS_CLASSなど)の有無を確認してください。


手順2: 異機種間サービス・エージェントにアクセスするための環境の設定

Oracle以外のシステムへの接続を開始するために、Oracle9iサーバーはOracle Netリスナーを介してエージェント・プロセスを起動します。 Oracle9iサーバーからエージェントに接続できるようにするための手順は、次のとおりです。

  1. Oracle9iサーバーで使用できるエージェントのOracle Netサービス名を設定します。Oracle Netサービス名記述子には、Oracle Netリスナーへのアクセスに必要なプロトコル固有の情報が含まれます。 接続にOracle9i異機種間サービスを確実に使用するには、サービス名記述子に(HS=OK)句を含める必要があります。このサービス名の記述は、tnsnames.ora、Oracle Names Serverまたはサード・パーティのネーム・サーバーにOracleのネーミング・アダプタを使用して定義されています。

    tnsnames.oraファイル内のサービス名のサンプル・エントリを次に示します。

    Sybase_sales= (DESCRIPTION=
                         (ADDRESS=(PROTOCOL=tcp)
                                  (HOST=dlsun206)
                                  (PORT=1521)
                         )
                         (CONNECT_DATA = (SERVICE_NAME=SalesDB)
                         )
                         (HS = OK)
                  )
    
    
  2. ゲートウェイ上で、Oracle9iサーバーからの受信要求をリスニングして異機種間サービス・エージェントを起動するリスナーを設定します。次に、ゲートウェイ・マシン上でリスナーを起動します。

    listener.ora内のリスナーのサンプル・エントリを次に示します。

    LISTENER =
       (ADDRESS_LIST =
          (ADDRESS= (PROTOCOL=tcp)
                    (HOST = dlsun206)
                    (PORT = 1521)
          )
      )
    ...
    SID_LIST_LISTENER =
      (SID_LIST =
          (SID_DESC = (SID_NAME=SalesDB)
                      (ORACLE_HOME=/home/oracle/megabase/9.0.1)
                      (PROGRAM=tg4mb80)
                      (ENVS=LD_LIBRARY_PATH=non_oracle_system_lib_directory)
          )
      )
    
    

    PROGRAMキーワードに関連付けられている値により、エージェントの実行可能ファイル名が定義されます。 異機種間サービス・エージェントによりロードされるDLLを含むディレクトリのフルパスは、LD_LIBRARY_PATHで指定されます。通常は、SID_NAMEを使用してエージェント用の初期化パラメータ・ファイルを定義します。

    関連項目:

    • Oracle Netサービス名記述子およびHeterogeneous Connectivity用のリスナー・エントリの詳細は、『Oracle9i Net Services管理者ガイド』を参照してください。

    • マルチスレッド・エージェントの起動方法は、「マルチスレッド・エージェントの管理」を参照してください。

手順3: Oracle以外のシステムへのデータベース・リンクの作成

Oracle以外のシステムへのデータベース・リンクを作成するには、CREATE DATABASE LINK文を使用します。CREATE DATABASE LINK文のUSING句には、サービス名としてOracle Netサービス名を使用します。

たとえば、Sybaseのsalesデータベースへのデータベース・リンクを作成するには、次のように入力します。

CREATE DATABASE LINK sales
USING `Sybase_sales';

手順4: 接続のテスト

Oracle以外のシステムへの接続をテストするには、SQLまたはPL/SQL文でデータベース・リンクを使用します。Oracle以外のシステムがSQLベース・データベースの場合は、データベース・リンクを使用して既存の表またはビューからSELECT文を実行できます。 たとえば、次のような文を発行します。

SELECT * FROM product@sales
WHERE product_name like '%pencil%';

Oracle以外のシステムへのアクセスを初めて試みると、異機種間サービス・エージェントにより異機種間サービスのデータ・ディクショナリに情報がアップロードされます。次のような情報がアップロードされます。

データのタイプ 説明

Oracle以外のシステムの機能

たとえば、エージェントでは、結合またはGROUP BYを実行できるかどうかが指定されます。

SQL変換情報

エージェントでは、Oracleのファンクションおよび演算子からOracle以外のシステムのファンクションおよび演算子への変換方法が指定されます。

データ・ディクショナリ変換

Oracle以外のシステムのデータ・ディクショナリ情報をOracleデータ・ディクショナリと同様に使用可能にするために、エージェントでは、Oracleデータ・ディクショナリ表をOracle以外のシステムの表およびビューに変換する方法が指定されます。


注意:

ほとんどのエージェントは、初めてアクセスされたときにOracle9iデータ・ディクショナリに情報を自動的にアップロードします。 ただし、一部のエージェント・ベンダーが提供しているスクリプトは、Oracle9iサーバー上で実行する必要があります。


関連項目:

「異機種間サービスのデータ・ディクショナリ・ビュー」および付録D「データ・ディクショナリ変換のサポート」 

初期化パラメータの設定

「異機種間サービスの構成」で説明したように、初期化パラメータを使用してゲートウェイを構成できます。そのためには、初期化ファイルを作成し、このファイル内で必要なパラメータを設定します。

異機種間サービスの初期化パラメータは、Oracleデータベース・サーバーの初期化パラメータとは異なります。異機種間サービスの初期化パラメータは、Oracleデータベース・サーバーの初期化パラメータ・ファイル(init.oraファイル)ではなく、異機種間サービスの初期化ファイル内で設定します。ゲートウェイ・インスタンスごとに、異機種間サービスの初期化ファイルがあります。

異機種間サービスの初期化パラメータ・ファイルの名前と位置

ファイル名はinitsid.oraで、sidはゲートウェイに使用されるOracleシステム識別子です。

Generic Connectivityの場合、異機種間サービスの初期化ファイルは$ORACLE_HOME/hs/adminディレクトリにあります。Transparent Gatewayの場合は、$ORACLE_HOME/product_name/adminディレクトリにあります。product_nameは製品名です。したがって、Sybaseゲートウェイの初期化ファイルは、$ORACLE_HOME/tg4sybs/adminディレクトリにあります。

初期化パラメータ設定の構文

初期化ファイルには、初期化パラメータ設定のリストが含まれています。設定はそれぞれ1行に記述する必要があります。初期化パラメータ設定の構文は次のとおりです。

[set] [private] parameter = parameter_value

setおよびprivateキーワードはオプションです。setキーワードを指定すると、環境内で変数も設定されます。privateキーワードを指定すると、パラメータはサーバーにアップロードされません。通常、ネットワーク上でゲートウェイからOracleサーバーに送信されないようにする必要のある機密情報(パスワードなど)が初期化パラメータ値に含まれる場合を除き、このキーワードを使用しないことをお薦めします。

初期化パラメータの構文で、すべてのキーワード(SETPRIVATEおよびIFILE)には大/小文字区別はありません。初期化パラメータの名前と値には、大/小文字区別があります。ほとんどの初期化パラメータ名は大文字です。異機種間サービス・パラメータの文字列値は小文字で指定する必要があります。このルールに対する例外は、明記してあります。

IFILEディレクティブを使用すると、もう1つの初期化ファイルを異機種間サービスの初期化ファイルに含めることができます。 次に構文を示します。

IFILE = pathname for file to be included

初期化パラメータ

ゲートウェイ初期化パラメータは、2つのグループにわけることができます。一方はすべてのゲートウェイに共通する汎用初期化パラメータの集合で、他方は個々のゲートウェイに固有の初期化パラメータの集合です。 次のリストに、このマニュアルで説明する汎用初期化パラメータのみを示します。

前述のパラメータの設定時には、privateキーワードを使用しないでください。このキーワードを使用すると、パラメータがサーバーにアップロードされず、SQL処理中にエラーが発生する可能性があります。 前述のパラメータはいずれも環境での設定が必須ではないため、setキーワードを使用する必要はありません。

関連項目:

  • 異機種間サービスの汎用初期化パラメータの詳細は、付録A「異機種間サービスの初期化パラメータ」を参照してください。 

  • ゲートウェイ固有の初期化パラメータのリストについては、各ゲートウェイのマニュアルを参照してください。

バルク・フェッチを使用したデータ転送の最適化

アプリケーションで異機種間サービスを使用してOracle以外のシステムからデータをフェッチする場合、データは次の順序で転送されます。

  1. Oracle以外のシステムからエージェント・プロセスへ。

  2. エージェント・プロセスからOracleデータベース・サーバーへ。

  3. Oracleデータベース・サーバーからアプリケーションへ。

Oracleでは、図4-1に示すように3つのデータ転送をすべて最適化できます。 

図4-1 データ転送の最適化

この項の内容は、次のとおりです。

OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ

アプリケーションとOracle9iサーバー間のデータ転送は、配列フェッチを使用して最適化できます。配列フェッチの詳細と、データ送信量または各ネットワークのラウンドトリップの指定方法は、アプリケーション開発ツールのマニュアルを参照してください。

Oracleデータベース・サーバーとエージェント間の配列フェッチの制御

OracleがOracle以外のシステムからデータを取得する場合、異機種間サービスのHS_RPC_FETCH_SIZE初期化パラメータにより、エージェントとOracle9iサーバー間のフェッチごとに送信されるバイト数が定義されます。エージェントは、次のいずれかが発生するまでOracle以外のシステムからデータをフェッチします。

エージェントとOracle以外のサーバー間の配列フェッチの制御

Oracle以外のシステムから取得される行数は、HS_FDS_FETCH_ROWS初期化パラメータにより決定されます。エージェントで配列フェッチがサポートされる必要があることに注意してください。エージェント固有のマニュアルを参照し、エージェントで配列フェッチがサポートされることを確認してください。

配列フェッチの再ブロック化の制御

デフォルトでは、エージェントはサーバーへの送信分として十分なデータを取得するまで、Oracle以外のシステムからデータをフェッチします。つまり、Oracle以外のシステムからフェッチされたバイト数がHS_RPC_FETCH_SIZEの値以上になるまで、フェッチが続行されます。 言い換えると、エージェントは、Oracleデータベース・サーバーとの間で、HS_RPC_FETCH_SIZEの値により定義されたサイズ単位でデータを再ブロック化します。

Oracle以外のシステムで配列フェッチがサポートされる場合は、配列フェッチによりOracle以外のシステムからフェッチしたデータを、HS_RPC_FETCH_SIZEの正確な値に達するまで待たずにOracleデータベース・サーバーに即時に送信できます。つまり、Oracle以外のシステムからOracleデータベース・サーバーにデータをストリームし、HS_RPC_FETCH_REBLOCKING初期化パラメータの値をOFFに設定して再ブロック化を無効にできます。

たとえば、HS_RPC_FETCH_SIZEを64 KB、HS_FDS_FETCH_ROWSを100行に設定するとします。各行のサイズが約600バイトであるとすると、100行では約60 KBになります。HS_RPC_FETCH_REBLOCKINGONに設定すると、エージェントはOracle以外のシステムから100行のフェッチを開始します。

エージェントにはデータが60 KBしかないため、データはOracleデータベース・サーバーに送信されません。かわりに、エージェントはOracle以外のシステムから次の100行をフェッチします。これでエージェントにあるデータが120 KBになったため、最初の64 KBをOracleデータベース・サーバーに送信できます。

この時点で、エージェントには56 KBのデータが残っています。エージェントはOracle以外のシステムからさらに100行をフェッチした後、次の64 KBのデータをOracleデータベース・サーバーに送信します。 HS_RPC_FETCH_REBLOCKING初期化パラメータをOFFに設定すると、最初の100行がOracle9iサーバーに即時に送信されます。

エージェントの登録

登録とは、Oracleによりエージェント情報がデータ・ディクショナリに格納される操作です。エージェントの登録は必須ではありません。エージェントが未登録の場合、Oracleではエージェント情報がデータ・ディクショナリのかわりにメモリーに格納されます。エージェントに関係するセッションが終了すると、この情報は使用できなくなります。

自動登録とは、エージェントが情報をデータ・ディクショナリに自動的にアップロードできるように、データベース管理者が初期化パラメータを設定する操作です。Oracleデータベース・サーバーのリリース8.0では、エージェントは自動登録するかどうかを決定できます。 Oracle9iの場合、自動登録が発生するのはHS_AUTOREGISTER初期化パラメータがTRUE(デフォルト)に設定されている場合のみです。


注意:

HS_AUTOREGISTERは、init.oraファイル内で設定するOracle初期化パラメータです。ゲートウェイ初期化ファイル内で設定する異機種間サービスの初期化パラメータではありません。


この項の内容は、次のとおりです。

エージェント自動登録の有効化

異機種間データベース・リンク上での正常動作を確実にするために、エージェント自動登録により、リモート・ホスト上でエージェントを記述する異機種間サービス構成データの更新が自動化されます。エージェント自動登録はデフォルトの動作です。エージェント自動登録機能を使用しない場合は、HS_AUTOREGISTER初期化パラメータをFALSEに設定してください。

サーバーとエージェントは、どちらも3種類の情報に依存して異機種間サービス接続の操作を構成および制御します。この3セットの情報をまとめてHS構成データと呼びます。

異機種間サービス構成データ 説明

異機種間サービス初期化パラメータ

操作の各種接続固有の詳細を制御します。

機能定義

Oracle以外のデータ・ソースでサポートされるSQL言語機能などの詳細を識別します。

データ・ディクショナリ変換

Oracleデータ・ディクショナリ表およびビューへの参照を、Oracle以外のデータ・ソース固有の等価の表およびビューにマップします。

関連項目:

「HS_AUTOREGISTERの指定」

エージェント自動登録を使用した構成不一致の回避

HS構成データは、Oracleデータベース・サーバーのデータ・ディクショナリに格納されます。リモート・エージェントであるために別個に管理される場合があるので、いくつかの場合にサーバーとエージェントの間で構成が一致しなくなる可能性があります。

エージェント自動登録により、これらのすべての使用例で異機種間サービスを正常に操作できます。 特に、エージェント自動登録により、Oracleデータベース・サーバーと異機種間サービス・エージェントがそれぞれリリース8.0.3以上の場合は、両者間の相互運用性が強化されます。 この機能の基本的なメカニズムは、HS構成データをエージェントからサーバーにアップロードする機能です。

自動登録により、Oracleデータベース・サーバーのデータ・ディクショナリに常駐するHS構成データが自動的に更新されます。この更新により、エージェント自動登録のアップロードは、未登録エージェントを最初に使用するときに1回実行すればよいことになります。インスタンス情報は、サーバーのデータ・ディクショナリに格納されるのではなく、接続ごとにアップロードされます。

エージェント自動登録の概要

異機種間サービスのエージェント自動登録機能では、次の操作を実行できます。

前述の操作に必要な情報には、次のエージェント指定名を使用してサーバーのデータ・ディクショナリ内でアクセスします。

FDS_CLASSおよびFDS_CLASS_VERSION

FDS_CLASSおよびFDS_CLASS_VERSIONは、Oracleまたはサード・パーティ・ベンダーにより、異機種間サービス・エージェントとバージョンごとに個別に定義されます。Oracle異機種間サービスでは、これらの名前が連結されてFDS_CLASS_NAMEとなり、サーバーのデータ・ディクショナリ内のクラス情報にアクセスするための主キーとして使用されます。

FDS_CLASSにはアクセスするOracle以外のデータ・ストアのタイプを指定し、FDS_CLASS_VERSIONにはOracle以外のデータ・ストアとそこに接続するエージェントのバージョン番号を指定する必要があります。エージェントのいずれかのコンポーネントに変更があった場合は、新リリースを一意に識別するようにFDS_CLASS_VERSIONも変更する必要があることに注意してください。


注意:

この情報は、各接続の初期化時にアップロードされます。


FDS_INST_NAME

インスタンス固有の情報をサーバーのデータ・ディクショナリに格納できます。インスタンス名FDS_INST_NAMEは、エージェントを管理するデータベース管理者により構成されます。この構成の実行方法は、使用中のエージェントに応じて異なります。

Oracleデータベース・サーバーでは、FDS_INST_NAMEを使用して、データ・ディクショナリ内でインスタンス固有の構成情報が参照されます。Oracleでは、その値が次のビューで同じ名前を持つ列の主キーとして使用されます。

FDS_INST_NAMEを使用したサーバーのデータ・ディクショナリへのアクセスでも、FDS_CLASS_NAMEを使用して構成情報の行が一意に識別されます。たとえば、データベースをクラスSybase8.1.6からクラスSybase8.1.7に移植する場合は、両方のデータベースが同時にインスタンス名SCOTTで動作し、別個の構成情報セットを使用できます。

クラス情報とは異なり、インスタンス情報はサーバーのデータ・ディクショナリに自動登録されません。

HS_AUTOREGISTERの指定

Oracleデータベース・サーバーのHS_AUTOREGISTER初期化パラメータを使用すると、異機種間サービス・エージェントの自動登録を有効化または無効化できます。このパラメータは、エージェントの初期化ファイルではなくOracle初期化パラメータ・ファイル内で指定することに注意してください。たとえば、このパラメータを次のように設定できます。

HS_AUTOREGISTER = TRUE

TRUEに設定すると、エージェントは、以前に認識されていないエージェント・クラスまたは新規エージェント・バージョンの記述情報を、サーバーのデータ・ディクショナリにアップロードします。

このパラメータにはデフォルト値(TRUE)を使用することをお薦めします。この設定により、サーバーのデータ・ディクショナリの内容は常に、異機種間サービス接続に使用されるクラス機能とデータ・ディクショナリ変換の定義を確実に正しく表すものになります。

関連項目:

このパラメータの詳細は、『Oracle9i データベース・リファレンス』を参照してください。

エージェント自動登録の無効化

エージェント自動登録を無効化するには、HS_AUTOREGISTER初期化パラメータを次のように設定します。

HS_AUTOREGISTER = FALSE

エージェント自動登録を無効化すると、エージェント情報はデータ・ディクショナリに格納されません。そのため、異機種間サービスのデータ・ディクショナリ・ビューは有効な情報ソースでなくなります。ただし、Oracleサーバーは、各エージェントのクラスおよびインスタンスに関する情報を引き続き必要とします。エージェント自動登録を無効化すると、サーバーではこの情報がローカル・メモリーに格納されます。

Oracleデータベース・サーバーのSQL構文の処理

ゲートウェイは、SQL文の変換または後処理が必要な場合に、そのSQL文を書き換えます。

たとえば、Oracle以外のデータベース・システムのデータベースからの次の操作を必要とするプログラムを考えてみます。

SELECT "COL_A" FROM "test"@SYBS
    WHERE "COL_A" = INITCAP('jones');

INITCAPはOracle以外のデータベース・システムのデータベースで認識されないため、Oracleデータベース・サーバーはtestの表スキャンを実行して結果をローカルにフィルタします。ゲートウェイは、SELECT文を次のように書き換えます。

SELECT "COL_A" FROM "test"@SYBS

問合せ結果がゲートウェイに送られ、Oracleデータベース・サーバーによりフィルタされます。

次のUPDATE要求を考えてみます。

UPDATE "test"@SYBS WHERE "COL_A" = INITCAP('jones');

この場合、Oracleデータベース・サーバーとゲートウェイはOracle以外のデータベース・システムのデータベース側のサポートの欠落を補えないため、エラーが発行されます。

Oracle以外のデータベース・システムのデータベースに格納されている大量のデータに対して操作を実行する場合は、一部の関数では処理の前にデータを統合用Oracleデータベース・サーバーに移動する必要があることに注意してください。

シノニムの使用

Oracleデータベース・サーバーのシノニム機能を使用すると、完全なデータ位置の透過性とネットワークの透過性を提供できます。シノニムが定義されていれば、基礎となる表やネットワーク・プロトコルを知る必要はありません。シノニムはパブリックとして定義できます。これは、すべてのOracleユーザーがシノニムを参照できることを意味します。 また、シノニムをプライベートとして定義することもできます。これは、各OracleユーザーがOracle以外のデータベース・システムの表にアクセスするには、定義済のシノニムを必要とすることを意味します。

次の文では、Oracle以外のデータベース・システムのデータベースのユーザーORACLEのスキーマ内で、emp表に対してシステム単位のシノニムが作成されます。

CREATE PUBLIC SYNONYM EMP FOR "ORACLE"."EMP"@SYBS

関連項目:

シノニムの詳細は、『Oracle9i データベース管理者ガイド』を参照してください。

分散問合せの例

次の文では、Oracleデータベース・サーバー、IBM DB2データベースおよびOracle以外のデータベース・システムのデータベース間でデータが結合されます。

SELECT O.CUSTNAME, P.PROJNO, E.ENAME, SUM(E.RATE*P."HOURS")
       FROM ORDERS@DB2 O, EMP@ORACLE9 E, "PROJECTS"@SYBS P
       WHERE O.PROJNO = P."PROJNO"
          AND P."EMPNO" = E.EMPNO
       GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME;

ビューとシノニムの組合せを介して次のSQL文を使用すると、分散問合せの処理がユーザーに対して透過的になります。

SQL> CREATE SYNONYM ORDERS FOR ORDERS@DB2
SQL> CREATE SYNONYM PROJECTS FOR "PROJECTS"@SYBS
SQL> CREATE VIEW DETAILS (CUSTNAME,PROJNO,ENAME,SPEND)
AS
SELECT O.CUSTNAME, P."PROJNO", E.ENAME, SUM(E.RATE*P."HOURS")
SPEND
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つの文でデータ・ストアから情報を取得します。

SQL> 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

Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピー

SQL*PlusのCOPYコマンドを使用して、ローカル・データベースからOracle以外のデータベース・システムのデータベースにデータをコピーします。構文は次のとおりです。

COPY FROM username/password@db_name
INSERT destination_table USING query

次の例では、ローカルのOracle emp表から行がすべて選択され、Oracle以外のデータベース・システムのデータベースのemp表に挿入され、トランザクションがコミットされます。

SQL> COPY FROM SCOTT/TIGER@ORACLE9-
2> INSERT SCOTT.EMP@SYBS -
3> USING SELECT * FROM EMP

COPYコマンドでは、APPENDCREATEINSERTおよびREPLACEオプションがサポートされます。 ただし、コピー先がOracle以外のデータベース・システムの場合にサポートされるオプションはINSERTのみです。SQL*PlusのCOPYコマンドでは、小文字の名前を持つ表へのコピーはサポートされません。表の名前が小文字の場合は、次のPL/SQL構文を使用します。

DECLARE
    v1 oracle_table.column1%TYPE;
    v2 oracle_table.column2%TYPE;
    v3 oracle_table.column3%TYPE;
    .
    .
    .
    CURSOR cursor_name IS SELECT * FROM oracle_table;
BEGIN
    OPEN cursor_name;
    LOOP
       FETCH cursor_name INTO v1, v2, v3, ... ;
       EXIT WHEN cursor_name%NOTFOUND;
       INSERT INTO destination_table VALUES (v1, v2, v3, ...);
    END LOOP;

    CLOSE cursor_name;
END;
/

関連項目:

COPYコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピーでは、次のOracle SQL INSERT文はサポートされません。

INSERT INTO table_name  SELECT column_list FROM table_name

たとえば、次の文を考えてみます。

SQL> INSERT INTO SYBS_TABLE SELECT * FROM MY_LOCAL_TABLE

この文は次のエラー・メッセージを戻します。

ORA-02025:  SQL文の中の表はすべてリモート・データベースにある必要があります

Oracle以外のデータベース・システムからOracleデータベース・サーバーへのデータのコピー

CREATE TABLE文を使用すると、Oracle以外のデータベース・システムのデータベースからOracleデータベース・サーバーにデータをコピーできます。 ローカル・データベースに表を作成し、Oracle以外のデータベース・システムの表から行を挿入するには、次の構文を使用します。

CREATE TABLE table_name AS query

次の例では、ローカルのOracleデータベースにemp表が作成され、Oracle以外のデータベース・システムのデータベースのemp表から行が挿入されます。

SQL> CREATE TABLE EMP AS SELECT * FROM SCOTT."EMP"@SYBS

または、SQL*PlusのCOPYコマンドを使用して、Oracle以外のデータベース・システムのデータベースからOracleデータベース・サーバーにデータをコピーする方法もあります。

関連項目:

COPYコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

異機種間サービスのデータ・ディクショナリ・ビュー

異機種間サービスのデータ・ディクショナリ・ビューを使用すると、異機種間サービスに関する情報にアクセスできます。この項の内容は、次のとおりです。

ビューのタイプ

異機種間サービスのデータ・ディクショナリ・ビューは、主に次の4つのタイプに分類できます。ビュー名はすべて接頭辞HS_で始まります。

データ・ディクショナリ・ビューのほとんどは、クラスとインスタンスの両方に対して定義されています。そのため、ほとんどのタイプのデータには、*_CLASSビューと*_INSTビューがあります。

表4-1 「異機種間サービスのデータ・ディクショナリ・ビュー」
ビュー 識別内容

HS_BASE_CAPS

SQLサービス

異機種間サービスでサポートされている全機能

HS_BASE_DD

SQLサービス

異機種間サービスでサポートされている、すべてのデータ・ディクショナリ変換表名

HS_CLASS_CAPS

トランザクション・サービス、SQLサービス

各クラスの機能

HS_CLASS_DD

SQLサービス

各クラスのデータ・ディクショナリ変換

HS_CLASS_INIT

汎用

各クラスの初期化パラメータ

HS_FDS_CLASS

汎用

このOracle9iサーバーからアクセス可能なクラス

HS_FDS_INST

汎用

このOracle9iサーバーからアクセス可能なインスタンス

すべてのOracleデータ・ディクショナリ表と同様に、これらのビューは読取り専用です。基礎となる表の内容は変更しないでください。

データ・ディクショナリ情報のソース

異機種間サービス・データベース・リンクを介した特定の接続でデータ・ディクショナリの内容に使用される値は、次のソースから取得できます。各ソースを優先順に示します。

Oracleデータベース・サーバーの実行時にHS_AUTOREGISTERサーバー初期化パラメータがFALSEに設定されている場合、Oracleデータ・ディクショナリに情報が自動的に格納されることはありません。接続が確立されるたびに、接続ごとに異機種間サービス・エージェントにより等価のデータがアップロードされ、インスタンス固有の情報がクラス情報より優先されます。


注意:

エージェントがインスタンス情報をアップロードできる可能性があるため、特定のセッションに使用中の機能とデータ・ディクショナリ変換は明確に判断できません。


V$HS_PARAMETERビューのVALUE列を問い合せると、異機種間サービス初期化パラメータの値を判断できます。V$HS_PARAMETERVALUE列では、実際の初期化パラメータ値が最大255文字から最大64文字に切り捨てられ、パラメータ名が最大64文字から最大30文字に切り捨てられることに注意してください。

汎用ビューの使用

次のビューは、すべてのサービスに共通です。

ビュー 内容

HS_FDS_CLASS

HS_FDS_INST

Oracle8iデータ・ディクショナリにアップロードされたインスタンスとクラスの名前

HS_CLASS_INIT

異機種間サービス初期化パラメータに関する情報

たとえば、Oracleデータベース・サーバーから複数のSybaseゲートウェイにアクセスできます。ゲートウェイに初めてアクセスすると、Oracleデータベース・サーバーにアップロードされた情報が次のように表示される場合があります。

SQL> SELECT * FROM hs_fds_class;

FDS_CLASS_NAME        FDS_CLASS_COMMENTS             FDS_CLASS_ID
--------------------- ------------------------------ ------------
Sybase816             Uses Sybase driver, R1.1                 1
Sybase817             Uses Sybase driver, R1.2                21

2つのクラスがアップロードされています。一方はSybase816にアクセスするクラス、他方はSybase817にアクセスするクラスです。Oracleデータベース・サーバーのデータ・ディクショナリには、Sybase816とSybase817の機能情報、SQL変換およびデータ・ディクショナリ変換が含まれていることになります。

Oracleデータベース・サーバーのデータ・ディクショナリでは、この情報の他にも、アクセス先となるOracle以外のシステムのインスタンスごとに、HS_FDS_INSTビューにインスタンス情報が含まれます。

トランザクション・サービス・ビューの使用

Oracle以外のシステムが分散トランザクションに関係する場合、分散トランザクションに関与できるかどうかは、そのシステムとエージェントのトランザクション機能により制御されます。トランザクション機能は、HS_CLASS_CAPS表に格納されます。

Oracle以外のシステムとエージェントが2フェーズ・コミット・プロトコルをサポートできるかどうかは、2PCタイプ機能により指定されます。次の5つのタイプのいずれかを指定できます。

機能

読取り専用(RO)

Oracle以外のシステムに対して実行できるのは、SQLのSELECT文を使用した問合せのみです。プロシージャ・コールはデータを書き込むと想定されるため許可されません。

単一サイト(SS)

Oracle以外のシステムでリモート・トランザクションを処理できますが、分散トランザクションは処理できません。つまり、2フェーズ・コミット・プロトコルには関与できません。

コミット確認(CC)

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、コミット・ポイント・サイトとしてのみ関与できます。つまり、データを準備できませんが、グローバル・コーディネータから要求された場合は、特定のトランザクションの結果を記憶できます。

2フェーズ・コミット

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、コミット・ポイント・サイトではなく通常の2フェーズ・コミット・ノードとして関与できます。つまり、データを準備できますが、グローバル・コーディネータから要求されても特定のトランザクションの結果を記憶できません。

2フェーズ・コミット確認

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、通常の2フェーズ・コミット・ノードまたはコミット・ポイント・サイトとして関与できます。つまり、データを準備でき、グローバル・コーディネータから要求された場合は、特定のトランザクションの結果を記憶できます。

異機種間サービスのHS_CLASS_CAPSデータ・ディクショナリ・ビューを使用すると、ドライバとOracle以外のシステムでサポートされているトランザクション・モデルを問い合せることができます。

機能の1つは2PCタイプの機能です。

SELECT cap_description, translation
FROM   hs_class_caps
WHERE  cap_description LIKE '2PC%'
AND    fds_class_name=`MegaBase6';

CAP_DESCRIPTION                          TRANSLATION
---------------------------------------- -----------
2PC type (RO-SS-CC-PREP/2P-2PCC)                  CC

Oracle以外のシステムとエージェントが分散トランザクションをサポートしている場合、そのシステムは他のOracle9iサーバーと同様に扱われます。2フェーズ・コミット・プロトコル中に障害が発生すると、トランザクションは自動的にリカバリされます。障害が継続する場合は、データベース管理者がインダウト・トランザクションを手動でオーバーライドする必要があります。

SQLサービス・ビューの使用

SQLサービス固有のデータ・ディクショナリ・ビューには、次の情報が含まれています。

機能と変換に関するビューの使用

HS_*_CAPSデータ・ディクショナリ表には、Oracle以外のデータ・ソースのSQL機能と必須のSQL変換に関する情報が含まれています。これらのビューでは、Oracle以外のデータ・ストアまたはOracleデータベース・サーバーに特定のSQL言語機能が実装されるかどうかが指定されます。 機能がオフになっている場合、Oracle9iでは、その機能を必要とするOracle以外のデータ・ソースにSQL文は送信されませんが、後処理は実行されます。

データ・ディクショナリ変換に関するビューの使用

Oracle以外のシステムがOracleデータベース・サーバーと同様にみえるように、異機種間サービス接続により、Oracleデータ・ディクショナリ・ビューの限定セットがOracle以外のシステムのデータ・ディクショナリにマップされます。このマッピングにより、アプリケーションでは、これらのビューがOracleデータ・ディクショナリに属している場合と同様に問合せを発行できます。このアクセスは、データ・ディクショナリ変換により可能になります。これらの変換は、異機種間サービスのうち、名前に接尾辞_DDを含むビューに格納されます。

たとえば、次のSELECT文は、Sybaseのデータ・ディクショナリ表からemp表の情報を取得するSybaseの問合せに変換されます。

SELECT * FROM USER_TABLES@salesdb
WHERE UPPER(TABLE_NAME)='EMP';

データ・ディクショナリ表は、変換するかわりに疑似実行できます。必要な情報がOracle以外のデータ・ソースのデータ・ディクショナリにないために、データ・ディクショナリ変換ができない場合、異機種間サービスではデータ・ディクショナリ表が使用可能であるかのように表示されますが、表には情報が含まれていません。

Oracle以外のシステム用に変換または疑似実行されるOracleデータ・ディクショナリ・ビューまたは表の情報を取得するには、HS_CLASS_DDビューに対して次の問合せを発行できます。

SELECT DD_TABLE_NAME, TRANSLATION_TYPE
FROM   HS_CLASS_DD
WHERE  FDS_CLASS_NAME=`Sybase';

DD_TABLE_NAME                  T
-----------------------------  -
ALL_ARGUMENTS                  M
ALL_CATALOG                    T
ALL_CLUSTERS                   T
ALL_CLUSTER_HASH_EXPRESSIONS   M
ALL_COLL_TYPES                 M
ALL_COL_COMMENTS               T
ALL_COL_PRIVS                  M
ALL_COL_PRIVS_MADE             M
ALL_COL_PRIVS_RECD             M
...

変換タイプTは、変換が存在することを示します。変換タイプがMの場合は、データ・ディクショナリ表が疑似実行されます。

関連項目:

異機種間サービスのマッピングを介してサポートされるデータ・ディクショナリ・ビューのリストは、付録D「データ・ディクショナリ変換のサポート」を参照してください。 

異機種間サービスの動的パフォーマンス・ビューの使用

Oracleデータベース・サーバーでは、エージェント、セッションおよびパラメータに関する情報が格納されます。 V$動的パフォーマンス・ビューを使用すると、この情報にアクセスできます。この項の内容は、次のとおりです。

ホストで実行されているエージェントの判別

次のビューには、エージェントの一般情報が表示されます。

ビュー 目的

V$HS_AGENT

エージェント・プロセスごとに1行を使用して、指定されたホスト上で現在実行中の異機種間サービス・エージェントのセットを識別します。

このビューを使用して、指定のホスト上で実行中のエージェントに関する一般情報を判別します。 次の表に、最も関連の深い列を示します(このビューの各列の詳細は、『Oracle9i データベース・リファレンス』を参照)。

表4-2 V$HS_AGENT
説明

AGENT_ID

エージェントへの接続に使用されるOracle NetセッションID(listener.ora SID

MACHINE

オペレーティング・システム・マシン名

PROGRAM

エージェントのプログラム名

AGENT_TYPE

エージェントのタイプ

FDS_CLASS_ID

外部データ・ストア・クラスのID

FDS_INST_ID

外部データ・ストアのインスタンス名

オープン状態の異機種間サービス・セッションの判別

次のビューには、Oracleデータベース・サーバー用にオープンされている異機種間サービス・セッションが表示されます。

ビュー 目的

V$HS_SESSION

エージェントごとのセッションと使用されるデータベース・リンクが表示されます。

次の表に、最も関連の深い列を示します(このビューの各列の詳細は、『Oracle9i データベース・リファレンス』を参照)。

表4-3 V$HS_SESSION
説明

HS_SESSION_ID

異機種間サービスの一意のセッションID

AGENT_ID

エージェントへの接続に使用されるOracle NetセッションID(listener.ora SID

DB_LINK

エージェントへのアクセスに使用されるサーバーのデータベース・リンク名(NULLは、外部プロシージャの使用時など、データベース・リンクが使用されないことを意味します)

DB_LINK_OWNER

DB_LINKのデータベース・リンクの所有者

異機種間サービスのパラメータの判別

次のビューには、Oracleデータベース・サーバーで設定されている異機種間サービス・パラメータが表示されます。

ビュー 目的

V$HS_PARAMETER

Oracleデータベース・サーバーに登録済の異機種間サービス・パラメータと値が表示されます。

次の表に、最も関連の深い列を示します(このビューの各列の詳細は、『Oracle9i データベース・リファレンス』を参照)。

表4-4 V$HS_SESSION
説明

HS_SESSION_ID

異機種間サービスの一意のセッションID

PARAMETER

異機種間サービス・パラメータ名

VALUE

異機種間サービス・パラメータの値

分散接続の確立に使用されたデータベース・リンク、起動時刻およびセッションに使用された初期化パラメータのセットに関する情報も表示できます。

ランタイム情報は、すべて動的に更新されるV$表から導出されます。Distributed Access Managerにはメニューおよびツールバーを介して使用可能なリフレッシュ機能があり、必要に応じて問合せを再実行し、データを更新できます。データのリフレッシュ時には、ツールにより登録済エージェントのセットに変更がないことが確認されます。変更があった場合は、グローバル・ビューが更新されます。


Go to previous page Go to next page
Oracle
Copyright © 2001, 2002 Oracle Corporation.

All Rights Reserved.
Go To Table Of Contents
目次
Go To Index
索引