(57)【要約】  手法は、クライアントが、あるサーバのあるセッションから別のサーバの別のセッションへ、最初のセッションが確立されたアプリケーションについて透過的な方法で切り換えることを可能にする。したがってクライアントは、透過的なセッション移送では、移送を達成するよう適合されたアプリケーション命令を実行することなく、セッション間で切り換えられる。その代わり、アプリケーションがそれを介してサーバと対話する、クライアント側インターフェイスコンポーネントが移送の詳細を処理し、クライアント側インターフェイスコンポーネントの内部状態を変更して同じ効果をもたらす。レガシーアプリケーションは、本願明細書に説明される手法を開始するために変更される必要はない。
2007511807.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータで実現可能なステップを含む方法であって、
あるセッションをマルチノードシステムのクライアントのために確立するためのリクエストを受け取るステップと、
第１のセッションを前記あるセッションとして前記マルチノードシステムの第１のノード上に確立するステップと、
前記あるセッションを前記マルチノードシステムの第２のノードに転送することを認定するステップと、
前記第１のセッションの第１のセッション状態を、前記第１のノードから前記第２のノード上の第２のセッションへ転送するステップと、
前記マルチノードシステム上の前記クライアントのために前記第２のセッションを前記あるセッションとして確立するステップとを含む、方法。
【請求項２】
第１のセッション状態を転送する前記ステップは、
前記第１のノードが前記第１のセッション状態の一部のコピーを生成し、格納するステップと、
前記第１のノードおよび前記第２のノード間に確立された接続を介して、前記第１のセッション状態の一部のコピーを前記第２のノードに送るステップとを含む、請求項１に記載の方法。
【請求項３】
転送することを認定する前記ステップは、１つ以上の移送基準が満たされるか否かを判断するステップを含み、
第１のセッション状態を転送する前記ステップは、前記１つ以上の移送基準が満たされる場合にのみ開始される、請求項１に記載の方法。
【請求項４】
前記１つ以上の移送基準は、前記第１のセッションに関連付けられるトランザクションが終了したか否かに基づく、請求項３に記載の方法。
【請求項５】
前記第１のノード上で実行される複数のソフトウェアコンポーネントの各コンポーネントは、前記第１のセッション状態の各部分にアクセスし、
前記１つ以上の移送基準が満たされるか否かを判断する前記ステップは、前記複数のコンポーネントの各コンポーネントについて、前記各コンポーネントの関数を呼び出すステップを含み、前記関数は、前記第１のセッション状態の各部分が別のノードへ転送され得るか否かを示す値を返し、
前記１つ以上の移送基準は、前記複数のコンポーネントの各コンポーネントの前記関数によって返される値に基づく、請求項３に記載の方法。
【請求項６】
前記クライアントに前記第２のセッションを生成させるために第１のメッセージを前記クライアントに送るステップと、
前記クライアントが、前記第２のセッションが生成されたことを示す第２のメッセージを前記第１のノードに送るステップと、
前記第２のメッセージを受け取ることに応答して、前記第１のノードが第１のセッション状態の転送を開始するステップとをさらに含む、請求項４に記載の方法。
【請求項７】
前記第２のメッセージは、前記第２のノードに接続を確立するための接続データを含み、
第１のセッション状態を転送するステップは、前記接続を介して前記第１のセッション状態を転送するステップを含む、請求項６に記載の方法。
【請求項８】
前記第１のノードから前記第１のメッセージを受け取ることに応答して、前記クライアントが、前記第２のセッションを生成するためのあるリクエストを前記第２のノードに送信するステップと、
前記第２のセッションを生成した後、
前記第２のノードが、前記第１のノードへの接続のためのポートを確立するステップと、
前記第２のノードが、前記ポートに接続を確立するための接続データを含むメッセージを前記クライアントに送信するステップとをさらに含む、請求項６に記載の方法。
【請求項９】
前記クライアントが前記ポートに前記接続を確立するための前記接続データのコピーを含むメッセージを前記第２のノードに送信するステップと、
前記接続データのコピーを含む前記メッセージを受け取ることに応答して、前記第１のノードが前記接続データに基づいて接続を確立し、第１のセッション状態を転送する前記ステップを開始するステップとをさらに含む、請求項６に記載の方法。
【請求項１０】
前記第１のセッション状態を転送した後、前記クライアントに前記第２のセッションを前記あるセッションとして使用させるために第３のメッセージを前記クライアントに送るステップとをさらに含む、請求項６に記載の方法。
【請求項１１】
前記第１のセッションを前記第２のノードに移送するためのリクエストを受け取るステップをさらに含む、請求項１に記載の方法。
【請求項１２】
前記第１のセッションを移送する進捗をトラッキングするステップと、
前記第１のセッションを移送する前記進捗および時間に基づいて、
前記第１のセッションの移送を中止するステップと、
前記第１のセッションの移送が試みられ、失敗したことを示すデータを生成するステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記クライアントはコンピュータに存在してアプリケーションを実行し、
前記アプリケーションは、前記マルチノードシステムに存在するサーバと対話するためのインターフェイスコンポーネントを呼び出し、
前記アプリケーションは前記サーバにコールを行い、
第１のセッション状態を転送する前記ステップと、前記第２のセッションを前記あるセッションとして確立する前記ステップとは、前記コール内で実行される、請求項１に記載の方法。
【請求項１４】
前記第１のノードが、前記第１のセッションを前記第２のノードに移送するためのリクエストを受け取るステップと、
ある時間が経過したと判断した後、前記第１のノードが前記クライアントに前記第２のノード上でホストされるサーバへのコールを行なわせるステップと、
第１のセッション状態を転送するステップと、前記第２のセッションを前記あるセッションとして確立する前記ステップとは、前記コール内で実行される、請求項１に記載の方法。
【請求項１５】
第１のセッション状態を転送する前記ステップと、前記第２のセッションを確立する前記ステップとは、前記第１のセッションを前記第２のノードに移送する動作として実行され、
移送障害イベントを検出することに応答して、前記ステップはさらに、
前記第１のセッションの移送を中止するステップと、
前記第1のセッションを移送するために割り当てられたリソースを放棄するステップと
、
前記第１のセッションの移送が試みられ、失敗したこと示すデータを生成するステップとを含む、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチノードコンピュータシステムにおいて作業負荷のバランスをとるためにサーバ間でセッションを転送するなどのタスクを実行するよう、セッション状態をキャプチャし、復元することに関する。
【０００２】
本出願は、「コンピュータリソース提供（Computer Resource Provisioning）」と題された、２００３年８月１４日出願の米国仮出願番号第６０／４９５，３６８号の優先権を主張し、それが本願明細書に引用して援用される。
【０００３】
本出願は、下記の米国出願に関連する。
【０００４】
２００４年８月１２日出願の、サンジェイ・カラスカー（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号（代理人事件整理番号第５０２７７−２４１１号）に関連し、それが本願明細書に引用にて援用される。
【０００７】
２００４年８月１２日出願の、「結果集合の中断、および中断された結果集合からの透過的セッション移送の継続（Suspending A Result Set And Continuing From A Suspended Result Set For Transparent Session Migration）」と題された米国仮出願番号第ＸＸ／ＸＸＸ，ＸＸＸ号（代理人事件整理番号第ＯＩ７０３９３６２００１号、出願人事件整理番号第ＯＩＤ-２００４-０４３-０１号）に関連し、それが本願明細書に引用にて援用される。
【０００８】
２００４年８月１２日出願の、「結果集合の中断、および中断された結果集合からの継続（Suspending A Result Set And Continuing From A Suspended Result Set）と題された米国仮出願番号第ＸＸ／ＸＸＸ，ＸＸＸ号（代理人事件整理番号第ＯＩ７０３９３６２００２号、出願人事件整理番号第ＯＩＤ―２００４―０４３―０２号）に関連し、それが本願明細書に引用にて援用される。
【０００９】
２００４年８月１２日出願の、「結果集合の中断、および中断された結果集合からのスクロール可能なカーソルのための継続（Suspending A Result Set And Continuing From A Suspended Result Set For Scrollable Cursors）と題された米国仮出願番号第ＸＸ／ＸＸＸ，ＸＸＸ号（代理人事件整理番号第ＯＩ７０３９３６２００３号、出願人事件整理番号第ＯＩＤ―２００４―０４３―０３号）に関連し、それが本願明細書に引用にて援用される。
【００１０】
本出願は、下記の国際出願に関連する。
【００１１】
２００４年８月９日にオラクル・インターナショナル・コーポレイション（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 Corporation）によって米国受理官庁に出願された、「ステートレスなセッションの透過的なサーバ間移送（Transparent Migration of Stateless Sessions 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 Corporation）から入手可能な、オラクルコールインターフェイス（「ＯＣＩ」（Oracle Call Interface））である。
【００４８】
説明する目的のため、本願明細書においては、実際はプロセスによるソフトウェアの実行によってプロセスに特定の作用を実行させる場合、アプリケーションａｐｐｌ３０などのソフトウェアモジュールがそれらの作用を実行するとして記載される。例えば、アプリケーションａｐｐｌ３０がメッセージを送受信するか、またはデータにアクセスすると記載される場合、アプリケーションソフトウェアを実行しているプロセスがメッセージを送受信しているか、またはデータにアクセスしている。
【００４９】
コール
コールは、タスクを実行するためクライアントからサーバになされるリクエストである。典型的には、コールはソフトウェアモジュールのルーチンの呼出しを実行するプロセスによって行われる。呼出しは、プロセスにルーチンを実行させ（このような実行は、それ自体で他のルーチンのコールおよび実行を伴うことができる）、次に、呼出し点まで、またはそれを少し超えた時点（または他の何らかの、例えば例外ハンドラなどの指定された時点）まで戻らせてモジュールを実行させる。
【００５０】
コールは、呼び出されたルーチンに対して１つ以上の入力パラメータを渡し、１つ以上の出力パラメータとして値を返すことを伴い得る。入力パラメータおよび出力パラメータの一部としてメッセージが送信され得る。データベースインスタンスに対するコールは、典型的にはデータベースステートメントを実行するなどのタスクを実行するために行われる。コールにより送信されるメッセージは、入力パラメータとしてのクエリー列と出力パラメータとしてのクエリー結果または結果の場所への参照とを含み得る。
【００５１】
リモートプロシージャコールは、プロセスによって行われるルーチンのコールであって、別のプロセスが、同じかまたは異なるノードおよび／またはコンピュータ上でコールされたルーチンを実行する。他のプロセスはリモートプロセスと称される。コールは、ネットワーク接続などの通信接続を介して、ルーチンを実行するためのリクエストを別のプロセスに送信することによって行われる。入力パラメータおよび出力パラメータもまた接続を通じて送信される。リモートプロセスがプロシージャを実行する一方で、コールプロセスの実行は中断されるかまたはブロックされる。
【００５２】
コールは、コールされたルーチンをコールプロセスまたはリモートプロセスに実行させ
、それにより他のルーチンのコールおよび実行をもたらし得る。コールが戻るとコールは終了する。コールされたルーチンの実行の一部として行われる動作は、コール内で行われると称される。
【００５３】
例えば、データベースクラスタｄｂｃ２０にコールを行うために、アプリケーションａｐｐｌ３０は、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０の関数のコールを行う。呼び出しに応答して、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０がコールを実行し、それは、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０が、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０によりクライアントコンピュータｃｍｐ３０のメモリに格納された「ローカルな」データを変更しアクセスすることを含み、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０はソースインスタンスｉｎｓｔ２２に複数のリモートプロシージャコールを行い、複数のリモートプロシージャコールは第１のリモートプロシージャコールおよび第２のリモートプロシージャコールを含む。第１のリモートプロシージャコールに応答して、ソースインスタンスｉｎｓｔ２２はさまざまな動作を実行する。ローカルデータの変更およびアクセス、複数のリモートプロシージャコール、およびソースインスタンスｉｎｓｔ２２により実行されるさまざまな動作は、アプリケーションａｐｐｌ３０によって行われる「アプリケーションコール」内で実行されると称される。第１のリモートプロシージャコールにより呼び出されたルーチンを実行する一方でソースインスタンスｉｎｓｔ２２によって実行されるさまざまな（他のルーチンの実行を伴い得る）動作は、本願明細書においては、第１のリモートプロシージャコール内で行われると称され、第１のリモートプロシージャコールがクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０によって行われるので、クライアント側コール内で行われると称され、また、アプリケーションａｐｐｌ３０によってコールされたルーチンを実行する一方でリモートプロシージャコールがクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０によって行われるので、アプリケーションコール内で行われると称される。アプリケーションコールまたはクライアント側コールは、本願明細書において、両方ともクライアントコールと称され得る。
【００５４】
透過的なセッション移送プロトコル
図４は、透過的なセッション移送のためのプロトコルを示すために用いられるエンティティ対話の図である。プロトコルは、プロトコルに関与するクライアントｃｌ３０、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４を用いて示される。プロトコルは移送開始プログラムによって開始され、移送開始プログラムはセッションの集合が移送されることを決定し、および／またはリクエストするエンティティである。例えば作業負荷マネージャｗｍ２０は、ソースインスタンスｉｎｓｔ２２から宛先インスタンスｉｎｓｔ２４へ作業負荷をシフトするために、あるセッションの集合がソースインスタンスｉｎｓｔ２２から宛先インスタンスｉｎｓｔ２４へ移送されるべきことを決定し得る。作業負荷マネージャｗｍ２０は、そのセッションの集合の移送のリクエストを生成する。データベースインスタンス間で作業負荷をシフトするためセッション移送をリクエストする作業負荷マネージャｗｍ２０は、セッション移送をリクエストするエンティティおよび目的の一例にすぎない。他の種類の目的のためにセッションの集合が移送されるよう要求する他の種類のエンティティがあり得る。例えば、あるデータベースインスタンスをシャットダウンする役割があるエンティティが、そのデータベースインスタンスがシャットダウンされ得るよう、データベースインスタンスによって現在ホストされている全てのセッションを移送することができる。
【００５５】
ステップ４０５において、ソースインスタンスｉｎｓｔ２２は、１つ以上のセッションのリストを移送するリクエストである移送リクエスト２を受け取る。リクエストは、例えば作業負荷マネージャｗｍ２０などのセッション移送開始プログラムから送信される。セ
ッション移送のために選択されるかまたは他の方法で指定されるセッションは、本願明細書において、選択されたセッションと称される。図示する目的で、移送するセッションのリストは、選択されたセッションを１つのみ、すなわちソースセッションｓｅｓｓ３１のみを含む（図３参照）。
【００５６】
ステップ４１０において、ソースインスタンスｉｎｓｔ２２は、クライアントからのソースセッションｓｅｓｓ３０へのコールを待ち、そのコールを傍受して選択メッセージ３をクライアントに送る。コールが傍受されたと称されるのは、コールが選択メッセージ３を送る作用など、セッション移送に関連する何らかの作用をもたらすよう用いられているが、コールはそのような作用をもたらすこと以外の何らかの目的、例えばクエリーの実行を要求するなどのために生成されたからである。クライアントに返される出力パラメータは、複数の属性を有し得る「出力データ構造」を含む。ソースインスタンスｉｎｓｔ２２は、出力パラメータの１つ以上の属性を特定の値に設定することによって、選択メッセージ３を送信する。
【００５７】
ステップ４２０において、ソースインスタンスｉｎｓｔ２２は移送チェックを実行し、すなわち移送基準が満たされているか否か判断する。移送基準が満たされる場合、プロトコルの実行はステップ４２５へ進む。
【００５８】
移送基準
図５は、一実施例による３種類の移送基準の使用を表すブロック図である。図５を参照すると、ブロック５１０において、ソースセッションｓｅｓｓ３０がトランザクション境界にあるか否かが判断される。ブロック５２０において、ソースセッションｓｅｓｓ３０がコール境界にあるか否かが判断される。ブロック５３０において、ソースセッションｓｅｓｓ３０がコンポーネント境界にあるか否かが判断される。
【００５９】
セッションのために実行されているアクティブなトランザクションが現在ない場合、セッションはトランザクション境界にある。トランザクションは、原子単位として実行される、論理的作業単位である。データベースシステムのコンテキストにおいて、データベースの完全性を確実にするために、データベースはトランザクションによってなされた変更のすべてを反映するか、またはトランザクションによってなされた変更のいずれをも反映しないかでなければならない。結果的に、トランザクションが完全に実行されてしまうまで、トランザクションによってなされた変更のいずれも恒久的にはデータベースに適用されない。トランザクションは、トランザクションによってなされた変更が恒久的になされた場合に「完遂する」と言われる。トランザクションが完遂されていないか、中止されたか、または他の方法で終了された場合、トランザクションはアクティブである。
【００６０】
データベースインスタンスがクライアントコールを処理する中間ステージにあるのではなくコールの実行を終了していた場合、セッションはコール境界にある。
【００６１】
例えばデータベースステートメントを実行するコールを処理するために、データベースインスタンスは、各ステージが特定の動作の種類に対応するようなステージを経る。これらのステージは、（１)カーソルを生成し、(２)データベースステートメントを解析してその変数をバインドし、(３)データベースステートメントを実行し、(４)クエリーに返すために行をフェッチし、および(５)カーソルを閉じるステージである。これらのステージは、「オラクル８サーバコンセプト（Oracle 8 Server Concepts）リリース８．０、第３巻（その内容はここにて引用にて援用される）第２３章に、より詳細に記載される。中間ステージは、コールの処理が完了する前に実行される動作である。この例において、中間ステージはステージ(１)−(５)である。ソースインスタンスｉｎｓｔ２２がコールに応答してステップ(５)を実行したあと、ソースセッションｓｅｓｓ３０はコール境界にある。
【００６２】
セッションの各々のデータベースコンポーネントがそのそれぞれのコンポーネント境界にある場合、セッションはコンポーネント境界にある。前述したように、データベースコンポーネントはセッション状態の一部を用い、それは本願明細書においてコンポーネントセッション状態と称される。ソースセッションｓｅｓｓ３０などのセッションは、データベースコンポーネントのコンポーネントセッション状態が別のセッションに移送されることができる場合、特定のデータベースコンポーネントのためのコンポーネント境界にある。
【００６３】
例示的データベースコンポーネント
図６は、データベースコンポーネントｄｃ６０の例示的集合、およびセッション状態ｓｔａｔｅ６０内のそのそれぞれのコンポーネントセッション状態を示す。セッション状態ｓｔａｔｅ６０は、ソースセッションｓｅｓｓ３０のためのセッション状態である。図６は、次のデータベースコンポーネントを示す。カーソルコンポーネントｃｃ６１、ＰＬ／ＳＱＬコンポーネントｃｃ６２、セッションパラメータコンポーネントｃｃ６３およびＪａｖａ（登録商標）コンポーネントｃｃ６４である。
【００６４】
カーソルコンポーネントｃｃ６１は、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４などのデータベースインスタンス内でカーソルを管理するために用いられる。カーソルは、解析されるデータベースステートメントの情報とデータベースステートメントの処理に関する他の情報とを格納するために用いられるメモリの領域である。カーソルコンポーネントｃｃ６１は、セッション状態ｓｔａｔｅ６０内のコンポーネントセッション状態であるカーソル状態ｃｓ６１の情報を使用し、格納する。
【００６５】
ＰＬ／ＳＱＬコンポーネントｃｃ６２は、オラクル社（Oracle Corporation）によって広められた手続き型データベース言語であるＰＬ／ＳＱＬで書き込まれるコード（例えばプロシージャ）を実行する役割がある。コンポーネントは、コンポーネントセッション状態ＰＬ／ＳＱＬ状態ｃｓ６２を用いて、変値および解析されたＰＬ／ＳＱＬステートメントなどのＰＬ／ＳＱＬコードの実行に関連した情報を格納する。
【００６６】
セッションパラメータコンポーネントｃｃ６３は、セッションに関連付けられるコールおよびリクエストが処理される方法を一般に制御する属性を管理する役割がある。属性は、コンポーネントセッション状態パラメータ状態ｃｓ６３に格納される。例えば、セッションパラメータは、クエリーを実行することにより返される結果のための特定の人間の言語を制御する属性を含むことができる。
【００６７】
Ｊａｖａ（登録商標）コンポーネントｃｃ６４は、Ｊａｖａ（登録商標）で書き込まれるコード（例えば、クラスおよびオブジェクト方法）を実行する役割がある。コンポーネントは、コンポーネントセッション状態Ｊａｖａ（登録商標）状態ｃｓ６４を用いてＪａｖａ（登録商標）コードの実行に関連した情報を格納する。
【００６８】
カーソルコンポーネントｃｃ６１、ＰＬ／ＳＱＬコンポーネントｃｃ６２、セッションパラメータコンポーネントｃｃ６３およびＪａｖａ（登録商標）コンポーネントｃｃ６４は、各々インターフェイス定義に適合するデータベースコンポーネントインターフェイスを含む。インターフェイス定義はルーチンの集合、典型的には関数およびそれらのルーチンによって返される値を定義する。インターフェイス定義の例は、コンピュータ言語で規定されるオブジェクトクラス、インターフェイス定義言語（例えばＯＭＧインターフェイス定義言語）で記述されるインターフェイス、またはインターフェイスを記述する人間の言語で書かれた仕様を含む。データベースコンポーネントインターフェイスの機能は、セッション間のコンポーネントセッション状態の転送をサポートする。一実施例によれば、
インターフェイスは３つの関数を含む。：ＩｓＲｅａｄｙＴｏＭｉｇｒａｔｅ（）、ＧｅｔＳｔａｔｅ（）、ＳｅｔＳｔａｔｅ（）である。
【００６９】
ＩｓＲｅａｄｙＴｏＭｉｇｒａｔｅ（）が呼び出され、データベースコンポーネントに、セッションのためのデータベースコンポーネントのコンポーネントセッション状態が別のセッションのセッション空間に移送され得るか否かを判断させる。関数は、コンポーネントセッション状態が移送され得るか否かを示す結果を返す。例えば、ＰＬ／ＳＱＬコンポーネントｃｃ６２のＩｓＲｅａｄｙＴｏＭｉｇｒａｔｅ（）関数が呼び出される場合、ＰＬ／ＳＱＬコンポーネントｃｃ６２は、ＰＬ／ＳＱＬ状態ｃｓ６２内にオープンファイルのファイル記述子を格納していることを判断する。ファイル記述子は、ソースインスタンスｉｎｓｔ２２のセッションに対してのみ有効であって宛先インスタンスｉｎｓｔ２４には有効でない情報を含み、したがって、ＰＬ／ＳＱＬコンポーネントｃｃ６２はＰＬ／ＳＱＬ状態ｃｓ６２が移送され得ないことを示す値を返す。
【００７０】
関数ＧｅｔＳｔａｔｅ（）が呼び出され、データベースコンポーネントにセッションのコンポーネントセッション状態のコピーを生成させる。関数ＳｅｔＳｔａｔｅ（）が呼び出され、データベースコンポーネントにコンポーネントセッション状態のコピーをターゲットセッションのセッション状態へロードさせる（例えば、加える）。
【００７１】
ＧｅｔＳｔａｔｅ（）関数によって返されたコンポーネントセッション状態は、返されたコンポーネントセッション状態のコピーを転送することに関与する１つ以上のエンティティがコンポーネントセッション状態の特定の構造について知る必要はないという点で、不透明である。エンティティは、単にＧｅｔＳｔａｔｅ（）関数を呼び出してデータベースコンポーネントのコンポーネントセッション状態をキャプチャし、ＳｅｔＳｔａｔｅ（）を呼び出してコピーを渡すことによって、返されたコンポーネントセッション状態のコピーをロードする。
【００７２】
ソースセッションｓｅｓｓ３０が各データベースコンポーネントについてコンポーネント境界にあるか否かの判断は、コンポーネントセッション状態を使用していることができる各データベースコンポーネントについてＩｓＲｅａｄｙＴｏＭｉｇｒａｔｅ（）関数を呼び出すことによりなされる。全てのこのような呼出しが、それぞれのコンポーネントセッション状態が移送され得ることを示す値を返す場合、ブロック５３０において、ソースセッションｓｅｓｓ３０が各データベースコンポーネントについてコンポーネント境界にあると判断される。
【００７３】
移送準備
ステップ４２０において、ソースインスタンスｉｎｓｔ２２が、移送基準が満たされたと一旦判断すると、ステップ４２５においてソースインスタンスｉｎｓｔ２２がクライアントに移送準備メッセージ４を送信する。ステップ４２５は、コールを傍受することによって実行される。移送準備メッセージ４は、傍受されたコールに返される出力データ構造を介して送信される。移送準備メッセージ４および選択メッセージ２は、同じクライアントコールにおいて返され得る。
【００７４】
移送準備メッセージは、宛先インスタンスｉｎｓｔ２４に接続を確立するための接続情報を含む。接続の目的は、宛先インスタンスｉｎｓｔ２４上に宛先セッションを確立し、ソースセッションｓｅｓｓ３０を移送することに宛先インスタンスが関与するのを開始することである。
【００７５】
傍受されたコールは、アプリケーションａｐｐｌ３０からのアプリケーションコール内で開始された。残りのプロトコルはこのアプリケーションコール内で実行される。傍受さ
れたクライアントは本願明細書において、「シードコール」と称される。なぜならクライアントｃｌ３０は、残りのプロトコルを開始し、セッション移送を完了するためにコールを行わなければならないからである。
【００７６】
ステップ４２７において、クライアントｃｌ３０は、宛先セッションを確立するリクエストを宛先インスタンスｉｎｓｔ２４に送信する。データベースインスタンス上にセッションを確立するには、クライアントｃｌ３０の認証を必要とし得る。クライアントｃｌ３０を認証するために、クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０からソースインスタンスｉｎｓｔ２２に認証情報（例えばユーザ名およびパスワード）が与えられる。クライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０は、データベースクラスタｄｂｃ２０上にセッションを確立するため、ａｐｐｌ３０から以前に認証情報を受け取っている。
【００７７】
クライアントｃｌ３０は、宛先セッションのセッションパラメータをソースセッションｓｅｓｓ３０のパラメータと同じ値に設定する。ソースセッションｓｅｓｓ３０のためにソースインスタンスｉｎｓｔ２２に値を供給したクライアント側インターフェイスコンポーネントｉｎｔｃｏｍｐ３０は、これらの値を保持し、宛先インスタンスｉｎｓｔ２４のセッションパラメータを設定するために用いる。
【００７８】
ステップ４３０において、宛先インスタンスｉｎｓｔ２４は、宛先セッションおよび「移送チャネル」を確立し、それはソースインスタンスおよび宛先インスタンス間でセッション状態を転送するために用いられる、通信チャネルである。
【００７９】
本発明の一実施例において、移送チャネルが確立される。いくつかのデータベースサーバにおいて、各セッションのために、データベースサーバは唯一のエンドポイント（例えばポートと関連付けられたポート番号）において受信メッセージを受け取る。単一エンドポイントは典型的には、クライアントと通信するための接続に用いられる。例えば接続はクライアントによって用いられてデータベースステートメントを送信したり、データベースインスタンスによって用いられてクエリー結果を送信したり上述のようなメッセージを送信したりする。セッションのための単一エンドポイントは、本願明細書においてセッションの入来エンドポイントと称される。
【００８０】
選択されたセッションのセッション状態を転送するために、シャドウポートと称される、宛先インスタンスｉｎｓｔ２４上の新しい、異なる入来エンドポイントが移送チャネルのために用いられる。宛先インスタンスｉｎｓｔ２４は、シャドウポートにおいて、ソースインスタンスｉｎｓｔ２２からの接続リクエストを聞いて、受け入れる。例えば、新しいソケットがシャドウポートのために生成され得、セッションの入来エンドポイントとして用いられ得る。宛先インスタンスｉｎｓｔ２４は、新しいソケットにおいて、ソースインスタンスｉｎｓｔ２２からの接続リクエストを聞いて、受け入れる。
【００８１】
次に、宛先インスタンスｉｎｓｔ２４は宛先準備完了メッセージ６をクライアントｃｌ３０に送信する。宛先準備完了メッセージ６は移送チャネル情報を含み、それはソースインスタンスｉｎｓｔ２２が移送チャネルを介して宛先インスタンスｉｎｓｔ２４に接続するのに充分な情報を含む。例えば移送チャネルは、シャドウポートのポート番号を含む。
【００８２】
ステップ４３５においてクライアントｃｌ３０が宛先準備完了メッセージ６を受け取り、ソースインスタンスｉｎｓｔ２２に移送準備完了メッセージ７を送信する。移送チャネル情報はメッセージとともに送られる。
【００８３】
ソースインスタンスｉｎｓｔ２２は、移送準備完了メッセージ７を受け取る。
【００８４】
ステップ４４０において、ソースインスタンスｉｎｓｔ２２は、セッション状態７を移送チャネルを介して宛先インスタンスｉｎｓｔ２４へ転送する。受け取られた移送チャネル情報に基づいて、まず、ソースインスタンスｉｎｓｔ２２は、移送チャネルを介して宛先インスタンスｉｎｓｔ２４に「移送接続」を確立する。一実施例において、特定のデータベースコンポーネントのために、ソースインスタンスｉｎｓｔ２２がそれぞれのＧｅｔＳｔａｔｅ（）関数を呼び出し、返されたコンポーネントセッション状態のコピーを格納して、移送接続を介して宛先インスタンスｉｎｓｔ２４にコピーを送信する。
【００８５】
ステップ４４５において、宛先インスタンスｉｎｓｔ２４が移送接続を介して送信されるコンポーネントセッション状態を受け取り、送られたデータベースコンポーネントの各コンポーネントセッション状態について、それぞれのＳｅｔＳｔａｔｅ（）関数を呼び出し、宛先セッションのセッション状態にコンポーネントセッション状態をロードする。
【００８６】
ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４が作業を並行して実行するような方法で、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４間のセッション状態の転送が実行され得る。例えば、関数ＧｅｔＳｔａｔｅ（）は、セッションコンポーネントのコンポーネントセッション状態の一部だけを返すことができ、全てのコンポーネントセッション状態を検索するために複数回呼び出され得る。ソースインスタンスｉｎｓｔ２２がＧｅｔＳｔａｔｅ（）を呼び出すことによって一部を検索する場合、ソースインスタンスｉｎｓｔ２２は宛先インスタンスｉｎｓｔ２４にその一部を送信し、次に再度ＧｅｔＳｔａｔｅ（）を呼び出して別の一部を検索する。宛先インスタンスｉｎｓｔ２４が一部を受け取ると、宛先インスタンスｉｎｓｔ２４はＳｅｔＳａｔｅ（）をコールして宛先セッション状態へ一部を転送する。このように、宛先インスタンスｉｎｓｔ２４がセッション状態の一部をロードする一方で、ソースインスタンスｉｎｓｔ２２はセッション状態の一部を検索していることができる。このような方法で、ソースインスタンスｉｎｓｔ２２および宛先インスタンスｉｎｓｔ２４は、コンポーネントセッション状態を転送するため、並行してそれぞれの動作を実行する。
【００８７】
ソースセッションから宛先インスタンスｉｎｓｔ２４までセッション状態の転送を完了した後、移送接続は終了される。宛先インスタンスｉｎｓｔ２４は、宛先セッションｓｅｓｓ３０の入来エンドポイントをクライアントエンドポイントへ変更して戻す。
【００８８】
ステップ４５０において、ソースインスタンスｉｎｓｔ２２はスイッチメッセージ８をクライアントｃｌ３０に送信し、宛先セッションに切り換え得ることをクライアントｃｌ３０に知らせる。スイッチメッセージ８は、コールの出力パラメータ値として移送準備完了メッセージを返すことにより、移送準備完了メッセージが送られたクライアントコールの一部として、クライアントｃｌ３０に送られ得る。メッセージはまた、その後のクライアントｃｌ３０コールの一部として返され得る。
【００８９】
ステップ４５５において、スイッチメッセージ８を受け取ることに応答して、クライアントｃｌ３０は宛先セッションに切り換える。クライアント側インターフェイスコンポーネントの内部状態、例えばソースセッションの外部識別子をマッピングする内部データは、宛先セッションがいまやクライアントのセッションであることを反映するよう修正される。次に、クライアントｃｌ３０は、ソースインスタンスｉｎｓｔ２２に移送終了メッセージを送信する。移送終了メッセージ９は、クライアントｃｌ３０および／または宛先インスタンスｉｎｓｔ２４がセッション移送のそれぞれの部分をうまく完了したことを示すデータを含む。さらに詳細に後述するように、移送終了メッセージ９はセッション移送がうまく完了したか否かを通信するのに用いられる。最後にクライアントｃｌ３０は、ソースセッションを終了するためのメッセージをソースインスタンスｉｎｓｔ２２に送信する
。クライアントｃｌ３０によるその後のクライアントコールおよびアプリケーションコールにおいて、宛先セッションがソースセッションの代わりに用いられる。
【００９０】
ステップ４２０からステップ４５５までは、単一のアプリケーションコール内で実行される。アプリケーションは、アプリケーションコールが開始されたときに外部セッション識別子に関連付けられる特定のデータベースセッションが、アプリケーションコールが戻るときと同じでないことを、知らないかまたは知っている必要はない。データベースセッションのセッション移送を処理するよう調整されるいかなるアプリケーション命令も、セッションを移送するために実行される必要はない。このような方法で、データベースセッションは透過的にアプリケーションに移送された。
【００９１】
キックスタートする同期的に実行されるセッション移送
コールにより要求されるセッション移送に関して、セッション移送は、非同期でまたは同期的に実行され得る。同期的に実行される場合、コールは、要求されたセッションのセッション移送が完了された後に戻る。呼び出し側は、セッション移送の完了までブロックされる。非同期で実行される場合、要求されたセッション移送が実行されている間は呼び出し側の実行はブロックされない。コールはセッション移送が完了される前に戻ることができる。
【００９２】
上述のように、図４で表されるセッション移送プロトコルの完了は、クライアントから受け取られるシードコールに依存する。セッション移送の開始はシードコールが行われるまで遅延される。相当な遅延があり得る。例えばクライアントｃｌ３０は、ブラウザのグラフィックインターフェイスを操作する人間のユーザに応答してブラウザを実行し、ソースインスタンスｉｎｓｔ２２にアプリケーションコールを生成する。人間のユーザは、ブラウザ出力を読みとるために休止するか、または休憩のために去るなど長期間グラフィックインターフェイスを操作しないことがあり、アプリケーションコールおよびシードコールの発行を遅延させる。同期的に出されたセッション移送リクエストは、このように相当期間ブロックされ得る。
【００９３】
このような長い遅延を避けるため、同期的に実行されるセッション移送が開始され得る。セッションの同期セッション移送を要求するコールが行われた後に、シードコールが受取られることなく時間期間が切れた場合、シードコールリクエストと称されるメッセージがセッションのクライアントに送信されて、クライアントにシードコールを行うよう要求する。例えば、シードコールリクエストは、ソースインスタンスｉｎｓｔ２２により開始されるクライアントｃｌ３０への単純なピングであり得る。
【００９４】
一実施例において、セッション移送の進行は、移送トラッキング機構（例えば、より詳細に後述されるもの）を用いてトラッキングされ得、それは移送進捗データを生成する。移送進捗データはセッション移送がどのステージに達したかを示す。移送開始プログラムは、セッションの移送が実行され、または中止されなければならない「移送タイムアウト時間」を特定する。移送タイムアウト時間の一部によって、移送進捗データが、シードコールが行われたステージにセッション移送が到達しなかったことを示すと、シードコールリクエストが生成される。
【００９５】
シードコールリクエストはソースインスタンスｉｎｓｔ２２のみならず、例えば移送開始プログラムによっても開始され得る。一実施例において、セッションを移送する要求した後に、移送開始プログラムがソースインスタンスｉｎｓｔ２２のＡＰＩ関数を呼び出し、移送進捗データを得る。移送イニシエータは、ある基準に基づいて、クライアントにシードコールリクエストを出すべきか否かを判断する。代替として、移送イニシエータは、セッションを移送するよう移送リクエストをした後自動的に、選択されたセッションのク
ライアントにシードコールリクエストを出すことができる。
【００９６】
回復可能性
透過的なセッション移送が進行する間、ソースインスタンスｉｎｓｔ２２、宛先インスタンスｉｎｓｔ２４およびクライアントｃｌ３０は移送ステージ間を遷移する。これらの移送ステージはセッション移送の進捗を表示し、トラッキングされ、報告され、移送進捗データを引き出すために用いられる。さらに、セッションのセッション移送中に障害が起り、回復動作の実行が必要となり得る。実行される特定の動作は、障害が起ったとき到達していた移送ステージに依存する。
【００９７】
図７は、セッション移送中、セッション移送に関与するものが遷移する、さまざまな移送ステージを示すステージ遷移図である。さまざまなイベントの発生またはある動作の完了によって、移送ステージ間での遷移が生じる。クライアント側ステージ７２はクライアントｃｌ３０の移送ステージに対応する一方で、サーバ側ステージ７３はマルチノードデータベースサーバｍｄｓ２０の移送ステージに対応する。
【００９８】
図７を参照すると、ステージＳＲＣ-ＮＯＲＭＡＬは、セッション移送の実行中ではないマルチノードデータベースサーバｍｄｓ２０に対応する、サーバ側ステージである。マルチノードデータベースサーバｍｄｓ２０は、セッションを移送するためのリクエストを受け取るまで、この移送ステージに留まる。このようなリクエストが受け取られると、マルチノードデータベースサーバｍｄｓ２０はステージＳＲＣ―ＳＥＬＥＣＴＥＤに遷移し、そこでマルチノードデータベースサーバｍｄｓ２０は選択メッセージ４を送信し、次にステージＳＲＣ―ＣＯＮＦＩＲＭＥＤ-ＳＥＬＥＣＴＥＤへ進む。
【００９９】
マルチノードデータベースサーバｍｄｓ２０は次に、移送チェックを実行する。一旦マルチノードデータベースサーバｍｄｓ２０が移送基準が満たされていると判断すると、マルチノードデータベースサーバｍｄｓ２０は、ステージＳＲＣ−ＲＥＡＤＹ−ＦＯＲ−ＰＲＥＰＡＲＥに遷移する。このステージ中、マルチノードデータベースサーバｍｄｓ２０はクライアントコールが傍受するのを待って、そのコールを用いてクライアントｃｌ３０に移送準備メッセージ４を送信する。一旦マルチノードデータベースサーバｍｄｓ２０が移送準備完了メッセージ７を受け取ると、マルチノードデータベースサーバｍｄｓ２０はステージＳＲＣ−ＰＲＥＰＡＲＥに遷移する。
【０１００】
ステージＳＲＣ―ＰＲＥＰＡＲＥの間、ソースインスタンスｉｎｓｔ２２はソースセッションのセッション状態をキャプチャして、移送接続を介して宛先インスタンスｉｎｓｔ２４にセッション状態のコピーを転送し、宛先インスタンスｉｎｓｔ２４はそれを宛先セッションのセッション状態に加える。マルチノードデータベースサーバｍｄｓ２０は、ソースセッション状態を完了した後、ステージＳＲＣ-ＲＥＡＤＹ-ＦＯＲ-ＳＷＩＴＣＨに遷移し、そこでソースインスタンスｉｎｓｔ２２がクライアントｃｌ３０にスイッチメッセージを送信する。ソースインスタンスｉｎｓｔ２２が、宛先セッションへの切り換えは成功したことを示す移送終了メッセージ９をクライアントｃｌ３０から受け取ると、マルチノードデータベースサーバｍｄｓ２０はステージＳＲＣ―ＳＷＩＴＣＨＥＤに遷移し、そこでソースセッションの終了を開始するなどの動作が実行される。
【０１０１】
ステージＳＲＣ―ＳＷＩＴＣＨＥＤの完了後、マルチノードデータベースサーバｍｄｓ２０は通常ステージａｃｌ８０に遷移する。
【０１０２】
クライアント側ステージ
サービス側ステージと同様に、クライアント側ステージはステージＣＬＮ―ＮＯＲＭＡＬを含み、このステージはセッション移送に関与中ではないクライアントｃｌ３０に対応
する。一旦クライアントｃｌ３０が選択メッセージ３を受け取ると、クライアントｃｌ３０はステージＣＬＮ-ＳＥＬＥＣＴＥＤに遷移する。クライアントｃｌ３０が移送準備メッセージ４を受け取ると、クライアントｃｌ３０はステージＣＬＮ-ＲＥＡＤＹ-ＦＯＲ-ＰＲＥＰＡＲＥに遷移する。このステージの間、クライアントｃｌ３０は宛先セッションの確立などの動作を実行し、宛先セッションのセッションパラメータを確立して、宛先インスタンスｉｎｓｔ２４から宛先準備完了メッセージ６を受け取る。一旦このメッセージが受け取られると、クライアントｃｌ３０はソースインスタンスｉｎｓｔ２２に移送準備完了メッセージ７を送信し、ステージＣＬＮ―ＰＲＥＰＡＲＥに遷移する。
【０１０３】
クライアントｃｌ３０が宛先準備完了メッセージ６を受け取ると、クライアントｃｌ３０はステージＣＬＮ−ＲＥＡＤＹ−ＦＯＲ−ＳＷＩＴＣＨに遷移し、クライアントｃｌ３０はスイッチングの完了が成功したことを示す移送終了メッセージ９をソースインスタンスｉｎｓｔ２２に送信する。クライアントｃｌ３０は次にステージＣＬＮ-ＳＷＩＴＣＨＥＤへ進み、クライアントはソースセッションの終了を要求するなどの動作を実行する。最後に、クライアントｃｌ３０はステージＣＬＮ-ＮＯＲＭＡＬに遷移する。
【０１０４】
回復
ソースセッションのセッション移送中、セッション移送を妨げるかまたは望ましくない完了を行うイベントが起り得る。このようなイベントは、本願明細書において「移送障害イベント」と称される。移送障害イベントが起ると、クライアントｃｌ３０およびマルチノードデータベースサーバｍｄｓ２０は、ステージＣＬＮ−ＦＡＩＬＵＲＥおよびＳＲＣ−ＦＡＩＬＵＲＥにそれぞれ遷移し、そこで回復動作が実行されて、試みられたセッション移送の全ての関与者が、セッション移送を完了することなく進行することを可能にする。実行される回復動作の特定の集合は、障害が起った特定の移送ステージに依存する。
【０１０５】
例えば、ｃｌ３０が移送準備メッセージ７を受け取った後、クライアントｃｌ３０は宛先インスタンスｉｎｓｔ２４上に宛先セッションを確立しようと試みるが、そうすることができない。このような障害イベントが起った場合、クライアントｃｌ３０はステージＣＬＮ−ＦＡＩＬＵＲＥに遷移する。ステージＣＬＮ−ＦＡＩＬＵＲＥの一部として、クライアントｃｌ３０は移送終了メッセージ９を送信し、メッセージ９はクライアントｃｌ３０および宛先インスタンスがセッション移送の一部を実行できないことを特定するデータを含み、具体的には、そのクライアントｃｌ３０が宛先セッションを確立することができないことを特定する。
【０１０６】
ソースインスタンスｉｎｓｔ２２が移送終了メッセージ９を受け取ると、ソースインスタンスｉｎｓｔ２２は移送障害イベントが起ったと判断する。ソースインスタンスｉｎｓｔ２２は、次にステージＣＬＮ−ＦＡＩＬＵＲＥに入る。このステージで、ソースインスタンスｉｎｓｔ２２は「移送不能データ」を生成することができ、これはソースセッションが移送のために選択されたが移送され得なかったことを示すデータである。データはまた、例えば、宛先セッションが確立されることができなかったなど、移送する試みに失敗したものの元になる理由または移送障害イベントを示し得る。移送不能データは、ソフトウェアおよび／または、移送のためのセッションを選択する役割があるプロセス、例えば作業負荷マネージャｗｍ２０のために有用であり得、それらによってアクセスされ得る。移送不能データが、セッションを移送しようとして成功しなかった試みが最近行われたことを示す場合、作業負荷マネージャｗｍ２０は、移送のためにセッションを選択することを先行することができる。
【０１０７】
最後にソースインスタンスｉｎｓｔ２２は、ソースインスタンスｉｎｓｔ２２がそこで失敗したセッション移送を試みた、クライアント側コールの実行を完了する。。マルチノードデータベースサーバｍｄｓ２０は次に再びステージＳＲＣ−ＮＯＲＭＡＬに入る。
【０１０８】
クライアント側コールが戻ると、クライアント側コールがアプリケーションコール内で実行していた、そのアプリケーションコールが戻る。クライアントｃｌ３０は次にステージＣＬＮ−ＦＡＩＬＵＲＥを去り、ステージＣＬＮ−ＮＯＲＭＡＬに入る。
【０１０９】
回復動作は、使われ、割り当てられ、および／または他の方法でセッション移送を実行するために確保されてもはや必要でなくなったリソースを解放することを伴い得る。
【０１１０】
例えば、マルチノードデータベースサーバｍｄｓ２０およびクライアントｃｌ３０がステージＳＲＣ−ＰＲＥＰＡＲＥにある間、ソースインスタンスｉｎｓｔ２２がデータベースコンポーネントがセッション状態を与え得ないことかまたは移送接続が失敗したことのいずれかを検出した場合、ソースインスタンスｉｎｓｔ２２はセッション状態をキャプチャしている。移送障害イベントが起ると、マルチノードデータベースサーバｍｄｓ２０はステージＳＲＣ−ＦＡＩＬＵＲＥに入る。ソースインスタンスｉｎｓｔ２２は移送接続を閉じ、試みられたセッション移送を実行する目的で用いられたメモリ（例えばコンポーネントセッション状態を転送する前にキャプチャされたコンポーネントセッション状態を格納したメモリなど）の割当てを解除する。ソースインスタンスｉｎｓｔ２２は、スイッチメッセージ８を送るのではなく、クライアントｃｌ３０に「移送中止」メッセージを送信してセッション移送が中止されることを示す。メッセージは、試みられたセッション移送がその中で実行されているクライアントコールの出力パラメータを介して送信される。ソースインスタンスｉｎｓｔ２２がクライアントコールの実行を完了すると、マルチノードデータベースサーバｍｄｓ２０は次にステージＳＲＣ−ＮＯＲＭＡＬに入る。
【０１１１】
クライアントｃｌ３０がメッセージを受け取ると、クライアントｃｌ３０は宛先セッションを終了する。この動作は、宛先セッションに割り当てられていたメモリを解放する。クライアントｃｌ３０は、終了された宛先セッションを用いず、ソースセッションｓｅｓｓ３０を用い続ける。
【０１１２】
拡張可能なセッションコンポーネントフレームワーク
データベースコンポーネントの使用は、セッション移送に対する拡張可能なフレームワークを可能にする。データベースコンポーネントの開発および計画的な実行を容易にするので、フレームワークは拡長可能である。
【０１１３】
図７は、一実施例による拡長可能なデータベースコンポーネントフレームワークの特徴を示すブロック図である。図７は、データベースコンポーネント６０、登録関数ｒｆ８０、およびアクティブコンポーネントリストａｃｌ８０を示す。
【０１１４】
登録関数ｒｆ８０は、動的にハンドル名を登録するためにデータベースコンポーネントによって呼び出されるデータベースサーバの関数である。ハンドルは、データベースサーバがデータベースコンポーネントインターフェイスの関数を呼び出すことを可能にする。例えばハンドル名は、ポインタおよび／またはオブジェクト参照であり得る。
【０１１５】
所与のセッションのために、全てのデータベースコンポーネントが必要である、または用いられるわけではない。例えばセッションのクライアントは、例えばＰＬ／ＳＱＬまたはＪａｖａ（登録商標）の実行を要求するリクエストは決してすることができない。データベースインスタンスが、データベースコンポーネントがセッションのため必要であると判断すると、データベースインスタンスはデータベースコンポーネントを呼び出す。この呼出しはデータベースコンポーネントにセッションのための初期化動作を実行させ、それは登録関数ｒｆ８０を呼び出して、入力パラメータとしてハンドル名に渡すことを含む。データベースサーバは次に、アクティブコンポーネントリストａｃｌ８０にエントリを加
える。エントリは、データベースコンポーネントをセッションのアクティブなデータベースコンポーネントとして特定する。
【０１１６】
データベースサーバ上の所与のセッションのために、データベースサーバはアクティブコンポーネントリストａｃｌ８０を維持し、アクティブコンポーネントリストａｃｌ８０はセッションのためのアクティブなデータベースコンポーネントを特定し、それぞれのハンドル名を含む。特定のセッションを移送するために、データベースサーバはアクティブデータベースコンポーネントのみを処理し、すなわち、移送境界をチェックし、セッションについてアクティブなデータベースコンポーネントのみのデータベースコンポーネントセッション状態を移送する。
【０１１７】
図７に示されるのは、データベースコンポーネントインターフェイス内に含まれ得る追加的関数である。関数ＩｓＲｅａｄｙＴｏＭｉｇｒａｔｅ（）、ＧｅｔＳｔａｔｅ()、ＳｅｔＳｔａｔｅ（）に加えて、データベースコンポーネントインターフェイスは関数Ｍｉｇｒａｔｉｏｎ−Ｅｎａｂｌｅｄ（）およびＭｉｇｒａｔｉｏｎＣｏｓｔ（）を含む。
【０１１８】
関数Ｍｉｇｒａｔｉｏｎ−Ｅｎａｂｌｅｄ（）は、特定のデータベースコンポーネントについて、コンポーネントセッション状態が別のサーバに移送されることが可能か否かについて示すデータを返す。一実施例において、いくつかのデータベースコンポーネントは、コンポーネントセッション状態の移送をサポートするために必要な開発をされることができなかった。
【０１１９】
ＭｉｇｒａｔｉｏｎＣｏｓｔ（）関数は、コンポーネントを移送することのコストを示すデータを返す。一実施例において、セッションを移送するコストがコスト関連の移送基準を満たすことを確実にするよう、移送チェックが実行され得る。特定のデータベースコンポーネントのコンポーネントセッション状態を移送するための個々のコストがこのような移送基準を破る場合、またはコンポーネントセッション状態を移送するための総体的なコストがこのような移送基準を破る場合、選択されたセッションは移送されない。加えて関数は、移送するセッションをコストに基づいて選択するために用いられ得る、コストデータを提供し得る。
【０１２０】
データベースコンポーネント開発の専門家への委任
データベースコンポーネントは非常に複雑であり得る。データベースコンポーネントの開発および保守についての責任は、通常、責任の遂行に必要なトレーニングおよび経験を有するエキスパート開発者の専門チームに任される。コンポーネントセッション状態をキャプチャし、ロードするソフトウェアもまた、非常に複雑である。その開発は、データベースコンポーネントがその得意領域に該当するような開発チームによって最も効果的に実行される。
【０１２１】
データベースコンポーネントインターフェイスは、この開発努力を、サブタスクを効果的に実行する開発チームに割り当てられ得るようなサブタスクに分割することを可能にする。特定のデータベースコンポーネントを専門とする開発チームがそのコンポーネントを開発するために割り当てられ、コンポーネントがインターフェイスをサポートし、セッションがデータベースコンポーネントに関して移送境界にあるか否か判断し、コンポーネントセッション状態をキャプチャしてロードすることを可能にする。さらに、複雑なデータベースコンポーネントを取扱う必要なくセッション移送プロトコルを実現するソフトウェアモジュールを開発するために、開発チームが割り当てられ得る。このように、セッション移送ソフトウェアの開発は、より効果的に、効率的に実行され得る。
【０１２２】
移送対応データベースコンポーネント開発の計画的な実行
移送対応データベースコンポーネントの開発が計画的に実行され得る。セッション移送がマルチノードデータベースサーバまたは何らかのレベルのサーバに設けられる前に、全てのデータベースコンポーネントが移送対応である必要はない。以前に発表されたデータベースサーバ製品においては、データベースコンポーネントのあるサブセットしか移送対応である必要はない。いくつかのセッション、すなわち移送対応ではないアクティブデータベースコンポーネントを有するものが移送され得ない一方で、他のセッションは移送され得る。後に発表されたものでは、より多くのデータベースコンポーネントが移送対応であり、より広い範囲の環境においてセッションが移送され得る。
【０１２３】
移送チェックが実行される際、選択されたセッションが移送対応でないアクティブデータベースコンポーネントを有するか否かについてチェックが実行され得る。選択されたセッションが移送対応でないアクティブデータベースコンポーネントを有することを検出すると、移送障害イベントとして処理され得る。
【０１２４】
他の実施例
本発明の一実施例が、多層システムの単一層のマルチノードデータベースサーバのリソースを動的に割り当てることによって示された。しかしながら、本発明の一実施例は、データベースサーバ内または多層システムの単一層内でセッションを移送することに限られない。
【０１２５】
例えば、本発明の一実施例は多層システムの複数の層においてセッションを移送するのに用いられ得、システムは、マルチノードデータベースサーバを第１の層に含み、マルチノードアプリケーションサーバを第２の層に含み、アプリケーションサーバはデータベースサーバに関してクライアントであり、ネットワークを介してアプリケーションサーバに接続するブラウザはアプリケーションサーバに関してクライアントである。データベースサーバが主にアプリケーションサーバのためのデータベースを格納し、アクセスを提供するために用いられる一方、アプリケーションサーバは主にアプリケーションコードを格納し、アクセスを与え、実行するために用いられる。透過的なセッション移送が用いられることができ、セッションがデータベースサーバ上のインスタンス間で移送されるのと同様の方法で、アプリケーションのインスタンス間でセッションを移送し得る。アプリケーションサーバの例は、オラクル９ｉアプリケーションサーバ（Oracle 9i Application Server）またはオラクル１０ｇアプリケーションサーバ（Oracle 10g Application Server）である。
【０１２６】
セッション移送を動的バランスセッションおよびサーバ間作業負荷に限定するものは、いずれも透過的セッション移送ではない。例えば、計画されたダウンタイムの間サーバがダウンされることを可能にするために、またはサーバが提供された後に利用可能になったとき、セッションを別のサーバに動かすためにセッションがサーバから移送され得る。
【０１２７】
ハードウェア概観
図９は、本発明の一実施例が実現され得るコンピュータシステム９００を示すブロック図である。コンピュータシステム９００は、バス９０２または情報を通信するための他の通信機構と、バス９０２に結合されて情報を処理するためのプロセッサ９０４とを含む。コンピュータシステム９００はまた、バス９０２に結合されて、プロセッサ９０４によって実行される命令および情報を格納するためのメインメモリ９０６、たとえばランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置をも含む。メインメモリ９０６は、プロセッサ９０４によって実行される命令の実行中に、一時的変数または他の中間情報を格納するためにも用いられ得る。コンピュータシステム９００は、バス９０２に結合されてプロセッサ９０４に対する静的情報および命令を格納するための読出専用メモリ（ＲＯＭ）９０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光学ディスクなどの記
憶装置９１０が設けられてバス９０２に結合され、情報および命令を格納する。
【０１２８】
コンピュータシステム９００は、コンピュータユーザに情報を表示するための表示部９１２、たとえば陰極線管（ＣＲＴ）に、バス９０２を介して結合され得る。英数字キーおよび他のキーを含む入力装置９１４がバス９０２に結合されて、情報およびコマンド選択をプロセッサ９０４に通信する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ９０４に通信して表示部９１２上のカーソル動作を制御するための、カーソル制御機器９１６、たとえばマウス、トラックボール、またはカーソル方向キーである。この入力装置は一般に、２つの軸、すなわち第１の軸（x等）および第２の軸（y等）において２自由度を有し、これによって入力装置は平面上で位置を特定できる。
【０１２９】
本発明は、本願明細書に記載された技術を実現するためにコンピュータシステム９００を用いることに関する。本発明の一実施例によると、これらの技術は、メインメモリ９０６に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ９０４が実行することに応答して、コンピュータシステム９００により実行される。このような命令は、別のコンピュータ読取可能な媒体、たとえば記憶装置９１０等からメインメモリ９０６内に読出すことができる。メインメモリ９０６に含まれる命令のシーケンスを実行することにより、プロセッサ９０４に本願明細書に記載された処理のステップを実行させる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せた結線回路を用いて、本発明を実施することができる。したがって、本発明の実施例は、ハードウェア回路およびソフトウェアのいかなる特定の組合せにも限定されない。
【０１３０】
本願明細書で用いられる「コンピュータ読取可能な媒体」という用語は、プロセッサ９０４に対して実行のために命令を提供することにかかわるあらゆる媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形態をとり得るが、これらに限定されない。不揮発性媒体には記憶装置９１０等の光学または磁気ディスクが含まれる。揮発性媒体にはメインメモリ９０６等のダイナミックメモリが含まれる。伝送媒体には、同軸ケーブル、銅線、光ファイバ、およびバス９０２を構成するワイヤを含む。伝送媒体は、電波および赤外線データ通信の際に生成されるもの等の音波または光波の形をとり得る。
【０１３１】
コンピュータ読取可能な媒体の一般的な形態には、たとえばフロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光学媒体、パンチカード、紙テープ、孔パターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップもしくはカートリッジ、以下に述べる搬送波、またはコンピュータが読出すことのできる任意の他の媒体が含まれる。
【０１３２】
プロセッサ９０４に対して実行のために１つ以上の命令の１つ以上のシーケンスを運ぶ際に、さまざまな形態のコンピュータ読取可能な媒体が関与し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクで運ばれ得る。遠隔コンピュータはそれらの命令をそれ自体のダイナミックメモリにロードして、それらの命令をモデムを用いて電話回線経由で送信することができる。コンピュータシステム９００に対してローカルなモデムが電話回線上のデータを受信して、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線検出器が赤外線信号によって運ばれたデータを受信し得、適切な回路がそのデータをバス９０２上に出力することができる。バス９０２はそのデータをメインメモリ９０６に運び、そこからプロセッサ９０４が命令を取り出して実行する。メインメモリ９０６が受信した命令は、プロセッサ９０４による実行前または実行後のいずれかに、記憶装置９１０に任意に格納され得る。
【０１３３】
コンピュータシステム９００は、バス９０２に結合された通信インターフェイス９１８も含む。通信インターフェイス９１８は、ローカルネットワーク９２２に接続されたネットワークリンク９２０に対する双方向のデータ通信結合をもたらす。たとえば通信インターフェイス９１８は、対応する種類の電話回線に対するデータ通信接続を与えるためのサービス統合デジタルネットワーク（ＩＳＤＮ）カードまたはモデムであり得る。別の例として、通信インターフェイス９１８は、互換性を有するローカルエリアネットワーク（ＬＡＮ）にデータ通信接続を設けるためのＬＡＮカードであり得る。無線リンクもまた実現することができる。このようなどの実現例においても、通信インターフェイス９１８は、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ、電気的、電磁的、または光学的信号を送受信する。
【０１３４】
ネットワークリンク９２０は一般に、１つ以上のネットワーク経由で他のデータ装置に対するデータ通信をもたらす。たとえば、ネットワークリンク９２０は、ローカルネットワーク９２２を介してホストコンピュータ９２４またはインターネットサービスプロバイダ（Internet Service Provider）（ＩＳＰ）９２６によって運営されるデータ装置に接続をもたらすことができる。ＩＳＰ９２６は次いで、現在一般に「インターネット」９２８と呼ばれるワールドワイドパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク９２２およびインターネット９２８はともに、デジタルデータストリームを運ぶ電気的、電磁的、または光学的信号を用いる。さまざまなネットワークを経由する信号と、ネットワークリンク９２０上の、コンピュータシステム９００との間でデジタルデータを運ぶ通信インターフェイス９１８経由の信号とは、情報を運搬する搬送波の例示的形態である。
【０１３５】
コンピュータシステム９００は、ネットワーク、ネットワークリンク９２０、および通信インターフェイス９１８を介してメッセージを送信し，プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ９３０は、インターネット９２８、ＩＳＰ９２６、ローカルネットワーク９２２および通信インターフェイス９１８経由でアプリケーションプログラムに対して要求されたコードを送信することができる。
【０１３６】
受信されたコードは、受信されたときにプロセッサ９０４によって実行され得、および／または後の実行のために記憶装置９１０もしくは他の不揮発性記憶装置に格納され得る。この態様で、コンピュータシステム９００は搬送波の形でアプリケーションコードを得ることができる。
【０１３７】
上述の明細書では、本発明の実施例を実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、本発明が何であるか、および出願人が発明として意図したのは何であるかを示す唯一独占的なものが、この出願から特有の形態で発生する請求項の組であって、そこでこのような請求項は以降のあらゆる補正を含む。このような請求項に含まれる用語に対して本願明細書で明示された任意の定義は、請求項で用いられている通りにこのような用語の意味を支配するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲をいかなる意味でも限定してはならない。したがって、本願明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
【図面の簡単な説明】
【０１３８】
【図１】コンピュータシステムのための多層アーキテクチャのブロック図である。
【図２】本発明の一実施例による、本発明の一実施例が実現され得るマルチノードコンピュータシステムを示すブロック図である。
【図３】本発明の一実施例による、セッションの移送に関与するクライアント、ソースデータベースインスタンスおよび宛先データベースインスタンスを示すブロック図である。
【図４】本発明の一実施例による、サーバ間でセッションを移送するためのプロトコルを示すエンティティ対話の図である。
【図５】本発明の一実施例による、セッションを移送するか否かを判断するための移送基準およびその使用を示すブロック図である。
【図６】図６は、本発明の一実施例によればセッションの一部のセッション状態を使用するデータベースコンポーネントを示すブロック図である。
【図７】図７は、本発明の一実施例による、セッション移送のステージを示すステージ遷移図である。
【図８】図８は、本発明の一実施例によれば、セッションのセッション状態をキャプチャし、ロードする役割があるデータベースコンポーネントのための拡張可能なフレームワークのさまざまなコンポーネントを示す図である。
【図９】図９は、本発明の実施例を実行するために用い得るコンピュータシステムのブロック図である。
【図１】
2007511807.tif 000003
【図２】
2007511807.tif 000004
【図３】
2007511807.tif 000005
【図４】
2007511807.tif 000006
【図５】
2007511807.tif 000007
【図６】
2007511807.tif 000008
【図７】
2007511807.tif 000009
【図８】
2007511807.tif 000010
【図９】
2007511807.tif 000011
【手続補正書】
【提出日】平成17年11月8日(2005.11.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータで実現可能なステップを含む方法であって、
あるセッションをマルチノードシステムのクライアントのために確立するためのリクエストを受け取るステップと、
前記あるセッションとして前記マルチノードシステムの第１のノード上の第１のセッションを確立するステップと、
１つ以上の移送基準が満たされているか否かを判断するステップとを含み、
１つ以上の移送基準が満たされているか否かを判断するステップは、前記第１のセッション状態の１つ以上の部分が別のノード上の別のセッションへ移送され得るか否かを判断するステップを含み、
前記１つ以上の移送基準が満たされている場合は、次に、
前記第１のセッションの第１のセッション状態を、前記第１のノードから第２のノード上の第２のセッションへ転送するステップと、
前記マルチノードシステム上の前記クライアントのための前記あるセッションとして前記第２のセッションを確立するステップとを含む、方法。
【請求項２】
第１のセッション状態を転送する前記ステップは、
前記第１のノードが前記第１のセッション状態の一部のコピーを生成し、格納するステップと、
前記第１のノードおよび前記第２のノード間に確立された接続を介して、前記第１のセッション状態の一部のコピーを前記第２のノードに送るステップとを含む、請求項１に記載の方法。
【請求項３】
前記１つ以上の移送基準は、前記第１のセッションに関連付けられるトランザクションが終了したか否かに基づく、請求項１に記載の方法。
【請求項４】
前記第１のノード上で実行される複数のソフトウェアコンポーネントの各コンポーネントは、前記第１のセッション状態の前記１つ以上の部分の各部分にアクセスし、
前記１つ以上の移送基準が満たされるか否かを判断する前記ステップは、前記複数のコンポーネントの各コンポーネントについて、前記各コンポーネントの関数を呼び出すステップを含み、前記関数は、前記第１のセッション状態の前記各部分が別のノードへ転送され得るか否かを示す値を返し、
前記１つ以上の移送基準は、前記複数のコンポーネントの各コンポーネントの前記関数によって返される値に基づく、請求項１に記載の方法。
【請求項５】
前記クライアントに前記第２のセッションを生成させるために第１のメッセージをクライアントに送るステップと、
前記クライアントが、前記第２のセッションが生成されたことを示す第２のメッセージを前記第１のノードに送るステップと、
前記第２のメッセージを受け取ることに応答して、前記第１のノードが第１のセッション状態の転送を開始するステップとをさらに含む、請求項３に記載の方法。
【請求項６】
前記第２のメッセージは前記第２のノードに接続を確立するための接続データを含み、
第１のセッション状態を転送するステップは、前記接続を介して前記第１のセッション状態を転送するステップを含む、請求項５に記載の方法。
【請求項７】
前記第１のノードから前記第１のメッセージを受け取ることに応答して、前記クライアントが、前記第２のセッションを生成するためのあるリクエストを前記第２のノードに送信するステップと、
前記第２のセッションを生成した後、
前記第２のノードが、前記第１のノードへの接続のためのポートを確立するステップと、
前記第２のノードが、前記ポートへの接続を確立するための接続データを含むメッセージを前記クライアントに送信するステップとをさらに含む、請求項５に記載の方法。
【請求項８】
前記クライアントが前記ポートへの前記接続を確立するための前記接続データのコピーを含むメッセージを前記第２のノードに送信するステップと、
前記接続データのコピーを含む前記メッセージを受け取ることに応答して、前記第１のノードが前記接続データに基づいて接続を確立し、第１のセッション状態を転送する前記ステップを開始するステップとをさらに含む、請求項７に記載の方法。
【請求項９】
前記第１のセッション状態を転送した後、前記クライアントに前記第２のセッションを前記あるセッションとして使用させるために第３のメッセージを前記クライアントに送るステップとをさらに含む、請求項５に記載の方法。
【請求項１０】
前記第１のセッションを前記第２のノードに移送するためのリクエストを受け取るステップをさらに含む、請求項１に記載の方法。
【請求項１１】
前記第１のセッションを移送する進捗をトラッキングするステップと、
前記第１のセッションを移送する前記進捗および時間に基づいて、
前記第１のセッションの移送を中止するステップと、
前記第１のセッションの移送が試みられ、失敗したことを示すデータを生成するステップをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記クライアントはコンピュータに存在してアプリケーションを実行し、
前記アプリケーションは、前記マルチノードシステムに存在するサーバと対話するためにインターフェイスコンポーネントを呼び出し、
前記アプリケーションは前記サーバにコールを行い、
第１のセッション状態を転送するステップと、前記第２のセッションを前記あるセッションとして確立するステップとは、前記コール内で実行される、請求項１に記載の方法。
【請求項１３】
前記第１のノードが、前記第１のセッションを前記第２のノードに移送するためのリクエストを受け取るステップと、
ある時間が経過したと判断した後、前記第１のノードが前記クライアントに前記第２のノード上でホストされるサーバへのコールを行なわせるステップと、
第１のセッション状態を転送する前記ステップと、前記第２のセッションを前記あるセッションとして確立する前記ステップとは、前記コール内で実行される、請求項１に記載の方法。
【請求項１４】
第１のセッション状態を転送する前記ステップと、前記第２のセッションを確立する前記ステップとは、前記第１のセッションを前記第２のノードに移送する動作として実行され、
移送障害イベントを検出することに応答して、前記ステップはさらに、
前記第１のセッションの移送を中止するステップと、
前記第1のセッションを移送するために割り当てられたリソースを放棄するステップと、
前記第１のセッションの移送が試みられ、失敗したこと示すデータを生成するステップとを含む、請求項１に記載の方法。
【国際調査報告】
2007511807.tif 000012
2007511807.tif 000013
2007511807.tif 000014