(57)【特許請求の範囲】
【請求項１】
コンピュータに、
所定の順序で行われる複数の処理を含む、記憶装置を用いたデータベースの起動処理の際に、前記複数の処理それぞれの実行に応じて、前記記憶装置が有する所定の記憶領域に、前記コンピュータを示す識別情報と前記コンピュータにおける前記複数の処理の進行状況を示す進行情報とを記憶させ、
前記複数の処理それぞれの完了に応じて、前記所定の記憶領域を参照し、前記識別情報および前記進行情報の記憶状況に基づいて前記起動処理を続行するか否か判定する、
処理を実行させる起動制御プログラム。
【請求項２】
前記起動処理を続行するか否かは、前記所定の記憶領域に、他のコンピュータを示す他の識別情報が記憶されているか否か、および、前記複数の処理のうち前記コンピュータにおいて未実行の処理を示す他の進行情報が記憶されているか否かに基づいて判定する、
請求項１記載の起動制御プログラム。
【請求項３】
前記所定の記憶領域に前記他の識別情報および前記他の進行情報が記憶されている場合、前記起動処理を続行するか否かは、更に、前記所定の記憶領域に記憶された時刻情報が更新されているか否かに基づいて判定する、
請求項２記載の起動制御プログラム。
【請求項４】
前記起動処理を続行すると判定してから、前記複数の処理のうち前記コンピュータで次に実行される処理に対応する前記進行情報を前記所定の記憶領域に記憶させる前に、所定時間以上経過したことを検出した場合、前記起動処理を続行するか否か再判定する、
請求項１乃至３の何れか一項に記載の起動制御プログラム。
【請求項５】
前記所定の記憶領域に前記識別情報および前記進行情報を記憶させた後、前記複数の処理のうち前記進行情報に対応する処理が開始される前に、前記所定の記憶領域を参照し、前記識別情報の記憶状況に基づいて前記起動処理を続行するか否か判定する、
請求項１乃至４の何れか一項に記載の起動制御プログラム。
【請求項６】
前記記憶装置は、前記所定の記憶領域と異なる複数の他の記憶領域を有し、
前記複数の処理それぞれは、前記複数の他の記憶領域のうち当該処理に対応する他の記憶領域にアクセスすることを含む、
請求項１乃至５の何れか一項に記載の起動制御プログラム。
【請求項７】
コンピュータが実行する起動制御方法であって、
所定の順序で行われる複数の処理を含む、記憶装置を用いたデータベースの起動処理の際に、前記複数の処理それぞれの実行に応じて、前記記憶装置が有する所定の記憶領域に、前記コンピュータを示す識別情報と前記コンピュータにおける前記複数の処理の進行状況を示す進行情報とを記憶させ、
前記複数の処理それぞれの完了に応じて、前記所定の記憶領域を参照し、前記識別情報および前記進行情報の記憶状況に基づいて前記起動処理を続行するか否か判定する、
起動制御方法。
【請求項８】
データベースの起動を制御する起動制御装置であって、
前記データベースに用いられる記憶装置にアクセスするインタフェースと、
所定の順序で行われる複数の処理を含む前記データベースの起動処理の際に、前記複数の処理それぞれの実行に応じて、前記記憶装置が有する所定の記憶領域に、前記起動制御装置を示す識別情報と前記起動制御装置における前記複数の処理の進行状況を示す進行情報とを記憶させ、前記複数の処理それぞれの完了に応じて、前記所定の記憶領域を参照し、前記識別情報および前記進行情報の記憶状況に基づいて前記起動処理を続行するか否か判定する制御部と、
を有する起動制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は起動制御プログラム、起動制御方法および起動制御装置に関する。
【背景技術】
【０００２】
データベースシステムには、クライアント装置がデータを使用したい任意の時点でデータにアクセスできるという高い可用性が要求されることがある。データベースシステムの可用性を高める１つの方法として、検索や更新などのデータ処理を行うサーバ装置で障害が発生する場合に備えて、サーバ装置を冗長化しておくことが考えられる。冗長化された複数のサーバ装置は、データが記憶された共通の記憶装置に接続される。正常時には、何れか１つのサーバ装置がＤＢＭＳ（Database Management System）などのデータ管理ソフトウェアを起動し、記憶装置にアクセスしてデータ処理を行う。当該１つのサーバ装置に障害（例えば、ハードウェアの故障）が発生すると、他の１つのサーバ装置がデータ管理ソフトウェアを起動し、記憶装置にアクセスしてデータ処理を引き継ぐ。
【０００３】
ここで、複数のサーバ装置が共通の記憶装置に同時期にアクセスすると（特に、同時期にデータを更新しようとすると）、記憶装置のデータが破壊されてしまうことがある。このため、データベースシステムは、複数のサーバ装置が同時期にデータ管理ソフトウェアを起動しないよう制御することが好ましい。起動制御に関しては、例えば、各サーバ装置にクラスタ管理ソフトウェアを搭載しておき、クラスタ管理ソフトウェアを用いて、複数のサーバ装置の間で互いにデータ管理ソフトウェアの起動を監視する方法が考えられる。１つのサーバ装置でデータ管理ソフトウェアが実行中であるときは、他のサーバ装置のクラスタ管理ソフトウェアはデータ管理ソフトウェアの起動を抑止する。
【０００４】
なお、データを二重化するために一方のディスク媒体から他方のディスク媒体へデータをコピーしている間であっても、外部からのデータへのアクセスを許容する二重化記憶装置が提案されている。この二重化記憶装置は、新規データが到着すると、２つのディスク媒体の両方に新規データを書き込む。新規データの書き込みが行われていないとき、二重化記憶装置は、一方のディスク媒体から他方のディスク媒体へデータをコピーする。この二重化記憶装置は、フラグを記憶する共有テーブルをディスク媒体の外に設け、共有テーブルを用いて書き込み処理とコピー処理との間の衝突を回避する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−３４４２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、一部のサーバ装置に対して保守などの作業を行うときは、クラスタ管理ソフトウェアを一時的に停止させる場合がある。クラスタ管理ソフトウェアを停止させると、誤って複数のサーバ装置でデータ管理ソフトウェアが重複起動されるリスクが高くなる。そこで、重複起動を抑止する他の方法を用意しておくことが好ましい。
【０００７】
重複起動を抑止する他の方法としては、共通の記憶装置にフラグを格納しておくことも考えられる。例えば、各サーバ装置は、データ管理ソフトウェアを起動しようとするとき、記憶装置に格納されたフラグを確認する。サーバ装置は、フラグがＯＦＦであればＯＮに書き換えてデータ管理ソフトウェアを起動する一方、フラグが既にＯＮであればデータ管理ソフトウェアの起動を抑止することが考えられる。
【０００８】
しかし、データベースシステムにおける記憶装置へのアクセスでは、排他ロックを獲得することが難しい場合がある。例えば、記憶装置へのアクセスには、アクセス性能を向上させるために、ＯＳ（Operating System）がデータをキャッシュしてブロック単位で転送するブロック転送方式ではなく、データをバイト単位で直接転送するＲＡＷデバイス方式を用いることがある。ＲＡＷデバイス方式では、記憶装置へのアクセスにＯＳの排他ロック機構は利用されない。また、異なるＯＳを実行している複数のサーバ装置の間で排他ロックを実現する場合、サーバ装置間で通信を行って連携することになる。
【０００９】
排他ロックを獲得せずに共通の記憶装置に格納されたフラグにアクセスする場合、複数のサーバ装置からのアクセスのタイミングによっては、それら複数のサーバ装置がそれぞれデータ管理ソフトウェアを起動可能と誤判断してしまう可能性がある。すなわち、共通の記憶装置に単純なフラグを格納しておくだけでは、複数のサーバ装置によるデータベースの起動処理の重複実行を抑止できない場合があるという問題がある。
【００１０】
１つの側面では、本発明は、データベースの起動処理の重複実行を抑止する起動制御プログラム、起動制御方法および起動制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、コンピュータに以下の処理を実行させる起動制御プログラムが提供される。所定の順序で行われる複数の処理を含む、記憶装置を用いたデータベースの起動処理の際に、複数の処理それぞれの実行に応じて、記憶装置が有する所定の記憶領域に、コンピュータを示す識別情報とコンピュータにおける複数の処理の進行状況を示す進行情報とを記憶させる。複数の処理それぞれの完了に応じて、所定の記憶領域を参照し、識別情報および進行情報の記憶状況に基づいて起動処理を続行するか否か判定する。
【００１２】
また、１つの態様では、コンピュータが実行する起動制御方法が提供される。
また、１つの態様では、データベースの起動を制御する起動制御装置であって、インタフェースと制御部とを有する起動制御装置が提供される。インタフェースは、データベースに用いられる記憶装置にアクセスする。制御部は、所定の順序で行われる複数の処理を含むデータベースの起動処理の際に、複数の処理それぞれの実行に応じて、記憶装置が有する所定の記憶領域に、起動制御装置を示す識別情報と起動制御装置における複数の処理の進行状況を示す進行情報とを記憶させる。制御部は、複数の処理それぞれの完了に応じて、所定の記憶領域を参照し、識別情報および進行情報の記憶状況に基づいて起動処理を続行するか否か判定する。
【発明の効果】
【００１３】
１つの側面では、データベースの起動処理の重複実行を抑止できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理システムの例を示す図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】サーバ装置のハードウェア例を示すブロック図である。
【図４】サーバ装置の機能例を示すブロック図である。
【図５】タイムスタンプテーブルの例を示す図である。
【図６】起動制御情報の例を示す図である。
【図７】起動停止制御の手順例を示すフローチャートである。
【図８】起動停止制御の手順例を示すフローチャート（続き）である。
【図９】複数のサーバ装置による起動処理の第１の例を示す図である。
【図１０】複数のサーバ装置による起動処理の第２の例を示す図である。
【図１１】複数のサーバ装置による起動処理の第３の例を示す図である。
【図１２】複数のサーバ装置による起動処理の第４の例を示す図である。
【図１３】複数のサーバ装置による起動処理の第５の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムの例を示す図である。
【００１６】
第１の実施の形態の情報処理システムは、起動制御装置１０，１０ａおよび記憶装置２０を有する。起動制御装置１０，１０ａは、データベースの起動を制御する。起動制御装置１０，１０ａは、ハードウェアの故障やソフトウェアの不具合などの障害に備えて、冗長構成としたものである。起動制御装置１０，１０ａは、サーバコンピュータであってもよい。記憶装置２０は、データを記憶する不揮発性の記憶装置である。記憶装置２０として、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を用いることができる。記憶装置２０は、起動制御装置１０，１０ａの両方に接続されている。
【００１７】
起動制御装置１０は、インタフェース１１および制御部１２を有する。インタフェース１１は、記憶装置２０にアクセスする。インタフェース１１と記憶装置２０とは、例えば、ファイバケーブルなどのケーブルで接続される。制御部１２は、起動制御装置１０におけるデータベースの起動処理１３を制御する。起動処理１３は、所定の順序で行われる処理１３ａ，１３ｂ，１３ｃを含む。処理１３ａが完了すると処理１３ｂが開始され、処理１３ｂが完了すると処理１３ｃが開始される。処理１３ａ，１３ｂ，１３ｃそれぞれは、例えば、記憶装置２０に記憶された当該処理に対応する種類のデータにアクセスする。
【００１８】
制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、例えば、ＲＡＭ（Random Access Memory）などのメモリに記憶された起動制御プログラムを実行する。なお、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。起動制御装置１０ａも、起動制御装置１０と同様のハードウェアを用いて実現できる。
【００１９】
ここで、起動制御装置１０と起動制御装置１０ａとが同時期に記憶装置２０にアクセスする（特に、同時に記憶装置２０にデータを書き込む）と、記憶装置２０のデータが破壊されるおそれがある。そこで、制御部１２は、以下に説明するように、起動制御装置１０，１０ａの両方でデータベースが重複起動しないように制御する。このとき、起動制御装置１０と起動制御装置１０ａとは、通信によって直接連携をとらなくてもよい。起動制御装置１０ａにおいても、起動制御装置１０と同様の起動制御が行われる。
【００２０】
起動制御装置１０で起動処理１３を実行する場合、制御部１２は、処理１３ａ，１３ｂ，１３ｃそれぞれの実行に応じて、記憶装置２０の中のデータ記憶領域以外の所定の記憶領域２１に、識別情報２２および進行情報２３を記憶させる。識別情報２２は、起動制御装置１０を識別する。識別情報２２としては、起動制御装置１０ａの識別情報と重複しない可能性が高いものを使用することが好ましい。例えば、識別情報２２として、ＭＡＣ（Medium Access Control）アドレスなどの通信アドレスを使用する。進行情報２３は、起動制御装置１０における処理１３ａ，１３ｂ，１３ｃの進行状況を示す。例えば、起動制御装置１０が処理１３ａを開始する場合、進行情報２３は処理１３ａを示す。
【００２１】
起動処理１３が処理１３ｂを開始する場合、制御部１２は、進行情報２３として、処理１３ａを示す情報を処理１３ｂを示す情報で上書きしてもよいし、処理１３ａを示す情報を残して処理１３ｂを示す情報を追記してもよい。起動制御装置１０ａでも起動処理１３が実行される場合、識別情報２２に代えてまたは識別情報２２を残して、起動制御装置１０ａを示す識別情報が記憶領域２１に格納され得る。また、進行情報２３に代えてまたは進行情報２３を残して、起動制御装置１０ａにおける起動処理１３の進行状況を示す進行情報が記憶領域２１に格納され得る。記憶領域２１へのアクセスには、排他ロックは使用されない。よって、起動制御装置１０が起動処理１３を実行しているとき、任意のタイミングで起動制御装置１０ａが記憶領域２１にアクセスする可能性がある。
【００２２】
制御部１２は、処理１３ａ，１３ｂ，１３ｃそれぞれの完了に応じて、記憶領域２１を参照し、識別情報２２および進行情報２３の記憶状況に基づいて、起動制御装置１０で起動処理１３を続行するか否か判定する。起動処理１３を続行すると判定した場合、制御部１２は、識別情報２２および次の処理を示す進行情報２３を記憶領域２１に記憶させ、当該次の処理を開始する。起動処理１３を続行するか否かは、起動制御装置１０ａでも起動処理１３が実行されている可能性を考慮して判定される。
【００２３】
例えば、記憶領域２１に起動制御装置１０ａを示す識別情報が記憶されていない場合が考えられる。この場合、制御部１２は、起動制御装置１０ａで起動処理１３が実行されていないと判断し、起動処理１３を続行すると判定する。また、例えば、記憶領域２１に起動制御装置１０ａを示す識別情報が記憶され、かつ、起動制御装置１０が次に行う処理より前の処理を示す進行情報が記憶されている場合が考えられる。この場合、制御部１２は、起動制御装置１０を優先させることが好ましいと判断し、起動処理１３を続行すると判定する。また、例えば、記憶領域２１に起動制御装置１０ａを示す識別情報が記憶され、かつ、起動制御装置１０が次に行う処理またはそれより後の処理を示す進行情報が既に記憶されている場合が考えられる。この場合、制御部１２は、起動制御装置１０ａを優先させることが好ましいと判断し、起動処理１３を続行しないと判定する。
【００２４】
第１の実施の形態の情報処理システムによれば、処理１３ａ，１３ｂ，１３ｃそれぞれの実行に応じて、起動制御装置１０を示す識別情報２２と起動制御装置１０における処理の進行状況を示す進行情報２３とが記憶される。そして、処理１３ａ，１３ｂ，１３ｃそれぞれの完了に応じて、記憶領域２１の識別情報２２と進行情報２３の記憶状況に基づいて、起動制御装置１０で起動処理１３を続行するか否か判定される。
【００２５】
これにより、各起動制御装置は他の起動制御装置において起動処理１３が実行されているか判断でき、起動制御装置１０，１０ａがデータベースを重複起動することを抑止できる。よって、起動制御装置１０，１０ａが記憶装置２０のデータに同時にアクセスすることを抑止し、記憶装置２０のデータが破壊されることを抑止できる。
【００２６】
また、処理１３ａ，１３ｂ，１３ｃそれぞれが完了したときに記憶領域２１が参照されるため、記憶領域２１へのアクセスに排他ロックを用いなくても、他の起動制御装置の動作を見過ごしてしまう可能性を低減できる。よって、排他ロックのコストを削減でき、記憶領域２１へのアクセスを効率化できる。また、進行情報２３に基づいて起動処理１３を続行するか否か判定されるため、例えば、先に進んでいる方の起動制御装置の起動処理１３を優先させ、遅れている方の起動制御装置の起動処理１３を停止させることができる。よって、起動処理１３が競合したときでもデータベースを早く起動できる。
【００２７】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムの例を示す図である。
第２の実施の形態の情報処理装置は、クライアント装置３１、サーバ装置１００，１００ａおよびストレージ装置２００を有する。クライアント装置３１およびサーバ装置１００，１００ａは、ネットワーク３０に接続されている。ネットワーク３０は、インターネットなどの広域ネットワークを含んでもよく、ＬＡＮ（Local Area Network）を含んでもよい。ストレージ装置２００は、サーバ装置１００，１００ａの両方に接続されている。
【００２８】
なお、サーバ装置１００は、第１の実施の形態の起動制御装置１０の一例である。サーバ装置１００ａは、第１の実施の形態の起動制御装置１０ａの一例である。ストレージ装置２００は、第１の実施の形態の記憶装置２０の一例である。
【００２９】
クライアント装置３１は、サーバ装置１００，１００ａにアクセスするクライアントコンピュータである。クライアント装置３１は、ユーザが操作する端末装置でもよい。クライアント装置３１は、サーバ装置１００，１００ａによって管理されるデータを取得または更新するとき、ネットワーク３０を介してサーバ装置１００，１００ａの何れかに要求メッセージを送信する。要求メッセージの送信先は、ＤＢＭＳを実行しているサーバ装置であり、クライアント装置３１が予め検出しておく。クライアント装置３１は、要求したデータまたは更新結果を含む応答メッセージを、ネットワーク３０を介して受信する。
【００３０】
サーバ装置１００，１００ａは、データベースを管理するサーバコンピュータである。サーバ装置１００，１００ａは、データベースサーバと呼ぶこともできる。サーバ装置１００，１００ａは、ハードウェアの故障やソフトウェアの停止などの障害に備えて、冗長構成となっている。すなわち、正常時には、サーバ装置１００，１００ａの何れか一方のみがＤＢＭＳを実行し、ストレージ装置２００を用いたデータベースを管理する。ＤＢＭＳを実行していたサーバ装置に障害が発生すると、他方のサーバ装置がＤＢＭＳを起動し、ストレージ装置２００を用いたデータベースの管理を引き継ぐ。
【００３１】
ＤＢＭＳを実行中のサーバ装置は、クライアント装置３１から、データの取得または更新を示す要求メッセージを受信することがある。データ取得の要求メッセージを受信した場合、当該サーバ装置は、ストレージ装置２００の中から要求されたデータを検索し、検索されたデータを含む応答メッセージをクライアント装置３１に返信する。データ更新の要求メッセージを受信した場合、当該サーバ装置は、ストレージ装置２００のデータを更新し、更新の成否を示す応答メッセージをクライアント装置３１に返信する。
【００３２】
ストレージ装置２００は、データを記憶する不揮発性の記憶装置である。ストレージ装置２００としては、例えば、ＨＤＤやＳＳＤなどを用いることができる。ストレージ装置２００とサーバ装置１００，１００ａそれぞれとは、ファイバケーブルなどのケーブルで接続されている。サーバ装置１００，１００ａとストレージ装置２００との間のデータ転送は、データをブロック単位ではなくバイト単位で直接転送するＲＡＷデバイス方式によって行われる。サーバ装置１００，１００ａは、独立にストレージ装置２００にアクセスできる。サーバ装置１００からのアクセスとサーバ装置１００ａからのアクセスとが競合する場合であっても、排他ロックによる排他制御は行われない。よって、サーバ装置１００，１００ａから同時に書き込みが発生すると、データが破壊されるおそれがある。
【００３３】
図３は、サーバ装置のハードウェア例を示すブロック図である。
サーバ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７，１０８を有する。上記のユニットは、それぞれバス１０９に接続されている。なお、ＣＰＵ１０１は、第１の実施の形態の制御部１２の一例である。通信インタフェース１０８は、第１の実施の形態のインタフェース１１の一例である。
【００３４】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、サーバ装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００３５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３６】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、データベースの起動を制御する起動制御プログラムが含まれる。なお、サーバ装置１００は、フラッシュメモリやＳＳＤなどの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、サーバ装置１００に接続されたディスプレイ４１に画像を出力する。ディスプレイ４１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００３８】
入力信号処理部１０５は、サーバ装置１００に接続された入力デバイス４２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス４２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、サーバ装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３９】
媒体リーダ１０６は、記録媒体４３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体４３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体４３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４０】
通信インタフェース１０７は、ネットワーク３０に接続され、クライアント装置３１やサーバ装置１００ａと通信を行う。通信インタフェース１０７は、例えば、ＬＡＮケーブルを用いてスイッチなどの中継装置と接続される。通信インタフェース１０８は、ストレージ装置２００に接続されている。通信インタフェース１０８とストレージ装置２００との間の接続には、例えば、ファイバケーブルが用いられる。
【００４１】
なお、サーバ装置１００は、媒体リーダ１０６を備えていなくてもよく、ユーザが操作する端末装置から制御可能である場合には画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。また、ディスプレイ４１や入力デバイス４２が、サーバ装置１００の筐体と一体に形成されていてもよい。サーバ装置１００ａも、サーバ装置１００と同様のハードウェア構成によって実現することができる。
【００４２】
図４は、サーバ装置の機能例を示すブロック図である。
サーバ装置１００は、データベース管理部１１０、制御情報記憶部１２０およびクラスタ管理部１３０を有する。データベース管理部１１０およびクラスタ管理部１３０は、例えば、ＣＰＵ１０１を用いて実行されるソフトウェアのモジュールとして実装することができる。制御情報記憶部１２０は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現することができる。サーバ装置１００ａも、サーバ装置１００と同様に、データベース管理部、制御情報記憶部およびクラスタ管理部を有する。
【００４３】
データベース管理部１１０は、データベースの機能を提供する。データベース管理部１１０は、例えば、ＤＢＭＳなどのデータ管理ソフトウェアとして実装できる。データベース管理部１１０は、起動停止部１１１およびクエリ処理部１１２を有する。
【００４４】
起動停止部１１１は、サーバ装置１００においてデータベース管理部１１０を起動する。また、起動停止部１１１は、実行されているデータベース管理部１１０を停止させる。データベース管理部１１０を起動する契機としては、例えば、サーバ装置１００の電源がＯＮになったとき、所定の日時になったとき、ユーザから起動コマンドが入力されたとき、サーバ装置１００ａに障害が発生したときなどが考えられる。データベース管理部１１０を停止させる契機としては、例えば、サーバ装置１００の電源をＯＦＦにするとき、所定の日時になったとき、ユーザから停止コマンドが入力されたときなどが考えられる。
【００４５】
クエリ処理部１１２は、クライアント装置３１から受信した要求メッセージに応じたデータ処理を実行する。データ処理の要求は、所定の言語で記述されたクエリとして表現される。データ取得のクエリに対して、クエリ処理部１１２は、ストレージ装置２００からデータを検索し、検索したデータを含む応答メッセージをクライアント装置３１に送信する。データ更新のクエリに対して、クエリ処理部１１２は、ストレージ装置２００にデータを書き込み、書き込み結果を示す応答メッセージをクライアント装置３１に送信する。
【００４６】
制御情報記憶部１２０は、データベース管理部１１０が使用する制御情報を記憶する。制御情報記憶部１２０に記憶される制御情報には、後述するタイムスタンプテーブルが含まれる。タイムスタンプテーブルは、データベースの起動処理の中で使用される。
【００４７】
クラスタ管理部１３０は、サーバ装置１００，１００ａのクラスタ構成を管理する。クラスタ管理部１３０は、サーバ装置１００ａのクラスタ管理部と通信を行い、サーバ装置１００，１００ａの何れか一方のみでデータベース管理部１１０が実行されるように制御する。サーバ装置１００ａでデータベース管理部が起動済みである場合、クラスタ管理部１３０は、データベース管理部１１０の起動を抑止する。サーバ装置１００ａで障害が発生すると、クラスタ管理部１３０は、起動停止部１１１に起動を指示する。
【００４８】
第２の実施の形態では、障害発生時のサーバ装置１００，１００ａの間の切り替えを迅速に行うため、サーバ装置１００，１００ａの両方の電源をＯＮにしておく。サーバ装置１００，１００ａではそれぞれ、電源がＯＮである間、原則としてクラスタ管理部が実行される。ただし、サーバ装置１００，１００ａの少なくとも一方に対してソフトウェアのアップデートなどの保守作業を行うとき、クラスタ管理部を一時的に停止することがある。例えば、サーバ装置１００を現用系として使用しつつ、サーバ装置１００ａに対して保守作業を行う場合、サーバ装置１００で障害が発生しても、サーバ装置１００ａに現用系が切り替わるのを回避したいことがある。その場合、ユーザ操作により、サーバ装置１００，１００ａのクラスタ管理部を一時的に停止しておくことが考えられる。
【００４９】
ストレージ装置２００は、制御情報記憶部２１０、辞書記憶部２２０、更新ログ記憶部２３０およびデータ記憶部２４０を有する。制御情報記憶部２１０、辞書記憶部２２０、更新ログ記憶部２３０およびデータ記憶部２４０は、例えば、ストレージ装置２００が備えるＨＤＤに確保した記憶領域として実現することができる。なお、制御情報記憶部２１０は、第１の実施の形態の記憶領域２１の一例である。
【００５０】
制御情報記憶部２１０は、サーバ装置１００，１００ａのデータベース管理部が使用する制御情報を記憶する。制御情報記憶部２１０として、辞書記憶部２２０、更新ログ記憶部２３０およびデータ記憶部２４０が使用する記憶領域以外の所定の記憶領域を用いる。制御情報記憶部２１０に記憶される制御情報には、後述する起動制御情報が含まれる。起動制御情報は、サーバ装置１００，１００ａによるデータベースの起動処理の中で使用されるものであり、起動処理の重複実行を抑止するために用いられる。サーバ装置１００，１００ａから制御情報記憶部２１０へのアクセスには、排他ロックは用いられない。
【００５１】
辞書記憶部２２０は、ストレージ装置２００に記憶されたデータの構造を示す辞書情報を記憶する。辞書情報は、データベースの設計時に予めユーザによって作成されている。データベースが関係データベース（ＲＤＢ：Relational Database）である場合、辞書情報は、関係テーブルに含まれるカラムの名称、データ型、データ長、一意制約、非ＮＵＬＬ制約、デフォルト値など、関係テーブルの定義を示す。
【００５２】
更新ログ記憶部２３０は、データ記憶部２４０に対するデータの書き込みの履歴を示す更新ログを記憶する。更新ログには、データ記憶部２４０にデータが書き込まれる前に、その書き込みの内容（例えば、更新対象のレコードへのポインタ、更新前の値、更新後の値など）を示すレコードが書き込まれる。データ記憶部２４０へのデータの書き込みが完了する前に、サーバ装置１００，１００ａおよびストレージ装置２００の少なくとも１つが異常停止することで、データベースが異常停止することが発生し得る。この場合、データ記憶部２４０に記憶されたデータの完全性が失われる可能性がある。そこで、更新ログ記憶部２３０に記憶された更新ログを用いて、データベースが復旧される。
【００５３】
データ記憶部２４０は、データベースのデータを記憶する。データベースがＲＤＢである場合、データ記憶部２４０は、辞書記憶部２２０に記憶された辞書情報によって定義された１または２以上の関係テーブルを記憶する。関係テーブルは、１または２以上のカラムを含み、１または２以上のタプル（レコード）を含む。
【００５４】
ところで、起動停止部１１１によって実行されるデータベースの起動処理には、更新ログ記憶部２３０に記憶された更新ログを確認し、データ記憶部２４０に記憶されたデータを更新ログに基づいて復旧することが含まれる。第２の実施の形態では、起動処理は３つのステージを含む。３つのステージは、ストレージ装置２００の３つの記憶領域、すなわち、辞書記憶部２２０、更新ログ記憶部２３０およびデータ記憶部２４０に対応する。
【００５５】
ステージ０は、辞書記憶部２２０から辞書情報を読み出すことを含む。ステージ１は、更新ログ記憶部２３０から更新ログを読み出すことを含む。ステージ２は、読み出した辞書情報および更新ログを参照して、データ記憶部２４０に記憶されたデータを更新することを含む。例えば、起動停止部１１１は、更新ログが示すデータ書き込みの履歴のうちデータ記憶部２４０に未反映のものを、データ記憶部２４０に対して反映させる。
【００５６】
データベースの起動処理では、まずステージ０が開始され、ステージ０が完了するとステージ１が開始され、ステージ１が完了するとステージ２が開始される。ステージ２が完了すると、データベースの起動処理が完了したことになる。ステージ０およびステージ１は、例えば、起動停止部１１１が数秒〜１０秒程度で行うことができる。ステージ２は、例えば、起動停止部１１１が数十秒程度で行うことができる。
【００５７】
前述のように、起動停止部１１１がデータベースの起動処理を行うとき、クラスタ管理部１３０が一時的に停止していることがある。そこで、起動停止部１１１は、クラスタ管理部１３０が停止していてもデータベースを重複して起動しないよう、起動処理の間、制御情報記憶部２１０に記憶された起動制御情報を適宜参照する。
【００５８】
具体的には、起動停止部１１１は、ステージ０を開始する前に、起動制御情報の読み出し（Ｒｅａｄ＃０Ａ）、更新（Ｗｒｉｔｅ＃０）、再読み出し（Ｒｅａｄ＃０Ｂ）を順に行う。１回目の読み出しでは起動処理を続行するか否か判定され、２回目の読み出しではサーバ装置１００ａからのアクセスの割り込みが判定される。同様に、起動停止部１１１は、ステージ１を開始する前に、起動制御情報の読み出し（Ｒｅａｄ＃１Ａ）、更新（Ｗｒｉｔｅ＃１）、再読み出し（Ｒｅａｄ＃１Ｂ）を順に行う。また、起動停止部１１１は、ステージ２を開始する前に、起動制御情報の読み出し（Ｒｅａｄ＃２Ａ）、更新（Ｗｒｉｔｅ＃２）、再読み出し（Ｒｅａｄ＃２Ｂ）を順に行う。
【００５９】
図５は、タイムスタンプテーブルの例を示す図である。
タイムスタンプテーブル１２１は、サーバ装置１００の制御情報記憶部１２０に記憶されている。タイムスタンプテーブル１２１には、データベースの起動処理の実行中、起動処理の中の複数の通過点それぞれと対応付けて通過時刻が記録される。タイムスタンプテーブル１２１は、起動処理の開始時または終了時に初期化されてもよい。サーバ装置１００ａの制御情報記憶部にも、同様のタイムスタンプテーブルが記憶されている。
【００６０】
通過点には、ステージ０の直前について、Ｒｅａｄ＃０Ａを開始した時点、Ｒｅａｄ＃０Ａを終了した時点、Ｗｒｉｔｅ＃０を開始した時点、Ｗｒｉｔｅ＃０を終了した時点、Ｒｅａｄ＃０Ｂを開始した時点、Ｒｅａｄ＃０Ｂを終了した時点が含まれる。同様に、通過点には、ステージ１の直前について、Ｒｅａｄ＃１Ａを開始した時点、Ｒｅａｄ＃１Ａを終了した時点、Ｗｒｉｔｅ＃１を開始した時点、Ｗｒｉｔｅ＃１を終了した時点、Ｒｅａｄ＃１Ｂを開始した時点、Ｒｅａｄ＃１Ｂを終了した時点が含まれる。また、通過点には、ステージ２の直前について、Ｒｅａｄ＃２Ａを開始した時点、Ｒｅａｄ＃２Ａを終了した時点、Ｗｒｉｔｅ＃２を開始した時点、Ｗｒｉｔｅ＃２を終了した時点、Ｒｅａｄ＃２Ｂを開始した時点、Ｒｅａｄ＃２Ｂを終了した時点が含まれる。
【００６１】
図６は、起動制御情報の例を示す図である。
起動制御情報２１１は、ストレージ装置２００の制御情報記憶部２１０に記憶されている。起動制御情報２１１は、タイムスタンプ、ＭＡＣアドレスおよびステージ情報の項目を有する。タイムスタンプは、起動制御情報２１１が最後に更新された時刻を示す。ＭＡＣアドレスは、サーバ装置１００，１００ａのうち、起動制御情報２１１を最後に更新したサーバ装置を示す。ステージ情報は、起動制御情報２１１を最後に更新したサーバ装置が更新時点で次に実行しようとしていた処理を示す。
【００６２】
ステージ情報は、例えば、ＯＦＦ、ステージ０、ステージ１、ステージ２、完了の何れかの値をとる。「ＯＦＦ」は、サーバ装置１００，１００ａの何れにおいてもデータベースが起動していないことを示す。「ステージ０」は、起動制御情報２１１を最後に更新したサーバ装置がステージ０を開始したことを示す。「ステージ１」は、最後に更新したサーバ装置がステージ１を開始したことを示す。「ステージ２」は、最後に更新したサーバ装置がステージ２を開始したことを示す。「完了」は、最後に更新したサーバ装置が起動処理を完了したこと、すなわち、ステージ２を完了したことを示す。
【００６３】
なお、第２の実施の形態では、サーバ装置１００，１００ａを識別する識別情報として、ＭＡＣアドレスを使用している。ホスト名は、ユーザがサーバ装置１００，１００ａに対して任意に設定する名称であり、サーバ装置１００とサーバ装置１００ａの間で重複するリスクがある。ＩＰ（Internet Protocol）アドレスは、クラスタ化の分野では仮想ＩＰアドレスが使用されることがあるため、サーバ装置１００とサーバ装置１００ａの間で重複するリスクがある。一方、ＭＡＣアドレスは、原則として通信インタフェースに設定された物理アドレスであり、重複する可能性が小さい。
【００６４】
図７は、起動停止制御の手順例を示すフローチャートである。
以下では、サーバ装置１００においてデータベースの起動処理を行う場合を考える。サーバ装置１００ａでも、図７と同様の処理が実行され得る。
【００６５】
（Ｓ１０）起動停止部１１１は、ストレージ装置２００の制御情報記憶部２１０から起動制御情報２１１を読み出す（Ｒｅａｄ＃ｎＡ）。ここで、ｎは次に実行するステージの番号を示し、ｎ＝０，１，２の何れかである。データベースの起動処理を開始したときはｎ＝０であり、次にｎ＝１に進み、最後にｎ＝２に進む。
【００６６】
（Ｓ１１）起動停止部１１１は、起動制御情報２１１に含まれるステージ情報がＯＦＦであるか判断する。ステージ情報がＯＦＦである場合、サーバ装置１００，１００ａの何れにおいてもデータベースが起動済みでなく起動中でもない。この場合、サーバ装置１００が起動処理を実行可能とし、ステップＳ１６に処理が進む。ステージ情報がＯＦＦ以外の場合、サーバ装置１００，１００ａの少なくとも一方において、データベースが起動済みかまたは起動中である。この場合、ステップＳ１２に処理が進む。
【００６７】
（Ｓ１２）起動停止部１１１は、起動制御情報２１１に含まれるＭＡＣアドレスがサーバ装置１００のＭＡＣアドレスであるか判断する。サーバ装置１００のＭＡＣアドレスである場合、起動制御情報２１１を前回更新してから、サーバ装置１００ａにおいて起動処理が進行していない。この場合、サーバ装置１００が起動処理を進行可能とし、ステップＳ１６に処理が進む。サーバ装置１００のＭＡＣアドレスでない場合（サーバ装置１００ａのＭＡＣアドレスである場合）、サーバ装置１００ａにおいてデータベースが起動済みかまたは起動中である。この場合、ステップＳ１３に処理が進む。
【００６８】
（Ｓ１３）起動停止部１１１は、起動制御情報２１１に含まれるステージ情報が、サーバ装置１００で次に開始するステージよりも前のステージを示しているか、すなわち、サーバ装置１００の方がサーバ装置１００ａよりもステージが進んでいるか判断する。サーバ装置１００の方がステージが進んでいる場合、サーバ装置１００の起動処理をサーバ装置１００ａの起動処理よりも優先させ、ステップＳ１６に処理が進む。サーバ装置１００の方がステージが進んでいると言えない場合、ステップＳ１４に処理が進む。
【００６９】
（Ｓ１４）起動停止部１１１は、サーバ装置１００ａが異常停止している可能性を考慮し、一定時間（例えば、３分程度）待って、制御情報記憶部２１０から起動制御情報２１１を再度読み出す（ステップＳ１０のＲｅａｄ＃ｎＡを再実行する）。
【００７０】
（Ｓ１５）起動停止部１１１は、ステップＳ１４で読み出した起動制御情報２１１に含まれるタイムスタンプが、ステップＳ１０で読み出したときから更新されているか判断する。タイムスタンプが更新されている場合、サーバ装置１００ａが正常に動作していると判断され、ステップＳ２７に処理が進む。タイムスタンプが更新されていない場合、サーバ装置１００ａが異常停止していると判断され、ステップＳ１６に処理が進む。
【００７１】
（Ｓ１６）起動停止部１１１は、直近のＲｅａｄ＃ｎＡ（ステップＳ１０またはステップＳ１４）を実行してから、一定時間超えたか判断する。この一定時間は、サーバ装置１００ａがステージ０，１の実行に要する時間相当とし、例えば、数秒〜１０秒程度とする。直近のＲｅａｄ＃ｎＡを行った時刻は、タイムスタンプテーブル１２１から検索できる。直近のＲｅａｄ＃ｎＡから一定時間超えた場合、サーバ装置１００ａによって起動制御情報２１１が更新されている可能性があるため、ステップＳ１０に処理が進む。直近のＲｅａｄ＃ｎＡから一定時間以内である場合、ステップＳ１７に処理が進む。
【００７２】
（Ｓ１７）起動停止部１１１は、制御情報記憶部２１０に記憶された起動制御情報２１１を更新する（Ｗｒｉｔｅ＃ｎ）。このとき、起動停止部１１１は、タイムスタンプとして現在時刻を書き込み、起動制御情報２１１のＭＡＣアドレスとしてサーバ装置１００のＭＡＣアドレスを書き込み、ステージ情報としてステージｎを書き込む。ステージｎは、サーバ装置１００が次に実行しようとするステージである。
【００７３】
（Ｓ１８）起動停止部１１１は、サーバ装置１００ａからのアクセスの割り込みを考慮して、制御情報記憶部２１０から起動制御情報２１１を読み出す（Ｒｅａｄ＃ｎＢ）。
（Ｓ１９）起動停止部１１１は、ステップＳ１８で読み出した起動制御情報２１１に含まれるＭＡＣアドレスが、サーバ装置１００のＭＡＣアドレスであるか判断する。サーバ装置１００のＭＡＣアドレスである場合、ステップＳ２０に処理が進む。サーバ装置１００のＭＡＣアドレスでない場合（サーバ装置１００ａのＭＡＣアドレスである場合）、ステップＳ１７のＷｒｉｔｅ＃ｎからステップＳ１８のＲｅａｄ＃ｎＢの間に、サーバ装置１００ａによって起動制御情報２１１が更新されている。この場合、サーバ装置１００ａの起動処理を優先させると判断され、ステップＳ２７に処理が進む。
【００７４】
図８は、起動停止制御の手順例を示すフローチャート（続き）である。
（Ｓ２０）起動停止部１１１は、起動処理のステージｎを実行する。ステージ０の場合、起動停止部１１１は、ストレージ装置２００の辞書記憶部２２０から辞書情報を読み出す。ステージ１の場合、起動停止部１１１は、ストレージ装置２００の更新ログ記憶部２３０から更新ログを読み出す。ステージ２の場合、起動停止部１１１は、辞書情報と更新ログに基づいて、ストレージ装置２００のデータ記憶部２４０のデータを更新する。
【００７５】
（Ｓ２１）起動停止部１１１は、起動処理の全てのステージが完了したか、すなわち、ステップＳ２０でステージ２が実行されたか判断する。全てのステージが完了した場合、ステップＳ２２に処理が進む。未完了のステージが存在する場合、次のステージに進むため、ｎを１だけ進めてステップＳ１０に処理が進む。
【００７６】
（Ｓ２２）起動停止部１１１は、制御情報記憶部２１０に記憶された起動制御情報２１１を更新する。このとき、起動停止部１１１は、タイムスタンプとして現在時刻を書き込み、起動制御情報２１１のＭＡＣアドレスとしてサーバ装置１００のＭＡＣアドレスを書き込み、ステージ情報として「完了」を書き込む。
【００７７】
（Ｓ２３）起動停止部１１１は、データベース管理部１１０を停止させるか判断する。データベース管理部１１０を停止させる契機としては、例えば、ユーザから停止コマンドが入力されたときなどが挙げられる。データベース管理部１１０を停止させる場合はステップＳ２６に処理が進み、それ以外の場合はステップＳ２４に処理が進む。
【００７８】
（Ｓ２４）起動停止部１１１は、ステップＳ２２，Ｓ２５において起動制御情報２１１を前回更新してから、一定時間（例えば、１分）経過したか判断する。一定時間経過した場合はステップＳ２５に処理が進み、それ以外の場合はステップＳ２３に処理が進む。
【００７９】
（Ｓ２５）起動停止部１１１は、制御情報記憶部２１０に記憶された起動制御情報２１１を更新する。このとき、起動停止部１１１は、タイムスタンプとして現在時刻を書き込む。ＭＡＣアドレスとステージ情報は、起動制御情報２１１に書き込んでもよいし書き込まなくてもよい。そして、ステップＳ２３に処理が進む。
【００８０】
（Ｓ２６）起動停止部１１１は、起動制御情報２１１を初期化する。例えば、起動停止部１１１は、起動制御情報２１１のタイムスタンプとＭＡＣアドレスの項目を空欄にし、ステージ情報を「ＯＦＦ」に更新する。そして、起動停止制御が終了する。
【００８１】
（Ｓ２７）起動停止部１１１は、以降のステージの実行をキャンセルし、保守モードでデータベース管理部１１０を起動する。保守モードでは、原則としてストレージ装置２００に対する書き込みが抑止される。クエリ処理部１１２は、クライアント装置３１から受信した要求メッセージを処理しないようにしてもよい。ただし、データベース管理部１１０は、ユーザから入力された管理用コマンドに基づいて、ストレージ装置２００からの読み出しやストレージ装置２００への書き込みを行うことは可能である。
【００８２】
図９は、複数のサーバ装置による起動処理の第１の例を示す図である。
第１の例では、サーバ装置１００のみが起動処理を実行する場合を考える。
サーバ装置１００は、データベースの起動処理を開始すると、ステージ０を開始する前にＲｅａｄ＃０Ａを実行する（Ｓ１１０）。ステージ情報が「ＯＦＦ」であることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃０を実行する（Ｓ１１１）。ここでは、タイムスタンプを「１２：００：０２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ０」に書き換える。次に、サーバ装置１００は、Ｒｅａｄ＃０Ｂを実行し、ＭＡＣアドレスが更新されていないことを確認する（Ｓ１１２）。すると、サーバ装置１００は、ステージ０を開始する（Ｓ１１３）。
【００８３】
ステージ０が完了すると、サーバ装置１００は、ステージ１を開始する前にＲｅａｄ＃１Ａを実行する（Ｓ１１４）。ＭＡＣアドレスがサーバ装置１００のものであることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃１を実行する（Ｓ１１５）。ここでは、タイムスタンプを「１２：００：０７」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ１」に書き換える。次に、サーバ装置１００は、Ｒｅａｄ＃１Ｂを実行し、ＭＡＣアドレスが更新されていないことを確認する（Ｓ１１６）。すると、サーバ装置１００は、ステージ１を開始する（Ｓ１１７）。
【００８４】
ステージ１が完了すると、サーバ装置１００は、ステージ２を開始する前にＲｅａｄ＃２Ａを実行する（Ｓ１１８）。ＭＡＣアドレスがサーバ装置１００のものであることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃２を実行する（Ｓ１１９）。ここでは、タイムスタンプを「１２：００：１２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ２」に書き換える。次に、サーバ装置１００は、Ｒｅａｄ＃２Ｂを実行し、ＭＡＣアドレスが更新されていないことを確認する（Ｓ１２０）。すると、サーバ装置１００は、ステージ２を開始する（Ｓ１２１）。
【００８５】
ステージ２が完了すると、サーバ装置１００は、起動制御情報２１１を更新する（Ｓ１２２）。ここでは、タイムスタンプを「１２：００：３２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「完了」に書き換える。以降、サーバ装置１００は、定期的に（例えば、１分間隔で）タイムスタンプを書き換える（Ｓ１２３，Ｓ１２４）。データベースを停止する場合、サーバ装置１００は、起動制御情報２１１を初期化する（Ｓ１２５）。ここでは、ステージ情報を「ＯＦＦ」に書き換える。
【００８６】
図１０は、複数のサーバ装置による起動処理の第２の例を示す図である。
第２の例では、サーバ装置１００ａが起動処理を開始した時点で、サーバ装置１００の起動処理が先に進んでいることが明らかである場合を考える。
【００８７】
サーバ装置１００は、Ｒｅａｄ＃０Ａを実行する（Ｓ１３０）。ステージ情報が「ＯＦＦ」であることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃０を実行する（Ｓ１３１）。ここでは、タイムスタンプを「１２：００：０２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ０」に書き換える。サーバ装置１００は、Ｒｅａｄ＃０Ｂを実行し（Ｓ１３２）、ステージ０を開始する（Ｓ１３３）。
【００８８】
ステージ０が完了すると、サーバ装置１００は、Ｒｅａｄ＃１Ａを実行する（Ｓ１３４）。ＭＡＣアドレスがサーバ装置１００のものであることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃１を実行する（Ｓ１３５）。ここでは、タイムスタンプを「１２：００：０７」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ１」に書き換える。Ｗｒｉｔｅ＃１の直後、サーバ装置１００ａがデータベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ１３６）。
【００８９】
サーバ装置１００ａは、ＭＡＣアドレスがサーバ装置１００ａのものでなく、ステージ情報が「ステージ１」であるため、Ｗｒｉｔｅ＃０を実行しない。サーバ装置１００ａは、Ｒｅａｄ＃０Ａを再実行してタイムスタンプが更新されていることを確認した上で、ステージ０，１，２をキャンセルし、保守モードで起動する。一方、サーバ装置１００は、Ｒｅａｄ＃１Ｂを実行し、ＭＡＣアドレスが更新されていないことを確認する（Ｓ１３７）。すると、サーバ装置１００は、ステージ１を開始する（Ｓ１３８）。
【００９０】
ステージ１が完了すると、サーバ装置１００は、Ｒｅａｄ＃２Ａを実行する（Ｓ１３９）。ＭＡＣアドレスがサーバ装置１００のものであることを確認すると、サーバ装置１００は、Ｗｒｉｔｅ＃２を実行する（Ｓ１４０）。ここでは、タイムスタンプを「１２：００：１２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ２」に書き換える。サーバ装置１００は、Ｒｅａｄ＃２Ｂを実行し（Ｓ１４１）、ステージ２を開始する（Ｓ１４２）。ステージ２が完了すると、サーバ装置１００は、起動制御情報２１１を更新する（Ｓ１４３）。ここでは、タイムスタンプを「１２：００：３２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「完了」に書き換える。
【００９１】
このように、サーバ装置１００ａが起動処理を開始した時点で、サーバ装置１００の起動処理が先に進んでいる場合、サーバ装置１００ａの起動処理がキャンセルされる。
図１１は、複数のサーバ装置による起動処理の第３の例を示す図である。
【００９２】
第３の例では、サーバ装置１００が先に起動処理を開始したものの、サーバ装置１００ａがサーバ装置１００の起動処理を途中で追い抜いた場合を考える。
サーバ装置１００は、データベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ１５０）。サーバ装置１００に続いて、サーバ装置１００ａもデータベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ１５１）。起動制御情報２１１に対するアクセスには排他ロックは使用されないため、サーバ装置１００とサーバ装置１００ａの両方が、ステージ情報が「ＯＦＦ」であると認識することになる。
【００９３】
すると、サーバ装置１００は、Ｗｒｉｔｅ＃０を実行する（Ｓ１５２）。ここでは、タイムスタンプを「１２：００：０２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「ステージ０」に書き換える。サーバ装置１００は、Ｒｅａｄ＃０Ｂを実行し（Ｓ１５３）、ステージ０を開始する（Ｓ１５４）。一方、サーバ装置１００ａも、ステージ情報が「ＯＦＦ」であると認識しているため、Ｗｒｉｔｅ＃０を実行する（Ｓ１５５）。ここでは、タイムスタンプを「１２：００：０３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ０」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃０Ｂを実行し（Ｓ１５６）、ステージ０を開始する（Ｓ１５７）。
【００９４】
サーバ装置１００ａは、ステージ０が完了すると、Ｒｅａｄ＃１Ａを実行する（Ｓ１５８）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃１を実行する（Ｓ１５９）。ここでは、タイムスタンプを「１２：００：０８」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ１」に書き換える。一方、サーバ装置１００は、ステージ０が完了すると、Ｒｅａｄ＃１Ａを実行する（Ｓ１６０）。サーバ装置１００は、ＭＡＣアドレスがサーバ装置１００のものでなく、ステージ情報が「ステージ１」であるため、Ｗｒｉｔｅ＃１を実行しない。サーバ装置１００は、Ｒｅａｄ＃１Ａを再実行してタイムスタンプが更新されていることを確認した上で、ステージ１，２をキャンセルし、保守モードで起動する。サーバ装置１００ａは、Ｒｅａｄ＃１Ｂを実行し（Ｓ１６１）、ステージ１を開始する（Ｓ１６２）。
【００９５】
ステージ１が完了すると、サーバ装置１００ａは、Ｒｅａｄ＃２Ａを実行する（Ｓ１６３）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃２を実行する（Ｓ１６４）。ここでは、タイムスタンプを「１２：００：１３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ２」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃２Ｂを実行し（Ｓ１６５）、ステージ２を開始する（Ｓ１６６）。ステージ２が完了すると、サーバ装置１００ａは、起動制御情報２１１を更新する（Ｓ１６７）。ここでは、タイムスタンプを「１２：００：３３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「完了」に書き換える。
【００９６】
このように、起動制御情報２１１に対して排他ロックを使用しないため、サーバ装置１００とサーバ装置１００ａの両方がステージ情報＝「ＯＦＦ」を読み出し、ステージ０を開始してしまう可能性がある。しかし、サーバ装置１００，１００ａは、ステージが１つ完了する毎に起動制御情報２１１を参照して、サーバ装置１００，１００ａで起動処理が重複して進行していることを検出できる。よって、サーバ装置１００，１００ａの何れか一方のみでデータベースが起動することを担保できる。
【００９７】
図１２は、複数のサーバ装置による起動処理の第４の例を示す図である。
第４の例では、サーバ装置１００が起動制御情報２１１を読み出してから更新するまでの遅延が大きく、その間にサーバ装置１００ａが割り込んだ場合を考える。
【００９８】
サーバ装置１００は、データベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ１７０）。サーバ装置１００に続いて、サーバ装置１００ａもデータベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ１７１）。起動制御情報２１１に対するアクセスには排他ロックは使用されないため、サーバ装置１００とサーバ装置１００ａの両方が、ステージ情報が「ＯＦＦ」であると認識することになる。
【００９９】
サーバ装置１００ａは、ステージ情報が「ＯＦＦ」であるため、Ｗｒｉｔｅ＃０を実行する（Ｓ１７２）。ここでは、タイムスタンプを「１２：００：０３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ０」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃０Ｂを実行し（Ｓ１７３）、ステージ０を開始する（Ｓ１７４）。
【０１００】
ステージ０が完了すると、サーバ装置１００ａは、Ｒｅａｄ＃１Ａを実行する（Ｓ１７５）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃１を実行する（Ｓ１７６）。ここでは、タイムスタンプを「１２：００：０８」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ１」に書き換える。そして、サーバ装置１００ａは、Ｒｅａｄ＃１Ｂを実行し（Ｓ１７７）、ステージ１を開始する（Ｓ１７８）。
【０１０１】
サーバ装置１００は、Ｗｒｉｔｅ＃０を実行しようとするとき、Ｒｅａｄ＃０Ａの終了から一定時間（例えば、数秒〜１０秒程度）超えたことを検出する。すると、サーバ装置１００は、サーバ装置１００ａによる割り込みの可能性があるため、Ｒｅａｄ＃０Ａを再実行する（Ｓ１７９）。サーバ装置１００は、ＭＡＣアドレスがサーバ装置１００のものでなく、ステージ情報が「ステージ１」に更新されているため、Ｗｒｉｔｅ＃１を実行しない。サーバ装置１００は、Ｒｅａｄ＃０Ａを再実行してタイムスタンプが更新されていることを確認した上で、ステージ０，１，２をキャンセルし、保守モードで起動する。
【０１０２】
サーバ装置１００ａは、ステージ１が完了すると、Ｒｅａｄ＃２Ａを実行する（Ｓ１８０）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃２を実行する（Ｓ１８１）。ここでは、タイムスタンプを「１２：００：１３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ２」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃２Ｂを実行し（Ｓ１８２）、ステージ２を開始する（Ｓ１８３）。ステージ２が完了すると、サーバ装置１００ａは、起動制御情報２１１を更新する（Ｓ１８４）。ここでは、タイムスタンプを「１２：００：３３」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「完了」に書き換える。
【０１０３】
このように、起動制御情報２１１の読み出しから更新までの遅延時間がステージ０またはステージ１の実行時間の期待値を超えると、他のサーバ装置によって先に起動制御情報２１１が更新されてしまう可能性が高くなる。そこで、遅延時間がステージ０またはステージ１の実行時間の期待値を超えたときは、起動制御情報２１１を再度読み出して、他のサーバ装置による割り込みを検出できるようにする。
【０１０４】
図１３は、複数のサーバ装置による起動処理の第５の例を示す図である。
第５の例では、サーバ装置１００がデータベースの起動処理を完了した後、起動制御情報２１１を初期化せずに異常停止した場合を考える。
【０１０５】
サーバ装置１００は、ステージ２が完了すると、起動制御情報２１１を更新する（Ｓ２１０）。ここでは、タイムスタンプを「１２：００：３２」、ＭＡＣアドレスを「ＡＡ．ＡＡ．ＡＡ」、ステージ情報を「完了」に書き換える。サーバ装置１００は、定期的に（例えば、１分間隔で）タイムスタンプを書き換える（Ｓ２１１，Ｓ２１２）。その後、サーバ装置１００は、起動制御情報２１１を初期化せずに異常停止する。
【０１０６】
サーバ装置１００ａは、データベースの起動処理を開始すると、Ｒｅａｄ＃０Ａを実行する（Ｓ２１３）。サーバ装置１００ａは、ＭＡＣアドレスがサーバ装置１００ａのものでなくステージ情報が「完了」であるため、Ｒｅａｄ＃０Ａを再実行する（Ｓ２１４）。タイムスタンプが更新されていないことを確認すると、サーバ装置１００ａは、サーバ装置１００が異常停止したと判断し、Ｗｒｉｔｅ＃０を実行する（Ｓ２１５）。ここでは、タイムスタンプを「１２：０５：０２」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ０」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃０Ｂを実行し（Ｓ２１６）、ステージ０を開始する（Ｓ２１７）。
【０１０７】
ステージ０が完了すると、サーバ装置１００ａは、Ｒｅａｄ＃１Ａを実行する（Ｓ２１８）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃１を実行する（Ｓ２１９）。ここでは、タイムスタンプを「１２：０５：０７」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ１」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃１Ｂを実行し（Ｓ２２０）、ステージ１を開始する（Ｓ２２１）。
【０１０８】
ステージ１が完了すると、サーバ装置１００ａは、Ｒｅａｄ＃２Ａを実行する（Ｓ２２２）。ＭＡＣアドレスがサーバ装置１００ａのものであることを確認すると、サーバ装置１００ａは、Ｗｒｉｔｅ＃２を実行する（Ｓ２２３）。ここでは、タイムスタンプを「１２：０５：１２」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「ステージ２」に書き換える。サーバ装置１００ａは、Ｒｅａｄ＃２Ｂを実行し（Ｓ２２４）、ステージ２を開始する（Ｓ２２５）。ステージ２が完了すると、サーバ装置１００ａは、起動制御情報２１１を更新する（Ｓ２２６）。ここでは、タイムスタンプを「１２：０５：３２」、ＭＡＣアドレスを「ＢＢ．ＢＢ．ＢＢ」、ステージ情報を「完了」に書き換える。
【０１０９】
このように、サーバ装置１００が起動制御情報２１１を初期化せずに異常停止した場合であっても、サーバ装置１００ａは、タイムスタンプが更新されていないことによって異常停止を検出できる。よって、サーバ装置１００ａは、データベースを起動できる。
【０１１０】
第２の実施の形態の情報処理システムによれば、サーバ装置１００，１００ａと接続された共通のストレージ装置２００に起動制御情報２１１が格納され、起動制御情報２１１を参照してデータベースの起動処理が行われる。よって、サーバ装置１００とサーバ装置１００ａとが直接通信を行わなくても、データベースが重複して起動されることを抑止できる。例えば、ネットワーク３０が一時的に切断されていても、データベースの重複起動を抑止できる。これにより、クラスタ管理ソフトウェアを一時的に停止しても、ストレージ装置２００に格納されたデータが誤って破壊されてしまうことを抑止できる。
【０１１１】
また、ステージ０，１，２それぞれを開始する前に、起動制御情報２１１に書き込まれたＭＡＣアドレスとステージ情報が参照される。これにより、起動制御情報２１１へのアクセスに排他ロックを用いなくても、他のサーバ装置による起動処理の進行を見過ごしてしまう可能性を低減できる。また、サーバ装置１００，１００ａの両方が起動処理を開始したときでも、ステージが先に進んでいる方の起動処理を優先させ、他方の起動処理を停止させることができる。よって、データベースを早く起動することができる。
【０１１２】
また、起動制御情報２１１を参照してから更新するまでの遅延時間が、ステージ１つの実行時間より大きくなった場合、起動制御情報２１１が再度参照されて起動処理が続行可能か判定される。これにより、他のサーバ装置が割り込んで起動制御情報２１１を更新したことを検出できる。また、起動制御情報２１１を更新した後、次のステージを開始する前に、起動制御情報２１１が再度参照される。これにより、起動制御情報２１１を更新した直後に他のサーバ装置によって起動制御情報２１１が上書きされたことを検出できる。
【０１１３】
なお、前述のように、第１の実施の形態の情報処理は、起動制御装置１０，１０ａにプログラムを実行させることで実現することができる。第２の実施の形態の情報処理は、サーバ装置１００，１００ａにプログラムを実行させることで実現することができる。
【０１１４】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体４３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして（インストールして）実行してもよい。
【符号の説明】
【０１１５】
１０，１０ａ  起動制御装置
１１  インタフェース
１２  制御部
１３  起動処理
１３ａ，１３ｂ，１３ｃ  処理
２０  記憶装置
２１  記憶領域
２２  識別情報
２３  進行情報
【図１】
0006331976.tif 000002
【図２】
0006331976.tif 000003
【図３】
0006331976.tif 000004
【図４】
0006331976.tif 000005
【図５】
0006331976.tif 000006
【図６】
0006331976.tif 000007
【図７】
0006331976.tif 000008
【図８】
0006331976.tif 000009
【図９】
0006331976.tif 000010
【図１０】
0006331976.tif 000011
【図１１】
0006331976.tif 000012
【図１２】
0006331976.tif 000013
【図１３】
0006331976.tif 000014