(57)【特許請求の範囲】
【請求項１】
データ部とインデックス部とを有するオンライン業務処理用のデータベース管理システムにおいて，
前記データベースに対する更新要求を処理する更新要求処理部と，
前記データベースに対する検索要求を処理する検索要求処理部とを備え，
前記データベースにおけるデータ部とインデックス部との双方に，整合性保証用のカウンタを有し，
前記更新要求処理部は，
更新対象となるデータ部に対して排他制御を行い，要求されたデータ部を更新するとともに，更新されたデータ部に対応するインデックス部のインデックス項目の更新が必要かどうかを判定し，更新が必要でない場合には，前記データ部の排他制御を解除する手段と，
前記インデックス部のインデックス項目の更新が必要な場合には，前記インデックス部に対して排他制御を行った後，前記データ部のカウンタを更新するとともに，前記更新が必要なインデックス部のインデックス項目を更新し，さらに前記データ部のカウンタと同値になるように当該インデックス部のカウンタを更新し，前記インデックス部の排他制御を解除し，その後に前記データ部の排他制御を解除する手段とを備え，
前記検索要求処理部は，
前記データベースの検索要求に対して該当するインデックス部に排他制御を行い，該インデックス部を検索してその検索結果を記憶し，該インデックス部の排他制御を解除する手段と，
前記検索結果のデータ部に対して排他制御を行い，該データ部を読み出し，前記インデックス部のカウンタ値と，対応する前記データ部のカウンタ値とが同値か否かを検査することにより，インデックス部とデータ部との整合性を確認し，整合性の確認がとれた場合には，該データ部のデータを検索結果とし，前記カウンタ値が不一致でありインデックス部とデータ部との不整合の可能性を認識した場合には，前記インデックス部に対し排他制御を行った上で該インデックス部を再検索し，再検索後に該インデックス部の排他制御を解除し，再検索の結果によって整合性を再確認し，整合性の再確認がとれた場合には該データ部のデータを検索結果とし，再確認がとれなかった場合には該データ部のデータを検索結果から廃棄し，最後に前記データ部に対する排他制御を解除する手段とを備える
ことを特徴とするデータベース管理システム。
【請求項２】
前記データベースにおけるデータ部は，検索対象としてタグ付きの構造化文書を含む
ことを特徴とする請求項１記載のデータベース管理システム。
【請求項３】
データ部とインデックス部とを有し，それらの双方に整合性保証用のカウンタが設けられたオンライン業務処理用のデータベースを更新および検索するデータベース管理処理方法において，
前記データベースに対する更新要求を処理する更新要求処理部が，
更新対象となるデータ部に対して排他制御を行い，要求されたデータ部を更新するとともに，更新されたデータ部に対応するインデックス部のインデックス項目の更新が必要かどうかを判定し，更新が必要でない場合には，前記データ部の排他制御を解除する過程と，
前記インデックス部のインデックス項目の更新が必要な場合には，前記インデックス部に対して排他制御を行った後，前記データ部のカウンタを更新するとともに，前記更新が必要なインデックス部のインデックス項目を更新し，さらに前記データ部のカウンタと同値になるように当該インデックス部のカウンタを更新し，前記インデックス部の排他制御を解除し，その後に前記データ部の排他制御を解除する過程とを実行し，
前記データベースに対する検索要求を処理する検索要求処理部が，
前記データベースの検索要求に対して該当するインデックス部に排他制御を行い，該インデックス部を検索してその検索結果を記憶し，該インデックス部の排他制御を解除する過程と，
前記検索結果のデータ部に対して排他制御を行い，該データ部を読み出し，前記インデックス部のカウンタ値と，対応する前記データ部のカウンタ値とが同値か否かを検査することにより，インデックス部とデータ部との整合性を確認し，整合性の確認がとれた場合には，該データ部のデータを検索結果とし，前記カウンタ値が不一致でありインデックス部とデータ部との不整合の可能性を認識した場合には，前記インデックス部に対し排他制御を行った上で該インデックス部を再検索し，再検索後に該インデックス部の排他制御を解除し，再検索の結果によって整合性を再確認し，整合性の再確認がとれた場合には該データ部のデータを検索結果とし，再確認がとれなかった場合には該データ部のデータを検索結果から廃棄し，最後に前記データ部に対する排他制御を解除する過程とを実行する
ことを特徴とするデータベース管理処理方法。
【請求項４】
データ部とインデックス部とを有し，それらの双方に整合性保証用のカウンタが設けられたオンライン業務処理用のデータベースを，コンピュータによって更新および検索するためのプログラムであって，
前記コンピュータを，
前記データベースに対する更新要求に対して，
更新対象となるデータ部に対して排他制御を行い，要求されたデータ部を更新するとともに，更新されたデータ部に対応するインデックス部のインデックス項目の更新が必要かどうかを判定し，更新が必要でない場合には，前記データ部の排他制御を解除する手段と，
前記インデックス部のインデックス項目の更新が必要な場合には，前記インデックス部に対して排他制御を行った後，前記データ部のカウンタを更新するとともに，前記更新が必要なインデックス部のインデックス項目を更新し，さらに前記データ部のカウンタと同値になるように当該インデックス部のカウンタを更新し，前記インデックス部の排他制御を解除し，その後に前記データ部の排他制御を解除する手段として機能させ，
前記データベースに対する検索要求に対して，
前記データベースの検索要求に対して該当するインデックス部に排他制御を行い，該インデックス部を検索してその検索結果を記憶し，該インデックス部の排他制御を解除する手段と，
前記検索結果のデータ部に対して排他制御を行い，該データ部を読み出し，前記インデックス部のカウンタ値と，対応する前記データ部のカウンタ値とが同値か否かを検査することにより，インデックス部とデータ部との整合性を確認し，整合性の確認がとれた場合には，該データ部のデータを検索結果とし，前記カウンタ値が不一致でありインデックス部とデータ部との不整合の可能性を認識した場合には，前記インデックス部に対し排他制御を行った上で該インデックス部を再検索し，再検索後に該インデックス部の排他制御を解除し，再検索の結果によって整合性を再確認し，整合性の再確認がとれた場合には該データ部のデータを検索結果とし，再確認がとれなかった場合には該データ部のデータを検索結果から廃棄し，最後に前記データ部に対する排他制御を解除する手段として
機能させるためのデータベース管理システム用のプログラム。
【請求項５】
データ部とインデックス部とを有し，それらの双方に整合性保証用のカウンタが設けられたオンライン業務処理用のデータベースを，コンピュータによって更新および検索するためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって，
前記コンピュータを，
前記データベースに対する更新要求に対して，
更新対象となるデータ部に対して排他制御を行い，要求されたデータ部を更新するとともに，更新されたデータ部に対応するインデックス部のインデックス項目の更新が必要かどうかを判定し，更新が必要でない場合には，前記データ部の排他制御を解除する手段と，
前記インデックス部のインデックス項目の更新が必要な場合には，前記インデックス部に対して排他制御を行った後，前記データ部のカウンタを更新するとともに，前記更新が必要なインデックス部のインデックス項目を更新し，さらに前記データ部のカウンタと同値になるように当該インデックス部のカウンタを更新し，前記インデックス部の排他制御を解除し，その後に前記データ部の排他制御を解除する手段として機能させ，
前記データベースに対する検索要求に対して，
前記データベースの検索要求に対して該当するインデックス部に排他制御を行い，該インデックス部を検索してその検索結果を記憶し，該インデックス部の排他制御を解除する手段と，
前記検索結果のデータ部に対して排他制御を行い，該データ部を読み出し，前記インデックス部のカウンタ値と，対応する前記データ部のカウンタ値とが同値か否かを検査することにより，インデックス部とデータ部との整合性を確認し，整合性の確認がとれた場合には，該データ部のデータを検索結果とし，前記カウンタ値が不一致でありインデックス部とデータ部との不整合の可能性を認識した場合には，前記インデックス部に対し排他制御を行った上で該インデックス部を再検索し，再検索後に該インデックス部の排他制御を解除し，再検索の結果によって整合性を再確認し，整合性の再確認がとれた場合には該データ部のデータを検索結果とし，再確認がとれなかった場合には該データ部のデータを検索結果から廃棄し，最後に前記データ部に対する排他制御を解除する手段として
機能させるためのプログラムを記録した
ことを特徴とするデータベース管理システム用のプログラム記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，オンライン業務中のデータベースにおける実データ本体とインデックスとの整合性の確認を効率よく実行できるようにしたデータベース管理システム，データベース管理処理方法，データベース管理システム用のプログラムおよびその記録媒体に関する。
【０００２】
【従来の技術】
データベースの検索に用いられる木構造のインデックスは，根ページを頂点とする二等辺三角形状の論理構造を持っている。そのため，高トラフィックなオンライン業務等において，更新多重度が増大すると根ページ付近へのアクセスが競合し，検索性能が悪化する。
【０００３】
そこで，検索処理を更新処理に影響させずに動作させる方法として，実表データを参照する際に，インデックスにロックを取らずに検索処理を動作させる（検索処理に対し最新の更新処理結果を保証しない状態を参照させる）ことで，検索・更新処理の同時実行性能を高めることが行われている。
【０００４】
この方法でインデックスから得たデータ（最新状態が保証されていない）をもとに，実表データにロックを取ることで最新状態を保証し，データを応用プログラムに返却する際，検索条件とは異なる結果集合（更新結果が反映された状態）が実表から得られる可能性があり，検索処理の精度が落ちる。
【０００５】
そこで，インデックスから得られた結果集合が実表データのロック後においても，依然として検索条件を満たしているかを再評価する必要があるが，その処理が応用プログラムへのレスポンスに悪影響を与えていた。
【０００６】
図６および図７に従って，従来技術のオンライン・データベース管理システムの例について説明する。例えば，データベースとして図６に示すような従業員データテーブル６０（以下，実表という）があり，従業員番号インデックス６１（以下，インデックスという）が設けられていたとする。この従業員データベースを更新する際に，更新トランザクションが実表とインデックスとをロックし，これらを同時に占有して更新処理を行い，また参照トランザクションにおいても実表とインデックスとを同時にロックして参照するようにすれば，どのタイミングの参照トランザクションにおいても，実表とインデックスとの間の内容の不一致が生じることはない。
【０００７】
しかし，アクセス頻度の大きいオンライン業務用のデータベースにおいて，実表とインデックスとを同時にロックし続けると，検索性能が悪化することになる。そこで，特にインデックスの占有期間を短縮するために，従来，このようなケースにおいて，実表とインデックスとのロック期間を別々にし，例えば図７（Ａ）に示すように，更新トランザクションでは，最初に実表をロックして占有し，実表を更新した後に，インデックスを占有してインデックスを更新するようにしている。
【０００８】
この場合，例えば図７（Ｂ）に示すようなタイミングの参照トランザクションがあると，インデックスを占有してインデックスを検索した後，実表にアクセスしたときに，インデックス参照後のインデックス更新によって，一時的に実表とインデックスとの間の内容の不一致が生じることになる。
【０００９】
従来技術では，この不一致に対処するため，参照トランザクションにおいて実表を占有して参照した後に，検索結果のデータが検索条件を満たすかどうかの評価を行っていた。
【００１０】
図８に，従来技術のデータベース更新処理のフローチャートを示す。データベース更新（削除を含む）要求に対して，更新トランザクションは，まず実表における更新対象の行をロックによって占有する（ステップＳ１００）。次に，更新要求に従って，実表の更新対象の行を更新する（ステップＳ１０１）。更新対象が複数行に渡る場合には，ステップＳ１００，Ｓ１０１を複数行分繰り返す。
【００１１】
その後，更新によってインデックス項目が変更されたかどうかを判定し（ステップＳ１０２），更新内容がインデックス項目に関係なければ，ステップＳ１０６へ進む。更新内容がインデックス項目に関係あり，インデックスの変更が必要な場合には，変更の必要なインデックスの該当部分をロックによって占有し（ステップＳ１０３），インデックス中のインデックス項目を実表の更新内容に応じて更新し（ステップＳ１０４），その後，アンロックしてインデックスを解放する（ステップＳ１０５）。ステップＳ１０６では，ロックしていた実表をアンロックして解放し，処理を終了する。
【００１２】
図９に，従来技術のデータベース検索処理のフローチャートを示す。データベース検索（参照）要求に対して，参照トランザクションは，まず検索条件の範囲のインデックスをロックによって占有する（ステップＳ１１０）。次に要求された検索条件に従ってインデックスを検索し，その検索の結果Ａを記憶する（ステップＳ１１１）。インデックスを検索した後，アンロックして解放する（ステップＳ１１２）。
【００１３】
その後，インデックスの検索結果Ａに従って１件ずつ，実表における取り出し対象行をロックして占有し（ステップＳ１１３），結果Ａに対応する実表の行を取り出す（ステップＳ１１４）。取り出した行（実表データ）について評価のためのデータを生成し，検索条件を満たすかどうかを調べる（ステップＳ１１５）。満たす場合には（ステップＳ１１６），ステップＳ１１８へ進む。実表から取り出した行を調べた結果，インデックスと実表とが不一致であり，実表から取り出した行の検索条件が満たされていないことがわかった場合，その結果を破棄する（ステップＳ１１７）。以上のステップＳ１１３〜Ｓ１１７を，検索結果Ａについて１件ずつ繰り返し（ステップＳ１１８），すべての結果Ａについて妥当性を評価したならば，妥当な検索結果だけを要求元へ返却する（ステップＳ１１９）。その後，実表をアンロックして解放し（ステップＳ１２０），検索処理を終了する。
【００１４】
【発明が解決しようとする課題】
以上のように，検索条件の再評価のために実表データをさらに加工して評価対象とするデータを生成する必要があるような性質のインデックス（例 :フルテキスト検索用インデックス，ＸＭＬタグ検索用インデックス等）を用いた検索処理では，一回の評価コスト（データ生成コスト）が非常に高い。
【００１５】
また，インデックスから得られた結果集合のうち，どのデータが最新状態に変更されたのか（再評価が必要なのか）が不明であるため，検索処理では全てのデータに対して評価処理を行う必要がある。
【００１６】
本発明は上記問題点の解決を図り，実表とインデックスとの整合性を確認するための処理コストを削減することを目的とする。
【００１７】
【課題を解決するための手段】
本発明は，オンライン業務中のデータベースにおいて，検索処理を行う契機で，実表（データ）とインデックスの整合性を，整合性保証用のカウンタを用いて確認する機構，および不整合の可能性を認識した契機で，インデックスの再検索により整合確認を行う機構と，オンライン業務中のデータベースにおいて，更新処理を行う契機で，実表とインデックスの整合性保証用のカウンタをメンテナンスする機構とを備えることを特徴とする。
【００１８】
整合性を確認する機構では，実表とインデックスとの整合性をカウンタの値を比較することによって行うことにより，実表データを加工して評価対象とするデータを生成する処理を省略することができる。
【００１９】
また，不整合の可能性を認識した契機で，整合確認を行う機構では，再評価のためのデータをロックした実表データから加工・生成するのではなく，再度同条件でインデックスを検索することで条件を満たしているか否かを評価する。なお，このときには，実表データがロック済みであるため，他者から更新されることはなく，必ず最新状態が得られる。
【００２０】
また，再評価は，結果集合の全てに対して行うのではななく，初回のインデックス検索以降，実表データをロックするまでにインデックスの情報が最新化された可能性がある行に対してのみ行うことにより，再評価ための処理の負荷を軽減することができる。特に検索対象がＸＭＬ文書のようなタグ付きの構造化文書である場合，従来技術では構造化文書の内容まで１件１件調べる必要があり，再評価ための処理のオーバヘッドが大きいが，本発明では構造化文書の内容まで立ち入った検索条件の確認は不要であるため，本発明による検索性能向上の効果は大きい。
【００２１】
以上の手段は，コンピュータと，そのコンピュータにインストールされ実行されるソフトウェアプログラムとによって実現することができ，そのプログラムは，コンピュータが読み取り可能な可搬媒体メモリ，半導体メモリ，ハードディスク等の適当な記録媒体に格納することができる。
【００２２】
【発明の実施の形態】
図１は，本発明の構成例を示す。オンライン・データベース管理システム１は，データベース４に対する更新および検索機能を有するシステムであり，ＣＰＵ，メモリ等とソフトウェアプログラムとによって構成される。データベース４は，インデックス部４０と実表のデータ部４１から構成される。インデックス部４０およびデータ部４１には，それぞれの行データ（レコード）ごとに整合性を保証するためのカウンタ４０１，４１１が設けられる。カウンタ４０１，４１１は，行データの世代番号を記憶する。データベース４として，ここではリレーショナル・データベースを例に説明するが，インデックスを利用するデータベースであれば本発明を適用することができ，本発明はリレーショナル・データベースに限られない。
【００２３】
オンライン・データベース管理システム１における更新要求処理部２は，ユーザまたは応用プログラム等からのデータベース４の更新要求を処理する部分である。検索要求処理部３は，ユーザまたは応用プログラム等からのデータベース４の検索要求を処理する部分である。
【００２４】
更新要求処理部２の実表更新部２０は，更新要求のあった実表のデータを更新する。このとき，カウンタ更新部２１によって該当するデータのカウンタ４１１を＋１する。また，更新したデータがインデックス部４０に関係するデータであり，インデックス部４０の更新も必要である場合には，インデックス更新部２２によって，該当するインデックスを更新する。このとき，カウンタ更新部２３によってインデックス部４０のカウンタ４０１を＋１し，対応するデータのカウンタ４１１の値と同値になるようにする。
【００２５】
検索要求処理部３のインデックス検索部３０は，データベース４の検索要求があると，まず指定された検索条件に従ってインデックス部４０を検索する。このとき，検索結果として実表内の位置とともにカウンタ４０１の値を記憶しておく。次に，インデックス部４０の検索結果を用い，実表データアクセス部３１によって，データ部４１をアクセスする。カウンタ検査部３２によって，カウンタ４０１の値と対応するデータのカウンタ４１１との値を比較し，同値であれば，検索結果出力部３５によって，検索結果を出力する。
【００２６】
カウンタ４０１とカウンタ４１１の値が異なるものがあれば，インデックス再検索部３３によって，再度，インデックス部４０の検索を行い，再検索されたインデックスの検索結果の中に，実表データアクセス部３１でアクセスしたデータが含まれているかどうかを整合性確認部３４によって再確認する。もし，再検索された検索結果の中に，実表データアクセス部３１でアクセスしたデータが含まれていなければ，そのデータを検索結果から破棄する。含まれていれば，アクセスしたデータを検索結果として検索結果出力部３５に通知し，検索要求元へ返却する。
【００２７】
以下，具体例に従ってさらに詳しく説明する。図２は，本実施の形態におけるデータベースの構成例を示す。このデータベースでは，ＸＭＬ（extensible markup language）文書化されたデータが，データ部４１の従業員データＸＭＬテーブルによって管理されている。各行データ（レコード）は，整合性保証のためのカウンタ４１１と，所定のタグによって定義された従業員データが記述されたＸＭＬ文書４２とを有する。インデックス部４０は，従業員番号をインデックスとして，ＸＭＬ文書４２における<employee-no> タグ中に，同じ従業員番号を持つデータの実表内の位置を指し示す<employee-no> タグインデックスであり，これらの各インデックスデータにも整合性保証のためのカウンタ４０１が設けられている。
【００２８】
図３は，更新要求処理部２の処理フローチャートである。更新トランザクションによる更新要求に対して，まずデータ部４１の実表をロックし占有する（ステップＳ１）。本実施の形態では，ロックは行データ単位に行われるが，複数行を含むブロック単位のロックであってもよい。次に，要求された実表データを更新する（ステップＳ２）。複数の行を一度に更新する場合には，実表のロックと実表データの更新を繰り返すが，ここでは説明を簡単にするために，１行だけの更新の場合の例を示している。
【００２９】
次に，更新内容がインデックス部４０中のインデックス項目に関係しているかどうかを調べ，インデックス部４０中のインデックス項目の変更が必要であれば（ステップＳ３），ステップＳ４へ進む。変更の必要がない場合には，ステップＳ９へ進む。
【００３０】
インデックス項目の変更が必要な場合，実表のデータ部４１における該当行のカウンタ４１１を＋１する（ステップＳ４）。その後，インデックス部４０の該当行をロックして占有し（ステップＳ５），そのインデックス項目を実表データの更新内容に合わせて更新する（ステップＳ６）。データ部４１と同様にインデックス部４０の該当カウンタ４０１を＋１し（ステップＳ７），インデックス部４０をアンロックして解放する（ステップＳ８）。最後に，実表をアンロックして解放し（ステップＳ９），更新処理を終了する。
【００３１】
１回の更新トランザクションに対して複数行を一度に更新する場合には，ステップＳ１〜Ｓ４，Ｓ９を複数行分繰り返し，ステップＳ５〜Ｓ８の処理についても更新が必要なインデックス部４０の行数分繰り返す。
【００３２】
図４は，検索要求処理部３の処理フローチャートである。参照トランザクションによるデータベース４の検索要求に対して，検索要求処理部３により，指定された検索条件範囲に対して，インデックス部４０の占有（ロック）と，インデックス部４０の検索と，インデックス部４０の解放（アンロック）を行う（ステップＳ１１〜Ｓ１３）。ここで，検索結果を「結果Ａ」とする。
【００３３】
次に，実表データアクセス部３１により，結果Ａの１件ずつに対して，実表を占有（ロック）し（ステップＳ２１），結果Ａに対応する実表の行データ（レコード）を取り出す（ステップＳ２２）。カウンタ検査部３２によって，結果Ａ（インデックス）のカウンタと行データのカウンタの値が一致するかどうかを検査し（ステップＳ２３），一致すれば，実表から取り出した行データを最終検索結果とする。
【００３４】
カウンタの値が不一致のデータがあった場合，そのデータは，ステップＳ１２におけるインデックスの検索から，ステップＳ２２における実表の行取り出しまでの間に，インデックス部４０が他のトランザクションによって更新されたものであるので，インデックス再検索部３３によって，ステップＳ３１〜Ｓ３３を実行する。すなわち，指定された検索条件範囲に対して，再度，インデックス部４０の占有（ロック）と，インデックス部４０の検索と，インデックス部４０の解放（アンロック）を行う（ステップＳ３１〜Ｓ３３）。この検索結果を「結果Ｂ」とする。
【００３５】
次に，整合性確認部３４によって，不一致データ１件ずつに対して，再検索の結果Ｂの中に，不一致データが存在するかどうかをチェックする。不一致データが存在するかどうかは，検索結果Ａおよび結果Ｂにおける実表内の位置が同じかどうかを調べることによって判断することができる。再検索の結果Ｂの中に不一致データが存在すれば，インデックスと実表データのカウンタの値が同値であることを確認する。同値であることが確認されれば，そのデータは検索条件に該当するデータであるので，最終検索結果とする（ステップＳ４０）。結果Ｂの中に不一致データが存在しないかカウンタ値が同値でなければ，検索条件を満たさないデータであるので，そのデータは破棄する（ステップＳ４１）。
【００３６】
検索結果出力部３５は，検索結果を要求元へ返却（出力）し（ステップＳ５１），実表をアンロックして解放し（ステップＳ５２），検索処理を終了する。
【００３７】
以上の処理において，インデックスを占有する区間は，ステップＳ１１からＳ１３までと，ステップＳ３１からステップＳ３３までの区間である。実表を占有する区間は，ステップＳ２１からＳ５２までの区間である。ステップＳ１２においてインデックスを検索した後，指定された検索条件範囲内の実表データが，他者の更新トランザクションにより更新されることにより，不一致データが生じる可能性がある区間は，ステップＳ１３からステップＳ２１の前までの区間であり，この区間内の更新に対して，ステップＳ３１〜Ｓ４１までの整合性の確認処理が行われることになる。
【００３８】
以上のように，データ更新時には，整合性保証用のカウンタをメンテナンスし，データ検索時には，整合性保証用カウンタの一致確認により，実表をアクセスした結果についての無用な再評価処理の回避を行う。従来技術とは，カウンタを用いて整合性を確認する点，また不整合の可能性を認識した契機でインデックスの再検索により，整合性を再確認する点が異なる。
【００３９】
図５は，図１に示すシステムの更新トランザクションと参照トランザクションの実行例を示す。図５（Ａ）に示すようなインデックス部４０のデータベースに対して，図５（Ｂ）に示す更新トランザクションがあり，インデックス対象の従業員番号を「４２５９７１」から「４２５９７２」に更新する要求があったとする。更新トランザクションでは，まず，実表を占有し，実表データにおける「４２５９７１」を「４２５９７２」に更新する。このとき，実表データのカウンタの値を＋１し，５から６に変更する。更新データは，インデックス項目であるため，次にインデックスを占有し，インデックス部４０におけるインデックシング対象の「４２５９７１」を「４２５９７２」に更新するとともに，そのカウンタの値を＋１し，５から６に変更する。その後，コミットし，更新トランザクションを終了する。最終的には，インデックス部４０は，図５（Ｃ）に示すように更新されることになる。
【００４０】
以上の更新トランザクションの実表の更新とインデックスの更新との間に，図５（Ｄ）に示すような，従業員番号が「４２５９７０」以上で「４２５９８０」未満のレコードの検索を要求する参照トランザクションがあったとする。なお，このときの更新トランザクションと参照トランザクションの処理の時間的順序は，以下のとおりであったとする。
(1) 更新トランザクションによる実表データ更新。
(2) 参照トランザクションによるインデックス検索。
(3) 更新トランザクションによるインデックス更新。
(4) 参照トランザクションによる実表データ参照。
【００４１】
上記検索要求に対して，参照トランザクションは，まず，図５（Ａ）に示すインデックス部４０を検索し，実表内の「４２５９７１」，「４２５９７５」，「４２５９７６」の３件のレコードの位置と，これらのインデックスのカウンタの値（ここでは，それぞれ「５」，「１０」，「２」）を取得する。次に，３件のレコードの位置から，実表のデータを取り出す。ここで，実表が更新トランザクションによって更新されているため，実表内の「４２５９７２」，「４２５９７５」，「４２５９７６」のレコードと，それらのカウンタの値（ここでは，それぞれ「６」，「１０」，「２」）が取り出されることになる。
【００４２】
インデックス部４０から取得したカウンタの値と，実表から取得したカウンタの値とを比較すると，「４２５９７１」と想定される従業員番号のレコードのカウンタの値がインデックス部４０では「５」，実表では「６」ということで不一致であることがわかる。すなわち，従来技術では，例えば図２に示すＸＭＬ文書４２の内容を調べなければ，不整合の可能性があるかどうかを認識できなかったのに対し，本実施の形態では，カウンタの値を比較するだけで，不整合の可能性があるか否かを認識することができる。
【００４３】
カウンタの不一致を認識することにより，整合性の再確認のため，インデックス部４０を再検索する。インデックス部４０の再検索の契機では，インデックス部４０が更新トランザクションによって図５（Ｃ）に示すように更新され，カウンタの値も「５」から「６」に更新されている。ここで，インデックス部４０が更新済みであることは，参照トランザクションにおいてインデックス部４０のロックが獲得できたことで保証される。
【００４４】
インデックス部４０の再検索によって，検索要求に合致するレコードとして，今度は，実表内の「４２５９７２」，「４２５９７５」，「４２５９７６」の３件のレコードの位置と，これらのインデックスのカウンタの値（ここでは，それぞれ「６」，「１０」，「２」）が得られ，「４２５９７２」のレコードの実表内の位置が，以前に取得した「４２５９７１」のレコードの位置と同一で，かつインデックス部４０のカウンタ値も実表におけるカウンタ値も「６」で同値であるため，これらのデータは検索条件を満たすことがわかり，検索要求元に返却すべきデータとして，「４２５９７２」，「４２５９７５」，「４２５９７６」の３件のレコードが選択される。
【００４５】
図５に示した例では，更新トランザクションによる更新後のレコードも，検索条件範囲内に含まれていたが，例えば「４２５９７１」の従業員番号が，「４２５９８１」というように，検索条件範囲外へ更新されたり，レコードが削除されたりした場合には，図５（Ｄ）の参照トランザクションでカウンタ不一致を認識した後，取得した実表のレコードが再検索したインデックスの結果に含まれなくなるため，破棄されることになり，検索要求元には返却されない。
【００４６】
【発明の効果】
以上説明したように，本発明によれば，実表のデータから評価対象データを生成した後に再評価を行う従来技術と比較し，１データあたりの評価処理コストが削減される。
【００４７】
従来の方法で実表のカラムから評価対象データを生成する場合，例えばＸＭＬ文書では１データ当たり約３０ｍｓを要していた。これは，ディスク装置からのデータ読み込み１回分以上の時間に匹敵し，さらに処理時間はデータ量（インデックス部の検索結果の件数）に比例して増加することとなる。
【００４８】
一方，本発明では，インデックスの再検索処理は１回のみ行われ，かつ，その際に従来技術と同じような１データの評価ごとにディスク読み込み１回に相当するような処理が発生することがない。また処理時間もデータ量（インデックス部の検索結果の件数）に依存しない。
【００４９】
また，実表から取得したデータが検索条件を満たすかどうかの整合性確認の処理を，カウンタの値のチェックによって削減することにより，評価処理全体の処理時間が短縮され，応用プロクラムへのレスポンスが向上する。実表参照時に，他者の更新により検索条件を満たさなくなるデータが出現する現象は希有なタイミングでのみ発生し，実際にはインデックスから得た全データ中（インデックス部の検索結果）の１％にも満たない。したがって，全てのデータについて再評価処理を行っても，その９９％以上は結果的には無駄な処理となる。本発明では，この無駄な処理が削減されることになる。
【図面の簡単な説明】
【図１】本発明の構成例を示す図である。
【図２】データベースの構成例を示す図である。
【図３】更新要求処理部の処理フローチャートである。
【図４】検索要求処理部の処理フローチャートである。
【図５】更新トランザクションと参照トランザクションの実行例を示す図である。
【図６】従来技術の例を説明する図である。
【図７】従来技術の例を説明する図である。
【図８】従来技術のデータベース更新処理のフローチャートである。
【図９】従来技術のデータベース検索処理のフローチャートである。
【符号の説明】
１    オンライン・データベース管理システム
２    更新要求処理部
２０  実表更新部
２１  カウンタ更新部
２２  インデックス更新部
２３  カウンタ更新部
３    検索要求処理部
３０  インデックス検索部
３１  実表データアクセス部
３２  カウンタ検査部
３３  インデックス再検索部
３４  整合性確認部
３５  検索結果出力部
４    データベース
４０  インデックス部
４０１  カウンタ
４１  データ部
４１１  カウンタ
【図１】
0004047557.tif 000002
【図２】
0004047557.tif 000003
【図３】
0004047557.tif 000004
【図４】
0004047557.tif 000005
【図５】
0004047557.tif 000006
【図６】
0004047557.tif 000007
【図７】
0004047557.tif 000008
【図８】
0004047557.tif 000009
【図９】
0004047557.tif 000010