以下、図面を参照して,本発明の実施形態を説明する。
まず、図1を参照して、本実施形態のシステム構成の一例を説明する。図1において、アプリケーション10a、10bは、文書管理などといった特定の目的のために使用されるソフトウエアである。アプリケーション10a、10bは、互いに別の目的のためのソフトウエアであってよい。
アプリケーション10a、10bは、それぞれ、自らの処理の実行の中で、データベース20に対して読み書きを行う。アプリケーション10a、10bは、データベース20に格納されたデータオブジェクトを参照する場合には、参照指示を発する。また、データベース20内のオブジェクトを更新する場合には、更新指示を発する。ここで、データベース20の「更新」には、データベース20内にある既存のオブジェクトのデータ内容を変更する処理と、データベース20に対して新規のオブジェクトを登録する処理との両方が含まれるものとする。また、更新指示に対応する更新が完了して、その更新結果を確定する場合は、更新確定指示を発する。
ここで、アプリケーション10a、10bは、データベース20内の互いに関連する複数のデータオブジェクト(データ項目)を、1つのセッションの中でまとめて更新する。
すなわち、それら互いに関連する複数のデータオブジェクトは、データベース20内では複数のオブジェクトに別れているが、アプリケーションからみれば、それら複数のオブジェクトの値の組合せが1つの意味を有している。したがって、アプリケーションがそれら互いに関連する複数のオブジェクトを更新する場合、それら複数のオブジェクトが全て更新前の状態であるか、全て更新後の状態であるかが、そのアプリケーションが想定している、意味のある状態である。データベース20がこのようにアプリケーションが想定している状態にあることを、「データベースの整合性がとれている」状態と呼ぶ。逆に、それら複数のオブジェクトの中に更新済みのものと未更新のものとが混在する状態は、更新を指示したアプリケーションにとっては想定外の状態である。データベース20がこのようにアプリケーションから見て想定外の状態にあることを、「データベースの整合性がとれていない」状態と呼ぶ。例えば、電子掲示板にメッセージを登録する際、そのメッセージの内容、投稿者及び投稿日時という3つのオブジェクトをデータベースに登録するが、それら3つのオブジェクトのうちの1つでも欠けると、電子掲示板のメッセージとしては完全なものではなくなる。これが「整合性がとれていない状態」である。逆に3つのオブジェクトが全部揃って更新された状態は、「整合性がとれている状態」である。
各アプリケーション10a、10bは、そのようにまとめて更新すべき1以上のオブジェクトを1つのセッション内でまとめて更新することで、データベース20が常に「整合性がとれている状態」になるようにする。
アプリケーション10a、10bは、1つのデータベース更新セッションのなかで、更新(すなわちデータ内容の変更、又は新規登録)対象の各オブジェクトについての更新指示を順次(データベースI/O部30経由で)データベース20に送る。そして、アプリケーション10a、10bは、まとめて更新すべき互いに関連する複数のオブジェクトのすべてについて更新が完了した段階で、データベース20に対して、それらすべてのオブジェクトの更新の確定を指示する。このように、まとめて更新すべき全オブジェクトの更新が完了し、これに応じてアプリケーションが更新確定指示を発すると、その指示を受けたデータベース20がそれら全オブジェクトの更新結果を確定状態にする。この状態が、そのアプリケーションにとってデータベース20の「整合性がとれている状態」である。逆に、まとめて更新すべきそれらオブジェクトのうちの一部のオブジェクトのみ更新され、残りが更新されていない状態は、アプリケーションが想定している整合状態ではない。このような不整合状態(前述の「整合性がとれていない状態」のこと)では、アプリケーション10a、10bは更新確定指示を出さないので、データベース20が「整合性がとれていない状態」のまま更新が確定されることはない。
アプリケーション10a、10bは、1セッションの中で、まとめて更新すべき互いに関連するオブジェクトの組を複数組、更新するよう指示する場合もある。この場合、アプリケーション10a、10bは、データベース20との間での読み書きのセッションを開始した後、そのセッションの中でまず第1の組に含まれる各オブジェクトについての更新指示を順に発し、それらオブジェクトのすべてについてデータ更新が完了した旨の応答をデータベース20から受けると、第1の組についての更新確定指示を発する。続いて、そのセッションの中で、第2の組に含まれる各オブジェクトについて順に更新指示を発行し、それらオブジェクトのすべてについて更新が完了すると、第2の組についての更新確定指示を発する。このように、アプリケーションは、1セッションの中で、まとめて更新すべきオブジェクトの組ごとに更新確定指示を発するように構成されていてもよい。
さて、本実施形態では、アプリケーション10a、10bは、データベース20に対して直接読み書きを行うのではなく、データベースI/O部30を介して読み書きを行う。すなわち、アプリケーション10a、10bは、それぞれ、データベース20に対する参照指示、更新指示、及び更新確定指示を、データベース20に送るのではなく、対応するデータベースI/O部30に対して送る。
アプリケーション10a、10bが発するそれら読み書きのための指示(参照指示、更新指示、及び更新確定指示)は、データベースI/O部30が存在せず、アプリケーションとデータベースとが直接やりとりを行う従来構成において、アプリケーションがデータベースに対して発行する指示と同じものとしてもよい。
この実施形態では、アプリケーション10a、10bは、従来、データベース20に対して直接送っていた読み書きのための指示を、データベースI/O部30に送るようにしたものであり、その他の点では従来の同様のアプリケーションと同じでよい。
また、これらアプリケーション10a、10bは、互いに連携して1つの大きな目的を達成する機能を有していてもよい。例えば、アプリケーション10aが電子掲示板等を管理するメッセージングアプリケーションであり、アプリケーション10aが文書群を管理する文書管理システムアプリケーションである場合がその一例である。このケースでは、ユーザから前者に対してメッセージと添付文書がアップロードされた場合、1つのセッションの中で、前者は、メッセージをデータベース20に書き込むと共に、後者に対して添付文書のデータベース20への登録を依頼する。この結果、前者と後者がそれぞれデータベース20の更新を行うこととなる。この例では、前者のメッセージ登録機能と後者の文書登録機能とが連携して、メッセージとそれに対応した添付文書とのデータベース登録という大きな目的を達成する。
ここで、複数のアプリケーションによる連携したデータベース更新は、1つのセッション内で行われる。上述の例で言えば、アプリケーション10aによるメッセージのデータベース20への登録と、アプリケーション10bによる添付文書のデータベースへの登録とは、それら2つのアプリケーションが連携した1つのセッションとして行われる。これにより、異なる複数のアプリケーションが、それぞれ互いに関連するオブジェクトの更新を行う際に、それらオブジェクト群が「整合性がとれている状態」になるよう一括して更新されるようにする。
図1には、2つのアプリケーション10a、10bを図示したが、データベース20を利用するアプリケーションが3以上存在してももちろんよい。
データベース20は、それらアプリケーションが利用するデータを保持しており、データベースI/O部30を介した各アプリケーションからの指示に従い、保持しているデータをアプリケーションに提供したり、保持しているデータを新しい値に更新したりする。
アプリケーション10a、10bから、後述するデータベースI/O部30経由で参照指示を受けた場合、データベース20は、その指示の対象として指定されたオブジェクトのデータ内容を、指示元のアプリケーション宛に送信する。この参照処理では、対象となったオブジェクトは変更されない。また更新指示を受けた場合には、自分自身が保持するその更新指示の対象のオブジェクトを、その指示に応じたデータ内容に更新する(あるいは、更新指示が新たなオブジェクトの登録を指示するものである場合はその登録を行う)。データベース20は、保持するオブジェクトごとにそのオブジェクトが確定状態であるか否かを示すフラグ情報を有しており、更新指示に応じてオブジェクトの更新を行った時点ではそのオブジェクトのフラグ情報は未確定状態を示す値にする。また、あるセッションの中でアプリケーション10a、10bから更新確定指示を受けた場合、データベース20は、そのセッションにおいてこれまでに更新した、未確定状態のオブジェクトのフラグ情報を、確定状態を示す値に変更する。
データベース20は、データベースI/O部30経由で受け取ったアプリケーション10a、10bからの指示に対する応答を、そのデータベースI/O部30経由でアプリケーション10a、10bに返す。すなわち、データベース20は、アプリケーション10a、10bが発した更新指示等の指示を、データベースI/O部30から受け取るので、その指示に対する応答は、その指示の発信元であるデータベースI/O部30に返せばよい。その応答を受け取ったデータベースI/O部30は、その応答を、その指示を指示元であるアプリケーション10a又は10bに転送する。
データベース20は、物理的に1つのコンピュータ上に構築されてもよいし、複数の別々のコンピュータ上に分散されて構築されていてよい。
また、データベース20は、例えば電子掲示板のメッセージ群とそれらメッセージに添付された文書ファイルのように、異なる種類のデータオブジェクト(この例ではメッセージ、文書ファイルがそれぞれオブジェクトである)を格納することができる。データベース20は、そのような複数種類のオブジェクトを格納可能な論理的に1つのデータベースであってもよいし、個々の種類のオブジェクトを格納するための論理的なデータベースが複数集まった集合体であってもよい。
この実施形態では、データベース20は、アプリケーション10a、10bからの指示を、データベースI/O部30を介して受け取る。
データベース20は、保持しているデータオブジェクトに対する読み書きの指示を、アプリケーション10a、10bから直接ではなく、データベースI/O部30を介して受け取る点以外は、従来のデータベースと同様である。
データベースI/O部30は、アプリケーション10a、10bとデータベース20との間に介在し、アプリケーション10a、10bとデータベース20との間の指示及びデータのやりとりを制御する。
図示例では、データベースI/O部30は、1つ1つのアプリケーション10a、10bに対応して1つずつ設けられている。アプリケーション10a、10bは、データベース20に対して読み書きを行う際、その読み書きのための指示を、対応するデータベースI/O部30に送る。
データベースI/O部30は、アプリケーション10a、10bとデータベース20との間の指示、データのやりとりの制御の中で、後述するステータス管理部32と連携して、オンラインバックアップ中にデータベース20の更新(すなわちデータベース20内に保存されたオブジェクトの更新)が行われないようにする。このオンラインバックアップ対応のための制御については、後で詳しく説明する。
ステータス管理部32は、各アプリケーション10a、10bに対応する各データベースI/O部30のステータス(状態)を保持し、管理する。データベースI/O部30のステータスには、「通常」、「抑制依頼中」、「抑制完了」の3つがある。
ステータス「通常」は、対応するアプリケーション10a又は10bが当該データベースI/O部30を介してデータベース20に対して通常通り読み書きを行うことができる状態である。
ステータス「抑制依頼中」は、データベースI/O部30が後述するオンラインバックアップトリガー部34から「抑制依頼」を受けてから、その「抑制依頼」を受けた時点で既に実行中のすべてのデータベース更新セッションが完了(「更新確定」)されるまでの状態である。また、ステータス「抑制完了」とは、「抑制依頼中」状態にあるデータベースI/O部30が実行していたすべてのデータベース更新セッションが「更新確定」された場合の遷移先の状態である。本実施形態では、すべてのデータベースI/O部30が「抑制完了」状態となってはじめて、オンラインバックアップが実行される。そして、オンラインバックアップが完了すると、各データベースI/O部30のステータスは、「抑制完了」状態から「通常」状態に変更される。
「抑制依頼」及び「抑制完了」というステータスの理解を助けるために、その技術的な意義を以下に説明する。
本実施形態では、データベース20のオンラインバックアップを開始する前に、データベースI/O部30が、対応するアプリケーション10a又は10bからのデータベース20に対するデータベース更新指示を抑制する。すなわち、データベースI/O部30がアプリケーション10a及び10bからの更新指示をデータベース20に伝達しないことで、データベース20が更新されない状態を作り出す。そして、このようにデータベース20が更新されない状態を作り出した後で、データベース20のオンラインバックアップを実行する。
ここで、オンラインバックアップの開始条件が満たされる(例えばユーザから明示的に開始指示があった場合や、規則により導かれる開始タイミングが到来した場合)と同時に各アプリケーション10a及び10bからの更新指示を完全に抑制したのでは、アプリケーションによる1つのデータベース更新セッションの途中でデータベース20の更新が抑制されてしまう場合がある。この場合、アプリケーションがそのセッションでまとめて更新しようとしている複数のオブジェクトのうちの一部のみが更新され、残りが未更新のままとなってしまう。この状態は、そのアプリケーションからみて不整合状態(「整合性がとれていない状態」)であり、仮にこの状態のデータベース20がオンラインバックアップされても、そのバックアップ結果は、そのアプリケーションが想定していない(すなわちそのアプリケーションがそのままでは正しく処理できない)ものとなる。このようにアプリケーションがそのままでは正しく処理できないようなバックアップデータを作成することは、有益であるとはいえない。
そこで、本実施形態では、オンラインバックアップの開始条件が満たされたときに即座にそのオンラインバックアップを実行するのではなく、データベース20の状態がすべてのアプリケーション10a及び10bにとって「整合性がとれている状態」となるまで待ってからオンラインバックアップを実行する。すなわち、このようにデータベース20がすべてのアプリケーション10a及び10bにとって「整合性がとれている状態」で、それらすべてのアプリケーション10a及び10bからの更新指示を待機させつつ、データベース20のオンラインバックアップを行うことで、得られるバックアップはすべてのアプリケーション10a及び10bにとって「整合性がとれている状態」となる。
このように、データベース20が「整合性のとれている状態」でオンラインバックアップが実行されるようにするために、本実施形態では、オンラインバックアップの開始条件が満たされた時点では、各データベースI/O部30を「抑制依頼中」状態とする。この状態では、データベースI/O部30は、まだデータベース更新を開始していないセッションや、データベース更新を確定済みであるセッションについては、対応するアプリケーション10a又は10bからの新たな更新指示をデータベース20に取り次がずに待機させる。一方、この状態に入った時点で既にデータベース20の更新を開始しており、まだ確定していないセッションについては、対応するアプリケーション10a又は10bから更新確定指示を発するまでは、そのアプリケーション10a又は10bからの更新指示をデータベース20に取り次ぐ。そして、データベースI/O部30が「抑制依頼中」状態となった時点でデータベース更新を開始しており、かつその更新が未確定であるすべてのセッションについて、対応するアプリケーション10a又は10bから更新確定指示を受け取ると、データベースI/O部30は「抑制完了」状態に遷移する。「抑制完了」状態にあるデータベースI/O部30は、すべてのアプリケーション10a及び10bからの更新指示を待機させる。
以上、「抑制依頼」及び「抑制完了」というステータスを設けた意義について説明した。
ステータス管理部32は、各データベースI/O部30のステータスを記憶したI/Oステータス管理テーブルを有する。そして、オンラインバックアップのための制御の進行に応じて、このテーブルに保持される情報を更新していく。
図2に、I/Oステータス管理テーブルのデータ内容の一例を示す。図2に例示したテーブルには、データベースI/O部30ごとに、そのデータベースI/O部30に対応するアプリケーション10a又は10bの識別情報(「アプリケーションID」)と、そのデータベースI/O部30のステータス値とが保持されている。
また、ステータス管理部32は、アプリケーション10a及び10からのデータベース20に対する読み書きのセッションのステータスを管理する。セッションのステータスには「通常」と「更新中」がある。
ステータス「更新中」は、当該セッションにおいてデータベース20の更新が開始されてから、その更新が確定されるまでの間の状態である。すなわち、アプリケーションから当該セッションの中での最初のデータベース20に対する更新指示が発せられ、その更新指示が実行可能である(すなわちまだ更新が抑制されていない)場合に、そのセッションは「通常」状態から「更新中」状態に遷移する。そして、「更新中」状態にあるセッションにおいて、対応するアプリケーションから更新確定が指示されると、そのセッションの状態は「通常」に戻る。
ステータス「通常」は、「更新中」以外の状態である。言い換えれば、セッションが「通常」状態にあるということは、そのセッションの中でまだデータベース20の更新が始まっていないか、又はそのセッションの中でまとめて更新すべき複数のオブジェクトの更新が確定済みであるか、のいずれかであることを意味する。
「更新中」状態であるセッションを中断すると、データベース20が整合性のとれていない状態となり、その状態でデータベース20をオンラインバックアップすると、上述したように有益でないバックアップが生成される。そこで、本実施形態では、「更新中」状態であるセッションは、「通常」状態に遷移するのを待って中断(すなわち更新を「抑制」)し、オンラインバックアップを実行する。
ステータス管理部32は、各アプリケーション10a及び10bが実行しているセッションのステータスを記憶したセッションステータス管理テーブルを有する。そして、オンラインバックアップのための制御の進行に応じて、このテーブルに保持される情報を更新していく。
図3に、セッションステータス管理テーブルのデータ内容の一例を示す。図3に例示したテーブルには、アプリケーションのIDと、そのアプリケーションが実行しているセッションのIDと、そのセッションのステータスと、の3つの項目の組が保持されている。図3の例では、アプリケーションID「0001」に対応するアプリケーションは2つのセッション「S0001」及び「S0002」を実行中であり、アプリケーションID「0002」に対応するアプリケーションは1つのセッション「S0001」を実行中である。このうち、セッション「S0001」は、2つのアプリケーション「0001」と「0002」が連携して行うセッションであり、それら2つのアプリケーションの両方がデータベースに対して更新を行う可能性がある。また、図3の例では、セッション「S0001」は「通常」状態であり、セッション「S0002」は「更新中」状態である。
図3の例は、すべてのアプリケーションが実行中のセッションのステータスを1つのセッションステータス管理テーブルに保持するものであったが、これは一例に過ぎない。セッションの管理はアプリケーションごとにできれば足りるので、アプリケーションごとのセッションステータス管理テーブルを用いてもよい。アプリケーションごとのセッションステータス管理テーブルには、当該アプリケーションが実行しているセッションのセッションIDと、そのセッションのステータスが保持される。またこの場合、アプリケーションごとのセッションステータス管理テーブルを、ステータス管理部32ではなく、当該アプリケーションに対応するデータベースI/O部30が保持していてもよい。
図1の説明に戻ると、オンラインバックアップ部22は、データベース20のオンラインバックアップを担当する機能モジュールである。オンラインバックアップ部22は、従来のものと同様のものでよい。
オンラインバックアップトリガー部34は、オンラインバックアップ部22に対してオンラインバックアップの実行を指示するモジュールである。オンラインバックアップトリガー部34は、ステータス管理部32を参照することで、データベース20がどのアプリケーション10a及び10bから見ても「整合性がとれている状態」となっており、かつ、どのアプリケーション10a及び10bからのデータベース更新も抑制されているときに、オンラインバックアップが実行されるようにする。
以上、図1を参照して、本実施形態のシステム構成の一例を説明した。図1のシステム構成は、1つのコンピュータ上、又は複数のコンピュータから構成されるコンピュータシステム上に、ソフトウエア的に構築される。すなわち、ある例では、図1に示したすべての要素が1台のコンピュータ上にソフトウエアとして実装される。別の例では、図1に示した要素が、複数のコンピュータ上に分散してインストールされ、それら要素がネットワークを介して通信を行いながら、各々の機能を発揮する。例えば、図1に示した要素のうち、アプリケーション10a及び10b以外の要素が1台のコンピュータ上に構築され、アプリケーション10a及び10bがそれぞれ、そのコンピュータとは別の個別のコンピュータ上に構築されるようなシステム構成も可能である。
ここで、コンピュータは、例えば、ハードウエアとして、CPU等のマイクロプロセッサ、ランダムアクセスメモリ(RAM)およびリードオンリメモリ(ROM)等のメモリ(一次記憶)、HDD(ハードディスクドライブ)等の二次記憶装置を制御するコントローラ、各種I/O(入出力)インタフェース、ローカルエリアネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース等の要素群が、たとえばバスを介して相互に接続された回路構成を有する。また、そのバスに対し、例えばI/Oインタフェース経由で、CDやDVDなどの可搬型ディスク記録媒体に対する読み取り及び/又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び/又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがRAMに読み出されCPU等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。
次に、図4を参照して、データベースI/O部30の処理手順の一例を説明する。この手順は、対応するアプリケーション10a又は10bから、データベース20に対する読み書きの指示が到来するごとに実行される。
この処理の前提として、アプリケーション10a及び10bがデータベースI/O部30に送る指示には、当該アプリケーションのIDと、その指示が属するセッションのセッションIDとが含まれる。ここで、セッションIDは、アプリケーションが新規のセッションを開始するごとに、例えばそのアプリケーション自身が、そのセッションのために一意的な値として生成する。そして、同じセッションの中でデータベース20内の複数のオブジェクトの更新処理を行う場合、アプリケーションは、それら個々のオブジェクトについて、アプリケーションID及びセッションIDを含んだ更新指示を発する。また、あるアプリケーションが、自分が始めたセッションの中で、別のアプリケーションに対してデータベース20内のオブジェクトの依頼する場合には、前者のアプリケーションは、後者のアプリケーションに対してそのセッションのセッションIDを通知する。前者からの依頼に応じて後者のアプリケーションが発する更新指示は、後者のアプリケーションIDと共に、前者から通知されたセッションIDを含む。
図4の処理手順では、まず、データベースI/O部30は、対応するアプリケーション10a又は10bから指示された処理の種別が、「参照」、「更新」、「更新確定」のいずれであるかを判定する(S10)。指示された処理が「参照」である場合、データベースI/O部30は、その指示(すなわち「参照指示」)を、データベース20に転送することで、その指示に応じた処理(参照)が実行されるようにする(S12)。S12にて指示をデータベース20に転送すると、データベースI/O部30は、その指示についての処理を終了する。このように、本実施形態では、データベース20に更新が発生しない参照指示については、後述のように更新指示を待機させている間も、待機させずに実行されるようにしている。
指示された処理が「更新」である場合、データベースI/O部30は、ステータス管理部32のI/Oステータス管理テーブルを参照して、自分自身のステータスを確認し(S14)、確認したステータスの値が「通常」、「抑制依頼中」、「抑制完了」のいずれであるかを判定する(S16)。
S16で自分のステータスが「通常」であると判定した場合、データベースI/O部30は、ステータス管理部32に対して、その更新指示のセッションIDと、データベースIO部30自身の識別情報(「アプリケーションID」)と、更新指示を実行する旨と、を通知する(S18)。この通知に応じ、ステータス管理部32は、セッションステータス管理テーブル内の、そのセッションIDとアプリ−ケーションIDとの組合せに対応するステータスの値を「更新中」とする。すなわち、そのセッションIDとアプリ−ケーションIDとの組合せに対応するステータス値が「通常」である場合は、そのステータス値を「更新中」に書き換え、「更新中」ならばその値を維持する。また、そのセッションIDとアプリ−ケーションIDとの組合せがセッションステータス管理テーブルに未登録である場合は、そのテーブルに、その組合せに含まれるセッションID及びアプリケーションIDとを含んだエントリを追加し、そのエントリのステータスを「更新中」とする。
そして、データベースI/O部30は、その更新指示をデータベース20に転送することで、その指示に応じた処理(更新)が実行されるようにする(S12)。
このように、データベースI/O部30のステータスが「通常」である場合は、オンラインバックアップ又はその準備が行われていないということなので、アプリケーションからの指示に応じてデータベース20の更新が行われる。
さて、S16で自分自身のステータスが「抑制依頼中」であることがわかると、データベースI/O部30は、ステータス管理部32のセッションステータス管理テーブルにアクセスし、当該更新指示のセッションIDに対応するステータスの値を確認する(S20)。そして、確認により得たステータスの値が「通常」及び「更新中」のいずれであるかを判定する(S22)。ここで、S20では、セッションステータス管理テーブル内に、そのセッションIDに対応するエントリが複数ある場合(例えば複数のアプリケーションが1セッション内で連携して、互いに関連するオブジェクト群を更新する場合)には、それら複数のエントリすべてのステータスを調べる。そして、S22では、それら複数のエントリのステータスがすべて「通常」である場合、当該セッションのステータスは「通常」であると判定し、それら複数のエントリのステータスのなかに「更新中」のものが1以上あれば、当該セッションのステータスは「更新中」と判定する。
S22で当該セッションのステータスが「更新中」であるとわかった場合、データベースI/O部30は、その更新指示をデータベース20に転送することで、その指示に応じた処理(更新)が実行されるようにする(S12)。すなわち、この時点では、オンラインバックアップの準備が始まっており(これはデータベースI/O部30自身のステータスが「抑制依頼中」であることからわかる)、かつ、その準備開始の時点で既に開始されているオブジェクト群の更新が確定していない(これは当該セッションのステータスが「更新中」であることからわかる)ので、データベース20の状態が当該セッションの発行元のアプリケーションからみて「整合性がとれている状態」となるまで(すなわち対応するアプリケーションから当該セッションについての更新確定指示が来るまで)は、更新指示を受け入れるのである。
S22で当該セッションのステータスが「通常」であるとわかった場合、データベースI/O部30は、その更新指示を待機させる(S24)。例えば、その更新指示をデータベースI/O部30自身の内部に保留する。
すなわち、S22で当該セッションのステータスが「通常」であるとわかった時点では、オンラインバックアップの準備が始まっており、かつ、当該セッションの更新対象のオブジェクトの更新処理がまだ1つも始まっていないか又はそれら更新対象のすべてのオブジェクトの更新が「確定」されている。複数のアプリケーションが、まとめて更新すべき互いに関連する複数のオブジェクトを1セッション内でそれぞれ更新する状況でも、S22の判定結果が「通常」であれば、それら複数のオブジェクトの更新はすべて確定されている。したがって、この時点では、データベース20は、そのセッションの発行元のそれら複数のアプリケーションすべてから見て「整合性がとれている状態」であり、この状態でオンラインバックアップを行っても問題はない。そこで、この場合は、更新処理の指示を待機させる(S24)のである。
また、データベースI/O部30は、S24で更新指示を待機させた場合、その更新指示を送ってきたアプリケーションに対して、その更新指示を待機させた旨を示す情報を送ってもよい。また、その情報を待機させた時点で送る代わりに、あるいはそれに加えて、アプリケーションからその更新指示の状況の問い合わせが到来したときに、その情報をアプリケーションに回答してもよい。アプリケーションは、その情報により、更新指示が待機中であることを知ることができ、更新指示に応じたデータベース更新処理が遅れているのが、エラーなどの不具合ではなく、(オンラインバックアップのための)正常な待機のためであることがわかる。アプリケーションは、データベースI/O部30から提供された待機の旨の情報に応じて、現在データベース20のオンラインバックアップ中であるためデータベースの更新が遅れることなどを知らせるメッセージを表示してもよい。
S16の判定に戻ると、データベースI/O部30は、この判定で自分自身のステータスが「抑制完了」であることがわかると、更新指示を待機させる(S24)。「抑制完了」状態では、「抑制依頼中」状態の開始時点でデータベースI/O部30が既に始めていたデータベース更新はすべて確定され、アプリケーションにとって「整合性がとれている状態」となっているので、更新指示に対応するセッションのステータスを確認するまでもなく、その更新指示を待機させるのである。
このようにして、すべてのデータベースI/O部30が「抑制完了」状態である間(この間は、すべてのアプリケーションから発せられるすべての更新指示が待機させられる)に、オンラインバックアップが実行される(詳しくは,図6の手順を参照)。
そして、S24の後、データベースI/O部30は、例えば定期的に、ステータス管理部32内の自分自身のステータスを確認し(S26)、そのステータスが「通常」に戻っているかどうかを判定する(S28)。S16の時点で「抑制依頼中」又は「抑制完了」状態であったデータベースI/O部30が「通常」状態に戻るのは、オンラインバックアップが完了した場合である(後述する図5の手順を参照)。したがって、S28の判定結果がYESであれば、オンラインバックアップは既に完了しているので、データベースI/O部30は、それまでに待機させていた更新指示を順にデータベース20に転送し、各指示に応じてオブジェクトの更新処理を行わせる(S12)。一方、S28の判定結果がNOであれば、オンラインバックアップはまだ完了していないと言うことなので、S24に戻り、更新指示の待機を続行する。
さて、S10の判定に戻ると、ここで判定した指示の種別が「更新確定」であれば、データベースI/O部30は、その更新確定指示をデータベース20に転送する(S30)。これにより、データベース20は、その更新確定指示の対象である各オブジェクトの更新を確定する。これにより、それら各オブジェクトの値は、アプリケーションにとって「整合性のとれている状態」で確定される。逆に言えば、更新指示に応じてデータ内容の更新が行われたとしても、まだ更新確定指示が来ていないオブジェクトのデータ内容は、アプリケーションにとって「整合性がとれていない状態」である可能性がある。
このようにして各オブジェクトの更新処理を確定した後、データベースI/O部30は、ステータス管理部32内のセッションステータス管理テーブルにアクセスし、当該更新確定処理のセッションIDと当該データベースI/O部30のアプリケーションIDとの組に対応するステータスの値を「通常」にする(S32)。すなわち、更新確定指示が到来すると言うことは、必ずその前に更新指示が到来しており、その更新指示に応じ、当該指示に係るセッションのステータスが「更新中」にセットされている(S18)はずなので、これを「通常」に戻す。このように、S32の時点では、更新確定により、更新確定指示を発したアプリケーションが当該セッションでそれまでに更新していたオブジェクトはすべて確定され、「整合性のとれている状態」となっているので、当該アプリケーションについての当該セッションの状態を「通常」に戻すことで、それ以降にそのアプリケーションから新たな更新指示が来てもそれを待機させるようにするのである(S22及びS24参照)。
その後、データベースI/O部30は、ステータス管理部32を参照して自分自身のステータスを確認し(S34)、確認したステータスが「抑制依頼中」であるか否かを判定する(S36)。この判定の結果がYESの場合、更に、ステータス管理部32を参照して、当該データベースI/O部30に対応するアプリケーションが実行しているすべてのセッション(すなわちそのアプリケーションのIDに対応する各セッション)が「通常」状態であるかどうかを判定する(S38)。S38の判定結果がYESの場合、当該データベースI/O部30が実行していたすべてのセッションにおけるデータベース更新がすべて確定され、「整合性がとれている状態」となっている。したがって、この場合データベースI/O部30は、ステータス管理部32が保持している当該データベースI/O部30の状態(すなわち当該I/O部30に対応するアプリケーションのステータス)を「抑制依頼中」から「抑制完了」に変更する(S40)。これ以降、データベースI/O部30のステータスが「通常」に戻るまでの間は、データベースI/O部30はすべてのアプリケーションからのすべての更新指示を待機させる(S16及びS24参照)ことで、データベース20のオンラインバックアップが実行できる状況を整える。S40でデータベースI/O部30のステータスを変更した後、データベースI/O部30は、その更新確定指示についての処理を終了する。
また、S36又はS38の判定結果がNOである場合には、ステータス管理部32のテーブルに保持されたデータベースI/O部30自身のステータスを変更せずに、当該更新確定指示についての処理を終了する。
次に、図5を参照して、オンラインバックアップトリガー部34の処理手順の例を説明する。
図5の手順は、オンラインバックアップの開始条件が満たされた場合、例えばユーザから開始指示があった場合や、あらかじめ定めた規則により定まる開始タイミングが到来したときに、開始される。オンラインバックアップのタイミングを決める規則は、従来のものと同様でよい。一例を挙げるならば、定期的なオンラインバックアップのタイミングを規定する規則がある。
この処理では、オンラインバックアップトリガー部34は、まず、ステータス管理部32のI/Oステータス管理テーブルを参照して、すべてのデータベースI/O部30のステータスを確認する(S50)。そして、それらデータベースI/O部30のステータスがすべて「通常」、それらステータスのうちの少なくとも1つが「抑制依頼中」、又は、それらステータスのすべてが「抑制完了中」、のいずれであるかを判定する(S52)。
この判定の結果が、データベースI/O部30のステータスがすべて「抑制完了」であるか、又は少なくとも1つが「抑制依頼中」である場合には、オンラインバックアップトリガー部34は、今回のオンラインバックアップを取りやめるなどのエラー処理を行う(S54)。このような場合が生じるのは、例えば、前回のオンラインバックアップが完了していない時点で、今回のオンラインバックアップのタイミングが到来するなどの異常な場合なので、エラー処理を行うのである。
一方、S52の判定の結果、データベースI/O部30のステータスがすべて「通常」であることがわかると、オンラインバックアップトリガー部34は、ステータス管理部32のI/Oステータス管理テーブル内の、すべてのデータベースI/O部30のステータスを「抑制依頼中」に変更する(S56)。データベースI/O部30は、更新指示をデータベース20に取り次ぐか待機させるかを判定する際、I/Oステータス管理テーブル内の自分自身のステータスを確認するので、S56でのステータス変更は、データベースI/O部30に対して「抑制依頼」を行うことと実質的に等価である。
S56の後、オンラインバックアップトリガー部34は、今回行おうとしているオンラインバックアップ処理を待機させる(S58)。そして、I/Oステータス管理テーブルを例えば定期的に監視して、すべてのデータベースI/O部30のステータスを確認し(S60)、それらステータスがすべて「抑制完了」となっているかどうかを判定する(S62)。「抑制依頼中」のままのデータベースI/O部30が1つでもあれば、S62の判定結果はNOとなる。この場合、オンラインバックアップトリガー部34は、オンラインバックアップの実行の待機を続ける(S58)。この待機は、S62で、すべてのデータベースI/O部30のステータスが「抑制完了」となったと判定されるまで続く。
S62ですべてのデータベースI/O部30のステータスが「抑制完了」となったと判定されると、オンラインバックアップトリガー部34は、オンラインバックアップ部22に対してオンラインバックアップの実行を指示する(S64)。すなわち、この状態では、すべてのアプリケーションからの更新指示が待機させられていると共に、データベース20はすべてのアプリケーションにとって「整合性がとれている状態」なので、オンラインバックアップを実行するのである。オンラインバックアップ部22は、この指示に応じて、データベース20のオンラインバックアップを実行する。
データベース20のオンラインバックアップが完了すると、オンラインバックアップ部22は、オンラインバックアップトリガー部34に対して、オンラインバックアップが完了した旨を通知する。この通知を受けたオンラインバックアップトリガー部34は、ステータス管理部32内のI/Oステータス管理テーブルにおけるすべてのデータベースI/O部30のステータスを、「抑制完了」から「通常」に変更する(S66)。これにより、各データベースI/O部30は、いままで待機させていた更新指示をデータベース20に転送する(図4のS28からS12に続く流れを参照)。
以上に説明したデータベースI/O部30の処理(図4参照)とオンラインバックアップトリガー部34の処理(図5参照)との連携により、データベース20がすべてのアプリケーションにとって整合性がとれている状態で、オンラインバックアップが実行される。
次に、図6を参照して、具体的な処理の流れの中での、ステータス管理部32内のI/Oステータス管理テーブルの変遷の例を説明する。
まず、データベース20が起動したが、まだどのアプリケーション10a、10bからもアクセスがない場合は、I/Oステータス管理テーブルは空である(図6の(1))。
この後、あるアプリケーション(IDが「0001」であるとする)が、データベース20へアクセスするための初期化処理を実行すると、このアプリケーションに対応するデータベースI/O部30が起動され、そのデータベースI/O部30がI/Oステータス管理テーブルに対して、そのアプリケーションID「0001」に対応するエントリを追加し、そのエントリのステータス値を「通常」に設定する(図6の(2))。
その後、別のアプリケーション(ID「0002」)が、データベース20へアクセスするための初期化を実行すると、このアプリケーションに対応するデータベースI/O部30がI/Oステータス管理テーブルに対して、そのアプリケーションID「0002」に対応するエントリを追加し、そのエントリのステータス値を「通常」に設定する(図6の(3))。
次に、データベース20を管理するユーザが、本システムに対して、オンラインバックアップの実行を指示すると、その指示を受けたオンラインバックアップトリガー部34が、その時点でI/Oステータス管理テーブルに登録されているすべてのエントリ(上述した2つのアプリケーションに対応)のステータス値を「抑制依頼中」に変更する(図6の(4))。
それら2つのアプリケーションに対応する各データベースI/O部30は、そのステータス変更を検知し、既に開始しているまとめて更新すべき一連のオブジェクトの更新は続行するが、それ以外の新たな更新処理は待機させる。そして、例えばアプリケーション「0001」が実行中の更新処理がすべて確定した場合には、そのアプリケーションに対応するデータベースI/O部30は、I/Oステータス管理テーブル内のそのアプリケーション「0001」のエントリのステータスを「抑制完了」に変更する(図6の(5))。
その後アプリケーション「0002」が実行中の更新処理がすべて確定すると、対応するデータベースI/O部30が、I/Oステータス管理テーブル内のID「0002」のエントリのステータスを「抑制完了」に変更する(図6の(6))。
このようにしてI/Oステータス管理テーブル内のすべてのエントリのステータスが「抑制完了」になると、オンラインバックアップトリガー部34は、オンラインバックアップ部22に対してデータベース20のオンラインバックアップを開始させる。
そして、そのオンラインバックアップが成功裏に完了すると、オンラインバックアップトリガー部34は、I/Oステータス管理テーブル内のすべてのエントリのステータスを「通常」に戻す(図6の(7))。これにより、データベース20に対する更新が再開され、各データベースI/O部30は、「抑制依頼中」及び「抑制完了」状態の時に待機させた更新指示をデータベース20に伝達し、更新を実行させる。
以上、本発明の実施形態を説明した。以上に説明したように、本実施形態では、データベース20が複数のアプリケーションのすべてからみて整合性のとれている状態となるように制御し、そのような状態になるとオンラインバックアップを実行する。したがって、オンラインバックアップにより生成されるバックアップデータは、複数のアプリケーションのすべてからみて整合性のとれているものとなっており、いずれのアプリケーションからも利用しやすいものとなっている。
また、上記実施形態では、データベース20内のまとめて更新すべき互いに関連するオブジェクト群を、複数のアプリケーションが連携して更新する場合でも、データベース20がそれら複数のアプリケーションすべてにとって「整合性のとれている状態」となっているときにオンラインバックアップが行われる。
以上に説明した実施形態はあくまで一例に過ぎず、本発明の技術的思想の範囲内で様々な変形が考えられる。
例えば、図1の例では、アプリケーション10a、10bの各々に対応してそれぞれ個別にデータベースI/O部30を設けたが、この代わりにデータベースI/O部30を1つだけ設けることとし、複数のアプリケーションがその唯一のデータベースI/O部30を介してデータベース20とやりとりを行うようにしてもよい。ただし、この場合その唯一のデータベースI/O部30は、受け取った更新指示等の指示がどのアプリケーションからのものかを認識する必要がある。データベースI/O部30は、その認識の結果に従い、その指示に対するデータベース20からの応答を、その指示の発信元のアプリケーションに返す。また、この場合、ステータス管理部32内のI/Oステータス管理テーブルは、データベースI/O部30のステータスの代わりに、各アプリケーションのステータスを管理する。ただし、上記実施形態のI/Oステータス管理テーブルは、もともと、各アプリケーションに対して一対一に対応するデータベースI/O部30のステータスを、それら各アプリケーションのIDに対応づけて管理していたので、そのテーブルのデータ構造は上記実施形態のものと同様(図2参照)でよい。また、データベースI/O部30を1つだけ設ける構成の場合、そのデータベースI/O部30は、アプリケーションから更新確定指示を受け取ると、その更新確定指示を発したアプリケーションのIDを特定し、そのI/Oステータス管理テーブル内のそのアプリケーションIDに対応するエントリのステータスを「抑制完了」に書き換えればよい。
また、図1の例では、データベースI/O部30、ステータス管理部32、及びオンラインバックアップトリガー部34をそれぞれ別々の機能モジュールとして実現しているが、この代わりに、それら3種のモジュールの機能を1つの機能モジュールとして実装してもよいし、それら3種のうちの2種のモジュールの機能を1つのモジュールにまとめて実装してもよい。例えば、ステータス管理部32とオンラインバックアップトリガー部34とを1つの機能モジュールにまとめて実装してもよい。
また、上記実施形態では、S24(図4)にて更新指示の実行を待機させたが、この代わりに、更新指示の発行元のアプリケーションに対し、現時点ではオンラインバックアップのために更新ができない旨を通知した上で、その更新指示を破棄するようにしてもよい。この場合、アプリケーションは、データベースI/O部30等からオンラインバックアップの完了通知を受けた後、破棄された更新指示を再度発行すればよい。なお、S24にて更新指示の実行を待機させる上記実施形態の方式の方が、アプリケーションの処理負担が少なく、また既存のアプリケーションを本実施形態のシステムに対応させるための改変も少なくて済む。