(57)【要約】【課題】割り込みによりトランザクションを中止する場合にロールバックすることなくレコードの完全性を保つことができるようにする。【解決手段】ロールバック機能を有するデータベースに対する複数のレコードの更新処理を含むトランザクションの実行中に、ユーザインタフェースに対する操作に起因して発生するハードウェア割り込みや、ユーザの設定に基づくタイマ割り込み、外部装置からのトランザクションを中止させる指示に応じて発生するソフトウェア割り込みなどの割り込みを受け付けた場合には、ロールバックせずに、更新中のレコードについての更新処理を完了した後、後続するレコードについての更新処理の実行を中止する。【選択図】図３
2007317100.tif 000002
【特許請求の範囲】
【請求項１】
データベースの更新方法であって、
情報処理装置が、複数のレコードの更新処理を含むトランザクションの実行中に前記トランザクションを中止させる割り込みを受け付けた場合、更新中の前記レコードについての前記更新処理を完了した後、後続する前記レコードについての前記更新処理の実行を中止すること、
を特徴とするデータベースの更新方法。
【請求項２】
請求項１に記載のデータベースの更新方法であって、
前記情報処理装置は、
前記トランザクションを中止させる割り込みとは異なる割り込みを受け付けた場合には、前記トランザクションをロールバックし、
前記トランザクションを中止させる割り込みを受け付けた場合には、前記トランザクションをロールバックしないこと、
を特徴とするデータベースの更新方法。
【請求項３】
請求項１に記載のデータベースの更新方法であって、
前記割り込みは、
ユーザインタフェースに対する操作に起因して発生するハードウェア割り込み、
ユーザの設定に基づくタイマ割り込み、
外部装置からの前記トランザクションを中止させる指示に応じて発生するソフトウェア割り込み、
の少なくとも何れかであること、
を特徴とするデータベースの更新方法。
【請求項４】
請求項１に記載のデータベースの更新方法であって、
前記情報処理装置は、前記レコードが格納されるテーブルにインデックスが設定されている場合、更新中の前記レコードについての前記更新処理を完了し、更新した前記レコードに応じて前記インデックスを更新した後、後続する前記レコードについての前記更新処理の実行を中止すること、
を特徴とするデータベースの更新方法。
【請求項５】
請求項１に記載のデータベースの更新方法であって、
前記情報処理装置は、
前記割り込みを受け付けた場合、前記トランザクションをロールバックするか、コミットするか、又は継続するかを問い合わせるメッセージを出力し、
前記メッセージに対する回答の入力を受け付け、
受け付けた前記回答が前記トランザクションをコミットする旨を示す場合、実行中の前記更新処理を完了した後、後続する前記更新処理の実行を中止し、
受け付けた前記回答が前記トランザクションをロールバックする旨を示す場合、前記トランザクションをロールバックし、
受け付けた前記回答が前記トランザクションを継続する旨を示す場合、実行中の前記更新処理を完了するとともに、後続する前記更新処理を実行すること、
を特徴とするデータベースの更新方法。
【請求項６】
ロールバック機能を有するデータベースと、
前記データベースに対する複数のレコードの更新処理を含むトランザクションを実行するトランザクション実行部と、
前記トランザクションの実行中に前記トランザクションを中止させる割り込みを受け付ける割り込み検知部と、を備え、
前記トランザクション実行部は、前記割り込みを受け付けた場合、ロールバックせずに、実行中の前記更新処理を完了した後、後続する前記更新処理の実行を中止すること、
を特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースの更新方法及び情報処理装置に関する。
【背景技術】
【０００２】
データベース管理システムでは、トランザクションの実行を途中で中止する場合、そのトランザクションはロールバックされる。ロールバックとは、トランザクション中に行われたデータベースに対する更新処理（挿入、更新、削除等）をすべて取り消し、データベースをトランザクション開始時点の状態に戻すことである。トランザクションをロールバックすることにより、レコード間の整合性が保たれる。
【０００３】
トランザクションの実行中に割り込みが発生すると、実行中の処理は強制終了されることになるが、このような場合にもレコード間の整合性を保つ仕組みが提案されている。例えば、特許文献１に記載のシステムでは、プロセスが強制終了されたかどうかを判断し、データベースの修復を行うことで、データベースにおけるレコード間の整合性を保つようにしている。
【０００４】
一方、トランザクションのロールバックには時間がかかるので、この時間を短縮する技術も提案されている。例えば、特許文献２に記載のシステムでは、トランザクション中にチェックポイントを設定し、トランザクションの実行を途中で中止する場合には、直前に設定されたチェックポイント以降の更新処理を取り消し、データベースを直前にチェックポイントを設定した時点の状態に戻すことで、トランザクションをロールバックする範囲を局所化し、ロールバックにかかる時間を短縮している。
【特許文献１】特開２０００−７６１１１号公報
【特許文献２】特開平９−９１１８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、ネットワーク環境の高速化やデータベースシステムの適用範囲拡大に伴い、レコードをダウンロードして利用する形態のシステムが増加している。このようなシステムにおいて、通信状況によっては、ダウンロードが途中で中断してしまうこともある。ダウンロードが中断されると、タイムアウトによる割り込みが発生し、トランザクションはロールバックされる。
【０００６】
しかし、ダウンロードするレコードの内容によっては、必ずしも全てのレコードをダウンロードしなくても利用できるものもある。例えば、渋滞情報である。渋滞情報はエリア内すべての情報がダウンロードできない場合でも、まったく表示しないよりは、一部でも受け取った情報を表示した方がユーザの使い勝手は良い。他の例としては、音楽データである。音楽データは全てをダウンロードできない場合でも、ダウンロードできた部分については再生することが望ましい。このように、途中までダウンロードしたレコードを利用しながら、その間に残りのレコードをダウンロードする仕組みにすると、ユーザにとって便利であり、望ましいシステムとなる。
【０００７】
ところが、ダウンロードが途中で中断されたことによりタイムアウト等による割り込みが発生し、レコードの更新処理が途中で中断された場合に、トランザクションのロールバックを行わないと、更新処理中であったレコードの完全性を保つことはできない。
【０００８】
本発明は、このような背景を鑑みてなされたものであり、割り込みによりトランザクションを中止する場合にロールバックすることなくレコードの完全性を保つことのできるデータベースの更新方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するための本発明の主たる発明は、ロールバック機能を有するデータベースの更新方法であって、前記データベースに対する複数のレコードの更新処理を含むトランザクションの実行中に前記トランザクションを中止させる割り込みを受け付けた場合、更新中の前記レコードについての前記更新処理を完了した後、後続する前記レコードについての前記更新処理の実行を中止することとする。
【発明の効果】
【００１０】
本発明によれば、割り込みによりトランザクションを中止する場合にロールバックすることなくレコードの完全性を保つことができる。
【発明を実施するための最良の形態】
【００１１】
＝＝システム構成＝＝
図１は、本実施形態に係る情報処理システムの全体構成を示す図である。同図に示すように、本実施形態の情報処理システムは、ユーザ端末１０及びデータベースサーバ２０を含んで構成されている。ユーザ端末１０とデータベースサーバ２０とは、通信ネットワーク１１を介して通信可能に接続されている。通信ネットワーク１１は、例えば、イーサネット（登録商標）や公衆電話回線により構築されるインターネットやＬＡＮ（Local Area Network）である。
【００１２】
データベースサーバ２０は、データベース管理システム（ＤＢＭＳ；Database Management System）の機能を有するコンピュータである。データベースサーバ２０は、ユーザ端末１０（外部装置）から受信するデータベースへの問い合わせコマンド（クエリ）に応じて、データベースに登録されているレコードに対する操作処理を行う。クエリは、例えば、ＳＱＬ（Structured Query Language）により記述される。レコードに対する操作処理には、レコードの検索処理と更新処理とが含まれる。レコードの検索処理は、選択（ＳＥＬＥＣＴ）コマンドに応じて行われる。レコードの更新処理には、レコードの挿入処理、更新処理、及び削除処理が含まれ、それぞれ挿入（ＩＮＳＥＲＴ）コマンド、更新（ＵＰＤＡＴＥ）コマンド、及び削除（ＤＥＬＥＴＥ）コマンドに応じて行われる。
【００１３】
データベースサーバ２０にはディスク装置３０が接続されている。ディスク装置３０は、例えば、ハードディスクドライブやフラッシュディスクなどの、データを記憶する記憶装置である。ディスク装置３０とデータベースサーバ２０とは、例えば、ＳＣＳＩやＳＡＮ（Storage Area Network）、ＬＡＮなどの通信路により接続される。なお、データベースサーバ２０がディスク装置３０を内蔵する構成としてもよい。
【００１４】
＝＝ハードウェア＝＝
図２は、データベースサーバ２０のハードウェア構成を示す図である。同図に示すように、データベースサーバ２０は、ＣＰＵ２０１、メモリ２０２、通信インタフェース２０３、ディスクインタフェース２０４を備えている。ＣＰＵ２０１はデータベースサーバ２０全体の動作を司り、メモリ２０２に記憶されているプログラム２１を実行することにより、データベース管理システムとしての機能を実現する。通信インタフェース２０３は、通信ネットワーク１１に接続するためのインタフェースである。通信インタフェース２０３は、例えば、イーサネット（登録商標）に接続するためのアダプタや、公衆電話回線に接続するためのモデムなどである。ディスクインタフェース２０４は、ディスク装置３０に接続するためのインタフェースである。ディスクインタフェース２０４は、例えば、ＳＣＳＩ接続のためのアダプタや、ＳＡＮに接続するためのＨＢＡ（Host Bus Adaptor）、ＴＣＰ／ＩＰによりディスク装置３０に接続するためのイーサネット（登録商標）アダプタなどである。
【００１５】
＝＝ソフトウェア＝＝
図３は、データベースサーバ２０の機能ブロック図である。同図に示すように、データベースサーバ２０は、クエリ受信部２１１、クエリ解析部２１２、割り込み検知部２１３、プラン実行部２１４、データ入出力部２１５、応答送信部２１６、プラン情報記憶部４１、トランザクション情報記憶部４２を備えている。また、図３に示すように、ディスク装置３０には、データベースのテーブルが格納されるテーブル領域３１と、テーブルに設定されるインデックスが格納されるインデックス領域３２とが設定されている。
【００１６】
テーブル領域３１及びインデックス領域３２の構成例を図４に示す。テーブル領域３１には、テーブル３１０単位でレコードが格納される。テーブル３１０に登録される各レコードには、データ長欄３１１、ステータス欄３１２、トランザクションＩＤ欄３１３、及びデータ欄３１４が含まれる。
【００１７】
データ欄３１４には、カラムから構成されるデータ（以下、レコードデータという。）が格納される。図４の例では、一例として、「ｄａｔｅ」「ｐｒｉｃｅ」「ｒｅｍａｒｋｓ」のカラムを含むレコードデータがテーブル３１０に格納されている。レコードデータのデータ長がデータ長欄３１１に設定される。
【００１８】
ステータス欄３１２には、レコードの状態を示す情報（以下、レコードステータスという。）が設定される。本実施形態では、レコードステータスには、レコードの読み出しが可能な「完了」、レコードが削除されたことを示す「削除」、未確定のトランザクション中に挿入又は更新されたレコードを示す「更新処理中」、及び未確定のトランザクション中に削除されたレコードを示す「削除処理中」の３種類があるものとする。
【００１９】
トランザクションＩＤ欄３１３には、レコードステータスが「更新処理中」又は「削除処理中」である場合に、レコードの挿入、更新、又は削除を行ったトランザクションを示す識別情報（以下、トランザクションＩＤという。）が設定される。
【００２０】
インデックス領域３２には、テーブル３１０の１つ以上のカラムについて設定されるインデックス３２０が格納される。インデックス３２０の構成としては、一般的なデータベース管理システムに用いられるものを採用することができる。
【００２１】
クエリ受信部２１１は、ユーザ端末１０から送信されるクエリを受信する。本実施形態では、クエリに応じたデータベースの操作処理は非同期に行われるものとする。クエリ受信部２１１は、データベースの操作処理中に、トランザクションをキャンセル（中止）するように指示するコマンド（以下、キャンセル要求という。）をユーザ端末１０から受信することもある。クエリ受信部２１１は、キャンセル要求を受信した場合、後述の割り込み検知部２１３にその旨を通知する。本実施形態では、クエリ受信部２１１は、シグナル（割り込み）を発生させることにより、キャンセル要求を受信した旨の通知を行う。
【００２２】
クエリ解析部２１２は、ユーザ端末１０から受信したクエリを解析し、データベースサーバ２０が行うべき操作処理を示す情報（以下、プラン情報という。）を作成し、作成したプラン情報をプラン情報記憶部４１に登録する。すなわち、クエリ解析部２１２は、一般的なデータベース管理システムでいう、構文解析処理（パーサ）、問い合わせの解析処理（アナライザ）、最適化処理（オプティマイザ）の機能を提供することになる。
【００２３】
図５にプラン情報記憶部４１に登録されるプラン情報の構成例を示す。同図に示すように、プラン情報には、トランザクションＩＤ欄４１１、プランＩＤ欄４１２、プランタイプ欄４１３、プランデータ欄４１４、及びサブプラン欄４１５が含まれている。
【００２４】
トランザクションＩＤ欄４１１には、トランザクションのトランザクションＩＤが設定される。プランＩＤ欄４１２には、プラン情報の識別情報（以下、プランＩＤという。）が設定される。
【００２５】
プランタイプ欄４１３には、プラン情報が示す処理の種類を示す情報（以下、プランタイプという。）が設定される。本実施形態では、プランタイプは、「挿入」「更新」「削除」「選択」「コミット」「ロールバック」の６種類のいずれかであるものとする。上記の６種類のプランタイプはそれぞれ、クエリに含まれるレコードの挿入コマンド（ＩＮＳＥＲＴ）、更新コマンド（ＵＰＤＡＴＥ）、削除コマンド（ＤＥＬＥＴＥ）、及び選択コマンド（ＳＥＬＥＣＴ）、並びにトランザクションのコミット（ＣＯＭＭＩＴ）及びロールバック（ＲＯＬＬＢＡＣＫ）に対応する。なお、ロールバックはアボート（ＡＢＯＲＴ）とも呼ばれる。
【００２６】
プランデータ欄４１４には、レコードの操作処理に必要なデータ（以下、プランデータという。）が設定される。図５のプランＩＤが「１」のプラン情報の例では、カラム「ｐｒｉｃｅ」及びカラム「ｒｅｍａｒｋｓ」に、「５」及び「発売日未定」を設定したレコードを、テーブル「Ｔ１」に登録するためのプランデータの一例が示されている。
【００２７】
サブプラン欄４１５には、プラン情報による処理に伴って行われる他の処理を示す情報（以下、サブプラン情報という。）が設定される。サブプラン情報は、例えば、レコードの更新時に、更新対象となるレコードを選択する処理を示す情報である。図５のプランＩＤが「２」であるプラン情報の例では、「ｄａｔｅ」カラムの値が「２００６年５月１日」よりも大きいレコードを更新対象のレコードとして選択するために必要なデータが格納されている。サブプラン欄４１５に設定されるサブプラン情報は、トランザクションＩＤを除いてプラン情報と同様の構成である。すなわち、図５に示すように、サブプラン情報には、サブプランＩＤ欄４１５１、プランタイプ欄４１５２、プランデータ欄４１５３、及びサブプラン欄４１５４が含まれている。サブプランＩＤ欄４１５１には、サブプランの識別情報が設定され、サブプラン情報のサブプラン欄４１５４には、サブプラン情報による処理に伴って行われる他の処理を示すサブプラン情報が設定される。すなわち、プラン情報記憶部４１には、ネストしたプラン情報が登録可能となっている。
【００２８】
トランザクション情報記憶部４２は、トランザクションに関する情報（以下、トランザクション情報という。）を記憶する。図６にトランザクション情報記憶部４２に記憶されるトランザクション情報の構成例を示す。同図に示すように、トランザクション情報は、トランザクションＩＤ欄４２１、キャンセル種別欄４２２、及び継続フラグ欄４２３が含まれている。
【００２９】
トランザクションＩＤ欄４２１には、トランザクションＩＤが設定される。トランザクションＩＤは、クエリ解析部２１２により割り当てられる。クエリ解析部２１２は、トランザクションの開始を指示するコマンド（ＢＥＧＩＮコマンド）がクエリに含まれていた場合や、明示的にトランザクションが開始されていない間に各種のコマンドを含むクエリを受信した場合に、トランザクションＩＤを生成するものとする。
【００３０】
キャンセル種別欄４２２には、トランザクションを中止するかどうかを示す値（以下、キャンセル種別という。）が設定される。本実施形態では、キャンセル種別欄４２２には、「０」〜「５」が設定される。キャンセル種別が「０」の場合、トランザクションが正常に実行されていることを示す。キャンセル種別が「１」である場合、ハードウェア割り込みが発生したことを示す。キャンセル種別が「２」である場合は、タイマ割り込みが発生したことを示す。キャンセル種別が「３」である場合には、ユーザからキャンセル要求を受け付けたことを示す。また、キャンセル種別が「４」であれば、ユーザからコミットコマンドを受け付けたことを示し、キャンセル種別が「５」であればユーザからロールバックコマンドを受け付けたことを示す。キャンセル種別欄４２２に「０」以外のキャンセル種別が設定されている場合、トランザクションに係る処理は中止される。
【００３１】
継続フラグ欄４２３には、トランザクションを継続するかどうかを示すフラグ値（以下、継続フラグという。）が設定される。後述するように、キャンセル種別欄４２２に「０」以外のキャンセル種別が設定されていても、継続フラグ欄４２３に「１」が設定されている場合には、トランザクションは継続される。
【００３２】
割り込み検知部２１３は、データベースサーバ２０において発生する割り込みを検知する。割り込みには、ハードウェア割り込みとソフトウェア割り込みとがある。ハードウェア割り込みは、例えば、データベースサーバ２０の利用者がボタンやキーボードなどのユーザインタフェースを操作したことに起因して発生する。ソフトウェア割り込みには、上述したようにユーザ端末１０からキャンセル要求を受信した場合に発生するシグナルや、ユーザの設定によるタイマ割り込みがある。ソフトウェア割り込みは、例えば、データベースサーバ２０で動作するオペレーティングシステムにより発生する。なお、ハードウェア割り込みやソフトウェア割り込みは、上記のもの以外にも存在するが、本実施形態では、簡単のため、割り込み検知部２１３が検知する割り込みは、ハードウェア割り込みと、ユーザの設定によるタイマ割り込み、及びキャンセル要求の受信に起因するシグナルのいずれかであるものとする。
【００３３】
割り込み検知部２１３は、割り込みを検知すると、トランザクション情報のキャンセル種別欄４２２の設定を行う。図７に、割り込み検知部２１３による処理の流れを示す。割り込み検知部２１３は、トランザクション情報記憶部４２に記憶されている各トランザクション情報について、ハードウェア割り込みを検知した場合（Ｓ５０１：ＹＥＳ）には、キャンセル種別欄４２２に「１」を設定し（Ｓ５０２）、タイマ割り込みを検知した場合（Ｓ５０３：ＹＥＳ）には、キャンセル種別欄４２２に「２」を設定し（Ｓ５０４）、クエリ受信部２１１からのシグナルを検知した場合（Ｓ５０５：ＹＥＳ）には、キャンセル種別欄４２２に「３」を設定する（Ｓ５０６）。なお、キャンセル種別の「４」又は「５」については、後述のプラン実行部２１４によりキャンセル種別欄４２２に設定される。
【００３４】
プラン実行部２１４は、プラン情報記憶部４１に記憶されているプラン情報に応じてレコードの操作処理を行い、データ入出力部２１５は、プラン実行部２１４からの指示に応じて、ディスク装置３０に対するデータの入出力を行い、応答送信部２１６は、プラン実行部２１４が実行した操作処理の結果をユーザ端末１０に送信する。
【００３５】
＝＝処理＝＝
以下、本実施形態のデータベースサーバ２０による処理について説明する。図８に、データベースサーバ２０が行うデータベースの操作処理の流れを示す。
【００３６】
プラン実行部２１４は、プラン情報記憶部４１から同一のトランザクションＩＤ（以下、処理トランザクションＩＤという。）が設定されているプラン情報を読み出す（Ｓ６０１）。プラン実行部２１４は、読み出したプラン情報及びそれらのサブプラン情報について実行順序を決定し、プラン情報及びサブプラン情報（以下、サブプラン情報もプラン情報という。）を、決定した実行順序に並べたリストを作成する（Ｓ６０２）。プラン実行部２１４は、作成したリストに含まれる各プラン情報について、以下の処理を行う。
【００３７】
プラン実行部２１４は、プラン情報のプランタイプ欄４１３（又はサブプラン情報のプランタイプ欄４１５２）に設定されているプランタイプをタイプとして（Ｓ６０３）、タイプが「挿入」であれば（Ｓ６０４：挿入）後述の挿入処理を行い（Ｓ６０５）、タイプが「更新」であれば（Ｓ６０４：更新）、後述の更新処理を行い（Ｓ６０６）、タイプが「削除」であれば（Ｓ６０４：削除）、後述の削除処理を行う（Ｓ６０７）。また、タイプが「選択」である場合には（Ｓ６０４：選択）、一般的なデータベースの検索処理により、テーブル３１０からのレコードの検索を行う（Ｓ６０８）。
【００３８】
タイプが「挿入」「更新」「削除」又は「選択」である場合（Ｓ６０４：挿入、更新、削除、選択）、プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報のキャンセル種別欄４２２に設定されているキャンセル種別が「０」以外であるかどうかを判断する（Ｓ６０９）。キャンセル種別が「０」以外であれば（Ｓ６０９：ＹＥＳ）、応答送信部２１６は、トランザクションをコミットするか、ロールバックするか、又は継続するかを問い合わせるメッセージ（以下、確認要求という。）をユーザ端末１０に送信し、確認要求に対する応答をユーザ端末１０から受信する（Ｓ６１０）。確認要求に対するユーザ端末１０からの応答が、トランザクションを継続する旨を示すものであった場合（Ｓ６１１：ＹＥＳ）には、プラン実行部２１４は、次のプラン情報について（Ｓ６０３）からの処理を続ける。
【００３９】
確認要求に対するユーザ端末１０からの応答がトランザクションのコミット又はロールバックを示す場合（Ｓ６１１：ＮＯ）、プラン実行部２１４は、タイプにコミット又はロールバックを設定して（Ｓ６１２）、（Ｓ６１３）に進む。
【００４０】
タイプが「コミット」又は「ロールバック」である場合（Ｓ６０４：コミット／ロールバック）、プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報のキャンセル種別欄４２２に、タイプが「コミット」の場合には「４」を、タイプが「ロールバック」の場合には「５」を設定し（Ｓ６１３）、トランザクションＩＤが処理トランザクションＩＤと一致するプラン情報をプラン情報記憶部４１から削除する（Ｓ６１４）。  
以上の処理により、トランザクションに係る一連の操作処理が行われる。
【００４１】
次に、プラン実行部２１４は、トランザクションの終了処理を行う（Ｓ６１５）。プラン実行部２１４は、例えば、処理トランザクションＩＤがトランザクションＩＤ欄３１３に設定されているレコードを検索し、検索したレコード（以下、トランザクションレコードという。）のそれぞれについて、キャンセル種別が「４」の場合（トランザクションがコミットされた場合）、トランザクションレコードのステータス欄３１２が「更新処理中」であれば「完了」に変更し、「削除処理中」であれば「削除」に変更する。また、キャンセル種別が「５」の場合（トランザクションがロールバックされた場合）、プラン実行部２１４は、トランザクションレコードのステータス欄３１２が「更新処理中」であれば「削除」に変更し、「削除処理中」であれば「完了」に変更する。このようにして、プラン実行部２１４はトランザクションの終了処理を行う。なお、プラン実行部２１４が行うトランザクションの終了処理には、一般的なデータベース管理システムにおけるトランザクションの終了処理を採用することができる。
【００４２】
＝＝挿入処理＝＝
図９は、挿入処理の流れを示す図である。プラン実行部２１４は、プラン情報に含まれるプランデータから、レコードの挿入先となるテーブル（以下、処理テーブルという。）を特定する（Ｓ６２１）。プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「１」を設定し（Ｓ６２２）、プランデータに基づいてレコードデータを作成する（Ｓ６２３）。プラン実行部２１４は、作成したレコードデータのデータ長をデータ長欄３１１に設定し、ステータス欄３１２に「更新処理中」を設定し、トランザクションＩＤ欄３１３に処理トランザクションＩＤを設定し、データ欄３１４にレコードデータを設定したレコードを作成する（Ｓ６２４）。プラン実行部２１４は、データ入出力部２１５がディスク装置３０にデータを書き込む単位となるデータ長（以下、バッファサイズという。）毎に、作成したレコードを分割して書き込みデータを作成する（Ｓ６２５）。データ入出力部２１５は、プラン実行部２１４が作成した書き込みデータのそれぞれをディスク装置３０へ書き込む（Ｓ６２６）。
【００４３】
図１０に、データ入出力部２１５によるディスク装置３０へのデータの書き込み処理の流れを示す。データ入出力部２１５は、処理トランザクションＩＤに対応するトランザクション情報のキャンセル種別欄４２２に設定されているキャンセル種別を参照し（Ｓ７０１）、キャンセル種別が「０」でない場合（Ｓ７０１：ＹＥＳ）、トランザクション情報の継続フラグ欄４２３に設定されている継続フラグを参照する（Ｓ７０２）。キャンセル種別が「０」であるか（Ｓ７０１：ＮＯ）、継続フラグが「１」であれば（Ｓ７０２：ＹＥＳ）、データ入出力部２１５は、ディスク装置３０のテーブル領域３１に書き込みデータを書き込む（Ｓ７０３）。上記のようにしてレコードがディスク装置３０に書き込まれる。
【００４４】
次に、プラン実行部２１４は、処理テーブルにインデックス３２０が設定されているかどうかを判断し（Ｓ６２７）、インデックス３２０が設定されていれば（Ｓ６２７：ＹＥＳ）、データ入出力部２１５は、処理テーブルに設定されているインデックス３２０からインデックス値を読み出す（Ｓ６２８）。プラン実行部２１４は、データ入出力部２１５が読み出したインデックス値と、更新したレコードとに応じて、新たなインデックス値を算出し（Ｓ６２９）、データ入出力部２１５は、プラン実行部２１４が算出したインデックス値をインデックス３２０へ書き込む（Ｓ６３０）。なお、インデックス値をインデックス３２０に書き込む処理についても、上述した図１０に示す書き込み処理と同様の処理が行われる。  
プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「０」を設定する（Ｓ６３１）。
【００４５】
以上の処理によりレコードの挿入処理が行われる。
【００４６】
＝＝更新処理＝＝
図１１は更新処理の流れを示す図である。プラン実行部２１４は、上述した図９の挿入処理と同様に、処理テーブルを特定した後（Ｓ６４１）、プランデータに基づいて更新の対象となるレコード（以下、更新レコードという。）を特定する（Ｓ６４２）。更新レコードの特定は、例えば、処理テーブルにインデックスが設定されている場合には、更新コマンドに含まれる条件句に設定されている条件に見合うレコードをインデックスから特定することにより行うことができる。プラン実行部２１４は、特定した更新レコードのそれぞれについて以下の処理を行う。
【００４７】
プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「１」を設定する（Ｓ６４３）。データ入出力部２１５は、更新データのデータ欄３１４に設定されているレコードデータを読み出し（Ｓ６４４）、ディスク装置３０に格納されている更新レコードについて、ステータス欄３１２に「削除処理中」を書き込み（Ｓ６４４）、トランザクションＩＤ欄３１３に処理トランザクションＩＤを書き込む（Ｓ６４５）。
【００４８】
プラン実行部２１４は、プランデータに基づいてレコードデータを更新し（Ｓ６４６）、上述の図９の（Ｓ６２４）〜（Ｓ６２６）と同様に、更新したレコードデータのデータ長、「更新処理中」、処理トランザクションＩＤ、及びレコードデータを設定したレコードを作成し（Ｓ６４７）、作成したレコードをバッファサイズ毎の書き込みデータにする（Ｓ６４８）。データ入出力部２１５は、書き込みデータのそれぞれをディスク装置３０に書き込む（Ｓ６４９）。
【００４９】
また、上述の図９の（Ｓ６２７）〜（Ｓ６３１）と同様に、処理テーブルにインデックスが設定されている場合（Ｓ６５０：ＹＥＳ）、データ入出力部２１５はインデックス３２０からインデックス値を読み出し（Ｓ６５１）、プラン実行部２１４は、インデックス値とレコードデータとに基づいてインデックス値を算出し（Ｓ６５２）、プラン実行部２１４は、算出したインデックス値を、データ入出力部２１５がインデックス３２０に書き込む（Ｓ６５３）。
【００５０】
プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「０」を設定し（Ｓ６５４）、処理トランザクションＩＤに対応するトランザクション情報のキャンセル種別欄４２２に「０」のキャンセル種別が設定されている場合（Ｓ６５５：ＹＥＳ）には、次の更新レコードについて（Ｓ６４３）からの処理を行い、キャンセル種別が「０」以外である場合（Ｓ６５５：ＮＯ）には、処理を終了する。
【００５１】
＝＝削除処理＝＝
図１２はレコードの削除処理の流れを示す図である。  
プラン実行部２１４は、上述した図９の挿入処理と同様に、処理テーブルを特定し（Ｓ６６１）、プランデータに基づいて削除するレコード（以下、削除レコードという。）を特定する（Ｓ６６２）。プラン実行部２１４は、特定した削除レコードのそれぞれについて以下の処理を行う。
【００５２】
プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「１」を設定し（Ｓ６６３）、データ入出力部２１５は、削除レコードのステータス欄３１２に「削除処理中」を書き込み（Ｓ６６４）、トランザクションＩＤ欄３１３に処理トランザクションＩＤを書き込む（Ｓ６６５）。
【００５３】
上述の図１１の（Ｓ６５０）〜（Ｓ６５５）と同様に、処理テーブルにインデックスが設定されている場合（Ｓ６６６：ＹＥＳ）、データ入出力部２１５は、インデックス３２０からインデックス値を読み出し（Ｓ６６７）、プラン実行部２１４は、インデックス値とレコードデータとに基づいてインデックス値を算出し（Ｓ６６８）、データ入出力部２１５は、プラン実行部２１４が算出したインデックス値をインデックス３２０に書き込む（Ｓ６６９）。プラン実行部２１４は、処理トランザクションＩＤに対応するトランザクション情報の継続フラグ欄４２３に「０」を設定し（Ｓ６７０）、キャンセル種別が「０」以外であれば（Ｓ６７１：ＮＯ）、処理を終了する。
【００５４】
以上説明したように、本実施形態のデータベースサーバ２０では、割り込みに応じて、更新中のレコードがあればそのレコードに係る更新処理を完了し、そのレコードの更新までの操作処理を確定した後、トランザクションを中止する。
【００５５】
一般的なデータベース管理システムでは、レコードの書き込み処理中に割り込みを検知した場合、書き込み処理は途中で中断されることになるので、書き込んだレコードの完全性を保つことができない。したがって、一般的なデータベース管理システムでは、テーブルをトランザクションの開始前の状態まで戻すロールバックが行われている。
【００５６】
しかしながら、本実施形態のデータベースサーバ２０では、レコードの書き込み中に割り込みを受けても、書き込み中のレコードを完全にディスク装置３０に書き込んだ後に、後続の処理を中断している。したがって、本実施形態のデータベースサーバ２０は、割り込みが発生した時点で書き込み中であったレコードの完全性を保ちながら、ロールバックすることなく、トランザクションを中断することができる。
【００５７】
また、本実施形態のデータベースサーバ２０は、トランザクションを中断しても、従来技術のようにデータベースを修復することなく、レコードの完全性を保つことができる。したがって、データベースの修復にかかる時間を削減することができる。
【００５８】
また、本実施形態のデータベースサーバ２０は、割り込みを受けた時点で更新中のレコードの更新処理を終了した後、更新中であったレコード及びそれまでに更新されたレコードを確定した上で、トランザクションを中止することができる。したがって、データベースには、割り込みの発生時点までに更新されたレコードは有効に格納されることになる。すなわち、本実施形態のデータベースサーバ２０は、レコードの完全性を失うことなく、割り込みが発生した時点までに更新されたレコードを確定した上で、トランザクションを中止することができる。これにより、ユーザは割り込みが発生する時点以前に更新されたレコードを、割り込みの発生後も利用することができる。したがって、例えば、渋滞データや音楽データなどをダウンロードしてデータベースに登録する場合において、データをダウンロード中にタイムアウト等による割り込みが発生した場合でも、その時点までにダウンロードしたデータは有効に登録され、ユーザはそれらのデータを継続して利用することができる。例えば、ダウンロードした一部の地域についての渋滞情報を表示したり、ダウンロードした時点までの音楽データを再生したりすることができる。すなわち、システム全体としての処理の中断を防ぐことができる。また、タイムアウト等の割り込み発生時点以降のレコードを再度更新する場合にも、割り込み時点以降のレコードについてのみ更新処理を行えばよいので、トランザクションのキャンセルによる手戻りを低減し、トランザクションのやり直しに係る時間や処理負荷を減らすことができる。
【００５９】
また、テーブル３１０にインデックス３２０が設定されている場合には、インデックス３２０の更新後に処理が中断されるので、テーブル３１０に登録されているレコードとインデックス３２０との整合性を保つことができる。したがって、テーブル３１０におけるレコードの特定処理にインデックス３２０を利用し続けることができる。よって、トランザクションを途中でキャンセルしても、テーブル３１０に対する検索速度の低下を防ぐことができる。
【００６０】
なお、本実施形態では、レコードの削除時において、レコードはテーブル領域３１から削除されずにレコードステータスが変更され、レコードの更新時においては、既存のレコードを更新せずに削除して新しいレコードを挿入する、いわゆる追記型の管理がなされるものとしたが、もちろん、レコードをテーブル領域３１から削除したり、既存のレコードを更新したりするような管理をするようにしてもよい。
【００６１】
また、本実施形態では、ユーザ端末１０からクエリを受け付けてデータベースのレコードの操作処理を行う形態を想定したが、これに限らず、データベースサーバ２０を直接ユーザが操作する形態としてもよい。例えば、データベースサーバ２０の機能をユーザが操作する携帯端末に搭載し、携帯端末が外部のサーバから渋滞データや音楽データをダウンロードして携帯端末内のデータベースに登録するような場合に適用することができる。
【００６２】
また、プラン実行部２１４とデータ入出力部２１５とは、異なるプロセスとして並列的に処理を行うようにしてもよい。この場合、プラン実行部２１４は、テーブル領域３１やインデックス領域３２の位置情報を決定し、書き込みデータとともに書き込み要求としてデータ入出力部２１５に送信するようにする。また、トランザクション情報記憶部４２は、プラン実行部２１４及びデータ入出力部２１５のそれぞれから参照可能な共有メモリに実現するようにする。
【００６３】
また、本実施形態では、割り込みの種別として、ユーザインタフェースの操作に起因して発生するハードウェア割り込みと、ユーザの設定によるタイマ割り込み、及びユーザ端末１０からのキャンセル要求に応じて発生するシグナルの３種類としたが、これに限らず、その他にも任意の割り込みに対応することができる。
【００６４】
また、本実施形態では、簡単のため、上記３種類の割り込み以外の割り込みが発生した場合（図７のＳ５０５：ＮＯ）には、キャンセル種別を設定せず、トランザクションが継続するものとしたが、例えば、他の割り込みが発生した場合には、トランザクションをロールバックするようにしてもよい。これにより、タイマやキャンセル要求等のユーザからの指示に応じた割り込みの場合には、それまでのレコードを確定しつつ、その他エラー等に起因する割り込みの場合には、トランザクションをロールバックして、データベースのレコードを保護することができる。
【００６５】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【図面の簡単な説明】
【００６６】
【図１】本実施形態に係る情報処理システムの全体構成を示す図である。
【図２】データベースサーバ２０のハードウェア構成を示す図である。
【図３】データベースサーバ２０の機能ブロック図である。
【図４】テーブル領域３１及びインデックス領域３２の構成例を示す図である。
【図５】プラン情報記憶部４１に登録されるプラン情報の構成例を示す図である。
【図６】トランザクション情報記憶部４２に記憶されるトランザクション情報の構成例を示す図である。
【図７】割り込み検知部２１３による処理の流れを示す図である。
【図８】プラン情報に応じてデータベースサーバ２０が行う操作処理の流れを示す図である。
【図９】レコードの挿入処理の流れを示す図である。
【図１０】データ入出力部２１５によるデータの書き込み処理の流れを示す。
【図１１】レコードの更新処理の流れを図１１に示す図である。
【図１２】レコードの削除処理の流れを示す図である。
【符号の説明】
【００６７】
１０  ユーザ端末                      １１  通信ネットワーク
２０  データベースサーバ              ２１  プログラム
２０１  ＣＰＵ                        ２０２  メモリ
２０３  通信インタフェース            ２０４  ディスクインタフェース
２１１  クエリ受信部                  ２１２  クエリ解析部
２１３  割り込み検知部                ２１４  プラン実行部
２１５  データ入出力部                ２１６  応答送信部
３０  ディスク装置                    ３１  テーブル領域
３１０  テーブル                      ３１１  データ長欄
３１２  ステータス欄                  ３１３  トランザクションＩＤ欄
３１４  データ欄
３２  インデックス領域                ３２０  インデックス
４１  プラン情報記憶部                ４１１  トランザクションＩＤ欄
４１２  プランＩＤ欄                  ４１３  プランタイプ欄
４１４  プランデータ欄                ４１５  サブプラン欄
４１５１  サブプランＩＤ欄            ４１５２  プランタイプ欄
４１５３  プランデータ欄              ４１５４  サブプラン欄
４２  トランザクション情報記憶部      ４２１  トランザクションＩＤ欄
４２２  キャンセル種別欄              ４２３  継続フラグ欄
【図１】
2007317100.tif 000003
【図２】
2007317100.tif 000004
【図３】
2007317100.tif 000005
【図４】
2007317100.tif 000006
【図５】
2007317100.tif 000007
【図６】
2007317100.tif 000008
【図７】
2007317100.tif 000009
【図８】
2007317100.tif 000010
【図９】
2007317100.tif 000011
【図１０】
2007317100.tif 000012
【図１１】
2007317100.tif 000013
【図１２】
2007317100.tif 000014