異機種間環境で運用するためのオラクル社の同期ソリューションは、Oracle Database Gatewayです。これらのソリューションをサポートするためのOracleデータベース・サーバーの共通コンポーネントは、異機種間サービスです。この章では、異機種間サービス・コンポーネントのアーキテクチャと機能、およびOracle Database Gatewayとの対話について説明します。
この章の内容は、次のとおりです。
図2-1に、Oracleの異機種間接続プロセスのアーキテクチャの概要を示します。
Oracleデータベース・サーバーの異機種間サービス・コンポーネントは異機種間サービス・エージェント・プロセスと対話し、異機種間サービス・エージェント・プロセスはOracle以外のシステムと対話します。コードは、概念上次の3つの部分に分けることができます。
Oracleデータベース・サーバーの異機種間サービス・コンポーネント。
異機種間接続関連のほとんどの処理は、このモジュールで実行されます。
エージェントの汎用コード。
これは、エージェント内にある、すべての異機種間サービス製品に対する汎用コードです。その大部分は、データベースと通信するためのコードおよびマルチスレッド化をサポートするためのコードで構成されます。
ドライバ。
これは、Oracle以外のシステムと通信するモジュールです。このモジュールを使用して、異機種間サービスからのコールがOracle以外のシステム固有のAPIにマップされます。ドライバは、Oracle以外のシステムに固有です。
異機種間サービス・エージェントとは、OracleサーバーでOracle以外のシステムへの接続に使用されるプロセスです。このようにOracle以外のシステムにアクセスするエージェント・プロセスを、ゲートウェイと呼びます。すべてのゲートウェイへのアクセスはOracleサーバーの異機種間サービス・コンポーネントを経由し、すべてのゲートウェイに同じエージェント汎用コードが含まれます。各ゲートウェイには異なるドライバがリンクされており、異機種間サービスがOracle以外のシステムのクライアントAPIにマップされます。
エージェント・プロセスは2つのコンポーネントで構成されます。一方はエージェント汎用コード、他方はOracle以外のシステム固有のドライバです。エージェントは、主としてOracleデータベース・サーバーをサード・パーティ・コードから分離するために存在します。プロセスがOracle以外のシステムにアクセスするには、そのシステムのクライアント・ライブラリをリンクする必要があります。エージェント・プロセスがなければ、これらのライブラリをOracleデータベースに直接リンクする必要があり、このコードに問題があるとOracleサーバーが停止する可能性があります。エージェント・プロセスによりOracleサーバーがサード・パーティ・コードの問題から分離され、致命的エラーが発生した場合にもエージェント・プロセスのみが終了することになります。
エージェントは、次のいずれかに常駐できます。
Oracle以外のシステムと同じコンピュータ
Oracleサーバーと同じコンピュータ
前述のどちらでもないコンピュータ
通常、エージェント・プロセスは、ユーザー・セッションでデータベース・リンクを介してOracle以外のシステムに初めてアクセスするときに起動されます。これらの接続には、Oracleのリモート・データ・アクセス・ソフトウェアであるOracle Net Servicesが使用されます。Oracle Net Servicesでは、クライアント/サーバー通信とサーバー間通信の両方が可能です。エージェント・プロセスは、ユーザー・セッションが切断されるか、データベース・リンクが明示的にクローズされるまで続行されます。
マルチスレッド・エージェントの動作はそれぞれ異なります。この種のエージェントは、Oracle Net Servicesにより自動的に起動されるのではなく、データベース管理者が明示的に起動および停止する必要があります。
異機種間サービス・エージェントには、次の2つのタイプがあります。
Oracle Database Gatewayは、Oracle以外の特定システムへのアクセス用に設計されたゲートウェイです。オラクル社では、市販されているOracle以外のシステムにアクセスするためのゲートウェイを提供しています。たとえば、Sybaseデータベースにアクセスするように設計されたOracle Database Gateway for Sybaseです。
Oracle Database Gatewayを使用すると、データの位置や格納方法を知らなくても、Oracleデータベース・サーバーを使用して、分散データベース・システム上のあらゆる場所にあるデータにアクセスできます。Oracleデータベース・サーバーから問合せ結果が戻される場合は、取得元のデータ・ストアがすべてOracle分散データベースのリモート・インスタンスに常駐する場合と同様に表示されます。
様々なOracle以外のデータベース・システム用のOracle Database Gatewayに加えて、Oracle Database Gateway for ODBCエージェントがあります。このエージェントには汎用コードのみが含まれており、顧客は必要なドライバを提供する必要があります。Oracle Database Gateway for ODBCにより、ODBCドライバを使用して、ODBCインタフェースを持つOracle以外のシステムにアクセスできます。
Oracle Database Gateway for ODBCを使用してOracle以外の特定システムにアクセスするには、そのシステムに対してODBCドライバを構成する必要があります。Oracleではこれらのドライバを提供していません。ただし、Oracle以外のシステムでODBCプロトコルがサポートされていれば、ODBCドライバを使用してアクセス可能な任意のOracle以外のシステムに、Oracle Database Gateway for ODBCを使用してアクセスできます。
Oracle Database Gateway for ODBCにはいくつかの制限があります。特に、特定のターゲットと比較した場合、機能とパフォーマンスが制限されます。
この項では、Oracleデータベース・サーバーの異機種間サービスのコンポーネントについて説明します。次のコンポーネントがあります。
異機種間サービス・コンポーネントのトランザクション・サービス・コンポーネントは、Oracle以外のシステムとOracleデータベース・サーバーのトランザクションやセッションとの統合を可能にします。Oracleユーザー・セッションでデータベース・リンクを介してOracle以外のシステムに初めてアクセスするときに、Oracle以外のシステムで認証済セッションを透過的に設定します。Oracleユーザー・セッションの終了時には、Oracle以外のデータベース・システムでの認証済セッションもクローズされます。
また、Oracle以外の1つ以上のシステムがOracle分散トランザクションに関連づけられます。アプリケーションがトランザクションをコミットすると、Oracleの2フェーズ・コミット・プロトコルがOracle以外のデータベース・システムにアクセスし、分散トランザクションを透過的に調整します。Oracle以外のシステムがOracleの2フェーズ・コミット・プロトコルを全面的にサポートしていない場合にも、Oracleはそのシステムとの分散トランザクションを(制限付きで)サポートできます。
Structured Query Language(SQL)サービスは、すべてのSQL関連操作の処理を受け持ちます。SQLサービスにより、次のような処理が実行されます。
Oracle内部のSQL関連コールを、異機種間サービスのドライバのApplication Program Interface(API)にマップします。このAPIは、ドライバによりOracle以外のシステムのクライアントAPIにマップされます。
SQL文をOracleのSQL言語からOracle以外のシステムのSQL言語に変換します。
Oracleデータ・ディクショナリ表を参照する問合せを、Oracle以外のシステムのデータ・ディクショナリから必要な情報を抽出する問合せに変換します。
データをOracle以外のシステムのデータ型とOracleのデータ型の間で変換します。
複数の問合せを発行して必要なデータを取得し、後処理を実行して必要な結果を取得することにより、Oracle以外のシステムに欠落している機能を補います。
異機種間サービス・コンポーネントは、汎用コードで構成されており、様々なOracle以外のシステムで機能するように構成する必要があります。構成情報は、各ゲートウェイのドライバ・モジュールに格納されます。この情報はゲートウェイへの接続が確立された直後にサーバーにアップロードされます。構成情報には次のものが含まれています。
データ・ディクショナリ変換は、Oracle以外のデータ・ディクショナリ表のビューです。このビューにより、異機種間サービスでは、Oracleデータ・ディクショナリ表への参照を、Oracle以外のシステムのデータ・ディクショナリから等価の情報を取得可能な問合せに変換できます。
異機種間サービスの初期化パラメータには、次の2つの機能があります。
ゲートウェイを詳細にチューニングし、ゲートウェイおよび異機種間サービス・コンポーネントのパフォーマンスとメモリー使用率を最適化する手段をユーザーに提供します。
ユーザーはゲートウェイ(および異機種間サービス)に対して、Oracle以外のシステムの構成(Oracle以外のシステムの実行に使用される言語など)を指定できます。Oracle以外のシステムの構成可能なプロパティに関する情報を異機種間サービスに提供できます。
V$HS_PARAMETER
ビューを問い合せると、セッションの異機種間サービスの初期化パラメータを確認できます。ユーザーは、初期化パラメータをゲートウェイ初期化ファイル内で設定できます。
機能は異機種間サービスに対して、Oracle以外のシステムの制限事項(サポートされているSQL文のタイプなど)と、Oracleのデータ型とSQL式からOracle以外のシステムのデータ型および式へのマッピングを指示します。つまり、異機種間サービスに対して、Oracle以外のシステムの構成不可のプロパティを指示します。ユーザーは機能を変更できません。
構成情報は、エージェントへの接続が確立された直後にエージェントから異機種間サービス・コンポーネントにアップロードされます。構成情報は異機種間サービスのデータ・ディクショナリ表に格納されます。エージェントに変更(パッチの適用、エージェントの新バージョンへのアップグレードなど)がないかぎり、さらにアップロードされることはありません。
この項では、次の項目について説明します。
クラスとインスタンス
データ・ディクショナリ・ビュー
異機種間サービスを使用すると、1つのOracleデータベースから複数のOracle以外のシステムにアクセスできます。図2-2にこの状況を示します。この図は、Oracle以外の2つのシステムがアクセスされている状況を示しています。
両方のエージェントにより構成情報がアップロードされ、Oracleデータベース・サーバーに異機種間サービスのデータ・ディクショナリ情報の一部として格納されます。
異機種間サービスのデータ・ディクショナリに、インスタンスごとの別個の定義を格納すると、データ・ディクショナリ情報を1つの粒度で格納できますが、それにより冗長なデータ・ディクショナリ情報が必要以上に大量になる可能性があります。この問題を回避するために、Oracleでは異機種間サービスのデータ・ディクショナリはクラスおよびインスタンスという2つの粒度で編成されます。
クラスは、Oracle以外の特定のシステム・タイプに関係します。たとえば、Oracleデータベース・サーバーでSybaseデータベース・システムのクラスにアクセスできます。インスタンスでは、クラス内での特殊性が定義されます。たとえば、Sybaseデータベース・システム内の複数の異なるインスタンスにアクセスできます。各クラスの定義(粒度1)は、そのクラスの全インスタンス(粒度2)により共有されます。さらに、インスタンス情報はクラス情報より優先され、クラス情報はサーバー指定のデフォルトより優先されます。
たとえば、Oracleデータベース・サーバーがSybaseの3つのインスタンスおよびIngres IIの2つのインスタンスにアクセスするとします。SybaseとIngres IIにはそれぞれ独自のコードがあり、Oracleデータベース・サーバーからアクセスするには別個のクラス定義が必要です。そのため、異機種間サービスのデータ・ディクショナリには、Sybase用とIngres II用に1つずつ合計2つのクラス定義と、Oracleデータベース・サーバーがアクセスするインスタンスごとに1つずつ、合計5つのインスタンス定義が含まれます。
インスタンス・レベルの機能とデータ・ディクショナリ情報はセッション固有であり、Oracleデータベース・サーバーの異機種間サービスのデータ・ディクショナリには格納されないことに注意してください。ただし、インスタンス・レベルの初期化パラメータはデータベースに格納できます。
図2-3に、典型的なゲートウェイのプロセス・フローを示します。各手順は、クライアント・アプリケーションがゲートウェイを介してOracle以外のデータベース・システムのデータベースに問い合せたときに発生するイベントの順序を示しています。
クライアント・アプリケーションが、Oracle Netを介してOracleデータベース・サーバーに問合せを送信します。
異機種間サービスおよびゲートウェイは、Oracle SQL文をOracle以外のデータベース・システムで認識可能なSQL文に変換します。
Oracleデータベース・サーバーが、Oracle Netを使用してゲートウェイに問合せを送信します。
セッションでの初めてのトランザクションの場合、ゲートウェイはOracle以外のデータベース・システムに、そのシステムで有効なユーザー名とパスワードを使用してログインします。
ゲートウェイがOracle以外のデータベース・システムのSQL文を使用してデータを取得します。
ゲートウェイが、取得されたデータをOracleデータベース・サーバーと互換性のある形式に変換します。
ゲートウェイが、再びOracle Net Servicesを使用して問合せ結果をOracleデータベース・サーバーに戻します。
Oracleデータベース・サーバーが、Oracle Netを使用して問合せ結果をクライアント・アプリケーションに渡します。データベース・リンクは、ゲートウェイ・セッションが完了するか、データベース・リンクが明示的にクローズされるまでオープンされています。