説明

データベースシステム及び更新前ジャーナル出力方法並びにプログラム

【課題】 復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにする。
【解決手段】 データベースファイル15には、各々が複数のレコードを含んだブロックが複数格納されている。データベース更新プログラム2が、レコードの更新要求を出力すると、データベースアクセス手段11は、更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、出力されているか否かを判定する。ジャーナルファイルアクセス手段13は、出力されていない場合は、更新対象ブロック全体のイメージを含んだ更新前ジャーナルをジャーナルファイル18に出力し、出力されている場合は更新前ジャーナルを出力しない。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースシステムにおける更新前ジャーナルの出力技術に関し、特に、ブロック単位で更新前ジャーナルを出力する技術に関する。
【背景技術】
【0002】
従来の一般的なデータベースシステムにおいては、レコードに対する更新要求が発生した場合、更新対象レコードの更新前のイメージを含んだ、レコード単位の更新前ジャーナルをジャーナルファイルに出力するようにしている。そして、障害が発生した場合には、復旧対象レコードを含んだブロック(復旧対象ブロック)をデータベースファイルからバッファに読み込み、ジャーナルファイルに出力しておいた更新前のレコードイメージをバッファ上に格納されている該当するレコードに被せ、再度バッファの内容をデータベースファイルに書き込むことにより、復旧対象レコードを更新前の状態に戻すようにしている。
【0003】
また、上述した従来の技術以外にも、例えば、更新前ジャーナルの出力単位をブロックとする技術(例えば、特許文献1参照)や、出力単位をブロックにした更新前ジャーナルと出力単位をレコードとした更新前ジャーナルとの2種類の更新前ジャーナルを出力する技術も従来から知られている(例えば、特許文献2参照)。
【特許文献1】特開平11−338752号公報
【特許文献2】特開平2−257228号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
上述した従来の技術の内、更新前ジャーナルの出力単位をレコードにする技術は、データベースファイルに障害が発生し、復旧対象ブロックを読み出すことができなくなった場合、バックアップしておいたデータベースファイルのリストアを行い、復旧対象ブロックが読み出せるようにしてから更新レコードの復旧作業を行うことが必要になるため、データベースファイルの復旧に非常に時間がかかってしまう。
【0005】
また、更新前ジャーナルの出力単位をブロックとする、特許文献1に記載されている従来の技術によれば、復旧対象ブロックをデータベースファイルに書き戻すだけで復旧対象レコードを更新前の状態に戻すことができるので、復旧作業を迅速に行うことが可能になる。しかし、更新前ジャーナルの出力単位をブロックとした場合には、更新前ジャーナルの出力量が膨大なものとなり、大容量の記憶装置が必要になるという問題がある。
【0006】
また、出力単位をレコードにした更新前ジャーナルと出力単位をブロックにした更新前ジャーナルとの2種類の更新前ジャーナルを出力する、特許文献2に記載されている従来の技術によれば、特許文献1に記載されている従来の技術に比較して、更新前ジャーナルの出力量を少なくすることができる。しかし、特許文献2に記載されている従来の技術では、レコード単位の更新前ジャーナルしか出力されていない、復旧対象レコードが格納されているブロックに対して読み込み障害が発生した場合、バックアップしておいたデータベースファイルのリストアを行うことが必要になるため、復旧作業に時間がかかるという問題がある。
【0007】
〔発明の目的〕
そこで、本発明の目的は、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにすることにある。
【課題を解決するための手段】
【0008】
本発明にかかる第1のデータベースシステムは、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
データベースファイル中の各ブロックがそれぞれ複数のレコードを含み、且つ更新前ジャーナルの出力単位をブロックとしたデータベースシステムであって、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力する構成を有することを特徴とする。
【0009】
本発明にかかる第2のデータベースシステムは、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、
更新前ジャーナルが格納されるジャーナルファイルと、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定するデータベースアクセス手段と、
該データベースアクセス手段で、出力されていないと判定された場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定された場合は更新前ジャーナルの出力を抑止するジャーナルファイルアクセス手段とを備えたことを特徴とする。
【0010】
本発明にかかる第3のデータベースシステムは、今回更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されているか否かを、簡単な構成で、且つ確実に判定できるようにするため、第2のデータベースシステムにおいて、
ブロック番号が格納されるブロック番号記憶部を備え、且つ、
前記データベースアクセス手段が、コミット命令が入力されたとき、前記ブロック番号記憶部に格納されているブロック番号を全て削除し、レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納する構成を有し、
前記ジャーナルファイルアクセス手段が、前記データベースアクセス手段において前記ブロック番号記憶部に前記更新対象ブロックのブロック番号が格納されていないと判定された場合は、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されていると判定された場合は、更新前ジャーナルの出力を抑止する構成を有することを特徴とする。
【0011】
本発明にかかる第1の更新前ジャーナル出力方法は、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
データベースファイル中の各ブロックがそれぞれ複数のレコードを含み、且つ更新前ジャーナルの出力単位をブロックとしたデータベースシステムにおける更新前ジャーナル出力方法であって、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力することを特徴とする。
【0012】
本発明にかかる第2の更新前ジャーナル出力方法は、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを有するデータベースシステムにおける更新前ジャーナル出力方法であって、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定し、
出力されていないと判定した場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定した場合は更新前ジャーナルの出力を抑止することを特徴とする。
【0013】
本発明にかかる第3の更新前ジャーナル出力方法は、今回更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されているか否かを、簡単な構成で、且つ確実に判定できるようにするため、第2の更新前ジャーナル出力方法において、
コミット命令が入力されたとき、ブロック番号記憶部に格納されているブロック番号を全て削除し、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、
格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納すると共に、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されている場合は、更新前ジャーナルの出力を抑止することを特徴とする。
【0014】
本発明にかかる第1のプログラムは、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを備えたコンピュータを、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力する手段として機能させる。
【0015】
本発明にかかる第2のプログラムは、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにするため、
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを備えたコンピュータをデータベースシステムとして機能させるためのプログラムであって、
前記コンピュータを、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定するデータベースアクセス手段、
該データベースアクセス手段で、出力されていないと判定された場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定された場合は更新前ジャーナルの出力を抑止するジャーナルファイルアクセス手段として機能させる。
【0016】
本発明にかかる第3のプログラムは、今回更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されているか否かを、簡単な構成で、且つ確実に判定できるようにするため、第2のプログラムにおいて、
前記コンピュータが、ブロック番号が格納されるブロック番号記憶部を備え、且つ、
前記データベースアクセス手段が、コミット命令が入力されたとき、前記ブロック番号記憶部に格納されているブロック番号を全て削除し、レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納する構成を有し、
前記ジャーナルファイルアクセス手段が、前記データベースアクセス手段において前記ブロック番号記憶部に前記更新対象ブロックのブロック番号が格納されていないと判定された場合は、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されていると判定された場合は、更新前ジャーナルの出力を抑止する構成を有することを特徴とする。
【発明の効果】
【0017】
本発明にかかる第1,第2のデータベースシステム、第1,第2の更新前ジャーナル出力方法および第1,第2のプログラムによれば、復旧作業時に、復旧対象レコードが格納されているブロックに対する読み込み障害が発生しても復旧作業を迅速に行えるようにするために、更新前ジャーナルの出力単位をブロックとした場合であっても、その出力量が余り多くならないようにすることができる。
【0018】
その理由は、更新要求が発生する毎に、常に、ブロック単位の更新前ジャーナルを出力するのではなく、更新要求が発生した時、今回更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されていれば、更新前ジャーナルの出力を抑止するようにしたからである。
【0019】
本発明にかかる第3のデータベースシステム、第3の更新前ジャーナル出力方法および第3のプログラムによれば、今回更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されているか否かを、簡単な構成で、且つ確実に判定することが可能になる。
【0020】
その理由は、コミット命令の入力時には、そこに格納されているブロック番号が全て削除され、更新要求の入力時には、更新対象ブロックのブロック番号が格納されていなければ、上記更新対象ブロックのブロック番号が格納されるブロック番号記憶部を備えているからである。
【発明を実施するための最良の形態】
【0021】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【0022】
図1は本発明にかかるデータベースシステムの実施の形態の構成例を示すブロック図である。同図を参照すると、データベース更新プログラム2からのレコードの更新要求などを処理するデータベースシステム1は、データベースアクセス手段11と、ジャーナル作成手段12と、ジャーナルファイルアクセス手段13と、復旧手段14と、データベースファイル15と、ブロック番号記憶部16と、バッファ17と、ジャーナルファイル18とから構成されている。
【0023】
データベースファイル15には、図2に示すように、複数のブロックB1〜Bn(入出力の単位となる)が格納されている。また、各ブロックB1〜Bnは、それぞれ複数のレコードを収容している。図2では、ブロックBnが3個のレコードL1〜L3を含んでいる場合を例示しているが、レコード数は複数個であれば、これに限られるものではない。また、以下の説明では、各ブロックB1〜Bnのブロック番号はそれぞれB1〜Bnであるとする。また、レコードL1,L2,…のレコード番号はL1,L2,…であるとする。
【0024】
ブロック番号記憶部16には、最新のコミット点以降に更新されたレコードを含むブロックのブロック番号が格納される。
【0025】
データベースアクセス手段11は、次のような機能を有する。
【0026】
・データベース更新プログラム2からコミット命令が入力されたとき、ブロック番号記憶部16に格納されているブロック番号を全て削除すると共に、ジャーナルファイルアクセス手段13に対して、上記コミット命令をジャーナルファイル18に書き込むことを指示する。
・データベース更新プログラム2からレコードの更新要求が入力されたとき、更新対象レコードを含む更新対象ブロックのブロック番号が、ブロック番号記憶部16に格納されているか否かを判定する。
・更新対象ブロックのブロック番号がブロック番号記憶部16に格納されていない場合は、更新対象ブロックのブロック番号をブロック番号記憶部16に格納する処理と、更新対象ブロックのブロックイメージをバッファ17に書き出した後、ジャーナル作成手段12に対してジャーナルの作成を指示する処理と、更新レコードイメージをバッファ17に反映させた後、バッファ17の内容をデータベースファイル15上の該当するブロックに書き戻す処理を行う。
・更新対象ブロックのブロック番号がブロック番号記憶部16に格納されている場合は、更新対象ブロックのブロックイメージをバッファ17に書き出す処理と、更新レコードイメージをバッファ17に反映させた後、バッファ17の内容をデータベースファイル15上の該当するブロックに書き戻す処理とを行う。従って、更新対象ブロックのブロック番号がブロック番号記憶部16に格納されている場合には、更新前ジャーナルの出力処理は行われない。
【0027】
ジャーナル作成手段12は、バッファ17に格納されているブロックイメージに、ブロック番号などの制御情報を付加することにより、更新前ジャーナルを作成する機能を有する。
【0028】
ジャーナルファイルアクセス手段13は、ジャーナル作成手段12で作成された更新前ジャーナルをジャーナルファイル18に出力する機能や、コミット命令をジャーナルファイル18に出力する機能を有する。なお、本実施の形態では、コミット命令発行後に更新されたブロックについての、コミット点におけるブロックイメージを更新前ジャーナルとしてジャーナルファイル18に出力するようにしている。
【0029】
復旧手段14は、障害発生時、ジャーナルファイル18に格納されている更新前ジャーナルを利用して、データベースファイル15の状態を最新のコミット点の状態まで戻す機能を有する。
【0030】
なお、データベースシステム1は、コンピュータによって実現可能であり、コンピュータによって実現する場合は、例えば、次のようにする。コンピュータをデータベースシステム1として機能させるためのプログラムを記録したディスク,半導体メモリ,その他の記録媒体を用意し、コンピュータに上記プログラムを読み取らせる。コンピュータは、読み取ったプログラムに従って自身の動作を制御することにより、自コンピュータ上に、データベースアクセス手段11,ジャーナル作成手段12,ジャーナルファイルアクセス手段13,復旧手段14を実現する。
【0031】
〔実施の形態の動作の説明〕
次に、本発明の実施の形態の動作について詳細に説明する。
【0032】
先ず、データベース更新プログラム2がコミット命令を発行したときの動作について説明する。
【0033】
データベース更新プログラム2がコミット命令を発行すると、データベースシステム1内のデータベースアクセス手段11は、図3のフローチャートに示すように、ブロック番号記憶部16に格納されているブロック番号を全て削除する(ステップS31)。その後、ジャーナルファイルアクセス手段13に対して、上記コミット命令の書き込みを指示する(ステップS32)。これにより、ジャーナルファイルアクセス手段13は、ジャーナルファイル18にコミット命令を書き込む。
【0034】
次に、データベース更新プログラム2がレコードの更新要求を出力した場合の動作について説明する。
【0035】
データベース更新プログラム2は、データベースファイル15に格納されているレコードを更新する場合、更新対象レコードを含む更新対象ブロックのブロック番号と、更新対象ブロック内における更新対象レコードのレコード番号と、更新内容とを含む更新要求を出力する。
【0036】
データベースシステム1内のデータベースアクセス手段11は、データベース更新プログラム2から更新要求が入力されると、更新要求に含まれている更新対象ブロックのブロック番号と同一のブロック番号が、ブロック番号記憶部16に格納されているか否かを調べる(図4のステップS41)。即ち、ステップS41では、最新のコミット点以降に、今回入力された更新要求が更新対象にしているブロックと同一ブロックについての更新前ジャーナルが、既に出力されているか否かを調べている。
【0037】
そして、同一のブロック番号がブロック番号記憶部16に格納されている場合(ステップS41がYES)は、データベースファイル15から更新対象ブロック全体のイメージを読み込み、それをバッファ17に書き込む(ステップS47)。その後、データベースアクセス手段11は、バッファ17に格納されている更新対象レコードのイメージを更新後のイメージに書き換え(ステップS45)、最後にバッファ17に内容を該当するブロックに書き戻す(ステップS46)。
【0038】
これに対して、同一のブロック番号がブロック番号記憶部16に格納されていない場合(ステップS41がNO)は、今回入力された更新要求中のブロック番号をブロック番号記憶部16に格納し、更に、更新対象ブロック全体のイメージをバッファ17に書き込む(ステップS42,S43)。その後、データベースアクセス手段11は、ジャーナル作成手段12に対して、更新対象ブロックのブロック番号を渡し、更新前ジャーナルの作成を指示する(ステップS44)。
【0039】
これにより、ジャーナル作成手段12は、バッファ17に格納されているブロックイメージに、データベースアクセス手段11から渡されたブロック番号を制御情報として付加することにより、図5に示すような更新前ジャーナルを作成し、それをジャーナルファイルアクセス手段13に渡す。ジャーナルファイルアクセス手段13では、ジャーナル作成手段12から渡された更新前ジャーナルをジャーナルファイル18に出力する。これにより、データベースアクセス手段11は、前述したステップS45,S46の処理を行い、更新対象レコードの内容を更新する。なお、本実施の形態では、制御情報としてブロック番号を使用するようにしたが、更新前ジャーナルを元のブロックに書き戻せるのであれば、他の情報を使用しても構わない。
【0040】
次に、復旧時の動作について説明する。
【0041】
データベースファイル15の復旧時、復旧手段14は、図6に示すように、ジャーナルファイル18からレコードを1つ入力し、それがコミット命令であるか否かを判断する(ステップS61,S62)。なお、ステップS61においては、格納時期が新しいレコードから優先的に入力する。
【0042】
そして、レコードの内容がコミット命令であると判断した場合(ステップS62)は、その処理を終了する。これに対して、コミット命令でないと判断した場合、即ち、レコードの内容が更新前ジャーナルであると判断した場合(ステップS62がNO)は、入力した更新前ジャーナルをバッファ17に書き込み、データベースアクセス手段11に対して、バッファ17に格納されている更新前ジャーナルの書き戻しを指示する(ステップS64)。これにより、データベースアクセス手段11は、バッファ17に格納されている更新前ジャーナルを、それに含まれているブロック番号に従って、データベースファイル15中の該当するブロックに書き戻す。
【0043】
その後、復旧手段14は、再び、ステップS61の処理に戻り、前述した処理と同様の処理を行う。以上の処理は、コミット命令を含んだレコードを入力するまで(ステップS62がYESとなるまで)、繰り返し行われる。
【0044】
次に、具体例を挙げて本実施の形態の動作について説明する。
【0045】
今、例えば、データベース更新プログラム2が、図7に示すように、コミット命令C及び更新要求D1,D2,D3,D4を順次出力し、その後、障害が発生したとする。
【0046】
コミット命令Cがデータベース更新プログラム2から出力されると、データベースアクセス手段11は、ブロック番号記憶部16に格納されているブロック番号を全て削除する(図3のステップS31)。これにより、ブロック番号記憶部16に内容は、図8(A)に示すものとなる。その後、データベースアクセス手段11は、ジャーナルファイルアクセス手段13に対して、コミット命令Cの書き込みを指示する(ステップS32)。これにより、ジャーナルファイルアクセス手段13は、図9(A)に示すように、ジャーナルファイル18にコミット命令Cを書き込む。
【0047】
その後、ブロック番号「Bn」,レコード番号「L3」および更新後のレコードイメージ「BBB」を含む更新要求D1がデータベース更新プログラム2から出力されると、データベースアクセス手段11は、ブロック番号記憶部16にブロック番号「Bn」が格納されているか否かを判断する(ステップS41)。この例の場合、ブロック番号記憶部16には、図8(A)に示すように、全くブロック番号が格納されていないので(ステップS41がNO)、上記ブロック番号「Bn」をブロック番号記憶部16に格納する(ステップS42)。この結果、ブロック番号記憶部16の内容は、図8(B)に示すものとなる。
【0048】
次に、データベースアクセス手段11は、図10に示すように、ブロック番号「Bn」のブロック全体イメージをバッファ17に書き込み、ジャーナル作成手段12に対して更新前ジャーナルの作成を指示する(ステップS43,S44)。これにより、ジャーナル作成手段12がブロックBnのイメージにブロック番号「Bn」を付加した更新前ジャーナルJ1を作成し、ジャーナルファイルアクセス手段13が図9(A)に示すように、更新前ジャーナルJ1をジャーナルファイル18に出力する。
【0049】
その後、データベースアクセス手段11は、図10に示すように、バッファ17上でブロックBn内のレコードL3の内容を「BBB」に変更し、更に、変更後のブロックBnの内容をデータベース15に書き戻す(ステップS45,S46)。
【0050】
更新要求D1の次に、ブロック番号「B2」,レコード番号「L1」を含む更新要求D2がデータベース更新プログラム2から出力されると、データベースアクセス11は、上記ブロック番号「B2」がブロック番号16に格納されていないので(ステップS41がNO)、更新要求D1が入力された場合と同様の処理を行う(ステップS42〜46)。この結果、ブロック記憶部16には、図8(C)に示すように、ブロック番号「B2」が追記され、ジャーナルファイル18には、図9(A)に示すように、ブロック番号「B2」と、ブロックB2全体のブロックイメージとを含んだ更新前ジャーナルJ2が格納される。
【0051】
更新要求D2に引き続き、ブロック番号「Bn」,レコード番号「L2」を含む更新要求D3がデータベース更新プログラム2から出力されると、データベースアクセス手段11は、ブロック番号記憶部16に上記ブロック番号「Bn」が格納されているか否かを判断する(ステップS41)。この例の場合、ブロック番号記憶部16の内容は、図8(C)に示すものとなっており、ブロック番号「Bn」が格納されているので(ステップS41がYES)、データベースアクセス手段11は、バッファ17にブロックBnの全体イメージを格納した後、バッファ17上でレコードL2を更新し、データベースファイル15中の該当するブロックBnに書き戻す(ステップS47,S45,S46)。このように、更新要求D2が入力された場合には、更新前ジャーナルがジャーナルファイル18に格納されることはない。
【0052】
更に、ブロック番号「Bn」,レコード番号「L1」を含む更新要求D4がデータベース更新プログラム2から出力されると、データベースアクセス手段11は、上記ブロック番号「Bn」がブロック番号記憶部16に格納されているので、更新要求D3が入力された場合と同様の処理を行う(ステップS41がYES,S47,S45,S46)。
【0053】
このように、本実施の形態では、データベース更新プログラム2から図7に示すように、更新要求D1,D2,D3,D4が出力された場合、ジャーナルファイル18には、図9(A)に示すように、更新要求D1,D2に対応する更新前ジャーナルJ1,J2しか格納されない。これに対して、特許文献1に記載されている従来の技術のようにした場合には、図9(B)に示すように、4個の更新前ジャーナルJ1〜J4がジャーナルファイル18に格納されてしまう。
【0054】
更新要求D4に対する処理が完了した後に障害が発生すると、復旧手段14が動作する。復旧手段14は、先ず、ジャーナルファイル18から格納時期が最も新しいレコードを1つ入力し、それがコミット命令であるか否かを調べる(図6のステップS61,S62)。この例の場合、入力したレコードは、更新前ジャーナルJ2であるので(図9参照)、復旧手段14は、更新前ジャーナルJ2をバッファ17に書き込み、データベースアクセス手段11に対してファイル17の内容をデータベースファイル15に書き戻すことを指示する(ステップS64)。これにより、データベースアクセス手段11は、更新前ジャーナル中のブロック番号「B2」に基づいて、ブロックイメージをデータベースファイル15のブロックB2に書き戻す。
【0055】
その後、復旧手段14は、次のレコードを入力し、それがコミット命令であるか否かを調べる(ステップS61,S62)。この場合、レコードの内容は、更新前ジャーナルJ1であるので、前述した処理と同様の処理が行われる(ステップS62がNO,S63,S64)。
【0056】
更に、復旧手段14は、次のレコードを入力し、それがコミット命令であるか否かを調べる(ステップS61,S62)。今回入力したレコードは、コミット命令Cであるので(ステップS62がYES)、復旧手段14は処理を終了する。
【産業上の利用可能性】
【0057】
本発明は、データベース更新時の障害発生の際、データベースの内容を消失させたくなく、且つ迅速なデータ復旧を行いたい場合などに適用できる。特に、銀行のオンライン情報などデータ消失が絶対に許されない用途に適用できる。
【図面の簡単な説明】
【0058】
【図1】本発明にかかるデータベースシステムの実施の形態の構成例を示すブロック図である。
【図2】データベースファイル15の内容例を示す図である。
【図3】コミット命令が入力されたときの、データベースアクセス手段11の処理例を示すフローチャートである。
【図4】更新要求が入力されたときの、データベースアクセス手段11の処理例を示すフローチャートである。
【図5】更新前ジャーナルの構成例を示す図である。
【図6】復旧手段14の処理例を示すフローチャートである。
【図7】データベース更新プログラム2が出力するコミット命令C、更新要求D1〜D4を示した図である。
【図8】ブロック番号記憶部16の内容が変化する様子を示した図である。
【図9】ジャーナルファイル18の内容例を示す図である。
【図10】レコードの更新処理を説明するための図である。
【符号の説明】
【0059】
1…データベースシステム
11…データベースアクセス手段
12…ジャーナル作成手段
13…ジャーナルファイルアクセス手段
14…復旧手段
15…データベースファイル
16…ブロック番号記憶部
17…バッファ
18…ジャーナルファイル
2…データベース更新プログラム

【特許請求の範囲】
【請求項1】
データベースファイル中の各ブロックがそれぞれ複数のレコードを含み、且つ更新前ジャーナルの出力単位をブロックとしたデータベースシステムであって、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力する構成を有することを特徴とするデータベースシステム。
【請求項2】
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、
更新前ジャーナルが格納されるジャーナルファイルと、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定するデータベースアクセス手段と、
該データベースアクセス手段で、出力されていないと判定された場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定された場合は更新前ジャーナルの出力を抑止するジャーナルファイルアクセス手段とを備えたことを特徴とするデータベースシステム。
【請求項3】
請求項2記載のデータベースシステムにおいて、
ブロック番号が格納されるブロック番号記憶部を備え、且つ、
前記データベースアクセス手段が、コミット命令が入力されたとき、前記ブロック番号記憶部に格納されているブロック番号を全て削除し、レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納する構成を有し、
前記ジャーナルファイルアクセス手段が、前記データベースアクセス手段において前記ブロック番号記憶部に前記更新対象ブロックのブロック番号が格納されていないと判定された場合は、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されていると判定された場合は、更新前ジャーナルの出力を抑止する構成を有することを特徴とするデータベースシステム。
【請求項4】
データベースファイル中の各ブロックがそれぞれ複数のレコードを含み、且つ更新前ジャーナルの出力単位をブロックとしたデータベースシステムにおける更新前ジャーナル出力方法であって、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力することを特徴とする更新前ジャーナル出力方法。
【請求項5】
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを有するデータベースシステムにおける更新前ジャーナル出力方法であって、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定し、
出力されていないと判定した場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定した場合は更新前ジャーナルの出力を抑止することを特徴とする更新前ジャーナル出力方法。
【請求項6】
請求項5記載の更新前ジャーナル出力方法において、
コミット命令が入力されたとき、ブロック番号記憶部に格納されているブロック番号を全て削除し、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、
格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納すると共に、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されている場合は、更新前ジャーナルの出力を抑止することを特徴とする更新前ジャーナル出力方法。
【請求項7】
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを備えたコンピュータを、
レコードの更新要求が発生したとき、前記更新要求が更新対象にしているレコードを含んだブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に出力されている場合は、更新前ジャーナルの出力を抑止し、出力されていない場合は、前記ブロック全体のイメージを含んだ更新前ジャーナルを出力する手段として機能させるためのプログラム。
【請求項8】
それぞれが複数のレコードを含んだ複数のブロックが格納されたデータベースファイルと、更新前ジャーナルが格納されるジャーナルファイルとを備えたコンピュータをデータベースシステムとして機能させるためのプログラムであって、
前記コンピュータを、
レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックと同一ブロックについての更新前ジャーナルが、最新のコミット点以降に、前記ジャーナルファイルに対して出力されているか否かを判定するデータベースアクセス手段、
該データベースアクセス手段で、出力されていないと判定された場合は、前記更新対象ブロック全体のイメージを含んだ更新前ジャーナルを前記ジャーナルファイルに対して出力し、出力されていると判定された場合は更新前ジャーナルの出力を抑止するジャーナルファイルアクセス手段として機能させるためのプログラム。
【請求項9】
請求項8記載のプログラムにおいて、
前記コンピュータが、ブロック番号が格納されるブロック番号記憶部を備え、且つ、
前記データベースアクセス手段が、コミット命令が入力されたとき、前記ブロック番号記憶部に格納されているブロック番号を全て削除し、レコードの更新要求が発生したとき、該更新要求が更新対象にしているレコードを含んだ更新対象ブロックのブロック番号が前記ブロック番号記憶部に格納されているか否かを判定し、格納されていない場合には、前記更新対象ブロックのブロック番号を前記ブロック番号記憶部に格納する構成を有し、
前記ジャーナルファイルアクセス手段が、前記データベースアクセス手段において前記ブロック番号記憶部に前記更新対象ブロックのブロック番号が格納されていないと判定された場合は、前記更新対象ブロックについての更新前ジャーナルを前記ジャーナルファイルに出力し、格納されていると判定された場合は、更新前ジャーナルの出力を抑止する構成を有することを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−11505(P2006−11505A)
【公開日】平成18年1月12日(2006.1.12)
【国際特許分類】
【出願番号】特願2004−183315(P2004−183315)
【出願日】平成16年6月22日(2004.6.22)
【出願人】(000222059)NECソフトウェア東北株式会社 (10)
【Fターム(参考)】