(57)【特許請求の範囲】
【請求項１】
揮発性の第１記憶部と、
不揮発性の第２記憶部と、
データ集合を複数に分割した複数のブロックのそれぞれに対するアクセス要求に応じた処理を実行するアクセス処理部と、
前記複数のブロックのそれぞれのバックアップ時刻におけるデータを前記第２記憶部に書き出すバックアップ処理部と、
アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された何れかのブロックのデータを前記第２記憶部に書き出して、前記アクセス要求がされた前記ブロックのデータを前記第２記憶部から前記第１記憶部に読み込むブロック管理部と、
を備え、
前記バックアップ処理部は、
予め定められた第１バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第１バックアップファイルに、未だ前記第１バックアップファイルに書き出されていないことを条件として書き出し、
前記第１バックアップ時刻から予め定められた時間後の第２バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第２バックアップファイルに、未だ前記第２バックアップファイルに書き出されていないことを条件として書き出し、
前記ブロック管理部は、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前に更新要求がされた場合であって、更新要求がされたブロックのデータが前記第１バックアップファイルに書き出されていない場合には、前記更新要求がされたブロックの更新前におけるデータを前記第１バックアップファイルに書き出し、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前にアクセス要求がされた場合であって、アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されており且つ書き出し後に更新されていない第１ブロックに対して、記録位置を示すポインタを前記第１バックアップファイル上の記録位置に変更する
データベース装置。
【請求項２】
前記ブロック管理部は、前記第１ブロックを検出できない場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されていない第２ブロックに対して、データを前記第１バックアップファイルに書き出すとともに記録位置を示すポインタを前記第１バックアップファイル上の記録位置に変更する
請求項１に記載のデータベース装置。
【請求項３】
前記ブロック管理部は、前記第１ブロックおよび前記第２ブロックが検出できない場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されており且つ書き出し後に更新された第３ブロックに対して、データを前記第２バックアップファイルに書き出すとともに記録位置を示すポインタを前記第２バックアップファイル上の記録位置に変更する
請求項２に記載のデータベース装置。
【請求項４】
前記ブロック管理部は、さらに、一定期間、参照要求がされていないことを条件として、前記第１ブロック、前記第２ブロックまたは前記第３ブロックに対して処理を実行する
請求項３に記載のデータベース装置。
【請求項５】
前記バックアップ処理部は、前記アクセス処理部の処理に影響を与えないバックグランドで前記ブロックのデータを前記第２記憶部に書き出す
請求項１から４の何れか１項に記載のデータベース装置。
【請求項６】
コンピュータを、データ集合を複数に分割した複数のブロックを記憶する揮発性の第１記憶部および不揮発性の第２記憶部を備えるデータベース装置として機能させるためのプログラムであって、
データ集合を複数に分割した複数のブロックのそれぞれに対するアクセス要求に応じた処理を実行するアクセス処理ステップと、
前記複数のブロックのそれぞれのバックアップ時刻におけるデータを前記第２記憶部に書き出すバックアップ処理ステップと、
アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された何れかのブロックのデータを前記第２記憶部に書き出して、前記アクセス要求がされた前記ブロックのデータを前記第２記憶部から前記第１記憶部に読み込むブロック管理ステップと、
を実行し、
前記バックアップ処理ステップでは、
予め定められた第１バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第１バックアップファイルに、未だ前記第１バックアップファイルに書き出されていないことを条件として書き出し、
前記第１バックアップ時刻から予め定められた時間後の第２バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第２バックアップファイルに、未だ前記第２バックアップファイルに書き出されていないことを条件として書き出し、
前記ブロック管理ステップでは、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前に更新要求がされた場合であって、更新要求がされたブロックのデータが前記第１バックアップファイルに書き出されていない場合には、前記更新要求がされたブロックの更新前におけるデータを前記第１バックアップファイルに書き出し、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前にアクセス要求がされた場合であって、アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されており且つ書き出し後に更新されていない第１ブロックに対して、記録位置を示すポインタを前記第１バックアップファイル上の記録位置に変更する
プログラム。
【請求項７】
データ集合を複数に分割した複数のブロックを記憶する揮発性の第１記憶部および不揮発性の第２記憶部を備えるデータベース装置におけるデータ処理方法であって、
データ集合を複数に分割した複数のブロックのそれぞれに対するアクセス要求に応じた処理を実行するアクセス処理ステップと、
前記複数のブロックのそれぞれのバックアップ時刻におけるデータを前記第２記憶部に書き出すバックアップ処理ステップと、
アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された何れかのブロックのデータを前記第２記憶部に書き出して、前記アクセス要求がされた前記ブロックのデータを前記第２記憶部から前記第１記憶部に読み込むブロック管理ステップと、
を含み、
前記バックアップ処理ステップでは、
予め定められた第１バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第１バックアップファイルに、未だ前記第１バックアップファイルに書き出されていないことを条件として書き出し、
前記第１バックアップ時刻から予め定められた時間後の第２バックアップ時刻における前記複数のブロックのそれぞれのデータを、ブロック毎に順次に、前記第２記憶部内の第２バックアップファイルに、未だ前記第２バックアップファイルに書き出されていないことを条件として書き出し、
前記ブロック管理ステップでは、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前に更新要求がされた場合であって、更新要求がされたブロックのデータが前記第１バックアップファイルに書き出されていない場合には、前記更新要求がされたブロックの更新前におけるデータを前記第１バックアップファイルに書き出し、
前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前にアクセス要求がされた場合であって、アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されており且つ書き出し後に更新されていない第１ブロックに対して、記録位置を示すポインタを前記第１バックアップファイル上の記録位置に変更する
データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース装置、プログラムおよびデータ処理方法に関する。
【背景技術】
【０００２】
従来より、インメモリデータベースが知られている。インメモリデータベースは、データ集合の全てまたは大部分を揮発性メモリに記憶するデータベースである。インメモリデータベースは、ディスク記録装置等との間のアクセスが少なくなるので、アクセス要求に対する応答を速くすることができる。【０００３】
インメモリデータベースは、定期的に、データ集合のデータイメージをディスク記録装置等にバックアップする。これにより、インメモリデータベースは、障害が発生して揮発性メモリに記憶されたデータ集合が失われても、バックアップ時点のデータ集合を回復することができる。【０００４】
また、インメモリデータベースは、更新アクセスのログをディスク記憶装置に記録する場合もある。この場合、インメモリデータベースは、バックアップ時点のデータ集合を読み出してからログを再実行することにより、コンピュータに障害が発生した時点のデータ集合を完全に回復することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１３９６９６号公報
【特許文献２】特開２００９−２１７６８８号公報
【特許文献３】特開２０１１−１８６５３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、インメモリデータベースは、データ集合のサイズが揮発性メモリの容量を超える場合、データ集合の一部をディスク記憶装置等に記憶させなければならない。このような場合、インメモリデータベースは、ディスク記憶装置等との間のアクセスが増加してしまう。特に、インメモリデータベースは、定期的にデータ集合をバックアップしているので一部のデータについては重複してディスク記録装置に記録されてしまい、効率が悪い。
【課題を解決するための手段】
【０００７】
実施形態のデータベース装置は、揮発性の第１記憶部と、不揮発性の第２記憶部と、データ集合を複数に分割した複数のブロックのそれぞれに対するアクセス要求に応じた処理を実行するアクセス処理部と、複数のブロックのそれぞれのバックアップ時刻におけるデータを第２記憶部に書き出すバックアップ処理部と、ブロック管理部とを備える。ブロック管理部は、アクセス要求がされたブロックが第１記憶部に記憶されておらず、且つ、第１記憶部の空き容量が予め定められた量以下である場合、第１記憶部に記憶された何れかのブロックのデータを第２記憶部に書き出して、アクセス要求がされたブロックのデータを第２記憶部から第１記憶部に読み込む。バックアップ処理部は、予め定められた第１バックアップ時刻における複数のブロックのそれぞれのデータを、ブロック毎に順次に、第２記憶部内の第１バックアップファイルに、未だ第１バックアップファイルに書き出されていないことを条件として書き出す。また、バックアップ処理部は、第１バックアップ時刻から予め定められた時間後の第２バックアップ時刻における複数のブロックのそれぞれのデータを、ブロック毎に順次に、第２記憶部内の第２バックアップファイルに、未だ第２バックアップファイルに書き出されていないことを条件として書き出す。さらに、ブロック管理部は、第１バックアップ時刻の以後であって第２バックアップ時刻より前に更新要求がされた場合であって、更新要求がされたブロックのデータが第１バックアップファイルに書き出されていない場合には、更新要求がされたブロックの更新前におけるデータを第１バックアップファイルに書き出す。さらに、ブロック管理部は、前記第１バックアップ時刻の以後であって前記第２バックアップ時刻より前にアクセス要求がされた場合であって、アクセス要求がされたブロックが前記第１記憶部に記憶されておらず、且つ、前記第１記憶部の空き容量が予め定められた量以下である場合、前記第１記憶部に記憶された複数のブロックのうちの前記第１バックアップファイルに書き出されており且つ書き出し後に更新されていない第１ブロックに対して、記録位置を示すポインタを前記第１バックアップファイル上の記録位置に変更する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態に係るデータベース装置の機能構成を示す図である。
【図２】図２は、バックアップ処理およびログの記録処理を説明するための図である。
【図３】図３は、属性情報の内容を示す図である。
【図４】図４は、ブロック管理部による複数のブロックの管理処理を説明するための図である。
【図５】図５は、ブロック管理部およびバックアップ処理部による、ブロックのデータイメージをバックアップファイルへと書き出す処理を説明するための図である。
【図６】図６は、バックアップ処理部の処理フローを示す図である。
【図７】図７は、アクセス要求を受け付けた場合におけるブロック管理部の処理フローを示す図である。
【図８】図８は、図７のステップＳ２３の処理フローを示す図である。
【図９】図９は、第１〜第３タイプのブロックの属性情報を示す図である。
【発明を実施するための形態】
【０００９】
図１は、実施形態に係るデータベース装置１０の機能構成を示す図である。データベース装置１０は、データベースに含まれるデータ集合に対するアクセス要求（例えば、参照または更新）を、クライアント端末またはアプリケーションサーバ等からネットワークを介して受信する。そして、データベース装置１０は、受信したアクセス要求に応じた処理を実行する。
【００１０】
データベース装置１０は、揮発性メモリ２１と、ストレージ装置２２と、アクセス処理部２３と、ブロック管理部２４と、バッファメモリ２５と、バックアップ処理部２６と、ログ管理部２７と、リカバリ部２８とを備える。アクセス処理部２３、ブロック管理部２４、バックアップ処理部２６、ログ管理部２７およびリカバリ部２８は、コンピュータがプログラムを実行することにより実現される。アクセス処理部２３、ブロック管理部２４、バックアップ処理部２６、ログ管理部２７およびリカバリ部２８は、一部または全部がハードウェアにより実現されてもよい。
【００１１】
データベース装置１０は、データベースに含まれるデータ集合を複数のブロックに分割して管理する。複数のブロックのそれぞれは、揮発性メモリ２１およびストレージ装置２２の少なくとも一方に記憶される。
を記憶する。
【００１２】
揮発性メモリ２１は、コンピュータに備えられるメモリ装置であって、電源が供給されているときにデータを記憶することができるが、電源の供給が停止するとデータを消失する。ストレージ装置２２は、電源が供給されているときにデータの書き込みおよび読み出しがされるが、電源の供給が停止してもデータを消失しない。ストレージ装置２２は、例えば、ハードディスクドライブ装置等のコンピュータの内部または外部に接続される不揮発性の記憶装置である。
【００１３】
また、ストレージ装置２２は、バックアップ時刻での複数のブロックのそれぞれのデータを記憶する。ストレージ装置２２は、一例として、複数のブロックのそれぞれのデータイメージを記憶する。なお、バックアップ時刻は、例えば予め定められた間隔毎に設定されている。
【００１４】
なお、複数のブロックのそれぞれのデータは、ストレージ装置２２内のバックアップファイルに書き出される。バックアップファイルは、バックアップ時刻のそれぞれに対応して生成される。
【００１５】
また、ストレージ装置２２は、データ集合の変更の履歴を表すログを記憶する。ログは、受信したアクセス要求の履歴であってもよい。
【００１６】
なお、ログは、ストレージ装置２２内のログファイルに書き込まれる。ログファイルは、バックアップ時刻と次のバックアップ時刻との間の期間毎に生成される。
【００１７】
アクセス処理部２３は、複数のブロックのそれぞれに対するアクセス要求に応じた処理を実行する。アクセス処理部２３は、一例として、参照要求を受信した場合には、揮発性メモリ２１に記憶された参照要求の対象のブロックから対象のデータを読み出して返信する。また、アクセス処理部２３は、一例として、更新要求を受信した場合には、揮発性メモリ２１に記憶された更新要求の対象のブロックにおける対象のデータを更新する。さらに、アクセス処理部２３は、更新要求を受信した場合には、ログ管理部２７に命令を送信して、ログをログファイルに書き込ませる。
【００１８】
ブロック管理部２４は、複数のブロックのそれぞれを揮発性メモリ２１およびストレージ装置２２の少なくとも一方に記憶させるように、複数のブロックの記録位置を管理する。具体的には、ブロック管理部２４は、複数のブロックの全てを可能な限り揮発性メモリ２１に記憶させるように、それぞれのブロックの記録位置を制御する。
【００１９】
ただし、ブロック管理部２４は、図２に示されるように、複数のブロックの全てを揮発性メモリ２１に記憶させることができない場合（例えば揮発性メモリ２１の容量が複数のブロックの全体のデータ量より小さい場合等）には、複数のブロックのうちの一部をストレージ装置２２に記憶させる。
【００２０】
また、ブロック管理部２４は、アクセス要求がされたブロックが揮発性メモリ２１に記憶されていない場合、揮発性メモリ２１の空き容量が予め定められた量より大きいことを条件として、アクセス要求がされたブロックのデータをストレージ装置２２から揮発性メモリ２１に読み込む。また、ブロック管理部２４は、アクセス要求がされたブロックが揮発性メモリ２１に記憶されておらず、且つ、揮発性メモリ２１の空き容量が予め定められた量以下である場合、揮発性メモリ２１に記憶された何れかのブロックのデータをストレージ装置２２に書き出す。その後、ブロック管理部２４は、アクセス要求がされたブロックのデータをストレージ装置２２から揮発性メモリ２１に読み込む。
【００２１】
なお、ブロック管理部２４は、ブロックをストレージ装置２２に書き出す場合、ストレージ装置２２のバックアップファイルにデータを書き出す。また、ブロック管理部２４は、更新要求を受けた場合であって、更新要求を受けた対象のブロックのデータがバックアップファイルに未だ書き出されていない場合には、そのブロックの更新前のデータをバックアップファイルに書き出してから、データを更新させる。
【００２２】
また、ブロック管理部２４は、図３に示されるような、複数のブロックのそれぞれについての属性情報を管理する。属性情報は、最終バックアップ時刻、最終参照時刻、ダーティフラグ、ラッチフラグ、および、記録位置を示すポインタを含む。
【００２３】
最終バックアップ時刻とは、最後にデータを書き出したバックアップ時刻である。最終参照時刻とは、更新要求を含む参照要求を最後に処理した時刻を示す。ダーティフラグとは、最後にデータを書き出した後に、更新をしたか否かを示す。本例においては、ダーティフラグは、最後にデータを書き出した後に更新をした場合には“１”とされ、最後にデータを書き出した後に更新をしていない場合には“０”とされる。
【００２４】
ラッチフラグは、更新処理中であるか否かを示す。本例では、ラッチフラグは、更新処理中である場合には“１”とされ、更新処理中ではない場合には“０”とされる。記録位置を示すポインタは、対象のブロックが記録されている揮発性メモリ２１またはストレージ装置２２上の記録位置（例えば、アドレス）を示す。
【００２５】
バッファメモリ２５は、ブロック管理部２４が揮発性メモリ２１からストレージ装置２２へとブロックを追い出す場合に、揮発性メモリ２１に記憶されたブロックを一時的に記憶する。これにより、バッファメモリ２５は、ストレージ装置２２から揮発性メモリ２１にブロックを読み込むための揮発性メモリ２１上の空き容量を短期間に生成することができる。
【００２６】
バックアップ処理部２６は、複数のブロックのバックアップ処理を実行する。具体的には、バックアップ処理部２６は、複数のブロックのそれぞれのバックアップ時刻におけるデータを、ストレージ装置２２のバックアップファイルに書き出す。この場合に、バックアップ処理部２６は、複数のブロックのうちストレージ装置２２に未だ書き出されていないブロックのデータを書き出す。例えば、バックアップ処理部２６は、ブロック毎に順次に選択していき、対応するブロックのバックアップ時刻のデータを、ストレージ装置２２のバックアップファイルに未だ書き出されていないことを条件として書き出す。
【００２７】
例えば、バックアップ処理部２６は、図４に示されるように、複数のバックアップ時刻Ｔ１、Ｔ２、Ｔ３、…のそれぞれに対応するバックアップファイルを生成する。そして、バックアップ処理部２６は、それぞれのバックアップ時刻Ｔ１、Ｔ２、Ｔ３、…での複数のブロックのデータを、対応するバックアップファイルに書き出す。
【００２８】
ログ管理部２７は、複数のブロックのログの記録処理を実行する。具体的には、ログ管理部２７は、データ集合の変更の履歴を表すログをログファイルに書き込む。ログは、受信したアクセス要求の履歴であってもよい。本例では、ログ管理部２７は、アクセス処理部２３から命令を受信したことに応じて、ログをログファイルに書き込む。
【００２９】
例えば、ログ管理部２７は、図４に示されるように、バックアップ時刻とバックアップ時刻との間の期間毎に、ログファイルを生成する。そして、ログ管理部２７は、バックアップ時刻とバックアップ時刻との間の期間におけるログを、対応するログファイルに書き込む。
【００３０】
リカバリ部２８は、起動時または障害発生後のリカバリ時に、バックアップファイルおよびログファイルを読み出して、複数のブロックのそれぞれのデータを回復する。具体的には、リカバリ部２８は、複数のブロックの全てのデータの書き出しが完了したバックアップファイルのうちの最新のバックアップ時刻のバックアップファイルを読み出して、複数のブロックの全てのデータを回復する。続いて、リカバリ部２８は、データを回復できたバックアップ時刻からシャットダウン時または障害発生時までのログを順次に再実行する。これにより、リカバリ部２８は、シャットダウン時または障害発生の直前における、複数のブロックのデータを回復することができる。
【００３１】
図５は、ブロック管理部２４およびバックアップ処理部２６による、ブロックのデータをバックアップファイルへと書き出す処理を説明するための図である。
【００３２】
ある任意のバックアップ時刻を第１バックアップ時刻Ｔ１とし、第１バックアップ時刻Ｔ１の次のバックアップ時刻を第２バックアップ時刻Ｔ２とする。また、第２バックアップ時刻Ｔ２の次のバックアップ時刻を第３バックアップ時刻Ｔ３とする。
【００３３】
また、第１バックアップ時刻Ｔ１でのブロックのデータを格納するバックアップファイルを、第１バックアップファイルＦ１とする。また、第２バックアップ時刻Ｔ２でのブロックのデータを格納するバックアップファイルを、第２バックアップファイルＦ２とする。
【００３４】
この場合、第１バックアップ時刻Ｔ１から第２バックアップ時刻Ｔ２までの間に、バックアップ処理部２６は、第１バックアップ時刻Ｔ１における複数のブロックのそれぞれのデータを、ブロック毎に順次に、ストレージ装置２２内の第１バックアップファイルＦ１に書き出す。この場合に、バックアップ処理部２６は、ブロック毎に第１バックアップファイルＦ１に書き出されているかいないかを判断し、ブロック管理部２４により未だ第１バックアップファイルＦ１に書き出されていないことを条件として、ストレージ装置２２に書き出す。すなわち、バックアップ処理部２６は、ブロック管理部２４が既に、第１バックアップ時刻Ｔ１におけるデータを第１バックアップファイルＦ１に書き出しているブロックについては、ストレージ装置２２への書き出しをしない。
【００３５】
また、第２バックアップ時刻Ｔ２から第３バックアップ時刻Ｔ３までの間に、バックアップ処理部２６は、第２バックアップ時刻Ｔ２における複数のブロックのそれぞれのデータを、ブロック毎に順次に、ストレージ装置２２内の第２バックアップファイルＦ２に、ブロック管理部２４により未だ第２バックアップファイルＦ２に書き出されていないことを条件として書き出す。
【００３６】
なお、バックアップ処理部２６は、アクセス処理部２３の処理に影響を与えないバックグランドで、ブロックのデータをストレージ装置２２に書き出す。バックグラウンドでの処理とは、例えば、データベース装置１０が複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備える場合に、アクセス要求に応じた処理を実行していない一部のＣＰＵを用いて行う処理である。また、バックグランドでの処理とは、例えば、ＣＰＵが時分割処理をしている場合には、アクセス要求に応じた処理を実行していない時間帯を用いて行う処理である。
【００３７】
ブロック管理部２４は、アクセス要求を受けたことに応じて、書出処理Ｐ１、ポインタ書換処理Ｐ２、第１追出処理Ｐ３、第２追出処理Ｐ４または第３追出処理Ｐ５を実行する。
【００３８】
ブロック管理部２４は、書出処理Ｐ１として、更新要求がされたブロックの更新前におけるデータを、第１バックアップファイルＦ１に書き出す処理を実行する。ブロック管理部２４は、この書出処理Ｐ１を、第１バックアップ時刻Ｔ１の以後であって第２バックアップ時刻Ｔ２より前に更新要求がされた場合であって、更新要求がされたブロックのデータが第１バックアップファイルＦ１に書き出されていない場合に実行する。
【００３９】
これにより、ブロック管理部２４は、バックアップ処理部２６によりバックアップがされるまで待機せずに、更新処理を実行することができる。また、バックアップ処理部２６は、更新要求がされたブロックについてバックアップ処理をしなくてもよいので、ストレージ装置２２へのアクセスを減らすことができる。
【００４０】
ブロック管理部２４は、ポインタ書換処理Ｐ２として、揮発性メモリ２１に記憶された複数のブロックのうちの第１バックアップファイルＦ１に書き出されており且つ書き出し後に更新されていない第１タイプのブロックに対して、記録位置を示すポインタを第１バックアップファイルＦ１上の記録位置に変更する処理を実行する。ブロック管理部２４は、このポインタ書換処理Ｐ２を、第１バックアップ時刻Ｔ１の以後であって第２バックアップ時刻Ｔ２より前にアクセス要求がされた場合であって、アクセス要求がされたブロックが揮発性メモリ２１に記憶されておらず、且つ、揮発性メモリ２１の空き容量が予め定められた量以下である場合に、実行する。さらに、ブロック管理部２４は、一定期間、参照要求がされていないことを条件として、第１タイプのブロックに対してポインタ書換処理Ｐ２を実行してもよい。
【００４１】
これにより、ブロック管理部２４は、アクセス要求がされたブロックが揮発性メモリ２１に記憶されていない場合に、ストレージ装置２２に対するアクセスをしないで、揮発性メモリ２１に空き容量を生成することができる。また、ブロック管理部２４は、一定期間、参照要求がされていないことをさらに条件とすることにより、直近にアクセス要求がされる可能性の少ないブロックを優先して揮発性メモリ２１から削除することができる。
【００４２】
また、ブロック管理部２４は、第１追出処理Ｐ３として、揮発性メモリ２１に記憶された複数のブロックのうちの第１バックアップファイルＦ１に書き出されていない第２タイプのブロックに対して、データを第１バックアップファイルＦ１に書き出すとともに記録位置を示すポインタを第１バックアップファイルＦ１上の記録位置に変更する処理を実行する。ブロック管理部２４は、この第１追出処理Ｐ３を、第１タイプのブロックを検出できない場合に実行する。さらに、ブロック管理部２４は、一定期間、参照要求がされていないことを条件として、第２タイプのブロックに対してこの第１追出処理Ｐ３を実行してもよい。
【００４３】
これにより、ブロック管理部２４は、バックアップ処理部２６により何れストレージ装置２２へと書き出されるブロックを、バックアップ処理部２６に代わりストレージ装置２２に書き出すことができる。この結果、ブロック管理部２４は、ストレージ装置２２に対する重複したアクセスを減らすことができる。
【００４４】
また、ブロック管理部２４は、第２追出処理Ｐ４として、揮発性メモリ２１に記憶された複数のブロックのうちの第１バックアップファイルＦ１に書き出されており且つ書き出し後に更新された第３タイプのブロックに対して、データを第２バックアップファイルＦ２に書き出すとともに記録位置を示すポインタを第２バックアップファイルＦ２上の記録位置に変更する処理を実行する。ブロック管理部２４は、この第２追出処理Ｐ４を、第１タイプのブロックおよび第２タイプのブロックが検出できない場合に実行する。さらに、ブロック管理部２４は、一定期間、参照要求がされていないことを条件として、第３タイプのブロックに対して第２追出処理Ｐ４を実行してもよい。
【００４５】
これにより、ブロック管理部２４は、バックアップ処理部２６により、第２バックアップファイルＦ２に書き出される可能性のあるブロックを、バックアップ処理部２６に代わり、予めストレージ装置２２に書き出すことができる。この結果、ブロック管理部２４は、ストレージ装置２２に対する重複したアクセスを減らすことができる。
【００４６】
また、ブロック管理部２４は、第３追出処理Ｐ５として、揮発性メモリ２１に記憶された複数のブロックのうちの何れかの第４ブロックのデータを第２バックアップファイルＦ２に書き出すとともに、第４ブロックの記録位置を示すポインタを第２バックアップファイルＦ２上の記録位置に変更する処理を実行する。ブロック管理部２４は、この第３追出処理Ｐ５を、第１タイプのブロック、第２タイプのブロックおよび第３タイプのブロックの何れも検出できない場合に実行する。この場合、ブロック管理部２４は、一定期間に、参照要求がされたブロックであっても、第３追出処理Ｐ５を実行する。
【００４７】
なお、ブロック管理部２４は、第３追出処理Ｐ５として第２バックアップファイルＦ２に書き出すことに代えてストレージ装置２２上の他の位置に第４のブロックを書き出してもよい。例えば、ブロック管理部２４は、第３追出処理Ｐ５として、ストレージ装置２２上における揮発性メモリ２１として仮想的に動作する仮想メモリ領域に、第４ブロックを書き出してもよい。この場合には、ブロック管理部２４は、第４ブロックの記録位置を示すポインタを、揮発性メモリ２１上から変更させなくてよい。
【００４８】
図６は、バックアップ処理部２６の処理フローを示す図である。バックアップ処理部２６は、予め定められたバックアップ時刻となる毎に、以下のステップＳ１１からステップＳ１６の処理をバックグラウンドで実行する。
【００４９】
まず、ステップＳ１１とステップＳ１６との間において、バックアップ処理部２６は、ブロック毎にループ処理を実行する。ループ処理内では、まず、ステップＳ１２において、バックアップ処理部２６は、対象のブロックの属性情報の最終バックアップ時刻を参照して、対象のブロックがブロック管理部２４により対応するバックアップファイルに書き出し済みか否かを判断する。対象のブロックが対応するバックアップファイルに書き出し済みである場合には（ステップＳ１２のＹｅｓ）、バックアップ処理部２６は、処理をステップＳ１６に進める。
【００５０】
対象のブロックが対応するバックアップファイルに書き出し済みではない場合には（ステップＳ１２のＮｏ）、ステップＳ１３において、バックアップ処理部２６は、対象のブロックの属性情報のラッチフラグを“１”に書き換える。続いて、ステップＳ１４において、バックアップ処理部２６は、対象のブロックのデータを、ストレージ装置２２上の対応するバックアップファイルにバックグラウンドで書き出す。
【００５１】
ステップＳ１４の書き出しが終了すると、ステップＳ１５において、バックアップ処理部２６は、対象のブロックの属性情報のラッチフラグを“０”に書き換える。そして、バックアップ処理部２６は、処理をステップＳ１６に進める。
【００５２】
ステップＳ１６において、バックアップ処理部２６は、複数のブロックの全てに対して処理を実行していない場合には処理をステップＳ１１に戻す。複数のブロックの全てに対して処理を実行した場合には、バックアップ処理部２６は、本フローの処理を終了する。
【００５３】
以上の処理により、バックアップ処理部２６は、バックアップ時刻における複数のブロックのそれぞれのデータを、ブロック毎に順次に、ストレージ装置２２内の対応するバックアップファイルに書き出すことができる。そして、バックアップ処理部２６は、ブロック管理部２４により既にバックアップファイルに書き出されているブロックについては、書き出し処理をしないでよいので、ストレージ装置２２との間のアクセスを減らすことができる。
【００５４】
図７は、アクセス要求を受け付けた場合におけるブロック管理部２４の処理フローを示す図である。ブロック管理部２４は、アクセス処理部２３が外部からアクセス要求を受信する毎に、以下のステップＳ２１からステップＳ３１の処理を実行する。
【００５５】
まず、ステップＳ２１において、ブロック管理部２４は、アクセス要求の対象のブロックが揮発性メモリ２１に記憶されているか否かを判断する。揮発性メモリ２１に記憶されている場合（ステップＳ２１のＹｅｓ）、ブロック管理部２４は、処理をステップＳ２５に進める。揮発性メモリ２１に記憶されていない場合（ステップＳ２１のＮｏ）、ブロック管理部２４は、処理をステップＳ２２に進める。
【００５６】
ステップＳ２２において、ブロック管理部２４は、揮発性メモリ２１に予め定められた容量以上の空き容量があるか否かを判断する。より具体的には、ブロック管理部２４は、揮発性メモリ２１に新たなブロックを追加で記憶できる程度の空き容量があるか否かを判断する。空き容量がある場合（ステップＳ２２のＹｅｓ）、ブロック管理部２４は、処理をステップＳ２４に進める。
【００５７】
空き容量が無い場合（ステップＳ２２のＮｏ）、ステップＳ２３において、ブロック管理部２４は、揮発性メモリ２１の他のブロックをストレージ装置２２に追い出す処理を実行する。なお、ステップＳ２３の追い出し処理の詳細については、図８でさらに説明する。ブロック管理部２４は、ステップＳ２３の処理を終えると、処理をステップＳ２４に進める。
【００５８】
ステップＳ２４において、ブロック管理部２４は、アクセス要求の対象のブロックをストレージ装置２２から揮発性メモリ２１に読み込む。これにより、ブロック管理部２４は、アクセス要求に対する処理をアクセス処理部２３に実行させることができる。
【００５９】
続いて、ステップＳ２５において、ブロック管理部２４は、アクセス要求が、参照処理（すなわち、データの追加、変更がされない処理）であるか、更新処理（すなわち、データの追加、変更がされる処理）であるかを判断する。
【００６０】
参照処理である場合（ステップＳ２５の参照）、ブロック管理部２４は、処理をステップＳ２６に進める。ステップＳ２６において、ブロック管理部２４は、アクセス処理部２３にアクセス要求に応じた参照処理を実行させるとともに、対象のブロックの属性情報の最終参照時刻を書き換える。そして、ブロック管理部２４は、ステップＳ２６の処理を終えると、本フローを終了する。
【００６１】
更新処理である場合（ステップＳ２５の更新）、ステップＳ２７において、ブロック管理部２４は、対象のブロックの属性情報のラッチフラグを“１”に書き換える。続いて、ステップＳ２８において、ブロック管理部２４は、対象のブロックの属性情報の最終バックアップ時刻を参照して、対象のブロックが、現在の時刻より前の直近のバックアップ時刻のバックアップファイルに書き出し済みであるか否かを判断する。
【００６２】
対象のブロックが対応するバックアップファイルに書き出し済みである場合には（ステップＳ２８のＹｅｓ）、ブロック管理部２４は、処理をステップＳ３０に進める。対象のブロックが対応するバックアップファイルに書き出し済みではない場合には（ステップＳ２８のＮｏ）、ブロック管理部２４は、処理をステップＳ２９に進める。
【００６３】
ステップＳ２９において、ブロック管理部２４は、書出処理Ｐ１を実行する。すなわち、ブロック管理部２４は、対象のブロックのデータを、ストレージ装置２２上における、現在の時刻より前で直近のバックアップ時刻のバックアップファイルに書き出す処理を実行する。これにより、ブロック管理部２４は、更新要求がされたブロックのデータが未だバックアップファイルに書き出されていない場合に、更新前のブロックのデータをバックアップファイルに書き出すことができる。
【００６４】
さらに、ブロック管理部２４は、書き出しが終了すると、対象のブロックの属性情報の最終バックアップ時刻を書き換える。ステップＳ２９の処理を終えると、ブロック管理部２４は、処理をステップＳ３０に進める。
【００６５】
ステップＳ３０において、ブロック管理部２４は、アクセス処理部２３にアクセス要求に応じた更新処理を実行させる。これとともに、ブロック管理部２４は、対象のブロックの属性情報の最終参照時刻を書き換える。さらに、ブロック管理部２４は、バックアップファイルに書き出した後に更新がされたことを示すダーティフラグを“１”に書き換える。
【００６６】
続いて、ステップＳ３１において、ブロック管理部２４は、対象のブロックの属性情報のラッチフラグを“０”に書き換える。そして、ブロック管理部２４は、ステップＳ３１の処理を終えると、本フローを終了する。
【００６７】
以上のようにブロック管理部２４は、更新要求がされたブロックのデータがバックアップファイルに書き出されていない場合には、更新要求がされたブロックの更新前におけるデータをバックアップファイルに書き出してから、更新をすることができる。
【００６８】
これにより、ブロック管理部２４は、バックアップがされるまで待機せずに更新処理を実行することができる。また、ブロック管理部２４は、更新要求がされたブロックについてバックアップ処理部２６にバックアップ処理させないようにするので、ストレージ装置２２との間のアクセスを減らすことができる。
【００６９】
図８は、図７のステップＳ２３の処理フローを示す図である。ブロック管理部２４は、図７のステップＳ２３において、以下のステップＳ４１〜ステップＳ５５の処理を実行する。
【００７０】
ブロック管理部２４は、まず、一定数のブロックのそれぞれについて、ステップＳ４１からステップＳ４３との間のループ処理を実行する。ここで一定数のブロックは、揮発性メモリ２１に記憶されている複数のブロックの全てまたは一部のブロックである。
【００７１】
ループ処理内のステップＳ４２において、ブロック管理部２４は、対象のブロックの属性情報を確認する。より具体的には、ブロック管理部２４は、図９に示されるように、属性情報の最終参照時間、最終バックアップ時刻およびダーティフラグを参照して、第１タイプ、第２タイプおよび第３タイプのブロックが存在するかを検出する。
【００７２】
第１タイプのブロックは、現時点から一定時間前までに参照要求（更新要求も含む）が無く、現在の時刻より前の直近のバックアップ時刻のバックアップファイルへの書き出しが完了しており、且つ、ダーティフラグが“０”であるブロックである。また、第２タイプのブロックは、現時点から一定時間前までに参照要求（更新要求も含む）が無く、現在の時刻より前の直近のバックアップ時刻のバックアップファイルへの書き出しが完了していないブロックである。第３タイプのブロックは、現時点から一定時間前までに参照要求（更新要求も含む）が無く、現在の時刻より前の直近のバックアップ時刻のバックアップファイルへの書き出しが完了しており、且つ、ダーティフラグが“１”であるブロックである。
【００７３】
そして、ブロック管理部２４は、一定数のブロックの全てについて属性情報の確認が完了すると、処理をステップＳ４４に進める。
【００７４】
ステップＳ４４において、ブロック管理部２４は、一定のブロックの中に第１タイプのブロックがあるか否かを判断する。第１タイプのブロックがある場合（ステップＳ４４のＹｅｓ）、ステップＳ４５において、ブロック管理部２４は、ラッチフラグが“１”であるか否かを判断する。ブロック管理部２４は、ラッチフラグが“１”である場合には（ステップＳ４５のＹｅｓ）、処理をステップＳ４４に戻して、再度、第１タイプのブロックがあるか否かを判断する。
【００７５】
第１タイプのブロックがあり、そのブロックのラッチフラグが“１”ではない場合（ステップＳ４５のＮｏ）、ブロック管理部２４は、ポインタ書換処理Ｐ２を実行する。すなわち、ブロック管理部２４は、そのブロックの属性情報の記録位置を示すポインタを、揮発性メモリ２１上からストレージ装置２２上のバックアップファイル内の記録位置に変更する。
【００７６】
このようなポインタ書換処理Ｐ２を実行することにより、ブロック管理部２４は、既にバックアップファイルへの書き出しが完了しているブロックをストレージ装置２２に記憶されていることとする処理のみをするので、ストレージ装置２２との間のアクセスを発生させずに揮発性メモリ２１に空き容量を生成することができる。
【００７７】
一定数のブロックの中に第１タイプのブロックが無いまたは第１タイプのブロックのラッチフラグが“１”であった場合（ステップＳ４４のＮｏ）、ブロック管理部２４は、処理をステップＳ４７に進める。
【００７８】
ステップＳ４７において、ブロック管理部２４は、一定のブロックの中に第２タイプのブロックがあるか否かを判断する。第２タイプのブロックがある場合（ステップＳ４７のＹｅｓ）、ステップＳ４８において、ブロック管理部２４は、ラッチフラグが“１”であるか否かを判断する。ブロック管理部２４は、ラッチフラグが“１”である場合には（ステップＳ４８のＹｅｓ）、処理をステップＳ４７に戻して、再度、第２タイプのブロックがあるか否かを判断する。
【００７９】
第２タイプのブロックがあり、そのブロックのラッチフラグが“１”ではない場合（ステップＳ４８のＮｏ）、ステップＳ４９において、ブロック管理部２４は、第１追出処理Ｐ３を実行する。すなわち、ブロック管理部２４は、そのブロックのデータをストレージ装置２２上の現在の時刻より前の直近のバックアップ時刻のバックアップファイルに書き出す。これとともに、ブロック管理部２４は、そのブロックにおける、属性情報の記録位置を示すポインタを、揮発性メモリ２１上からストレージ装置２２上のバックアップファイル内の記録位置に変更する。
【００８０】
このような第１追出処理Ｐ３を実行することにより、ブロック管理部２４は、データが未だバックアップファイルに書き出されていない場合に、バックアップ処理部２６に代わり、そのブロックのデータをバックアップファイルに書き出すことができる。これにより、ブロック管理部２４は、ストレージ装置２２との間のアクセスを減らすことができる。
【００８１】
一定数のブロックの中に第２タイプのブロックが無いまたは第２タイプのブロックのラッチフラグが“１”であった場合（ステップＳ４７のＮｏ）、ブロック管理部２４は、処理をステップＳ５０に進める。
【００８２】
ステップＳ５０において、ブロック管理部２４は、一定のブロックの中に第３タイプのブロックがあるか否かを判断する。第３タイプのブロックがある場合（ステップＳ５０のＹｅｓ）、ステップＳ５１において、ブロック管理部２４は、ラッチフラグが“１”であるか否かを判断する。ブロック管理部２４は、ラッチフラグが“１”である場合には（ステップＳ５１のＹｅｓ）、処理をステップＳ５０に戻して、再度、第３タイプのブロックがあるか否かを判断する。
【００８３】
第３タイプのブロックがあり、そのブロックのラッチフラグが“１”ではない場合（ステップＳ５１のＮｏ）、ステップＳ５２において、ブロック管理部２４は、第２追出処理Ｐ４を実行する。すなわち、ブロック管理部２４は、そのブロックのデータを現在の時刻より後で直近のバックアップ時刻のバックアップファイルに書き出す。これとともに、ブロック管理部２４は、そのブロックにおける、属性情報の記録位置を示すポインタを、揮発性メモリ２１上からストレージ装置２２上のバックアップファイル内の記録位置に変更する。
【００８４】
このように、ブロック管理部２４は、現在の時刻より前のバックアップファイルには既にデータが書き出されているブロックに対して、バックアップ処理部２６が将来において書き出すべきバックアップファイルに、データを予め書き出すことができる。これにより、ブロック管理部２４は、将来において、バックアップ処理部２６が対象のブロックに対するバックアップ処理を実行しなくてもよいので、ストレージ装置２２との間のアクセスを減らすことができる。
【００８５】
一定数のブロックの中に第３タイプのブロックが無いまたは第３タイプのブロックのラッチフラグが“１”であった場合（ステップＳ５０のＮｏ）、ブロック管理部２４は、処理をステップＳ５３に進める。
【００８６】
ステップＳ５３において、ブロック管理部２４は、一定のブロックの中から、何れか１つのブロックを選択する。ここでは、ブロック管理部２４は、第１タイプから第３タイプの何れでもないブロック（第４タイプ）を選択する。すなわち、ブロック管理部２４は、一定時間前までに参照要求（更新要求も含む）があったブロックを選択する。
【００８７】
何れかのブロックを選択すると、ステップＳ５４において、ブロック管理部２４は、ラッチフラグが“１”であるか否かを判断する。ブロック管理部２４は、ラッチフラグが“１”である場合には（ステップＳ５４のＹｅｓ）、処理をステップＳ５３に戻して、再度、他のブロックを選択する。
【００８８】
ラッチフラグが“１”ではないブロックを選択した場合（ステップＳ５４のＮｏ）、ステップＳ５５において、ブロック管理部２４は、第３追出処理Ｐ５を実行する。すなわち、ブロック管理部２４は、データを現在の時刻より後の直近のバックアップ時刻のバックアップファイルに書き出す。これとともに、ブロック管理部２４は、そのブロックにおける、属性情報の記録位置を示すポインタを、ストレージ装置２２上のバックアップファイル内の記録位置に変更する。
【００８９】
なお、ステップＳ５５において、ブロック管理部２４は、そのブロックのデータをストレージ装置２２上のバックアップファイルではない領域に書き出してもよい。例えば、ブロック管理部２４は、ストレージ装置２２上における仮想メモリ領域に、ブロックのデータを書き出してもよい。この場合には、ブロック管理部２４は、第４ブロックの記録位置を示すポインタを、揮発性メモリ２１上から変更させなくてもよい。ブロック管理部２４は、ストレージ装置２２上における仮想メモリ領域に書き出すことにより、再度、ブロックに対してアクセス要求があった場合に、バックアップファイルに書き出すよりも高速にストレージ装置２２とアクセスすることができる。
【００９０】
そして、ブロック管理部２４は、ステップＳ４６、ステップＳ４９、ステップＳ５２またはステップＳ５５の処理を終了すると、処理を図７のフローに戻す。
【００９１】
以上のように、本実施形態に係るデータベース装置１０は、揮発性メモリ２１に記憶できない一部の複数のブロックをストレージ装置２２へと退避させる処理と、バックアップ処理部２６により複数のブロックのデータをストレージ装置２２へとバックアップする処理との重複を回避している。これにより、データベース装置１０は、ストレージ装置２２との間のアクセスを減らして、応答速度を高速化することができる。
【００９２】
また、本実施形態のデータベース装置１０で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００９３】
また、本実施形態のデータベース装置１０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態のデータベース装置１０で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００９４】
また、本実施形態のデータベース装置１０のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００９５】
本実施形態のデータベース装置１０で実行されるプログラムは、上述した各部（アクセス処理部２３、ブロック管理部２４、バックアップ処理部２６、ログ管理部２７およびリカバリ部２８）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、アクセス処理部２３、ブロック管理部２４、バックアップ処理部２６、ログ管理部２７およびリカバリ部２８が主記憶装置上に生成されるようになっている。
【００９６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９７】
１０  データベース装置
２１  揮発性メモリ
２２  ストレージ装置
２３  アクセス処理部
２４  ブロック管理部
２５  バッファメモリ
２６  バックアップ処理部
２７  ログ管理部
２８  リカバリ部
【図１】
0005719083.tif 000002
【図２】
0005719083.tif 000003
【図３】
0005719083.tif 000004
【図４】
0005719083.tif 000005
【図５】
0005719083.tif 000006
【図６】
0005719083.tif 000007
【図７】
0005719083.tif 000008
【図８】
0005719083.tif 000009
【図９】
0005719083.tif 000010