(57)【要約】  手法は、クライアントが、クライアントのためにサーバ上に確立されたセッションから別のサーバの別のセッションへ、最初のセッションが確立されたアプリケーションについて透過的な方法で移送されることを可能にする。セッションは、ソースノードから移送するセッションのセッション状態のコピーがキャプチャされず、宛先セッションに復元されない条件下で、移送される。
2007507762.tif 000002
【特許請求の範囲】
【請求項１】
マルチノードシステム上のセッションを管理するための方法であって、
前記マルチノードシステムのクライアントのためにあるセッションを確立するためのリクエストを受け取るステップと、
第１のセッションを前記あるセッションとして前記マルチノードシステムの第１のノード上に確立するステップと、
前記クライアントから、前記マルチシステムの前記第１のノードおよび第２のノード間でセッションを転送するための１つ以上の基準を示す第１のデータを受け取るステップと、
前記１つ以上の基準に基づいて前記第１のセッションを前記マルチノードシステムの前記第２のノードに転送することを認定するステップと、
前記第１のセッションを転送することを認定することに応答して、前記マルチノードシステム上の前記クライアントのために前記第２のノード上に第２のセッションを前記あるセッションとして確立するステップとを含む、方法。
【請求項２】
前記１つ以上の基準は、前記第１のセッションがステートレスであるか否かに基づく、請求項１に記載の方法。
【請求項３】
前記１つ以上の基準は、前記第１のセッションに関連付けられるトランザクションが終了したか否かに基づく、請求項１に記載の方法。
【請求項４】
前記１つ以上の基準は、前記第１のセッションに関連付けられるクライアントコールが完了したか否かに基づく、請求項１に記載の方法。
【請求項５】
前記１つ以上の基準は、第１のアプリケーションコールの後行われたその後のアプリケーションコールが、前記第１のアプリケーションコールのために生成された第１のセッション状態に依存するか否かを示す、請求項１に記載の方法。
【請求項６】
前記その後のアプリケーションコールは、前記第１のセッション状態に依存する、請求項５に記載の方法。
【請求項７】
サーバは前記クライアントおよび複数の他のセッションをホストし、
前記サーバは前記第１のノード上にセッションのプールを維持し、前記プールは前記第１のセッションを含み、さらに、
前記サーバは、前記第１のセッションを前記複数の他のセッションに割当て、かつ割当て解除する、請求項１に記載の方法。
【請求項８】
前記サーバはアプリケーションサーバである、請求項７に記載の方法。
【請求項９】
マルチノードシステム上のセッションを管理するための方法であって、
前記マルチノードシステムのクライアントのためにあるセッションを確立するためのリクエストを受け取るステップと、
第１のセッションを前記あるセッションとして前記マルチノードシステムの第１のノード上に確立するステップと、
前記クライアントから、前記第１のセッションの状態をキャプチャする必要なく前記第１のノードおよび第２のノード間で移送され得るセッションとして前記第１のセッションを特定する第１のデータを受け取るステップと、
前記第１のデータに基づいて、前記第１のセッションを前記第２のノードに移送することを決定するステップと、
前記第１のセッションを前記第２のノードに転送することを認定することに応答し、
前記マルチノードシステム上の前記クライアントのための前記あるセッションとして、前記第２のノード上に第２のセッションを確立するステップとを含む、方法。
【請求項１０】
前記クライアントは、第１のアプリケーションコールの後行われたその後のアプリケーションコール前記が第１のアプリケーションコールのために生成された第１のセッション状態に依存しないと判断することに応答して、前記第１のデータを送信する、請求項９に記載の方法。
【請求項１１】
請求項９に記載の方法であって、前記方法はさらに、
サーバが前記クライアントおよび複数の他のセッションをホストするステップと、
前記サーバが前記第１のノード上にセッションのプールを維持するステップとを含み、前記プールは前記第１のセッションを含み、さらに、
前記サーバが前記第１のセッションを前記他のセッションの特定のセッションに割り当てるステップを含み、
前記第１のセッションを割当てる前記サーバは、前記サーバに前記第１のデータを送信させる、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、「コンピュータリソース提供（Computer Resource Provisioning）」と題された、２００３年８月１４日出願の米国仮出願番号第６０／４９５，３６８号の優先権を主張し、それが本願明細書に引用して援用される。
【０００２】
本出願は、下記の米国出願に関連する。
【０００３】
２００４年８月１２日出願の、サンジェイ  カラスカル（Sanjay Kaluskar）他による、「ステートレスなセッションの透過的なサーバ間移送（Transparent Migration of Stateless Sessions Across Servers）」と題された、米国出願番号第XX／XXX,XXX号（代理人事件整理番号第５０２７７−２３８５号）に関連し、それが本願明細書に引用にて援用される。
【０００４】
２００４年８月１２日出願の、サンジェイ  カラスカル（Sanjay Kaluskar）他による、「サーバ間の透過的セッション移送（Transparent Session Migration Across Servers）」と題された、米国出願番号第XX／XXX,XXX号（代理人事件整理番号第５０２７７−２３８３号）に関連し、それが本願明細書に引用にて援用される。
【０００５】
２００４年８月１２日出願の、ベニー  サウダー（Benny Souder）他による、「マルチノードシステムにおけるリソースの動的割当ての階層的管理（Hierarchical Management of the Dynamic Allocation of Resources in a Multi-Node System）」と題された、米国出願番号第XX／XXX,XXX号（代理人事件整理番号第５０２７７−２３８２号）に関連し、それが本願明細書に引用にて援用される。
【０００６】
２００４年８月１２日出願の、ラシュミナラヤナン  チダムバラン（Lakshminarayanan
Chidambaran）他による、「マルチノードシステムにおいてバランスをとる増分的実行時セッション（Incremental Run-Time Session Balancing in a Multi-Node System）」と題された、米国出願番号第XX／XXX,XXX号（代理人事件整理番号第５０２７７−２４１１号）に関連し、それが本願明細書に引用にて援用される。
【０００７】
本出願は、下記の国際出願に関連する。
【０００８】
２００４年８月９日にオラクルインターナショナル社（Oracle International Corporation）によって米国受理官庁に出願された、「データベースの自動的かつ動的な提供（Automatic and Dynamic Provisioning of Databases）」（代理人事件整理番号第５０２７７-２５７１号）と題された国際出願ＰＣＴ／XXXX／XXXXXに関連し、それが本願明細書に引用にて援用される。
【０００９】
２００４年８月１３日にオラクルインターナショナル社（Oracle International Corporation）によって米国受理官庁に出願された、「マルチノードシステムにおけるリソースの動的割当ての階層的管理（Hierarchical Management of the Dynamic Allocation of Resources in a Multi-Node System）」（代理人事件整理番号第５０２７７-２５９２号）と題された国際出願ＰＣＴ／XXXX／XXXXXに関連し、それが本願明細書に引用にて援用される。
【００１０】
２００４年８月１３日にオラクルインターナショナル社（Oracle International Corpo
ration）によって米国受理官庁に出願された、「サーバ間の透過的セッション移送（Transparent Session Migration Across Servers）」（代理人事件整理番号第５０２７７-２５９３号）と題された国際出願ＰＣＴ／XXXX／XXXXXに関連し、それが本願明細書に引用にて援用される。
【００１１】
２００４年８月１３日にオラクルインターナショナル社（Oracle International Corporation）によって米国受理官庁に出願された、「オンデマンドノードおよびサーバインスタンスの割当ておよび割当て解除（On Demand Node and Server Instance Allocation and De-Allocation）」（代理人事件整理番号第５０２７７-２５９５号）と題された国際出願ＰＣＴ／XXXX／XXXXXに関連し、それが本願明細書に引用にて援用される。
【背景技術】
【００１２】
発明の分野
本発明は作業負荷の管理に関し、特定的には、マルチノードコンピュータシステムにおける作業負荷管理に関する。
【００１３】
発明の背景
多くのエンタープライズデータ処理システムは、データを格納し、管理するためにマルチノードデータベースサーバに依存する。このようなエンタープライズデータ処理システムは、典型的には、第１の階層にマルチノードデータベースサーバを有し、中間階層および外部階層に１つ以上のコンピュータを有する多層構成モデルに従う。
【００１４】
図１は、多層アーキテクチャ１０で実行されるマルチノードデータベースサーバｍｄｓ１１を表す。マルチノードデータベースサーバｍｄｓ１１などのサーバは、統合ソフトウェアコンポーネントと、メモリ、ノード、および統合ソフトウェアコンポーネントをプロセッサ上で実行するためのノード上のプロセスなどの計算リソースの割当てとの組合わせであって、このソフトウェアと計算リソースとの組合わせは、１つ以上のクライアントに代わって特定の機能を専ら実行する。マルチノードコンピュータシステムの複数のノードからのリソースは、特定のサーバのソフトウェアを実行するために割当てられ得る。ノード上のソフトウェアとそのノードからのリソースの割当てとの特定の組合わせは、本願明細書においてサーバインスタンスまたはインスタンスと称されるサーバである。このように、マルチノードサーバは、複数のノードで作動し得る複数のサーバインスタンスを含む。マルチノードサーバのいくつかのインスタンスは、同じノード上でさえ作動し得る。
【００１５】
データベースサーバは、特定のデータベースへのアクセスを支配して容易にし、
クライアントからのデータベースにアクセスするリクエストを処理する。マルチノードデータベースサーバｍｄｓ１１などのマルチノードデータベースサーバは、複数の「データベースインスタンス」を含み、各データベースインスタンスは、ノード上で作動する。マルチノードデータベースサーバｍｄｓ１１はデータベースｄｂ１１へのアクセスを支配する。マルチノードデータベースサーバは、１つ以上のデータベースへのアクセスを支配し、容易にすることができる。
【００１６】
多層アーキテクチャ１０の中間層は中間層コンピュータｃｍｐ１１を含み、外部層はユーザコンピュータｃｍｐ１２を含む。ユーザコンピュータｃｍｐ１２は、エンドユーザと対話するブラウザｂｒ１１を実行する。エンドユーザのブラウザｂｒ１１との対話により、ブラウザは、インターネットなどのネットワークを介して中間層コンピュータｃｍｐ１１にリクエストを送信する。リクエストは、中間層コンピュータｃｍｐ１１上のプロセス、すなわちクライアントｃｌ１にアプリケーションａｐｐｌ１１を実行させる。クライアントｃｌ１によってアプリケーションａｐｐｌ１１が実行されることにより、クライアントｃｌ１はマルチノードデータベースサーバｍｄｓ１１に接続する。例えばアプリケーシ
ョンａｐｐｌ１１は、ブラウザｂｒ１１から注文リクエストを受取るよう構成される受注アプリケーションであり得る。受注アプリケーションのためのデータはｄｂ１１に格納される。リクエストを処理するために、クライアントｃｌ１によってアプリケーションａｐｐｌ１１が実行されるとクライアントｃｌ１はデータベースｄｂ１に接続する。一旦接続されると、クライアントｃｌ１は、データベースｄｂ１１に格納されたデータを検索して操作するためのデータベースステートメントを出す。
【発明の開示】
【発明が解決しようとする課題】
【００１７】
本願明細書において、多層アーキテクチャの他の層に対し、サーバに直接接続する層はサーバのクライアントを含むと称される。したがって、クライアントプロセスｃｌ１は、本願明細書においてマルチノードデータベースサーバｍｄｓ１１のクライアントと称される。
【００１８】
アプリケーションは、この用語が本願明細書において用いられる場合、サーバの機能と対話してそれらを用いるよう構成される、ソフトウェアの単位である。一般にアプリケーションは、一組の関連した機能を実行する、統合された関数およびソフトウェアモジュール（例えば機械で実行可能なコードまたは解釈可能なコードからなるプログラム、動的にリンクされたライブラリ）からなる。
【００１９】
アプリケーションａｐｐｌ１１などのアプリケーションは、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１を介してマルチノードデータベースサーバｍｄｓ１１と対話する。アプリケーションａｐｐｌ１１の実行により、クライアントｃｌ１はクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１を実行し、マルチノードデータベースサーバｍｄｓ１１と対話する。アプリケーションａｐｐｌ１１は、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１のルーチン（例えば関数、プロシージャ、オブジェクト方法、リモートプロシージャ）の呼出しを含む。典型的にはアプリケーションは、マルチノードデータベースサーバｍｄｓ１１およびクライアント側コンポーネントｉｎｔｃｏｍｐ１１などのサーバおよびサーバへのインターフェイスを開発する人とは異なるベンダおよび開発チームによって開発される。
【００２０】
クライアントがマルチノードデータベースサーバｍｄｓ１１と対話するために、マルチノードデータベースサーバｍｄｓ１１のデータベースインスタンス上にクライアントのためにセッションが確立される。データベースセッションなどのセッションは、データベースインスタンスなどの、クライアントのためにサーバに確立される特定の接続であって、それを介してクライアントは一連のリクエスト（例えばデータベースステートメントを実行するためのリクエスト）を出す。
【００２１】
データベースインスタンスに確立される各データベースセッションについて、セッション状態がセッションのために維持される。セッション状態は、データベースセッション中にデータベースセッションのために格納されるデータを含む。例えばこのようなデータは、セッションが確立されるクライアントのＩＤと、データベースセッション内でソフトウェアを実行しているデータベースコンポーネントおよびプロセスによって生成される一時的な変数値とを含む。データベースコンポーネントは、特殊化された関連する機能をデータベースサーバに与える一組のソフトウェアモジュールであって、より詳細に後述される。データベースコンポーネントの例は、Ｊａｖａ（登録商標）実行エンジンである。
【００２２】
セッションの始まりと終わりが作業単位の境界を画定する。しばしば、データベースセッションの始まりは、例えばブラウザなどを介してアプリケーションと対話型セッションを確立するエンドユーザと対応し、エンドユーザがログオフすると終了する。このように
、データベースセッションの始めと終わりは、アプリケーションロジックおよびエンドユーザの行動に依存し、セッションが確立されるサーバによって制御されない。
クライアント側インターフェイスコンポーネント
クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１などのクライアント側インターフェイスコンポーネントは、サーバのクライアントの同じコンピュータに存在し、そこで実行されるソフトウェアコンポーネントであって、クライアントおよびサーバ間にインターフェイスを与えるよう構成される。クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１は、マルチノードデータベースサーバｍｄｓ１１とインターフェイスするのに必要な詳細な動作を実行するよう構成される。例えば、アプリケーションａｐｐｌ１１がクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１の関数を呼び出して、マルチノードデータベースサーバｍｄｓ１１への接続を確立する。クライアント側インターフェイスコンポーネントは次に、マルチノードデータベースサーバｍｄｓ１１の特定のインスタンス上での接続の詳細を処理する。アプリケーションａｐｐｌ１１は、クエリー実行のリクエストなどマルチノードデータベースサーバｍｄｓ１１のリクエストを出すためにクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１の関数を呼び出すよう構成され、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１は次に、セッションが確立されるノードとデータベースインスタンスとにその同じリクエストを送信する。
【００２３】
クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１は、他のソフトウェアモジュールから隠された状態、すなわち他のソフトウェアモジュール、特にアプリケーションａｐｐｌ１１によっては参照もアクセスもされない、またはされることができない状態を生成し得、および／またはそれにアクセスし得る。このような状態は、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１に対して内部的または非公開であると称される。
【００２４】
例えば、マルチノードデータベースサーバｍｄｓ１１上にデータベースセッションを生成するために、アプリケーションａｐｐｌ１１は、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１のルーチンを呼び出す。クライアント側インターフェイスコンポーネントは、マルチノードデータベースサーバｍｄｓ１１内の特定のデータベースインスタンス上でデータベースセッションを確立して、内部データ構造またはオブジェクト内にデータベースセッションについての詳細を格納する。このようなデータ構造およびオブジェクトは、たとえばアプリケーションのために確立されるセッションを規定し、データベースインスタンス上のセッションのＩＤ、データベースインスタンスの名称、およびデータベースインスタンスへの接続のためのネットワークアドレスおよびポート番号などの値を指定する。
【００２５】
セッションのこのような詳細はアプリケーションａｐｐｌ１１に返されず、アプリケーションａｐｐｌ１１は詳細にアクセスすることもできない。その代わりアプリケーションａｐｐｌ１１に与えられるのは、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１の内部データがセッションにマッピングする値などのセッション用「外部識別子」、またはクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１によって生成されるオブジェクトに対する参照であって、アプリケーションａｐｐｌ１１にはアクセスできないオブジェクトの非公開の属性にセッションのいくつかの詳細を格納する。このように、アプリケーションａｐｐｌ１１は、アプリケーションａｐｐｌ１１のために確立されているセッションの具体的な詳細を「知らない」。しかしながらアプリケーションａｐｐｌ１１は、アプリケーションａｐｐｌ１１のために確立されている特定のセッションをクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ１１に対して特定し得るのに必要な情報を有する。
【００２６】
作業負荷の分散
マルチノードデータベースサーバを管理するために必要な重要な能力は、ノード間で作業負荷を分散することである。ノード間で作業負荷を最適にバランスを保つことによる作業負荷の分散が用いられて性能を向上させる。作業負荷の分散はまた、メンテナンス動作のためにオフラインにされているノードから別のノードに作業がシフトされることを可能にする。
【００２７】
性能を向上させるために、マルチノードデータベースサーバ上の作業負荷は、接続時間バランスを使用して分散される。接続時間のバランスをとることにおいて、クライアントのためのデータベースセッションが生成されると、作業負荷は接続時間において分散される。具体的には、クライアントがマルチノードデータベースサーバ上でデータベースセッションを確立するよう要求すると、作業負荷への考慮に基づいてセッションがインスタンスまたはノードに配置される。例えばクライアントは、セッションについてのリクエストをマルチノードデータベースサーバに送信する。マルチノードデータベースサーバは、あるノードが他のノードよりビジーでないと判断して、そのノード上にクライアントのためのセッションを確立する。
【００２８】
接続時間のバランスをとることについての欠点は、それが既存のセッションをバランスし直すことができないことである。それはセッションが生成されたときにしかバランスをとれない。既存のセッションにより生成される作業負荷は、クライアントが自発的に要求するのを減らすかもしくは止めるまで、および／またはセッションを終了するまで、シフトされたり減じられたりすることができない。その結果、作業負荷をシフトするタイミングは、マルチノードデータベースサーバの制御下にはないイベントに従う。
【００２９】
上記に基づいて、セッションが生成された後にセッションのクライアントの作業負荷をシフトする方法を与えることが、明らかに望ましい。
【００３０】
本発明は、添付の図面の図において限定としてでなく例として図示され、そこで同じ参照番号は同様の構成要素を指す。
【課題を解決するための手段】
【００３１】
発明の詳細な説明
分散型環境においてノード間でセッションを移送するための方法および装置が記載される。下記の記載において、説明のため、本発明の完全な理解を与えるために多くの具体的な詳細が記載される。しかしながら、本発明がこれらの具体的な詳細なしで実行され得ることは明らかである。他の場合には、本発明を不必要に不明瞭にすることを避けるため、周知の構造及び装置はブロック図形式で示される。
【００３２】
本願明細書に説明されるのは、最初のセッションが確立されたアプリケーションに対して透過的な方法で、クライアントがあるサーバのあるセッションから別のサーバのセッションへ切り換えられることを可能にする手法である。移送という用語は、サーバ上の既存のセッションのクライアントが既存のセッションから別のセッションへ切り換えられる動作を指し、既存のセッションが終了され、クライアントが既存のセッションの代わりに他のセッションを用いることを可能にする。本願明細書において、既存のセッションが移送されたと称される。「透過的な」という用語は、ソフトウェアの単位に関して、動作を実行するように適合される、そのユニットの命令の実行を要しない方法で動作を実行することを指す。したがってクライアントは、透過的なセッション移送においては、移送を達成するよう適合されたアプリケーション命令を実行することなく、セッション間で切り換えられる。その代わり、アプリケーションがそれを介してサーバと対話する、クライアント側インターフェイスコンポーネントが移送の詳細を処理し、クライアント側インターフェ
イスコンポーネントの内部状態を変更して同じ効果をもたらす。レガシーアプリケーションは、本願明細書に説明される手法を開始するために変更される必要はない。
【００３３】
セッション移送の下、クライアントはマルチノードシステム上でセッションを要求し、セッションはクライアントのためにノード上で作動する「ソースサーバ」上で確立される。クライアントは「宛先サーバ」上の「宛先セッション」に切り換えられる。宛先セッションは、ソースサーバ上のセッションの代わりにクライアントによって用いられる。
【００３４】
セッションは、ソースノードから移送するセッションのセッション状態のコピーがキャプチャされて宛先サーバ上の宛先セッションに復元される必要がないという条件下で移送される。クライアントはこれらの条件を指定する。加えてクライアントは、特定のセッションがセッションの状態をキャプチャする必要なく移送され得ることをサーバに対して特定し得る。サーバ間で状態を転送する必要がないので、このような方法でセッションを移送することは、セッションがより早く移送されることを可能にする。
【００３５】
セッション移送に関与するものは、コンピュータのクライアント、ソースサーバおよび宛先サーバを含むことができ、各々がマルチノードシステムの異なるノードに位置する。関与するものは、セッション移送がアプリケーションまたはセッションが確立された他のソフトウェアモジュールに透過的に発生することを可能にする、プロトコルの変形例に従う。
【発明を実施するための最良の形態】
【００３６】
透過的なセッション移送は、マルチノードデータベースサーバ上で実現され得るように本願明細書に示される。しかしながら、本発明の実施例は、マルチノードデータベースサーバ上でホストされるセッションの移送に限られない。
【００３７】
例示的コンピュータシステム
図２は、ｎ層のデータベースシステムｄｂｓ２０、すなわち本発明の一実施例を表わすために用いられるＮ層のコンピュータシステムを示す。第１の層はデータベースクラスタｄｂｃ２０上でホストされるマルチノードデータベースサーバｍｄｓ２０を含み、第２の層はコンピュータ上でホストされるアプリケーションサーバａｐｓ２０を含み、外部層はエンドユーザセッションｕｓｒ２０を含み、エンドユーザセッションは、ネットワーク接続を介してアプリケーションサーバａｐｓ２０に接続されたプロセスに関連付けられた、コンピュータ上のセッションである。
【００３８】
データベースクラスタｄｂｃ２０は、ノードｎｄ２１、ｎｄ２２、ｎｄ２３およびｎｄ２４を含む。データベースクラスタｄｂｃ２０のノードは、ネットワークを介して相互接続するコンピュータ（例えばワークステーション、パーソナルコンピュータ）の形式であり得、グリッドの一部であり得る。
【００３９】
マルチノードデータベースサーバｍｄｓ２０は、データベースｄｂｓ２０へのアクセスを支配し、容易にする。マルチノードデータベースサーバｍｄｓ２０は、データベースインスタンスｉｎｓｔ２１、ｉｎｓｔ２２、ｉｎｓｔ２３およびｉｎｓｔ２４を含む。
【００４０】
データベースインスタンスにより管理されるデータベースにアクセスするために、直接にまたは別のコンピュータを介して、マルチノードデータベースサーバの一部であるデータベースインスタンスに接続するクライアントは、本願明細書においては、データベースインスタンスのクライアント、マルチノードデータベースサーバのクライアント、またはデータベースのクライアントと称される。例えば、データベースクラスタｄｂｃ２０の一部ではないコンピュータ上のプロセスはアプリケーションを実行し、データベースｄｂ２
０にアクセスするためデータベースインスタンスｉｎｓｔ２３に接続される。プロセスは、データベースインスタンスｉｎｓｔ２３のクライアント、マルチノードデータベースサーバｍｄｓ２０のクライアント、およびデータベースｄｂ２０のクライアントと称される。同様に、アプリケーションサーバａｐｓ２０は、マルチノード分散型データベースサーバｍｄｓ２０およびデータベースｄｂ２０のクライアント、ならびにアプリケーションサーバａｐｓ２０が接続されているあらゆるデータベースインスタンスのクライアントである。
【００４１】
作業負荷マネージャｗｍ２０は、データベースクラスタｄｂｃ２０上でホストされるデータベースインスタンスの作業負荷を管理する役割がある、データベースクラスタｄｂｃ２０上で作動するプロセスである。作業負荷マネージャｗｍ２０はデータベースクラスタｄｂｃ２０の１つ以上のノードで作動していることができ、ノードはｎｄ２１、ｎｄ２２、ｎｄ２３およびｎｄ２４を含む。作業負荷マネージャの例はデータベースディレクタであって「バランスをとる増分的実行時セッション（Incremental Run-Time Session Balancing）」に記載されており、ソースデータベースインスタンスから宛先データベースインスタンスへ、１つ以上のセッションを移送することによって、実行時セッションのバランスをとることを実行する。
【００４２】
アプリケーションサーバａｐｓ２０は、アプリケーションのアプリケーションコードを格納し、アクセスを与え、実行するサーバである。アプリケーションサーバａｐｓ２０は、マルチノードデータベースサーバｍｄｓ２０にデータベースリクエストを送信する。リクエストは、アプリケーションサーバに格納されるアプリケーションコードを実行することに応答して、アプリケーションサーバａｐｓ２０により生成されることができる。アプリケーションサーバａｐｓ２０は、受注アプリケーションのためのデータを保持するデータベースｄｂ２０上のテーブルを操作するために、データベースサーバｍｄｓ２０にデータベースステートメントを送信するよう構成される、受注アプリケーションなどのアプリケーションを含むことができる。アプリケーションサーバは、複数のノード上に複数のインスタンスを有し得る。アプリケーションサーバの例は、オラクル９ｉアプリケーションサーバ（Oracle 9i Application Server）またはオラクル１０ｇアプリケーションサーバ（Oracle 10g Application Server）である。
【００４３】
アプリケーションサーバａｐｓ２０はまた、エンドユーザセッションｕｓｅｒ２０を管理するための多くの機能を実行でき、それはデータベースサーバ以外の他の種類のサーバと対話することを伴う。このようなサーバは、ディレクトリサーバおよび認証サーバを含む。
【００４４】
例えば、エンドユーザセッションｕｓｒ２０のプロセスは、インターネットなどの広域ネットワークまたは公的ネットワークを介してアプリケーションサーバａｐｓ２０に接続されるブラウザを実行していることができる。ブラウザによりアプリケーションサーバａｐｓ２０に送信されるリクエストに応答して、アプリケーションサーバａｐｓ２０はアプリケーションコードを実行し、データベースサーバｍｄｓ２０にデータベースステートメントを出し、ウェブページを生成してブラウザに送信を返す。
【００４５】
クライアントのために確立されたセッション
データベースサーバｍｄｓ２０のクライアント、例えばアプリケーションサーバａｐｓ２０などがマルチノードデータベースサーバｍｄｓ２０と対話するために、データベースインスタンス上でクライアントのためにデータベースセッションが確立される。クライアントは、データベースクラスタｄｂｃ２０にデータベース接続リクエストを送信することによってデータベースセッションを確立し得る。リスナがデータベース接続リクエストを受け取る。リスナはデータベースクラスタｄｂｃ２０上で作動するプロセスであって、ク
ライアントデータベース接続リクエストを受け取り、それらをデータベースクラスタｄｂｃ２０内のデータベースインスタンスに導く。
【００４６】
一旦データベースセッションがクライアントのために確立されると、クライアントはリモートプロシージャ呼出しの形式であり得る追加的なリクエストを出すことができ、リクエストは、トランザクション実行開始、クエリーの実行、アップデートおよび他の種類のトランザクション動作の実行、トランザクションの完遂または逆の終了、およびデータベースセッションの終了のリクエストを含む。
【００４７】
アプリケーションサーバａｐｓ２０もまた、エンドユーザセッションｕｓｒ２０の接続のためのアプリケーションセッションを確立する。エンドユーザセッションｕｓｒ２０のプロセスからの複数のリクエストは、同じアプリケーションセッションに関連付けられ得る。アプリケーションセッションは、アプリケーションサーバａｐｓ２０内で作動している１つ以上のプロセスを割り当てられ得る。このようなプロセスは、本願明細書においてはアプリケーションセッションプロセスと称される。
【００４８】
例示的なクライアントならびにソースおよび宛先インスタンス
図３は、本発明の一実施例による透過的なセッション移送を表わすために用いられる、アプリケーションサーバａｐｓ２０ならびにデータベースインスタンスｉｎｓｔ２２およびｉｎｓｔ２４をより詳細に示すブロック図である。インスタンスｉｎｓｔ２２およびｉｎｓｔ２４は、それぞれソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４と表記される。
【００４９】
アプリケーションサーバａｐｓ２０はアプリケーションセッションａｓｅｓｓ３０をホストし、クライアント側インターフェイスコンポーネントｃｓｉ３０を含む。アプリケーションサーバａｐｓ２０は、クライアント側インターフェイスコンポーネントｃｓｉ３０を介してマルチノードデータベースサーバｍｄｓ２０と対話する。アプリケーションサーバａｐｓ２０は、クライアント側インターフェイスコンポーネントｃｓｉ３０のルーチン（例えば、関数、プロシージャ、オブジェクト方法、リモートプロシージャ）の呼出しを含む。アプリケーションサーバａｐｓ２０の実行により、アプリケーションサーバａｐｓ２０は、データベースクラスタｄｂｃ２０と対話するためにクライアント側インターフェイスコンポーネントｃｓｉ３０を実行する。
【００５０】
説明する目的のため、本願明細書においては、実際はプロセスによるソフトウェアの実行によりプロセスに特定の作用を実行させる場合、アプリケーションサーバａｐｓ２０およびクライアント側インターフェイスコンポーネントｃｓｉ３０などのソフトウェアモジュールがそれらの作用を実行するとして記載される。例えば、アプリケーションサーバａｐｓ２０がメッセージを送受信するか、またはデータにアクセスすると記載される場合、アプリケーションソフトウェアを実行しているプロセスがメッセージを送受信しているか、またはデータにアクセスしている。
【００５１】
セッションをプールする
アプリケーションサーバａｐｓ２０は、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４上で「予め確立された」データベースセッションのプールとしてセッションプールｓｐｌ３１およびｓｐｌ３２を維持する。アプリケーションセッションのためのデータベースセッションが必要な場合、アプリケーションサーバａｐｓ２０はセッションプールから１つを割当てる。データベースセッションはその後アプリケーションセッションから割当て解除され、その後の別のアプリケーションセッションへの割当のために利用可能になる。アプリケーションセッションがこのように割当てられたり割当て解除されたりする場合、データベースセッションはそれぞれ、チェックアウトされた、チェ
ックインされた、と称される。データベースセッションがチェックアウトされてからチェックインされるまでの間の時間期間は、データベースセッションの寿命と比較して相対に短い。データベースセッションは、無数のアプリケーションセッションに対して無数の回数チェックアウトされ得る。
【００５２】
例えばユーザは、エンドユーザｕｓｒ２０に関連付けられるブラウザを用いて本を注文する。ブラウザは、本を注文する注文アプリケーションを実行するために、アプリケーションサーバａｐｓ２０上にアプリケーションセッションａｓｅｓｓ３１を確立する。注文アプリケーションは、ユーザが探している本についてのデータを得るために、データベースサーバｍｄｓ２０にクエリーすることが必要である。アプリケーションサーバａｐｓ２０は、セッションプールｓｐｌ３１からアプリケーションセッションにデータベースセッションｓ＿ｓｅｓｓ３１をチェックアウトする。注文アプリケーションがデータベースサーバにクエリーを出し、クエリー結果が注文アプリケーションに返され、次にデータベースセッションｓ＿ｓｅｓｓ３１はチェックインされる。次に、注文アプリケーションは、本の注文を生成するためにデータベースを変更するようデータベースステートメントを出す必要がある。セッションプールｓｐｌ３１からの別のデータベースセッションが、アプリケーションセッションａｓｅｓｓ３１にチェックアウトされる。
【００５３】
データベースセッションｓ＿ｓｅｓｓ３１がチェックインされた後、別のアプリケーションセッションであるアプリケーションセッションａｓｅｓｓ３２は、本の注文を返すためのデータベースセッションを必要とする。データベースを変更するために必要なデータベースステートメントがデータベースサーバｍｄｓ２０に出され得るよう、データベースセッションｓ＿ｓｅｓｓ３１がアプリケーションａｓｅｓｓ３２にチェックアウトされる。次にデータベースセッションｓ＿ｓｅｓｓ３１はチェックインされ、その後無数の他のアプリケーションセッションに無数の回数チェックアウトされる。
【００５４】
コール
コールは、タスクを実行するためクライアントからサーバになされるリクエストである。典型的には、コールはソフトウェアモジュールのルーチンの呼出しを実行するプロセスによって行われる。呼出しは、プロセスにルーチンを実行させ（このような実行は、それ自体で他のルーチンのコール、実行を伴うことができる）、次に、呼出し点まで、またはそれを少し超えた時点（または他の何らかの、例えば例外ハンドラなどの指定された時点）まで戻らせてモジュールを実行させる。
【００５５】
コールは、呼び出されたルーチンに対して１つ以上の入力パラメータを渡し、１つ以上の出力パラメータとして値を返すことを伴い得る。入力パラメータおよび出力パラメータの一部としてメッセージが送信され得る。データベースインスタンスに対するコールは、典型的にはデータベースステートメントを実行するなどのタスクを実行するために行われる。コールにより送信されるメッセージは、入力パラメータとしてのクエリー列と出力パラメータとしてのクエリー結果または結果の場所への参照とを含み得る。
【００５６】
リモートプロシージャコールは、プロセスによって行われるルーチンのコールであって、別のプロセスが同じかまたは異なるノードおよび／またはコンピュータ上でコールされたルーチンを実行する。他のプロセスはリモートプロセスと称される。コールは、ネットワーク接続などの通信接続を介して、ルーチンを実行するためのリクエストを別のプロセスに送信することによって行われる。入力パラメータおよび出力パラメータもまた接続を通じて送信される。リモートプロセスがプロシージャを実行する一方で、コールプロセスの実行は中断されるかまたはブロックされる。
【００５７】
コールは、コールされたルーチンをコールプロセスまたはリモートプロセスに実行させ
、それにより他のルーチンのコールおよび実行をもたらし得る。コールが戻るとコールは終了する。コールされたルーチンの実行の一部として行われる動作は、コール内でなされると称される。
【００５８】
例えば、データベースクラスタｄｂｃ２０にコールを行うために、アプリケーションサーバａｐｓ２０は、クライアント側インターフェイスコンポーネントｃｓｉ３０の関数のコールを行う。呼び出しに応答して、クライアント側インターフェイスコンポーネントｃｓｉ３０がコールを実行し、それはクライアント側インターフェイスコンポーネントｃｓｉ３０がクライアント側インターフェイスコンポーネントｃｓｉ３０によりメモリに格納された「ローカルな」データを変更し、アクセスすることを含み、クライアント側インターフェイスコンポーネントｃｓｉ３０はソースインスタンスｉｎｓｔ２２に複数のリモートプロシージャコールを行い、複数のリモートプロシージャコールは第１のリモートプロシージャコールおよび第２のリモートプロシージャコールを含む。第１のリモートプロシージャコールに応答して、ソースインスタンスｉｎｓｔ２２はさまざまな動作を実行する。ローカルデータの変更およびアクセス、複数のリモートプロシージャコール、およびソースインスタンスｉｎｓｔ２２により実行されるさまざまな動作は、アプリケーションサーバａｐｓ２０によって行われる「アプリケーションコール」内で実行されると称される。第１のリモートプロシージャコールにより呼び出されたルーチンを実行する一方でソースインスタンスｉｎｓｔ２２によって実行されるさまざまな（他のルーチンの実行を伴い得る）動作は、本願明細書においては、第１のリモートプロシージャコール内で行われると称され、第１のリモートプロシージャコールがクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０によって行われるので、クライアント側コール内で行われると称され、また、アプリケーションサーバａｐｓ２０によってコールされたルーチンを実行する一方でリモートプロシージャコールがクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０によって行われるので、アプリケーションコール内で行われると称される。アプリケーションコールまたはクライアント側コールは、本願明細書において、両方ともクライアントコールと称され得る。
【００５９】
データベースコンポーネント
データベースコンポーネントは、特殊化された関連する機能を与えるデータベースサーバ上の一組のソフトウェアモジュールである。セッション中に実行されるデータベースコンポーネントはセッション状態の一部を生成してそれを用いることができ、本願明細書において、コンポーネントセッション状態と称される。図４はデータベースコンポーネントの例示的集合、および、セッション状態ｓｅｓｓｔ４０内のそれぞれのコンポーネントセッション状態を示す。セッション状態ｓｅｓｓｔ４０は、データベースセッションｓ＿ｓｅｓｓ３１のセッション状態である。図４は、以下のデータベースコンポーネント、すなわちカーソルコンポーネントｄｃ４１、ＰＬ／ＳＱＬコンポーネントｄｃ４２、セッションパラメータコンポーネントｄｃ４３およびＪａｖａ（登録商標）コンポーネントｄｃ４４を示す。
【００６０】
カーソルコンポーネントｄｃ４１は、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４などのデータベースインスタンス内でカーソルを管理するために用いられる。カーソルは、解析されるデータベースステートメントの情報とデータベースステートメントの処理に関する他の情報とを格納するために用いられるメモリの領域である。カーソルコンポーネントｄｃ４１は、セッション状態ｓｅｓｓｔ４０内のコンポーネントセッション状態であるカーソル状態ｃｓ４１の情報を使用し、格納する。
【００６１】
ＰＬ／ＳＱＬコンポーネントｄｃ４２は、オラクル社（Oracle Corporation）によって広められた手続き型データベース言語であるＰＬ／ＳＱＬで書き込まれるコード（例えばプロシージャ）を実行する役割がある。コンポーネントは、コンポーネントセッション状
態ＰＬ／ＳＱＬ状態ｃｓ４２を用いて、変値および解析されたＰＬ／ＳＱＬステートメントなどのＰＬ／ＳＱＬコードの実行に関連した情報を格納する。
【００６２】
セッションパラメータコンポーネントｄｃ４３は、セッションに関連付けられるコールおよびリクエストが処理される方法を一般に制御する属性を管理する役割がある。
属性は、コンポーネントセッション状態パラメータ状態ｃｓ４３に格納される。例えば、セッションパラメータは、クエリーを実行することにより返される結果のための特定の人間の言語を制御する属性を含むことができる。
【００６３】
Ｊａｖａ（登録商標）コンポーネントｄｃ４４は、Ｊａｖａ（登録商標）で書き込まれるコード（例えば、クラスおよびオブジェクト方法）を実行する役割がある。コンポーネントは、コンポーネントセッション状態Ｊａｖａ（登録商標）状態ｃｓ４４を用いてＪａｖａ（登録商標）コードの実行に関連した情報を格納する。
【００６４】
ステートフルセッションおよびステートレスセッションならびにセッション移送
所与のデータベースセッションについて、将来のアプリケーションコールが以前のアプリケーションコールにより生成されたセッション状態に依存しない場合、データベースセッションはステートレスである。将来のアプリケーションコールが以前のアプリケーションコールにより生成されたセッション状態に依存する場合、データベースセッションはステートフルである。
【００６５】
将来のアプリケーションコールがステートフルセッションのセッション状態に潜在的に依存するので、ステートフルデータベースセッションの移送は、ソースインスタンスに格納されたセッション状態の部分が別のデータベースインスタンスへ転送され得るか否かを判断することを含み、され得る場合はソースデータベースインスタンスと宛先インスタンスとの間でセッション状態のコピーを転送する。ステートフルセッションを移送するための手法は、「データベースサーバ間の透過的セッション移送（Transparent Session Migration Across Database Servers）に記載されている。
【００６６】
そこに記載されるように、セッション状態が別のデータベースインスタンスへ転送され得るか否かを判断するためにさまざまな移送チェックがなされる。これらの移送チェックは、データベースセッションがトランザクション境界にあるか、コール境界にあるか、またはコンポーネント境界にあるかを判断することを含む。
【００６７】
セッションのために実行されているアクティブなトランザクションが現在ない場合、データベースセッションはトランザクション境界にある。トランザクションは、原子単位として実行される、論理的作業単位である。データベースシステムのコンテキストにおいて、データベースの完全性を確実にするために、データベースはトランザクションによってなされた変更のすべてを反映するか、またはトランザクションによってなされた変更のいずれをも反映しないかでなければならない。結果的に、トランザクションが完全に実行されてしまうまで、トランザクションによってなされた変更のいずれも恒久的にはデータベースに適用されない。トランザクションは、トランザクションによってなされた変更が恒久的になされた場合に「完遂する」と言われる。トランザクションが完遂されていないか、中止されたか、または他の方法で終了された場合、トランザクションはアクティブである。
【００６８】
データベースインスタンスがクライアントコールを処理する中間ステージにあるのではなくコールの実行を終了していた場合、セッションはコール境界にある。例えばデータベースステートメントを実行するコールを処理するために、データベースインスタンスは、各ステージが特定の動作の種類に対応するようなステージを経る。これらのステージは、
（１)カーソルを生成し、(２)データベースステートメントを解析してその変数をバインドし、(３)データベースステートメントを実行し、(４)クエリーに返すために行をフェッチし、および(５)カーソルを閉じるステージである。これらのステージは、「オラクル８サーバコンセプト（Oracle 8 Server Concepts）リリース８．０、第３巻（その内容はここにて引用にて援用される）第２３章に、より詳細に記載される。中間ステージは、コールの処理が完了する前に実行される動作である。この例において、中間ステージはステージ(１)−(５)である。ソースインスタンスｉｎｓｔ２２がコールに応答してステップ(５)を実行したあと、ソースセッションｓｅｓｓ３０はコール境界にある。
【００６９】
セッションの各データベースコンポーネントがそのそれぞれのコンポーネント境界にある場合に、セッションはコンポーネント境界にある。データベースコンポーネントのコンポーネントセッション状態が別のセッションに移送され得る場合、データベースセッションは特定のデータベースコンポーネントのためのコンポーネント境界にある。データベースコンポーネントは、データベースコンポーネントのそれぞれのコンポーネントセッション状態が移送され得るか否かを示す値を返す関数を与える。データベースセッションのコンポーネントセッション状態が移送され得ない理由は、コンポーネントセッション状態がオープンファイルのファイル記述子を含むことである。ファイル記述子は、データベースセッションをホストするインスタンスのためにのみ有効な情報を含む。
【００７０】
ステートレスなセッションの移送
ステートフルなデータベースセッションとは異なり、ステートレスなデータベースセッションは、ソースインスタンスに格納されるセッション状態のコピーをキャプチャすることなく、あるいはそのコピーを宛先インスタンスおよびセッションに対して復元することなく、別のインスタンスに移送され得る。さらに、データベースセッションがステートレスであることが知られている場合、セッション状態が別のインスタンスへ転送され得ることを確認する移送チェック、すなわちデータベースセッションがコンポーネント境界にあるか否かを判断するなどのチェックを実行することは必要でないかもしれない。
【００７１】
データベースセッションがいつ、どの程度頻繁にステートレスになるかは、アプリケーションの行動、および、データベースサーバと対話するためにアプリケーションによって用いられるインターフェイスコンポーネントの行動を含む、クライアント側の行動に大きく依存する。例えばアプリケーションサーバａｐｓ２０は、データベースセッションがその寿命の間に無数ではなくとも複数回ステートレスになるような方法で、データベースセッションを用いる。データベースセッションは、チェックアウトされると、しばしばアプリケーションセッション内で１つまたは数個のアプリケーションコールを処理するためだけに用いられ、その後チェックインされる。このチェックアウトされ、チェックインされるサイクルは、無数の他のアプリケーションセッションのために無数に繰り返される。例えば、１サイクルの間、データベースサーバに問合せを行うアプリケーションコールが行われる。別のサイクルにおいて、トランザクションを開始し、変更をなし、次にトランザクションを完遂するよう複数のアプリケーションコールが行われる。サイクル内で行われるアプリケーションコールは、前のサイクル中に生成されたセッション状態に依存しない方法で行われる。事実、セキュリティ上の理由で、このような依存性は望ましくないことがあり得る。インスタンスｉｎｓｔ２２およびｉｎｓｔ２４上のデータベースセッションが、各アプリケーションコールおよび／または各トランザクションの後で、すなわちアプリケーションコール境界および／または各トランザクション境界において、ステートレスになり得ることが可能である。
【００７２】
セッションをプールする機能は、クライアント側インターフェイスコンポーネント３２１またはＪａｖａ（登録商標）データベースコンポーネントなどのインターフェイスコンポーネントにより実行され得る。さらに詳細に説明されるように、インターフェイスコン
ポーネントがセッションをプールする機能を実行するので、それらの行動はデータベースセッションがステートレスであるか否かに影響を及ぼす。このようなインターフェイスコンポーネントはまた、データベースセッションがステートレスであるか否かを判断するのに充分な情報を有する。このようにインターフェイスコンポーネントは、ステートレスなセッションの移送のあらゆる詳細を処理するためのアプリケーションコードを実行および／または変更する必要なく、ステートレスなセッションの移送の詳細を実行するために用いられ得る。
【００７３】
本願明細書において記載されるステートレスなセッションの移送のための手法によれば、マルチノードサーバのクライアント、例えばアプリケーションまたはクライアント側インターフェイスコンポーネントの実行に応答するアプリケーションサーバａｐｓ２０上のクライアントがステートレス性の基準をサーバに与え、当該基準はデータベースセッションがステートレスであってそのため移送され得るような１つ以上の条件を示す。例えばステートレス性の基準は、データベースセッションがトランザクション境界、コール境界またはそれらの組合わせにおいてステートレスであることを指定し得る。
【００７４】
透過的なセッション移送プロトコル
図５は、ステートレスなセッションのセッション移送のためのプロトコルを示すために用いられるエンティティ対話の図である。一実施例によれば、プロトコルは、「サーバ間の透過的なセッション移送（Transparent Session Migration Across Servers）」で説明されたように、ステートフルなセッションの移送のために用いられるものと同じまたは類似のメッセージを含む。これらのプロトコルは本願明細書において、集合的にステートフルプロトコルと称される。各メッセージはセッション状態の転送の完了などの特定の動作集合の完了を示し、かつセッション移送の別の位相を開始する前のその動作集合の完了を確認するために用いられるので、これらのメッセージは別個に送信された。しかしながらこのような動作は、本願明細書において記載されるステートレスなセッション移送プロトコルにおいては実行されないので、その完了および確認は当然要求されない。したがって、これらのメッセージの送信はバンドルされることができる。
【００７５】
プロトコルは、プロトコルに関与するアプリケーションサーバａｐｓ２０、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４を用いて示される。プロトコルは移送開始プログラムによって開始され、移送開始プログラムはセッションの集合が移送されることを決定し、および／または要求するエンティティである。例えば作業負荷マネージャｗｍ２０は、ソースインスタンスｉｎｓｔ２２から宛先インスタンスｉｎｓｔ２４へ作業負荷をシフトするために、あるセッションの集合がソースインスタンスｉｎｓｔ２２から宛先インスタンスｉｎｓｔ２４へ移送されるべきことを決定し得る。作業負荷マネージャｗｍ２０はそのセッションの集合の移送のリクエストを生成する。データベースインスタンス間で作業負荷をシフトするためセッション移送を要求する作業負荷マネージャｗｍ２０は、セッション移送を要求するエンティティおよび目的の一例にすぎない。他の種類の目的のためにセッションの集合が移送されるよう要求する他の種類のエンティティがあり得る。例えば、あるデータベースインスタンスをシャットダウンする役割があるエンティティが、そのデータベースインスタンスがシャットダウンされ得るよう、データベースインスタンスによって現在ホストされている全てのセッションを移送することができる。
【００７６】
図示する目的で、マルチノードデータベースサーバｍｄｓ２０はアプリケーションサーバａｐｓ２０からステートレス性の基準を受け取っており、当該基準は、データベースセッションがアプリケーションコール境界にある場合、アプリケーションサーバａｐｓ２０のために確立されるデータベースセッションが移送され得ることを定める。
【００７７】
ステップ５０５において、ソースインスタンスｉｎｓｔ２２は、１つ以上のセッションのリストを移送するリクエストである移送リクエスト１を受け取る。リクエストは、例えば作業負荷マネージャｗｍ２０などのセッション移送開始プログラムから送信される。セッション移送のために選択されるかまたは他の方法で指定されるセッションは、本願明細書において、選択されたセッションと称される。図示する目的で、移送するセッションのリストは、選択されたセッションを１つのみ、すなわちソースセッションｓ＿ｓｅｓｓ３１のみを含む。
【００７８】
ステップ５２０において、ソースインスタンスｉｎｓｔ２２はステートレス性チェックを実行し、すなわちステートレス性の基準が満たされるか否かを判断する。この例において、ソースインスタンスｉｎｓｔ２２は、ソースセッションｓ＿ｓｅｓｓ３１がアプリケーションコール境界にあると判断する。
【００７９】
ステップ５２０において、ソースインスタンスｉｎｓｔ２２が一旦ステートレス性の基準が満たされていると判断すると、ステップ５２５において、ソースインスタンスｉｎｓｔ２２は、クライアントからのソースセッションｓ＿ｓｅｓｓ３１へのコールを待ち、そのコールを傍受して次のようなメッセージの束を送る−選択メッセージ２、移送準備メッセージ３、スイッチメッセージ８である。コールが傍受されたと称されるのは、コールが選択メッセージ２を送るなど、セッション移送に関連する何らかの作用をもたらすよう用いられているが、コールはそのような作用をもたらすこと以外の何らかの目的、例えばクエリーの実行を要求するなどのために生成されたからである。クライアントに返される出力パラメータは、複数の属性を有し得る「出力データ構造」を含む。ソースインスタンスｉｎｓｔ２２は、出力パラメータの属性を特定の値に設定することによって、選択メッセージ２、移送準備メッセージ３、およびスイッチメッセージ８を送信する。
【００８０】
選択メッセージ２は、選択されたセッションが移送のために選択されたことをクライアント側インターフェイスコンポーネントｃｓｉ３０に知らせる。移送準備メッセージ３は、クライアント側インターフェイスコンポーネントｃｓｉ３０に宛先インスタンスｉｎｓｔ２４上にソースセッションを確立するように命令し、宛先インスタンスｉｎｓｔ２４に接続を確立するための接続情報を含む。スイッチメッセージ８は、アプリケーションサーバに宛先セッションの使用を開始してソースセッションを終了するよう命令する。
【００８１】
傍受されたコールは、アプリケーションサーバａｐｓ２０からのアプリケーションコール内で開始された。残りのプロトコルは、このアプリケーションコール内で実行される。
【００８２】
ステップ５２７において、アプリケーションサーバａｐｓ２０は、宛先セッションを確立するリクエストを宛先インスタンスｉｎｓｔ２４に送信する。データベースインスタンス上にセッションを確立するには、アプリケーションサーバａｐｓ２０の認証を必要とし得る。アプリケーションサーバａｐｓ２０を認証するために、クライアント側インターフェイスコンポーネントｃｓｉ３０からソースインスタンスｉｎｓｔ２２に認証情報（例えばユーザ名およびパスワード）が与えられる。クライアント側インターフェイスコンポーネントｃｓｉ３０は、データベースクラスタｄｂｃ２０上にセッションを確立するため、アプリケーションサーバａｐｓ２０から以前に認証情報を受け取っている。
【００８３】
アプリケーションサーバａｐｓ２０は、宛先セッションのセッションパラメータをソースセッションｓ＿ｓｅｓｓ３１のパラメータと同じ値に設定する。ソースセッションｓ＿ｓｅｓｓ３１のためにソースインスタンスｉｎｓｔ２２に値を供給したクライアント側インターフェイスコンポーネントｃｓｉ３０は、これらの値を保持し、宛先インスタンスｉｎｓｔ２４のセッションパラメータを設定するために用いる。
【００８４】
ステップ５３０において、宛先インスタンスｉｎｓｔ２４は宛先セッションを確立する。
【００８５】
ステップ５５５において、アプリケーションサーバａｐｓ２０は宛先セッションに切り換える。クライアント側インターフェイスコンポーネントの内部状態、例えばソースセッションの外部識別子をマッピングする内部データなどは、宛先セッションがいまやクライアントのセッションであることを反映するよう修正される。次に、アプリケーションサーバａｐｓ２０は、ソースインスタンスｉｎｓｔ２２に移送終了メッセージを送信する。移送終了メッセージ９は、アプリケーションサーバａｐｓ２０および／または宛先インスタンスｉｎｓｔ２４がセッション移送のそれぞれの部分をうまく完了したことを示すデータを含む。最後にアプリケーションサーバａｐｓ２０は、ソースセッションを終了するためのメッセージをソースインスタンスｉｎｓｔ２２に送信する。アプリケーションサーバａｐｓ２０によるその後のクライアントコールおよびアプリケーションコールにおいて、宛先セッションがソースセッションの代わりに用いられる。
【００８６】
ステートフル移送プロトコルにおいて、移送準備メッセージ３およびスイッチメッセージ８は別個に送信され、ステートフルセッション移送のために必要とされるある動作が実行されるようにし、それを確認する。これらの動作はステートレスセッション移送には必要とされない。例えば、ステートフル移送プロトコルにおいて、移送準備メッセージ３はクライアントにセッションを確立させるだけではなく、宛先インスタンスに移送チャネルを確立させることもする。移送チャネルは、セッション状態のコピーを送るために用いられる。移送チャネルについての情報はクライアントに送られ、クライアントは次にその情報をソースインスタンスに送る。ソースインスタンスは移送チャネルを介してセッション状態を送る。全てのセッション状態の移動が完了すると、次に、ソースインスタンスはスイッチメッセージ８を送信する。
【００８７】
ステートレス移送プロトコルにおいて、ソースインスタンス上のセッション状態のコピーはキャプチャされず、ソースインスタンスおよび宛先インスタンスの間で転送もされない。したがって、状態が完全に転送され終わるまでスイッチメッセージ８を送ることを遅らせる必要はない。したがって、スイッチメッセージは移送準備メッセージ３とともに送られ得る。
【００８８】
ステップ５２０からステップ５５５までは、単一のアプリケーションコール内で実行される。アプリケーションサーバａｐｓ２０は、アプリケーションコールが開始されたときに外部セッション識別子に関連付けられる特定のデータベースセッションが、アプリケーションコールが戻るときと同じでないことを、知らないかまたは知っている必要はない。データベースセッションのセッション移送を処理するよう調整されるいかなるアプリケーション命令も、セッションを移送するために実行される必要はない。このような方法で、データベースセッションは透過的にアプリケーションに移送された。
【００８９】
アプリケーションに指定される、移送のための境界
一実施例において、アプリケーションサーバａｐｓ２０は、データベースセッションがステートレスであるとき、およびステートレスでないときをデータベースサーバｍｄｓ２０に対して指定する。データベースセッションがステートレスであることを指定するために、アプリケーションサーバａｐｓ２０はステートレスなデータベースセッションを特定してデータベースサーバｍｄｓ２０にメッセージを送信する。データベースサーバｍｄｓ２０は次に、データベースセッションをステートレスとして印をつけるようデータを生成する。
【００９０】
データベースサーバｍｄｓ２０が、データベースセッションを移送するリクエストを受
け取り、それがステートレスとして印をつけられていると判断すると、データベースサーバｍｄｓ２０はデータベースセッションを移送する。移送は、他のステートレス性チェックを実行することなく実行され得る。したがって、一旦データベースサーバｍｄｓ２０がデータベースセッションをステートレスとして印をつけられていると判断すると、データベースサーバはステップ５２５を実行でき、選択メッセージ２、移送準備メッセージ３、およびスイッチメッセージ８をバンドルとして送信する。
【００９１】
アプリケーションサーバａｐｓ２０は、データベースセッションがステートレスでないと指定するために、データベースセッションを特定してデータベースサーバｍｄｓ２０にメッセージを送信する。データベースサーバｍｄｓ２０は次に、データベースセッションをステートレスとして印をつけないようデータを生成する。データベースサーバｍｄｓ２０が、データベースセッションを移送するリクエストを受け取り、それがステートレスとして印をつけられていないと判断すると、データベースサーバｍｄｓ２０はデータベースセッション移送をしない。
【００９２】
アプリケーションにステートレスなデータベースセッションを特定させることは、さまざまな最適化を可能にする。データベースセッションは、一旦移送のために選択されると、より早く移送され得る。なぜならデータベースセッションが境界に到達するのを待ったり、そこにあることを判断したりする必要がないからである。さらに、さまざまな理由で状態が転送され得ないために、またはデータベースセッションがステートレスになる条件をデータベースサーバが判断することができないために、他の方法では移送され得なかったであろう、いくつかのセッションが移送され得る。
【００９３】
図示する目的のため、一旦セッションプールｓｐｌ３１からのデータベースセッションがチェックアウトされると、複数のアプリケーションコールが行われることができて複数のトランザクションを実行する。データベースセッションがチェックアウトされている間、データベースセッションはステートフルである。このように、アプリケーションコール境界またはトランザクション境界にある場合であっても、データベースセッションはステートフルであり得る。しかしながら、一旦データベースセッションがチェックインされると、データベースセッションはもはやステートフルではない。
【００９４】
データベースサーバは、データベースセッションがいつアプリケーション境界にあり、いつトランザクション境界にあるかを判断することが可能である。しかしながら、
これらの条件がいつ存在するかを知っていることは、データベースセッションがステートレスである条件を検出するには不十分である。なぜならデータベースセッションは、コール境界またはトランザクション境界にありながらステートフルであり得るからである。
【００９５】
他方、アプリケーションサーバａｐｓ２０は、データベースセッションがいかなる条件下でステートレスであるかを判断することができる。なぜならアプリケーションサーバａｐｓ２０は、データベースセッションがいつチェックインされ、いつチェックアウトされるかを検出し得るからである。データベースセッションがチェックアウトされると、アプリケーションサーバａｐｓ２０はデータベースセッションをステートフルであると特定して、データベースサーバｍｄｓ２０にメッセージを送る。データベースセッションがチェックインされると、アプリケーションサーバａｐｓ２０はデータベースセッションをステートレスであると特定して、データベースサーバｍｄｓ２０にメッセージを送信する。
【００９６】
ハードウェア概観
図６は、本発明の一実施例が実現され得るコンピュータシステム６００を示すブロック図である。コンピュータシステム６００は、バス６０２または情報を通信するための他の通信機構と、バス６０２に結合されて情報を処理するためのプロセッサ６０４とを含む。
コンピュータシステム６００はまた、バス６０２に結合されて、プロセッサ６０４によって実行される命令および情報を格納するためのメインメモリ６０６、たとえばランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置をも含む。メインメモリ６０６は、プロセッサ６０４によって実行される命令の実行中に、一時的変数または他の中間情報を格納するためにも用いられ得る。コンピュータシステム６００は、バス６０２に結合されてプロセッサ６０４に対する静的情報および命令を格納するための読出専用メモリ（ＲＯＭ）６０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光学ディスクなどの記憶装置６１０が設けられてバス６０２に結合され、情報および命令を格納する。
【００９７】
コンピュータシステム６００は、コンピュータユーザに情報を表示するための表示部６１２、たとえば陰極線管（ＣＲＴ）に、バス６０２を介して結合され得る。英数字キーおよび他のキーを含む入力装置６１４がバス６０２に結合されて、情報およびコマンド選択をプロセッサ６０４に通信する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ６０４に通信して表示部６１２上のカーソル動作を制御するための、カーソル制御機器６１６、たとえばマウス、トラックボール、またはカーソル方向キーである。この入力装置は一般に、２つの軸、すなわち第１の軸（x等）および第２の軸（y等）において２自由度を有し、これによって入力装置は平面上で位置を特定できる。
【００９８】
本発明は、本願明細書に記載された技術を実現するためにコンピュータシステム６００を用いることに関する。本発明の一実施例によると、これらの技術は、メインメモリ６０６に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ６０４が実行することに応答して、コンピュータシステム６００により実行される。このような命令は、別のコンピュータ読取可能な媒体、たとえば記憶装置６１０等からメインメモリ６０６内に読出すことができる。メインメモリ６０６に含まれる命令のシーケンスを実行することにより、プロセッサ６０４に本願明細書に記載された処理のステップを実行させる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せた結線回路を用いて、本発明を実施することができる。したがって、本発明の実施例は、ハードウェア回路およびソフトウェアのいかなる特定の組合せにも限定されない。
【００９９】
本願明細書で用いられる「コンピュータ読取可能な媒体」という用語は、プロセッサ６０４に対して実行のために命令を提供することにかかわるあらゆる媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形態をとり得るが、これらに限定されない。不揮発性媒体には記憶装置６１０等の光学または磁気ディスクが含まれる。揮発性媒体にはメインメモリ６０６等のダイナミックメモリが含まれる。伝送媒体には、同軸ケーブル、銅線、光ファイバ、およびバス６０２を構成するワイヤを含む。伝送媒体は、電波および赤外線データ通信の際に生成されるもの等の音波または光波の形をとり得る。
【０１００】
コンピュータ読取可能な媒体の一般的な形態には、たとえばフロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光学媒体、パンチカード、紙テープ、孔パターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップもしくはカートリッジ、以下に述べる搬送波、またはコンピュータが読出すことのできる任意の他の媒体が含まれる。
【０１０１】
プロセッサ６０４に対して実行のために１つ以上の命令の１つ以上のシーケンスを運ぶ際に、さまざまな形態のコンピュータ読取可能な媒体が関与し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクで運ばれ得る。遠隔コンピュータはそれらの命令をそれ自体のダイナミックメモリにロードして、それらの命令をモデムを用いて電話回線経由で送信することができる。コンピュータシステム６００に対してローカルなモデムが
電話回線上のデータを受信して、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線検出器が赤外線信号によって運ばれたデータを受信し得、適切な回路がそのデータをバス６０２上に出力することができる。バス６０２はそのデータをメインメモリ６０６に運び、そこからプロセッサ６０４が命令を取り出して実行する。メインメモリ６０６が受信した命令は、プロセッサ６０４による実行前または実行後のいずれかに、記憶装置６１０に任意に格納され得る。
【０１０２】
コンピュータシステム６００は、バス６０２に結合された通信インターフェイス６１８も含む。通信インターフェイス６１８は、ローカルネットワーク６２２に接続されたネットワークリンク６２０に対する双方向のデータ通信結合をもたらす。たとえば通信インターフェイス６１８は、対応する種類の電話回線に対するデータ通信接続を与えるためのサービス統合デジタルネットワーク（ＩＳＤＮ）カードまたはモデムであり得る。別の例として、通信インターフェイス６１８は、互換性を有するローカルエリアネットワーク（ＬＡＮ）にデータ通信接続を設けるためのＬＡＮカードであり得る。無線リンクもまた実現することができる。このようなどの実現例においても、通信インターフェイス６１８は、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ、電気的、電磁的、または光学的信号を送受信する。
【０１０３】
ネットワークリンク６２０は一般に、１つ以上のネットワーク経由で他のデータ装置に対するデータ通信をもたらす。たとえば、ネットワークリンク６２０は、ローカルネットワーク６２２を介してホストコンピュータ６２４またはインターネットサービスプロバイダ（Internet Service Provider）（ＩＳＰ）６２６によって運営されるデータ装置に接続をもたらすことができる。ＩＳＰ６２６は次いで、現在一般に「インターネット」６２８と呼ばれるワールドワイドパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク６２２およびインターネット６２８はともに、デジタルデータストリームを運ぶ電気的、電磁的、または光学的信号を用いる。さまざまなネットワークを経由する信号と、ネットワークリンク６２０上の、コンピュータシステム６００との間でデジタルデータを運ぶ通信インターフェイス６１８経由の信号とは、情報を運搬する搬送波の例示的形態である。
【０１０４】
コンピュータシステム６００は、ネットワーク、ネットワークリンク６２０、および通信インターフェイス６１８を介してメッセージを送信し，プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ６３０は、インターネット６２８、ＩＳＰ６２６、ローカルネットワーク６２２および通信インターフェイス６１８経由でアプリケーションプログラムに対して要求されたコードを送信することができる。
【０１０５】
受信されたコードは、受信されたときにプロセッサ６０４によって実行され得、および／または後の実行のために記憶装置６１０もしくは他の不揮発性記憶装置に格納され得る。この態様で、コンピュータシステム６００は搬送波の形でアプリケーションコードを得ることができる。
【０１０６】
上述の明細書では、本発明の実施例を実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、本発明が何であるか、および出願人が発明として意図したのは何であるかを示す唯一独占的なものが、この出願から特有の形態で発生する請求項の組であって、そこでこのような請求項は以降のあらゆる補正を含む。このような請求項に含まれる用語に対して本願明細書で明示されたいずれの定義も、請求項で用いられている通りにこのような用語の意味を支配するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲をいかなる意味でも限定してはならない。したがって、本願明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
【図面の簡単な説明】
【０１０７】
【図１】コンピュータシステムのための多層アーキテクチャのブロック図である。
【図２】本発明の一実施例により、本発明の一実施例が実現され得るマルチノードコンピュータシステムを示すブロック図である。
【図３】本発明の一実施例による、セッションの移送に関与するアプケーションサーバ、ソースデータベースインスタンス、および宛先データベースインスタンスを示すブロック図である。
【図４】本発明の一実施例による、セッションのセッション状態の一部を用いるデータベースコンポーネント示すブロック図である。
【図５】本発明の一実施例による、サーバ間でセッションを移送するためのプロトコルを示す、エンティティ対話図である。
【図６】本発明の一実施例を実現するために用いられ得るコンピュータシステムのブロック図である。
【図１】
2007507762.tif 000003
【図２】
2007507762.tif 000004
【図３】
2007507762.tif 000005
【図４】
2007507762.tif 000006
【図５】
2007507762.tif 000007
【図６】
2007507762.tif 000008
【手続補正書】
【提出日】平成16年12月15日(2004.12.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチノードシステム上のセッションを管理するための方法であって、
前記マルチノードシステムのクライアントのためにあるセッションを確立するためのリクエストを受け取るステップと、
第１のセッションを前記あるセッションとして前記マルチノードシステムの第１のノード上に確立するステップと、
前記クライアントから、前記第１のノードおよび前記マルチノードシステムの第２のノード間でセッションを転送するための１つ以上の基準を示す第１のデータを受け取るステップと、
前記１つ以上の基準に基づいて、前記第１のセッションを前記マルチノードシステムの前記第２のノードに転送することを認定するステップと、
前記第１のセッションを転送することを認定することに応答して、前記マルチノードシステム上の前記クライアントのために前記第２のノード上に第２のセッションを前記あるセッションとして確立するステップとを含む、方法。
【請求項２】
前記１つ以上の基準は、前記第１のセッションがステートレスか否かに基づく、請求項１に記載の方法。
【請求項３】
前記１つ以上の基準は、前記第１のセッションに関連付けられるトランザクションが終了したか否かに基づく、請求項１に記載の方法。
【請求項４】
前記１つ以上の基準は、前記第１のセッションに関連付けられるクライアントコールが完了したか否かに基づく、請求項１に記載の方法。
【請求項５】
前記１つ以上の基準は、第１のアプリケーションコールの後行われたその後のアプリケーションコールが、前記第１のアプリケーションコールのために生成された第１のセッション状態に依存するか否かを示す、請求項１に記載の方法。
【請求項６】
前記その後のアプリケーションコールは前記第１のセッション状態に依存する、請求項５に記載の方法。
【請求項７】
サーバは前記クライアントおよび複数の他のセッションをホストし、
前記サーバは前記第１のノード上にセッションのプールを維持し、前記プールは前記第１のセッションを含み、さらに、
前記サーバは、前記第１のセッションを前記複数の他のセッションに割当て、かつ割当て解除する、請求項１に記載の方法。
【請求項８】
前記サーバはアプリケーションサーバである、請求項７に記載の方法。
【請求項９】
マルチノードシステム上のセッションを管理するための方法であって、
前記マルチノードシステムのクライアントのためにあるセッションを確立するためのリクエストを受け取るステップと、
第１のセッションを前記あるセッションとして前記マルチノードシステムの第１のノード上に確立するステップと、
前記クライアントから、前記第１のセッションの状態をキャプチャする必要なく前記第１のノードおよび第２のノード間で移送され得るセッションとして前記第１のセッションを特定する第１のデータを受け取るステップと、
前記第１のデータに基づいて、前記第１のセッションを前記第２のノードに移送することを認定するステップと、
前記第１のセッションを前記第２のノードに移送することを認定することに応答して、前記マルチノードシステム上の前記クライアントのための前記あるセッションとして、前記第２のノード上に第２のセッションを確立するステップとを含む、方法。
【請求項１０】
前記クライアントは、第１のアプリケーションコールの後行われたその後のアプリケーションコールが前記第１のアプリケーションコールのために生成された第１のセッション状態に依存しないと判断することに応答して、前記第１のデータを送信する、請求項９に記載の方法。
【請求項１１】
請求項９に記載の方法であって、前記方法はさらに、
サーバが前記クライアントおよび複数の他のセッションをホストするステップと、
前記サーバが前記第１のノード上にセッションのプールを維持するステップとを含み、前記プールは前記第１のセッションを含み、さらに、
前記サーバが前記第１のセッションを前記他のセッションの特定のセッションに割り当てるステップを含み、
前記第１のセッションを割り当てる前記サーバは、前記サーバに前記第１のデータを送信させる、請求項９に記載の方法。
【国際調査報告】
2007507762.tif 000009
2007507762.tif 000010
2007507762.tif 000011