(57)【要約】【課題】データベース回復のために採取されるログファイルのデータ量を削減する。【解決手段】データベースの更新に際してログ取得部１０９の更新前ログ作成部１１２は、データベース管理制御部１０７から更新前データを取得し、ログファイルにこの更新前データを出力する。更新後ログ作成部１１４は、この更新前データと更新後データを取得する。差分情報作成部１１３は、更新前データに対する更新後データの差分データを作成する。更新後ログ作成部１１４は、差分データのサイズが前記更新後データのサイズより小さい場合は、ログファイルに差分データを出力し、そうでない場合はログファイルに更新後データを出力する。【選択図】図１
2004062759.tif 000002
【特許請求の範囲】
【請求項１】
データベースの回復のためにデータベースログを採取するデータベースログの管理方法であって、前記データベースの更新に際して更新前データを取得し、ログファイルに前記更新前データを出力し、前記更新前データに対応する更新後データを取得し、前記更新前データに対する前記更新後データの変更された部分である差分データを作成し、前記差分データのサイズと前記更新後データのサイズとを比較して前記差分データのサイズが前記更新後データのサイズより小さい場合には前記ログファイルに前記差分データを出力し、前記差分データのサイズが前記更新後データのサイズ以上の場合には前記ログファイルに前記更新後データを出力することを特徴とするデータベースログの管理方法。
【請求項２】
前記更新前データ及び前記更新後データは、前記データベース中の行方向レコードと列方向フィールドのうちのいずれか一方であることを特徴とする請求項１記載のデータベースログの管理方法。
【請求項３】
前記差分データのサイズと前記更新後データのサイズとを比較する代わりに、前記差分データのサイズと前記更新後データのサイズに所定の係数Ｎを掛けた数値とを比較することを特徴とする請求項１記載のデータベースログ管理方法。
【請求項４】
前記データベースの回復に際して、更新前データを回復に用いる場合には前記ログファイルから該当する前記更新前データを取得して前記データベースに反映し、更新後データを回復に用いる場合には該当する前記更新前データと記録されている前記更新後データ又は前記差分データとを取得し、前記更新後データが記録されている場合には前記更新後データを前記データベースに反映し、前記差分データが記録されている場合には前記更新前データと前記差分データとから更新後データを復元して前記データベースに反映することを特徴とする請求項１記載のデータベースログ管理方法。
【請求項５】
データベースの回復のためにデータベースログを採取するデータベースログの管理方法であって、前記データベースの更新に際して更新前データを取得し、ログファイルに前記更新前データを出力し、前記更新前データに対応する更新後データを取得し、前記更新前データを複数ブロックに分割したときに変更されたブロックによって構成される差分データを作成し、前記差分データのサイズと前記更新後データのサイズとを比較して前記差分データのサイズが前記更新後データのサイズより小さい場合には前記ログファイルに前記差分データと前記差分データが記録されたことを示すフラグを出力し、前記差分データのサイズが前記更新後データのサイズ以上の場合には前記ログファイルに前記更新後データと前記更新後データが記録されたことを示すフラグを出力することを特徴とするデータベースログの管理方法。
【請求項６】
前記差分データのサイズと前記更新後データのサイズとを比較する代わりに、前記差分データのサイズと前記更新後データのサイズに所定の係数Ｎを掛けた数値とを比較することを特徴とする請求項５記載のデータベースログ管理方法。
【請求項７】
前記データベースの回復に際して、更新前データを回復に用いる場合には前記ログファイルから該当する前記更新前データを取得して前記データベースに反映し、更新後データを回復に用いる場合には該当する前記更新前データと前記フラグと記録されている前記更新後データ又は前記差分データとを取得し、前記フラグに従って前記更新後データを前記データベースに反映するか、または前記更新前データと前記差分データとから更新後データを復元して前記データベースに反映することを特徴とする請求項５記載のデータベースログ管理方法。
【請求項８】
データベースの回復のためにデータベースログを採取するデータベースログを管理する計算機であって、データベースに対するアクセスを制御するデータベース管理制御手段とログ取得手段とを有し、前記ログ取得手段は、前記データベースの更新に際して前記データベース管理制御手段から更新前データを取得する手段と、ログファイルに前記更新前データを出力する手段と、前記データベース管理制御手段から前記更新前データに対応する更新後データを取得する手段と、前記更新前データに対する前記更新後データの変更された部分である差分データを作成する手段と、前記差分データのサイズと前記更新後データのサイズとを比較して前記差分データのサイズが前記更新後データのサイズより小さい場合には前記ログファイルに前記差分データを出力する手段と、前記差分データのサイズが前記更新後データのサイズ以上の場合には前記ログファイルに前記更新後データを出力する手段とを有することを特徴とするデータベースログを管理する計算機。
【請求項９】
前記管理する計算機は、さらにデータベース回復手段を有し、前記データベース回復手段は、更新前データを回復に用いる場合には前記ログファイルから該当する前記更新前データを取得して前記データベースに反映する手段と、更新後データを回復に用いる場合には該当する前記更新前データと記録されている前記更新後データ又は前記差分データとを取得する手段と、前記更新後データが記録されている場合には前記更新後データを前記データベースに反映する手段と、前記差分データが記録されている場合には前記更新前データと前記差分データとから更新後データを復元して前記データベースに反映する手段とを有することを特徴とする請求項８記載のデータベースログを管理する計算機。
【請求項１０】
計算機にデータベースの回復のためにデータベースログを採取する機能を実現させるためのプログラムであって、前記計算機に、前記データベースの更新に際して更新前データを取得する機能、ログファイルに前記更新前データを出力する機能、前記更新前データに対応する更新後データを取得する機能、前記更新前データに対する前記更新後データの変更された部分である差分データを作成する機能、前記差分データのサイズと前記更新後データのサイズとを比較して前記差分データのサイズが前記更新後データのサイズより小さい場合には前記ログファイルに前記差分データを出力する機能、および前記差分データのサイズが前記更新後データのサイズ以上の場合には前記ログファイルに前記更新後データを出力する機能を実現させるためのプログラム。
【請求項１１】
さらに前記計算機に、前記データベースの回復に際して、更新前データを回復に用いる場合には前記ログファイルから該当する前記更新前データを取得して前記データベースに反映する機能、更新後データを回復に用いる場合には該当する前記更新前データと記録されている前記更新後データ又は前記差分データとを取得する機能、前記更新後データが記録されている場合には前記更新後データを前記データベースに反映する機能、および前記差分データが記録されている場合には前記更新前データと前記差分データとから更新後データを復元して前記データベースに反映する機能を実現させることを特徴とする請求項１０記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベースログの管理技術に係わり、特にログファイルのサイズを削減するデータベースログの管理技術に関するものである。
【０００２】
【従来の技術】
一般的にＲＤＢＭＳ（リレーショナル・データベース管理システム）では、ＯＳ、一時記憶装置や外部記憶装置などの障害に備えて、データベースの更新情報を記録している。これらのデータベースの更新記録は、ログもしくはジャーナルと呼ばれ、ユーザデータとは別に外部記憶装置に書き出している。ログもしくはジャーナルは、データベースの回復に備えるものであるため、更新情報をログとして記憶する場合、メモリなど一時記憶装置上に一時的なキャッシングを行わず、更新処理の完了と同時に外部記憶装置に書き出すのが一般的である。
【０００３】
ログの中で更新処理を再実行するためのログをリドゥーログもしくは更新後ログと呼び、更新処理を無効にするためのログをアンドゥーログもしくは更新前ログと呼ぶ。前者は当該データの更新対象データの更新前のデータの値を取得し、後者は更新処理後のデータの値を取得する。ログレコードを外部記憶装置に書き出したファイルをログファイルと呼ぶ。データベースに対して、更新が発生するごとに更新前ログ、更新後ログの書き出しが発生するので、その回数に応じてログファイル容量は増大してゆく。
【０００４】
通常、データベースに対するアクセスは、トランザクションという一連の処理を一まとまりとして論理的にとらえ、データベースの内容の整合性が取れるようにしている。データベースに対する更新処理は、あるトランザクションに含まれ、トランザクションは、コミット要求で同一トランザクション内の一連の処理がデータベースに反映され、ロールバック要求で同一トランザクション内の一連の処理はデータベースに反映されず無効になる。更新が発生した場合の更新前ログ、更新後ログは、トランザクションの完了、無効に関わらずログファイルに出力される仕組みであることが多い。このため更新処理のロールバック、ロールフォワードに必要な情報であるかどうかは、実際にデータベースに障害が発生し、データベースの回復の必要があるとログファイルから必要な情報を選択し利用するので、必要でない情報もログファイルに格納されることがあり、ログファイル容量が増加していた。
【０００５】
この問題に対する解決策として、特開平６−８３６８２号公報記載の技術が挙げられる。ここでは該当処理がコミットされている情報を含んでいない場合のみ更新前情報を更新前ログとして、また更新後情報を更新後ログとしてログファイルに書き込みだけを行い、データベースには、コミットされていないデータを含まない場合のみ書き出すことで、ログファイル容量の削減を実現している。しかしこの方法でも、コミットされていないデータ更新が大量に発生する長大トランザクション（トランザクションを規定する時間が長いケース）の場合は、更新前ログ、更新後ログのログファイルへの書き出しが大量に発生し、ログファイル容量が増大してしまう。
【０００６】
これまでＲＤＢＭＳは、ＯＬＴＰ（オンライン・トランザクション処理）などの定型業務に利用されることが多く、格納するデータは数値データや文字データなど比較的データ量が少ない場合に限定されていた。近年、ＯＬＡＰ（オンライン解析処理）などの情報系システムにＲＤＢＭＳが利用されるケースが増え、データベースに文書データ、画像や音声といったマルチメディアデータなど膨大なデータ量のデータが含まれるケースが増えてきている。これらのマルチメディアデータに対する更新前ログ、更新後ログなどのログファイルは、データ量が膨大になる。この場合、上記公知技術を利用しても、データベースに対してデータ更新が頻繁に発生する場合には、ログファイル容量は増大する。
【０００７】
ＲＤＢＭＳに文書データ、画像や音声といったマルチメディアデータをＢＬＯＢ（Ｂｉｎａｒｙ　Ｌａｒｇｅ　ＯＢｊｅｃｔ）といったデータ型として格納する場合、当該データのごく一部の変更にもかかわらず、変更後データの物理イメージを更新後データとしてすべてログファイルに出力していることが多い。このため当該データに対して更新が多発すると、更新前データと更新後データの物理イメージをそれぞれ更新前ログおよび更新後ログとして取得する必要があり、ログ格納領域は元データに対して約２倍の容量が必要となる。また更新前ログ、および更新後ログそれぞれのデータ量も多くなるため、それらのログファイルへの書き出しの入出力による性能劣化も懸念される。
【０００８】
【発明が解決しようとする課題】
前述のように、データベースに対して更新が多発すると、更新前データおよび更新後データを更新前ログおよび更新後ログとしてそれぞれログファイルに格納する必要があるため、データベースに格納するデータのデータ長が長い場合、外部記憶装置のログファイル格納領域が大量に必要となる。
【０００９】
本発明の目的は、データベース回復のために採取するログデータを格納するログ格納領域のデータ量を削減することにある。
【００１０】
【課題を解決するための手段】
本発明は、データベースの回復のためにデータベースログを採取するデータベースログの管理技術であって、データベースの更新に際して更新前データを取得し、ログファイルにこの更新前データを出力し、更新前データに対応する更新後データを取得し、更新前データに対する更新後データの変更された部分である差分データを作成し、この差分データのサイズと更新後データのサイズとを比較して差分データのサイズが更新後データのサイズより小さい場合にはログファイルにこの差分データを出力し、差分データのサイズが更新後データのサイズ以上の場合にはログファイルにこの更新後データを出力するデータベースログの管理技術を特徴とする。
【００１１】
【発明の実施の形態】
図１は、本実施形態のデータベースへのアクセスを伴うトランザクション処理システムの構成図である。システムは、データベースを管理する装置であるデータベースサーバ１００、クライアント１０１及び両者を接続するネットワーク１０２から構成される。クライアント１０１は、計算機であるとともにデータベースサーバ１００にアクセスする端末であり、実行されるＵＡＰ（Ｕｓｅｒ　Ａｐｐｌｉｃａｔｉｏｎ　Ｐｒｏｇｒａｍ）及びネットワーク１０２を介してデータベースサーバ１００が管理するデータベースにアクセスする。データベースサーバ１００は、サーバ計算機であり、ＣＰＵ１０３、主記憶装置１０４、データベース格納領域１０６およびログファイル格納領域１０７を有する。データベース格納領域１０６はデータベースを格納する記憶領域、ログファイル格納領域１０７はログファイルを格納する記憶領域である。
【００１２】
主記憶装置１０４は、データベースに対するアクセスを処理するデータベース管理制御部１０７，データベースに対する入出力処理を行うデータベース入出力管理部１０８、ログレコードの取得処理を行うログ取得部１０９、ログレコードからデータベースの回復を行うデータベース回復部１１０およびログファイルへの入出力処理を行うログ入出力管理部１１１から構成される。これらすべての処理部は、ＣＰＵ１０３によって実行されるプログラムである。
【００１３】
ログ取得部１０９は、データベース管理制御部１０７からデータベースに対する更新処理情報を取得し、ログレコードを作成し、ログ入出力管理部１１１を介してログファイルに書き込む。ログ取得部１０９は、データベースの更新前のデータをログファイルに格納する更新前ログ作成部１１２、データベースの更新前データと更新後データの差分情報を作成する差分情報作成部１１３およびデータベースの更新後データをログファイルに格納する更新後ログ作成部１１４から構成される。
【００１４】
データベース回復部１１０は、データベースに障害が発生し、データベースの回復要求があった場合、取得したログファイルを利用してデータベースの回復を行う。データベース回復部１１０は、データベースの更新前のデータをログレコードに格納されている更新前データから回復する更新前データ回復部１１５とデータベースの更新後のデータをログレコードに格納されている更新後データから回復する更新後データ回復部１１６を有している。
【００１５】
データベースサーバ１００は、クライアント１０１からの要求をデータベース管理制御部１０７で受け付け、データベースに対するアクションの要求を実行する。データベース管理制御部１０７は、クライアント１０１により要求されたデータが主記憶上のバッファ領域にあれば、そこから取得し、主記憶上に要求されたデータが存在しなければ、データベース入出力管理部１０８を通して、データベース格納領域１０５からレコードデータを取得する。データベースに対する処理結果のデータベース格納領域１０５への書き出しはアクセス要求に同期してもしくは非同期に行われる。
【００１６】
データベース管理制御部１０７は、データベース更新が発生するごとにログ取得部１０９を起動し、データベース更新に同期してログレコードの記録を行わしめる。またデータベースに障害が発生し、データベースの回復の必要が生じた場合、データベースアクセス管理制御部１０７は、データベース回復部１１０にデータベース回復要求を送る。データベース回復部１１０は、ログファイル格納領域１０６からデータベースの回復に必要なログレコードを取得し、回復されたレコードデータを作成してデータベース管理制御部１０７に引き渡す。データベース管理制御部１０７は、データベース入出力管理部１０８を介してこのレコードデータをデータベース格納領域１０５の該当する場所に書き込む。
【００１７】
図２は、ログレコードのデータ構成を示す図である。ログレコードは、管理情報として、ログ種別、トランザクションＩＤ、ログレコード番号および差分情報を保持している。ログ種別は、当該ログレコードがデータベースに対するどのようなアクションの記録であるかを示す属性であり、削除、追加、更新などが指定可能である。本実施形態によるログファイルの更新後データの差分情報管理方式は、データベースに対する更新のアクションに対して適用されるものである。トランザクションＩＤは、当該ログレコードがどのトランザクションに属するものであるかを一意に決定する属性である。ログレコード番号は、データベース管理システム内でログレコードに対して連続的に割り振られた番号である。
【００１８】
トランザクションＩＤとログレコード番号は、データベースに対するロールフォワード処理において重要な意味を持つ識別子である。データベース管理システムでは、通常、トランザクションの完了もしくは無効化とは別にシンクポイントというデータベースへの更新情報の書き出しを保証する同期点を設けている。このシンクポイント設定時に、メモリ上にバッファリングされているデータを外部記憶装置に書き出し、ログファイルとは別にシンクポイントダンプファイルを作成し、データベースについて行ったレコード更新に対応するトランザクションＩＤ、ログレコード番号などの情報を書き出す。ログレコード番号は、書き出すごとに番号が付与される。したがってシンクポイントダンプファイルに書き出されているログレコード番号より値が小さいログレコード番号をもつログレコードは、データベースへの書き出しが保証されているので、同一トランザクション内でのデータベースに対するロールフォワード処理を行う必要がない。ロールフォワード処理は、シンクポイントファイルに書き出されているログレコード番号より大きい番号のログレコードに対して行えばよい。したがってログファイル上のトランザクションＩＤとログレコード番号の組み合わせとシンクポイントダンプファイル上の該当する値を比較することにより、ロールフォワード処理の作業量を削減することができる。
【００１９】
更新前データは、データベースを更新する前のレコードデータの全体である。更新後データは、データベースを変更した後の当該レコードデータの全体か又は更新前データに対する変更部分のデータである。その変更部分データには、更新前データの先頭からのオフセットと必要に応じてデータのサイズが付加される。更新前データと変更部分データとから更新後の当該レコードデータ全体を復元することが可能である。更新後データフラグは、更新後データがレコードデータ全体か変更部分データかを区別するフラグである。
【００２０】
図３は、長大データとしてＢＬＯＤ型のデータ、つまりＢＬＯＢデータを一例として取り上げ、ＢＬＯＤデータを繰り返し更新する例を示している。初期ＢＬＯＢデータ（データ挿入時のＢＬＯＤデータ）は、Ａ〜Ｈまでの８つのブロックから構成されているデータベース中のレコードデータである。ここでＡ〜Ｈは各ブロックの内容情報を区別するために付与された記号である。Ａ〜Ｈまでの各ブロックのデータは任意のデータ長を持つ。あるトランザクションにより、初期ＢＬＯＢデータに対してブロックＤが内容Ｘに、ブロックＧが内容Ｙに更新されて更新１後（更新１の処理後）のＢＬＯＢデータとなる。すなわちここではブロックＸとブロックＹが更新前データ（ここでは初期ＢＬＯＤデータ）に対する差分のブロックということになる。更新１後のＢＬＯＢデータは、さらにブロックＨが内容Ｚに更新されて更新２後のＢＬＯＢデータとなる。また更新２後のＢＬＯＢデータは、ブロックＸが内容Ｄに、ブロックＹが内容Ｇに、ブロックＺが内容Ｈに更新されて更新３後のＢＬＯＢデータとなるケースを示している。
【００２１】
図４は、図３に示すような更新後ＢＬＯＢデータの各々に対して作成されるログレコードの一例を示している。更新１のログレコードは、ログ種別が更新、トランザクションＩＤが１０、ログレコード番号が１００、更新後データフラグが変更部分を示し、更新前データは、内容Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈが格納され、更新後データには、オフセット１と更新後レコードデータ中のブロックＸ、オフセット２と更新後レコードデータ中のブロックＹが格納されている。
【００２２】
更新２のログレコードは、ログ種別が更新、トランザクションＩＤが１０、ログレコード番号が２００、更新後データフラグが変更部分を示し、更新前データは、内容Ａ、Ｂ、Ｃ、Ｘ、Ｅ、Ｆ、Ｙ、Ｈが格納され、更新後データには、オフセット３と更新後レコードデータ中のブロックＺが格納されている。更新２ログレコードのトランザクションＩＤは、更新１ログレコードと同一であるため、同一トランザクションでの更新であり、またログレコード番号が更新１ログレコードのログレコード番号より大きいため、後の更新であることがわかる。
【００２３】
更新３のログレコードは、ログ種別が更新、トランザクションＩＤが２０、ログレコード番号が１００、更新後データフラグが変更部分を示し、更新前データは、内容Ａ、Ｂ、Ｃ、Ｘ、Ｅ、Ｆ、Ｙ、Ｚが格納され、更新後データには、オフセット１とブロックＤ，オフセット２とブロックＧ，オフセット３とブロックＨが格納されている。更新３ログレコードは、トランザクションＩＤが更新１ログレコードおよび更新２ログレコードのものと異なるため、別のトランザクションであることがわかる。
【００２４】
なお上記実施例は、データベース中のレコード（行方向のデータ）を更新する場合の例を示したが、特定のフィールド（列方向のデータ）を更新する場合についても上記のようにデータをブロックに分割することができ、上記方式をそのまま適用できる。
【００２５】
このようにして、更新前データと更新後データをログレコードに格納することができる。以上のように更新後データに差分を用いることにより、ログファイルの容量を削減することができる。次に具体的なログ格納手順について述べる。
【００２６】
図５は、ログ取得部１０９の処理手順を示すフローチャートである。まずログ取得部１０９は、データベース管理制御部１０７よりデータベース更新情報を受け取る（ステップ５００）。更新情報は、更新前レコードデータの全体と更新後レコードデータの全体を含んでいる。更新前データ書き出し要求であれば（ステップ５０１ＹＥＳ）、更新前ログ作成部１１２を呼び出して管理情報と更新前データを記録する（ステップ５０２）。そうでなければ（ステップ５０１ＮＯ）、次の処理に移る。更新後データ書き出し要求であれば（ステップ５０３ＹＥＳ）、更新後ログ作成部１１４を呼び出して更新後データを記録する（ステップ５０４）。そうでなければ（ステップ５０３ＮＯ）、次の処理に移る。これらの一連の処理のあとに、次のログレコード作成のためにカウンタ中のログレコード番号を増加させる（ステップ５０５）。
【００２７】
図６は、更新前ログ作成部１１２の処理手順を示すフローチャートである更新前ログ作成部１１２は、受け取った更新情報から更新前データを取得する（ステップ６０１）。次に当該ログレコードの管理情報と取得した更新前データをログファイルに書き出し、処理を終了する（ステップ６０２）。管理情報のログ種別には「更新」を設定し、トランザクションＩＤには指定されたトランザクションＩＤを設定し、ログレコード番号にはカウンタに保存されたログレコード番号を設定する。更新後データフラグは未定のフィールドとする。
【００２８】
図７は、更新後ログ作成部１１４の処理手順を示すフローチャートである。更新後ログ作成部１１４は、まず更新前データを取得する（ステップ７０１）。さらに更新後データを取得する（ステップ７０２）。次に差分情報作成部１１３は、取得した更新前データと更新後データから図２で示した差分情報管理方式に従って、更新前データに対する更新後データの差分情報、すなわち変更部分データを作成する（ステップ７０３）。差分情報を作成するに当たり公知の技術が適用できるので、詳細説明を省略する。更新前データと差分情報から矛盾なく更新後データを復元できることが保証されていればよい。
【００２９】
次に更新後ログ作成部１１４は、取得した更新後データのサイズと差分情報データのサイズを取得する（ステップ７０４，７０５）。差分情報データのサイズには、付加されるオフセットなど付加情報のサイズも含まれる。さらに取得した更新後データのサイズと差分情報データのサイズを比較する（ステップ７０６）。更新後データに比べて差分情報データのサイズが更新後データのサイズに所定の係数値Ｎ（０＜Ｎ≦１）をかけたものより小さければ（すなわち所定の割合よりも小さければ）、差分情報データを更新後データとして、ログファイルに格納する（ステップ７０７）。Ｎの値は、復元データ作成に要する時間、更新後データから差分情報を差し引いたデータ量の書き出しに要する時間、データベースに格納されるデータ形式などの物理データ特性などを考慮して設定する。特にＮ＝１の場合には上記の時間や物理データ特性を考慮しないことになるが、ステップ７０６の大まかな判定基準として適用可能であり、この場合も本実施例の１つである。そうでなければ（ステップ７０６ＮＯ）、取得した更新後データをそのまま更新後データとしてログファイルに格納し、処理を終了する（ステップ７０８）。ステップ７０７，７０８ともに更新後データはその更新前データと同一ログレコードに格納される。またステップ７０７では「更新後データフラグ」に変更部分のみを示すフラグを設定し、ステップ７０８では「更新後データフラグ」にレコードデータ全体を示すフラグを設定する。またステップ７０７で書き込む差分情報データには差分のブロックごとに更新前データを基にしたフセットと必要に応じてデータのサイズが含められる。
【００３０】
図８は、更新処理を行うトランザクションの処理シーケンスの途中で障害が発生した場合の例を表している。トランザクション１は、同一トランザクション内でデータベースの更新１と更新２の処理を行う。ここで更新２とは、図３に示すような同一レコードデータに対する更新処理とする。またトランザクション２は、そのトランザクション内で更新３を行うものとする。このようなトランザクションの実行中に、更新１と更新２の間でシンクポイントが発生したものとする。このような状況でトランザクション２を実行中に障害が発生した場合を想定する。
【００３１】
更新１はシンクポイント前であるため、その更新処理はデータベースに反映されている。しかし更新２はシンクポイント後の処理であるため、データベースに反映されている保証はない。トランザクション１は、障害発生前にコミットしているためロールバックする必要はないが、ロールフォワードする必要がある。該当データは更新１の処理が行われた状態となっているため、図４に示す更新２のログ情報を使用して更新後データを復元し、データベース管理制御部１０７に引き渡し、データベースに反映する。
【００３２】
トランザクション２は、コミットする前に障害が発生しているため処理をすべて無効化する必要がある。通常、ロールバック処理を行う場合、該当トランザクションの更新後ログを基にしてロールフォワード処理をしてデータベースの該当レコードを更新３後のレコードにした後、ロールバック処理を行う必要がある。この場合、該当データは更新３のログを用いてロールフォワード処理が行われ、その後、ロールバック処理が行われる。
【００３３】
以下に、取得したログデータからデータベースの回復を行う手順について説明する。図９は、データベース回復部１１０の処理手順を示すフローチャートである。データベース回復部１１０は、データベース管理制御部１０７よりデータベース回復要求を受け取る（ステップ９００）。更新前データ回復要求であれば（ステップ９０１ＹＥＳ）、更新前データ回復部１１５を呼び出して更新前データ回復処理を行う（ステップ９０２）。そうでなければ（ステップ９０１ＮＯ）、ステップ９０３の処理に移る。更新後データ回復要求であれば（ステップ９０３ＹＥＳ）、更新後データ回復部１１６を呼び出し更新後データ回復処理を行う（ステップ９０４）。そうでなければ（ステップ９０３ＮＯ）、処理を終了する。
【００３４】
図１０は、更新前データ回復部１１５の処理手順を示すフローチャートである。更新前データ回復部１１５は、ログファイルの指定されたトランザクションＩＤとログレコード番号をもつログレコードから更新前データを取得する（ステップ１００１）。次に取得した更新前データをデータベースの該当するレコードデータに上書きし、処理を終了する（ステップ１００２）。
【００３５】
図１１は、更新後データ回復部１１６の処理手順を示すフローチャートである。更新後データ回復部１１６は、ログファイルの指定されたトランザクションＩＤとログレコード番号をもつログレコードから更新後データを取得する（ステップ１１０１）。次に該当する管理情報中の更新後データフラグを参照して取得した更新後データは差分情報であるか否か判定する（ステップ１１０２）。更新後データが差分情報である場合、ログファイルの当該ログレコードの更新前データを取得する（ステップ１１０３）。次に取得した更新前データと差分情報データから更新後レコードデータの全体を復元する（ステップ１１０４）。すなわち差分情報データから各差分ブロックを切り出し、そのオフセットに基づいて更新前データの対応するブロックを差分ブロックで書き換えることによって更新後レコードデータの全体が復元される。次に復元した更新後データをデータベース管理制御部１０７に渡し、データベースの該当するレコードデータに上書きし、そのレコードデータの回復を行う（ステップ１１０５）。更新後データが差分情報でなくレコードデータの全体である場合は、ログファイルから取得した更新後データを直接、データベース管理制御部１０７に渡し、データベースの該当するレコードデータに上書きし、そのレコードデータの回復を行う。以上により、本実施例の差分を用いた更新後データの場合にもデータの回復処理を実現することができる。
【発明の効果】
以上述べたように本発明によれば、データベース回復のために採取されるログファイルのデータ量を削減することができる。
【図面の簡単な説明】
【図１】実施形態のトランザクション処理システムの構成図である。
【図２】ログレコードのデータ構成例を示す図である。
【図３】繰り返し更新されるＢＬＯＢデータの例を示す図である。
【図４】更新後ＢＬＯＢデータの各々に対して作成されるログレコードの例を示す図である。
【図５】実施形態のログレコード作成手順を示すフローチャートである。
【図６】実施形態の更新前ログの作成手順を示すフローチャートである。
【図７】実施形態の更新後ログの作成手順を示すフローチャートである。
【図８】更新処理を行うトランザクションの処理シーケンス中で障害が発生した場合の例を説明する図である。
【図９】実施形態のデータベース回復部１１０の処理手順を示すフローチャートである。
【図１０】実施形態の更新前データ回復部１１５の処理手順を示すフローチャートである。
【図１１】実施形態の更新後データ回復部１１６の処理手順を示すフローチャートである。
【符号の説明】
１００：データベースサーバ、１０５：データベース格納領域、１０６：ログファイル格納領域、１０７：データベース管理制御部、１０９：ログ取得部、１１０：データベース回復部、１１２：更新前ログ作成部、１１３：差分情報作成部、１１４：更新後ログ作成部
【図１】
2004062759.tif 000003
【図２】
2004062759.tif 000004
【図３】
2004062759.tif 000005
【図４】
2004062759.tif 000006
【図５】
2004062759.tif 000007
【図６】
2004062759.tif 000008
【図７】
2004062759.tif 000009
【図８】
2004062759.tif 000010
【図９】
2004062759.tif 000011
【図１０】
2004062759.tif 000012
【図１１】
2004062759.tif 000013