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