(57)【要約】【課題】  本発明によれば、データベースの更新を停止することなく、データベースの整合性を適切に判断することができる。【解決手段】  階層型データベースの整合性を判断するデータベース管理システムは、複数のセグメントデータのポインタを順次読み出し、読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成し、読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成し、既に読み出したアドレスの内容が更新された場合に、当該更新により追加されたまたは削除されたセグメントデータの保存先アドレスに基づいてアドレスハッシュ値を補正し、当該更新により変更された各ポインタに基づいてポインタハッシュ値を補正し、補正されたアドレスハッシュ値が、補正されたポインタハッシュ値と一致する場合に、階層型データベースが整合していると判断する。【選択図】図３
2006139619.tif 000002
【特許請求の範囲】
【請求項１】
複数のセグメントデータを含み、各セグメントデータが他のセグメントデータに対するポインタを有する階層型データベースにおいて、ポインタ及びポインタにより指示されるセグメントデータの保存先アドレスの整合性を判断するデータベース管理システムであって、
前記階層型データベースから前記複数のセグメントデータのポインタを順次読み出すデータ読出部と、
前記データ読出部が読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成するアドレスハッシュ値生成部と、
前記データ読出部が読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成するポインタハッシュ値生成部と、
前記データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により追加されたセグメントデータ又は削除されたセグメントデータの保存先アドレスに基づいて、前記アドレスハッシュ値を補正するアドレスハッシュ値補正部と、
前記データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により変更された各ポインタに基づいて、前記ポインタハッシュ値を補正するポインタハッシュ値補正部と、
前記アドレスハッシュ値補正部により補正されたアドレスハッシュ値が、前記ポインタハッシュ値補正部により補正されたポインタハッシュ値と一致する場合に、前記階層型データベースが整合していると判断する整合性判断部と
を備えるデータベース管理システム。
【請求項２】
前記アドレスハッシュ値生成部は、前記アドレスハッシュ値として、各セグメントデータの保存先アドレスを合計した合計値を生成し、
前記ポインタハッシュ値生成部は、前記ポインタハッシュ値として、各セグメントデータに含まれる各ポインタの値を合計した合計値を生成し、
前記アドレスハッシュ値補正部は、前記アドレスハッシュ値に、当該更新により追加された全てのセグメントデータの保存先アドレスの合計値を加え、当該更新により削除された全てのセグメントデータの保存先アドレスの合計値を差し引き、
前記ポインタハッシュ値補正部は、前記ポインタハッシュ値に、当該更新により変更された変更後の全てのポインタの合計値を加え、当該更新により変更された変更前の全てのポインタの合計値を差し引く
請求項1記載のデータベース管理システム。
【請求項３】
前記アドレスハッシュ値補正部は、前記データ読出部が何れかのセグメントデータを読み出してから全てのセグメントデータを読み出すまでの間に、前記データ読出部が既に読み出したアドレスの内容が更新された場合に、前記アドレスハッシュ値を補正し、
前記ポインタハッシュ値補正部は、前記データ読出部が何れかのセグメントデータを読み出してから全てのセグメントデータを読み出すまでの間に、前記データ読出部が既に読み出したアドレスの内容が更新された場合に、前記ポインタハッシュ値を補正する
請求項1記載のデータベース管理システム。
【請求項４】
前記データ読出部が何れかのセグメントデータを読み出してから全てのセグメントデータを読み出すまでの間に、前記データ読出部が既に読み出したアドレスの内容が更新される毎に、当該更新によって追加されたセグメントデータの保存先アドレスと、当該更新によって削除されたセグメントデータの保存先アドレスと、変更又は削除されたポインタの変更又は削除前の値と、変更又は追加されたポインタの変更又は追加後の値とを記録する更新履歴記録部を更に備え、
前記アドレスハッシュ値補正部は、前記データ読出部が全てのセグメントデータを読み出した場合に、当該更新により追加された全てのセグメントデータの保存先アドレスを前記更新履歴記録部から読み出して合計値を算出し、当該更新により削除された全てのセグメントデータの保存先アドレスを前記更新履歴記録部から読み出して合計値を算出し、
前記ポインタハッシュ値補正部は、前記データ読出部が全てのセグメントデータを読み出した場合に、変更又は追加された全てのポインタの変更又は追加後の値を前記更新履歴記録部から読み出して合計値を算出し、変更又は削除された全てのポインタの変更又は削除前の値を前記更新履歴記録部から読み出して合計値を算出する
請求項３記載のデータベース管理システム。
【請求項５】
前記更新履歴記録部は、更新対象のセグメントデータの保存先アドレスを記録する保存先アドレス記録領域と、当該セグメントデータに含まれるポインタの変更前の値を記録する変更前ポインタ記録領域と、当該セグメントデータに含まれるポインタの変更後の値を記録する変更後ポインタ記録領域とを有し、
既に読み出されたアドレスに新たにセグメントデータが追加された場合に、当該セグメントデータの保存先アドレスを前記保存先アドレス記録領域に記録し、当該セグメントデータに対応する前記変更前ポインタ記録領域に、ポインタを含まない旨を示すポインタ不保持情報を記録し、既に読み出されたアドレスの内容が削除された場合に、当該セグメントデータの保存先アドレスを前記保存先アドレス記録領域に記録し、当該セグメントデータに対応する前記変更後ポインタ記録領域に、前記ポインタ不保持情報を記録する更新履歴記録処理部を更に備え、
前記アドレスハッシュ値補正部は、前記ポインタ不保持情報を記録した前記変更前ポインタ記録領域に対応する前記保存先アドレス記録領域の値の合計値をアドレスハッシュ値に加え、前記ポインタ不保持情報を記録した前記変更後ポインタ記録領域に対応する前記保存先アドレス記録領域の値の合計値をアドレスハッシュ値から差し引き、
前記ポインタハッシュ値補正部は、前記更新履歴記録部の前記変更前ポインタ記録領域に記録されたポインタの値の合計値を、前記ポインタ不保持情報を除外して算出し、前記更新履歴記録部の前記変更後ポインタ記録領域に記録されたポインタの値の合計値を、前記ポインタ不保持情報を除外して算出する
請求項４記載のデータベース管理システム。
【請求項６】
前記データ読出部が既に読み出したアドレスを記録し、読出しを開始すべき先頭アドレスから予め定められた昇順及び降順の何れかの順序によりアドレス値を順次更新する読出済アドレス記録部を更に備え、
前記更新履歴記録処理部は、前記読出済アドレス記録部に記録されたアドレス又は当該アドレスより先頭側のアドレスの内容が更新された場合に、前記データ読出部が既に読み出したアドレスの内容が更新されたと判断する
請求項５記載のデータベース管理システム。
【請求項７】
第１のセグメントデータと第２のセグメントデータの間に新たな第３のセグメントデータを追加するために、前記第１のセグメントデータが有する前記第２のセグメントデータに対するポインタを、前記第３のセグメントデータの保存先アドレスに変更し、前記第３のセグメントデータ内に、前記第２のセグメントデータに対するポインタを生成する場合に、
前記更新履歴記録処理部は、前記第１のセグメントデータの保存先アドレスを前記保存先アドレス記録領域に記録し、当該保存先アドレス記録領域に対応する前記変更前ポインタ記録領域に、前記第２のセグメントデータの保存先アドレスを記録し、当該保存先アドレス記録領域に対応する前記変更後ポインタ記録領域に、前記第３のセグメントデータの保存先アドレスを記録し、前記第３のセグメントデータの保存先アドレスを前記保存先アドレス記録領域の他のエントリに記録し、当該他のエントリに対応する前記変更前ポインタ記録領域に、前記ポインタ不保持情報を記録し、当該他のエントリに対応する前記変更後ポインタ記録領域に、前記第２のセグメントデータの保存先アドレスを記録する
請求項５記載のデータベース管理システム。
【請求項８】
第１のセグメントデータと第２のセグメントデータの間の第３のセグメントデータを削除するために、前記第１のセグメントデータが有する前記第３のセグメントデータに対するポインタを、前記第２のセグメントデータの保存先アドレスに変更する場合に、
前記更新履歴記録処理部は、前記第１のセグメントデータの保存先アドレスを前記保存先アドレス記録領域に記録し、当該保存先アドレス記録領域に対応する前記変更前ポインタ記録領域に、前記第３のセグメントデータの保存先アドレスを記録し、当該保存先アドレス記録領域に対応する前記変更後ポインタ記録領域に、前記第２のセグメントデータの保存先アドレスを記録し、前記第３のセグメントデータの保存先アドレスを前記保存先アドレス記録領域の他のエントリに記録し、当該他のエントリに対応する前記変更前ポインタ記録領域に、前記第２のセグメントデータの保存先アドレスを記録し、当該他のエントリに対応する前記変更後ポインタ記録領域に、前記ポインタ不保持情報を記録する
請求項５記載のデータベース管理システム。
【請求項９】
第１のセグメントデータへのポインタを有する第２のセグメントデータの一部を第３のセグメントデータに分割するために、前記第２のセグメントデータ内に、前記第３のセグメントデータへのポインタを追加する場合に、
前記更新履歴記録処理部は、前記第２のセグメントデータの保存先アドレスを前記保存先アドレス記録領域に記録し、当該保存先アドレス記録領域に対応する前記変更前ポインタ記録領域に、前記第１のセグメントデータの保存先アドレスを記録し、当該保存先アドレス記録領域に対応する前記変更後ポインタ記録領域に、前記第１のセグメントデータの保存先アドレスと、前記第３のセグメントデータの保存先アドレスとを記録する
請求項５記載のデータベース管理システム。
【請求項１０】
前記データ読出部が既に読み出したアドレスを記録する読出済アドレス記録部を更に備え、
前記データ読出部は、前記読出済アドレス記録部が記録するアドレスの次に読み出すアドレスの内容を、排他的に読み書き可能なロック状態に設定し、前記ロック状態において当該アドレスのセグメントデータのポインタを読出し、前記ロック状態において前記読出済アドレス記録部に当該アドレスを記録し、セグメントデータの読出し及び前記読出済アドレス記録部のアドレスの変更後に前記ロック状態を解除する
請求項１記載のデータベース管理システム。
【請求項１１】
複数のセグメントデータを含み、各セグメントデータが他のセグメントデータに対するポインタを有する階層型データベースにおいて、ポインタ及びポインタにより指示されるセグメントデータの保存先アドレスの整合性を判断するデータベース管理方法であって、
前記階層型データベースから前記複数のセグメントデータのポインタを順次読み出すデータ読出段階と、
前記データ読出段階において読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成するアドレスハッシュ値生成段階と、
前記データ読出段階において読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成するポインタハッシュ値生成段階と、
前記データ読出段階において既に読み出したアドレスの内容が更新された場合に、当該更新により追加されたセグメントデータ又は削除されたセグメントデータの保存先アドレスに基づいて、前記アドレスハッシュ値を補正するアドレスハッシュ値補正段階と、
前記データ読出段階において既に読み出したアドレスの内容が更新された場合に、当該更新により変更された各ポインタに基づいて、前記ポインタハッシュ値を補正するポインタハッシュ値補正段階と、
前記アドレスハッシュ値補正段階において補正されたアドレスハッシュ値が、前記ポインタハッシュ値補正段階において補正されたポインタハッシュ値と一致する場合に、前記階層型データベースが整合していると判断する判断段階と
を備えるデータベース管理方法。
【請求項１２】
複数のセグメントデータを含み、各セグメントデータが他のセグメントデータに対するポインタを有する階層型データベースにおいて、ポインタ及びポインタにより指示されるセグメントデータの保存先アドレスの整合性を判断するデータベース管理システムとしてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記階層型データベースから前記複数のセグメントデータのポインタを順次読み出すデータ読出部と、
前記データ読出部が読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成するアドレスハッシュ値生成部と、
前記データ読出部が読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成するポインタハッシュ値生成部と、
前記データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により追加されたセグメントデータ又は削除されたセグメントデータの保存先アドレスに基づいて、前記アドレスハッシュ値を補正するアドレスハッシュ値補正部と、
前記データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により変更された各ポインタに基づいて、前記ポインタハッシュ値を補正するポインタハッシュ値補正部と、
前記アドレスハッシュ値補正部により補正されたアドレスハッシュ値が、前記ポインタハッシュ値補正部により補正されたポインタハッシュ値と一致する場合に、前記階層型データベースが整合していると判断する整合性判断部と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理システム、データベース管理方法、及びプログラムに関する。特に、本発明は、データベースの整合性を判断するデータベース管理システム、データベース管理方法、及びプログラムに関する。
【背景技術】
【０００２】
階層型データベースにおいて、データベースの整合性を判断するには、データベースに含まれる各セグメントデータの保存先アドレスの合計値と、データベースに含まれる各ポインタの合計値とを算出し、これらの合計値が一致するか否かを判断する必要がある。ここで、何れかのポインタの読出しを開始してから全てのポインタの読出しを完了するまでの間にデータベースが更新されると、更新前後のポインタの値が混ざった状態で合計値が算出されてしまうので、整合性の判断を誤ってしまう場合がある。
【０００３】
このため、従来、整合性の判断の処理中には、データベースの更新を停止するか、又は、データベースの少なくとも一部に対するアクセスの排他制御を行うことが一般的である（例えば特許文献１参照。）。しかしながら、データベースのデータサイズが大きい場合には、更新が停止される時間が膨大となり、又は、更新が大幅に遅延し、利用者の利便性を低下させてしまう場合があった。これに対して、更新を停止させることなく整合性を判断する技術が提案されている（特許文献２参照。）。
【特許文献１】特開平８−２４９２２２号公報
【特許文献２】特開２００１−１４２７６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献２の技術においては、他の処理との排他制御を行うことなく整合性の判断処理を複数回行う。そして、複数回の判断結果に基づいて、確率的に概ね整合性が取れているか否かを判断する。このため、整合性を確実に判断することはできず、また、整合性判断の処理中の他の処理によって、整合性の判断結果が異なってしまう。
【０００５】
そこで本発明は、上記の課題を解決することのできるデータベース管理システム、データベース管理方法、及びプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００６】
複数のセグメントデータを含み、各セグメントデータが他のセグメントデータに対するポインタを有する階層型データベースにおいて、ポインタ及びポインタにより指示されるセグメントデータの保存先アドレスの整合性を判断するデータベース管理システムであって、階層型データベースから複数のセグメントデータのポインタを順次読み出すデータ読出部と、データ読出部が読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成するアドレスハッシュ値生成部と、データ読出部が読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成するポインタハッシュ値生成部と、データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により追加されたセグメントデータ又は削除されたセグメントデータの保存先アドレスに基づいて、アドレスハッシュ値を補正するアドレスハッシュ値補正部と、データ読出部が既に読み出したアドレスの内容が更新された場合に、当該更新により変更された各ポインタに基づいて、ポインタハッシュ値を補正するポインタハッシュ値補正部と、アドレスハッシュ値補正部により補正されたアドレスハッシュ値が、ポインタハッシュ値補正部により補正されたポインタハッシュ値と一致する場合に、階層型データベースが整合していると判断する整合性判断部とを備えるデータベース管理システム、当該データベース管理システムを用いたデータベース管理方法、当該データベース管理システムとしてコンピュータを機能させるプログラムを提供する。
【０００７】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【０００８】
本発明によれば、データベースの更新を停止することなく、データベースの整合性を適切に判断することができる。
【発明を実施するための最良の形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、データベースシステム１０の概略を示す。データベースシステム１０は、階層型データベース２０と、データベース管理システム３０とを備える。階層型データベース２０は、複数のセグメントデータを含み、各セグメントデータが他のセグメントデータに対するポインタを有する構造を有する。データベース管理システム３０は、階層型データベース２０においてポインタ及びポインタにより指示されるセグメントデータの保存先アドレスの整合性を判断する。本実施例におけるデータベース管理システム３０は、整合性の判断処理の途中にデータベースが更新された場合であっても、整合性を適切に判断することを目的とする。
【００１１】
図２は、階層型データベース２０のデータ構造の一例を示す。階層型データベース２０は、セグメントデータ２００−１と、セグメントデータ２００−２と、セグメントデータ２００−３とを含む。セグメントデータ２００−１は、接頭部２１０−１と、データ部２２０−１とを含む。また、セグメントデータ２００−１の保存先アドレスは１０００である。ここで、保存先アドレスとは、例えば、階層型データベース２０の所定の基準アドレスと比較したセグメントデータ２００−１の先頭アドレスの先頭位置（ＲＢＡ：Ｒｅｌａｔｉｂｅ  Ｂｙｔｅ  Ａｄｄｒｅｓｓ）をいう。接頭部２１０−１は、セグメントデータ２００−２の保存先アドレスである１３００を指示するポインタ２３０−１と、セグメントデータ２００−３の保存先アドレスである１６００を指示するポインタ２３０−２とを含む。
【００１２】
セグメントデータ２００−２は、接頭部２１０−２と、データ部２２０−２とを含む。接頭部２１０−２は、他のセグメントデータの保存先アドレスを指示するポインタ２３０−３と、更に他のセグメントデータの保存先アドレスを指示するポインタ２３０−４と含む。また、セグメントデータ２００−３は、接頭部２１０−３と、データ部２２０−３とを含む。接頭部２１０−３は、他のセグメントデータの保存先アドレスを指示するポインタ２３０−５と、更に他のセグメントデータの保存先アドレスを指示するポインタ２３０−６とを含む。
【００１３】
このように、階層型データベース２０は、各セグメントデータの接頭部（Ｐｒｅｆｉｘ）に記録されたポインタを辿る事により順次他のセグメントデータをアクセスできる階層構造を有している。従って、ポインタの値は、そのポインタによって示されるセグメントデータの保存先アドレスと一致している必要がある。本実施例におけるデータベース管理システム３０は、ポインタ及び保存先アドレスの一致を判断することにより、階層型データベース２０の整合性を判断する。
【００１４】
図３は、データベース管理システム３０の機能を機能ブロックに分類して示す。データベース管理システム３０は、データ読出部３００と、アドレスハッシュ値生成部３１０と、ポインタハッシュ値生成部３２０と、読出済アドレス記録部３３０と、セグメントデータ更新部３４０と、更新履歴記録処理部３５０と、アドレスハッシュ値補正部３６０と、ポインタハッシュ値補正部３７０と、整合性判断部３８０と、更新履歴記録部４０とを有する。データ読出部３００は、整合性の判断を開始する指示を外部から受けると、又は定期的に、セグメントデータの読出しを開始する。そして、データ読出部３００は、階層型データベース２０から複数のセグメントデータのポインタを順次読み出す。
【００１５】
アドレスハッシュ値生成部３１０は、データ読出部３００が読み出した各セグメントデータの保存先アドレスのハッシュ値であるアドレスハッシュ値を生成する。例えば、アドレスハッシュ値生成部３１０は、アドレスハッシュ値として、各セグメントデータの保存先アドレスを合計した合計値を生成してもよい。またポインタハッシュ値生成部３２０は、データ読出部３００が読み出した各セグメントデータに含まれる各ポインタのハッシュ値であるポインタハッシュ値を生成する。例えば、ポインタハッシュ値生成部３２０は、ポインタハッシュ値として、各セグメントデータに含まれる各ポインタの値の合計値を算出してもよい。
【００１６】
読出済アドレス記録部３３０は、データ読出部３００が既に読み出したアドレスである読出済アドレスを記録する。例えば、読出済アドレス記録部３３０は、データ読出部３００によるセグメントデータの読出しに伴い、読出しを開始すべき先頭アドレスから予め定められた昇順及び降順の何れかの順序によりアドレス値を順次更新する。
【００１７】
セグメントデータ更新部３４０は、利用者からの指示等に基づいて、階層型データベース２０を更新する。例えば、セグメントデータ更新部３４０は、第１のセグメントデータと第２のセグメントデータの間に新たな第３のセグメントデータを追加する場合に、その第１のセグメントデータが有する第２のセグメントデータに対するポインタを、その第３のセグメントデータの保存先アドレスに変更し、その第３のセグメントデータ内に、第２のセグメントデータに対するポインタを生成する。
【００１８】
更新履歴記録部４０は、データ読出部３００が既に読み出したアドレスの内容が更新される毎に、その更新によって追加されたセグメントデータの保存先アドレスと、その更新によって削除されたセグメントデータの保存先アドレスと、変更又は削除されたポインタの変更又は削除前の値と、変更又は追加されたポインタの変更又は追加後の値とを記録する。ここで、更新履歴記録部４０のデータ構造の一例を説明する。
【００１９】
図４は、更新履歴記録部４０のデータ構造の一例を示す。更新履歴記録部４０は、更新対象のセグメントデータの保存先アドレスを記録する保存先アドレス記録領域４００と、そのセグメントデータが更新された場合に、そのセグメントデータに含まれるポインタの当該更新による変更前の値を記録する変更前ポインタ記録領域４１０と、そのセグメントデータの含まれるポインタの変更後の値を記録する変更後ポインタ記録領域４２０とを有する。なお、更新履歴記録部４０は、本例においてはデータベース管理システム３０の筐体内部に設けられているが、データベース管理システム３０によりアクセス可能なメモリ上であれば、この構成に限定されるものではない。
【００２０】
図３に戻る。更新履歴記録処理部３５０は、読出済アドレス記録部３３０に記録されたアドレス又はそのアドレスより先頭側のアドレスの内容がセグメントデータ更新部３４０により更新された場合に、データ読出部３００が既に読み出したアドレスの内容が更新されたと判断する。そして、更新履歴記録処理部３５０は、既存のセグメントデータ内のポインタの値が変更された場合に、そのセグメントデータの保存先アドレスを保存先アドレス記録領域４００に記録し、そのセグメントデータ内のポインタの変更前の値を変更前ポインタ記録領域４１０に記録し、そのセグメントデータ内のポインタの変更後の値を変更後ポインタ記録領域４２０に記録する。
【００２１】
ここで、第１のセグメントデータ（アドレス１０００）と、第２のセグメントデータ（アドレス１１００）との間に新たな第３のセグメントデータ（アドレス１２００）を追加する例を説明する。セグメントデータ更新部３４０は、第１のセグメントデータが有する第２のセグメントデータに対するポインタを、第３のセグメントデータの保存先アドレスに変更する。この場合、更新履歴記録処理部３５０は、第１のセグメントデータの保存先アドレス（即ち１０００）を、保存先アドレス記録領域４００に記録する。また、更新履歴記録処理部３５０は、その保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に、第２のセグメントデータの保存先アドレス（即ち１１００）を記録する。また、更新履歴記録処理部３５０は、その保存先アドレス記録領域４００に対応する変更後ポインタ記録領域４２０に、第３のセグメントデータの保存先アドレス（即ち１２００）を記録する。
【００２２】
そして、更新履歴記録処理部３５０は、第３のセグメントデータの保存先アドレス（即ち１２００）を保存先アドレス記録領域４００の他のエントリに記録する。また、更新履歴記録処理部３５０は、当該他のエントリに対応する変更前ポインタ記録領域４１０に、ポインタを含まない旨を示すポインタ不保持情報（例えばＮＵＬＬデータ）を記録する。また、更新履歴記録処理部３５０は、当該他のエントリに対応する変更後ポインタ記録領域４２０に、第２のセグメントデータの保存先アドレス（即ち１１００）を記録する。
【００２３】
次に、第１のセグメントデータ（アドレス２０００）と、第２のセグメントデータ（アドレス２２００）の間の第３のセグメントデータ（アドレス２１００）を削除する例を説明する。セグメントデータ更新部３４０は、第１のセグメントデータが有する第３のセグメントデータに対するポインタを、第２のセグメントデータの保存先アドレスに変更する。この場合、更新履歴記録処理部３５０は、第１のセグメントデータの保存先アドレス（即ち２０００）を保存先アドレス記録領域４００に記録する。また、更新履歴記録処理部３５０は、その保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に、第３のセグメントデータの保存先アドレス（２１００）を記録する。また、更新履歴記録処理部３５０は、その保存先アドレス記録領域４００に対応する変更後ポインタ記録領域４２０に、第２のセグメントデータの保存先アドレス（２２００）を記録する。
【００２４】
そして、更新履歴記録処理部３５０は、第３のセグメントデータの保存先アドレス（即ち２１００）を保存先アドレス記録領域４００の他のエントリに記録する。また、更新履歴記録処理部３５０は、当該他のエントリに対応する変更後ポインタ記録領域４２０に、ポインタ不保持情報を記録する。また、更新履歴記録処理部３５０は、当該他のエントリに対応する変更前ポインタ記録領域４１０に、第２のセグメントデータの保存先アドレス（即ち２２００）を記録する。
【００２５】
アドレスハッシュ値補正部３６０は、データ読出部３００が既に読み出したアドレスの内容が更新された場合に、その更新により追加されたセグメントデータ又は削除されたセグメントデータの保存先アドレスに基づいて、アドレスハッシュ値を補正する。ポインタハッシュ値補正部３７０は、データ読出部３００が既に読み出したアドレスの内容が更新された場合に、その更新により値が変更された各ポインタに基づいて、ポインタハッシュ値を補正する。
【００２６】
整合性判断部３８０は、アドレスハッシュ値補正部３６０により補正されたアドレスハッシュ値が、ポインタハッシュ値補正部３７０により補正されたポインタハッシュ値と一致する場合に、階層型データベース２０が整合していると判断し、判断結果を出力する。
【００２７】
図５は、アドレスハッシュ値及びポインタハッシュ値を生成して整合性を判断する処理の処理フローを示す。データ読出部３００は、読出済アドレス記録部３３０が記録するアドレスの次に読み出すアドレスのセグメントデータを、排他的に読み書き可能なロック状態に設定する（Ｓ５００）。次に、データ読出部３００は、ロック状態においてそのアドレスのセグメントデータのポインタを読み出す（Ｓ５１０）。また、データ読出部３００は、ロック状態において、読み出し対象となっているそのアドレスを読出済アドレス記録部３３０に記録する（Ｓ５１５）。そして、データ読出部３００は、ロック状態を解除する（Ｓ５２０）。
【００２８】
次に、アドレスハッシュ値生成部３１０は、読み出したセグメントデータの保存先アドレスを、既に算出したアドレスハッシュ値に積算することにより、読み出し時点におけるアドレスハッシュ値を算出する（Ｓ５３０）。また、ポインタハッシュ値生成部３２０は、読み出したセグメントデータのポインタの値を、既に算出したポインタハッシュ値に積算することにより、読み出し時点におけるポインタハッシュ値を算出する（Ｓ５４０）。以上の処理を、全てのセグメントデータを読み出すまで繰り返す（Ｓ５５０：ＮＯ）。
【００２９】
ここで、ハッシュ値とは、合計値のみならず、整合性判断の対象となるアドレス又はポインタから算出され、異なるアドレス又はポインタに対しては極めて高い確率で異なる値をとるものであればよい。また、好ましくは、複数のアドレスに基づいて算出されるハッシュ値は、当該複数のアドレスをハッシュ値として積算した積算順序に関わらず同一である。一例として、ハッシュ値は、本例のように合計値であってもよいし、所定の法の下で合計した合計値であってもよいし、排他的論理和であってもよい。
【００３０】
全てのセグメントデータが読み出された場合に（Ｓ５５０：ＹＥＳ）、次の処理を行う。まず、アドレスハッシュ値補正部３６０は、データ読出部３００が何れかのセグメントデータを読み出してから全てのセグメントデータを読み出すまでの間に、データ読出部３００が既に読み出したアドレスの内容が更新された場合に、アドレスハッシュ値生成部３１０により生成されたアドレスハッシュ値を補正する（Ｓ５６０）。
【００３１】
具体的には、アドレスハッシュ値補正部３６０は、アドレスハッシュ値に、その更新により追加された全てのセグメントデータの保存先アドレスを更新履歴記録部４０から読み出して合計値を算出して加える。そして、アドレスハッシュ値補正部３６０は、合計値を加えたそのアドレスハッシュ値から、その更新により削除された全てのセグメントデータの保存先アドレスを更新履歴記録部４０から読み出して合計した合計値を差し引く。
【００３２】
また、ポインタハッシュ値補正部３７０は、データ読出部３００が何れかのセグメントデータを読み出してから全てのセグメントデータを読み出すまでの間に、データ読出部３００が既に読み出したアドレスの内容が更新された場合に、ポインタハッシュ値生成部３２０により生成されたポインタハッシュ値を補正する（Ｓ５７０）。具体的には、ポインタハッシュ値補正部３７０は、ポインタハッシュ値に、その更新による変更又は追加後の全てのポインタの値を更新履歴記録部４０から読み出して合計値を算出して加える。そして、ポインタハッシュ値補正部３７０は、合計値を加えたそのポインタハッシュ値から、その更新による変更又は削除前の全てのポインタの値を更新履歴記録部４０から読み出して合計した合計値を差し引く。
【００３３】
そして、整合性判断部３８０は、アドレスハッシュ値補正部３６０により補正されたアドレスハッシュ値が、ポインタハッシュ値補正部３７０により補正されたポインタハッシュ値と一致する場合に、階層型データベース２０が整合していると判断し、判断結果を出力する（Ｓ５８０）。
【００３４】
図６は、更新履歴を記録する処理の処理フローを示す。データベース管理システム３０は、階層型データベース２０が更新される毎に、階層型データベース２０に対する一連の更新処理が完了して次の更新処理が可能な状態（例えば同期点）にあることを条件として、以下の処理を行う。まず、更新履歴記録処理部３５０は、読出済アドレス記録部３３０から読出済アドレスを取得する（Ｓ６００）。次に、更新履歴記録処理部３５０は、読出済アドレスに有効な値が設定されているか、即ち整合性判断の処理中か否かを判断する（Ｓ６１０）。
【００３５】
読出済アドレスに有効な値が設定されていない場合には（Ｓ６１０：ＮＯ）、更新履歴記録処理部３５０は、処理を終了する。一方、有効な値が設定されている場合には、更新履歴記録処理部３５０は、当該更新により接頭部の変更されたセグメントデータが存在するか否かを判断する（Ｓ６２０）。接頭部の変更されたセグメントデータが存在しない場合には（Ｓ６２０：ＮＯ）、更新履歴記録処理部３５０は、処理を終了する。
【００３６】
一方、接頭部の変更されたセグメントデータが存在する場合には（Ｓ６２０：ＹＥＳ）、更新されたセグメントデータが、読出済アドレスと同一又は先頭側に記録されているか否かを判断する（Ｓ６３０）。更新されたセグメントデータが、読出済アドレスより後方にある場合には（Ｓ６３０：ＮＯ）、更新履歴記録処理部３５０は、Ｓ６２０に処理を戻す。一方、更新されたセグメントデータが、読出済アドレスと同一又は先頭側に記録されている場合には（Ｓ６３０：ＹＥＳ）、更新履歴記録処理部３５０は、更新履歴を更新履歴記録部４０に記録し（Ｓ６４０）、Ｓ６２０に処理を戻す。
【００３７】
図７は、図６のＳ６４０における処理の詳細を示す。更新履歴記録処理部３５０は、階層型データベース２０を更新する処理の種類を示す更新タイプを判断する（Ｓ７００）。更新タイプが、セグメントデータの追加である場合に（Ｓ７１０：セグメントデータの追加）、更新履歴記録処理部３５０は、セグメントデータを追加した履歴を更新履歴記録部４０に記録する（Ｓ７２０）。即ち更新履歴記録処理部３５０は、そのセグメントデータの保存先アドレスを保存先アドレス記録領域４００に記録し、ポインタ不保持情報を変更前ポインタ記録領域４１０に記録し、そのセグメントデータ内に新たに生成したポインタの値を変更後ポインタ記録領域４２０に記録する。
【００３８】
一方、更新タイプが、セグメントデータの削除である場合に（Ｓ７００：セグメントデータの削除）、更新履歴記録処理部３５０は、セグメントデータを削除した履歴を更新履歴記録部４０に記録する（Ｓ７４０）。即ち更新履歴記録処理部３５０は、そのセグメントデータの保存先アドレスを保存先アドレス記録領域４００に記録し、そのセグメントデータ内に含まれていたポインタの値を変更前ポインタ記録領域４１０に記録し、ポインタ不保持情報を変更後ポインタ記録領域４２０に記録する。
【００３９】
一方、更新タイプが、既存のセグメントデータの内容の変更である場合に（Ｓ７００：セグメントデータの変更）、更新履歴記録処理部３５０は、更新タイプが、あるセグメントデータの一部を他のセグメントデータに分割する分割更新であるか否かを判断する（Ｓ７６０）。分割更新でない場合に（Ｓ７６０：ＮＯ）、更新履歴記録処理部３５０は、接頭部更新履歴を更新履歴記録部４０に記録する。即ち例えば、更新履歴記録処理部３５０は、更新対象のセグメントデータの保存先アドレスを保存先アドレス記録領域４００に記録し、そのセグメントデータ内の変更前のポインタの値を変更前ポインタ記録領域４１０に記録し、そのポインタの変更後の値を変更後ポインタ記録領域４２０に記録する。
【００４０】
一方、分割更新の場合に（Ｓ７６０：ＹＥＳ）、更新履歴記録処理部３５０は、分割更新における接頭部の変更か否かを判断する（Ｓ７８０）。接頭部の変更である場合に、更新履歴記録処理部３５０は、分割更新における接頭部の更新履歴を更新履歴記録部４０に記録する（Ｓ７９０）。一方、接頭部の変更ではない場合に（Ｓ７８０：ＮＯ）、更新履歴記録処理部３５０は、分割更新におけるデータ部の更新履歴を更新履歴記録部４０に記録する（Ｓ７９５）。分割更新における更新履歴の記録方法についての詳細は図１０において説明する。
【００４１】
以上、図１から図７に示した構成によれば、ポインタの読み出し中に読出済アドレスの内容が更新された場合であっても、その更新差分を適切に記録することにより、読出し済みのポインタの合計値を適切に補正することができる。また、ポインタ・チェック中の読出済アドレスは、データベース管理システム３０により自動的に更新され管理されるので、利用者の特別なコマンド入力を必要としない。更に、更新履歴記録部４０は、ポインタ読み出し中にのみ更新履歴を記録するので、更新履歴記録部４０の必要記憶容量は一般的に小さくても充分であり、新たな設備投資費用も殆ど必要とならない。このように、本例におけるデータベース管理システム３０によれば、利用者の手間や費用を増大させることなく、階層型データベース２０の更新中におけるオンライン・ポインタ・チェックを可能とし、階層型データベース２０の可用性を大幅に高めることができる。
【００４２】
続いて、以上に示した階層型データベース２０及びデータベース管理システム３０において、セグメントデータが追加、削除、及び分割される処理を例示する。
【００４３】
図８は、セグメントデータが追加される処理の一例を示す。（ａ）は、セグメントデータの追加前における階層型データベース２０を示す。階層型データベース２０は、保存先アドレスを１０００とするセグメントデータ２００−４と、保存先アドレスを１２００とするセグメントデータ２００−５とを有する。セグメントデータ２００−４は、セグメントデータ２００−５に対するポインタを、接頭部に含む。
【００４４】
（ｂ）は、セグメントデータの追加後の階層型データベース２０及び更新履歴記録部４０を示す。セグメントデータ更新部３４０は、セグメントデータ２００−４とセグメントデータ２００−５の間にセグメントデータ２００−６を追加する場合に、セグメントデータ２００−４が有するセグメントデータ２００−５に対するポインタを、セグメントデータ２００−６の保存先アドレスに変更する。そして、セグメントデータ更新部３４０は、セグメントデータ２００−６内に、セグメントデータ２００−５に対するポインタを生成する。
【００４５】
この結果、階層型データベース２０は、新たに追加されたセグメントデータ２００−６を、保存先アドレス１１００に更に含む。そして、セグメントデータ２００−４は、セグメントデータ２００−５に対するポインタ（即ち１２００）に代えて、セグメントデータ２００−６に対するポインタ（即ち１１００）を含む。そして、セグメントデータ２００−６は、セグメントデータ２００−５に対するポインタ（即ち１２００）を含む。
【００４６】
また、セグメントデータ２００−４内のポインタが１２００から１１００に変更されたので、更新履歴記録処理部３５０は、セグメントデータ２００−４の保存先アドレスである１０００を保存先アドレス記録領域４００に記録し、保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に、セグメントデータ２００−５の保存先アドレスである１２００を記録し、保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に、セグメントデータ２００−６の保存先アドレスである１１００を記録する（Ｓ７７０の処理に対応）。
【００４７】
また、セグメントデータ２００−６が新たに追加されたので、更新履歴記録処理部３５０は、セグメントデータ２００−６の保存先アドレスである１１００を、保存先アドレス記録領域４００の他のエントリに記録し、当該他のエントリに対応する変更前ポインタ記録領域４１０に、ポインタ不保持情報（例えばＮＵＬＬ）を記録し、当該他のエントリに対応する変更後ポインタ記録領域４２０に、セグメントデータ２００−５の保存先アドレスである１２００を記録する（Ｓ７２０の処理に対応）。
【００４８】
図９は、セグメントデータが削除される処理の一例を示す。（ａ）は、セグメントデータの削除前における階層型データベース２０を示す。階層型データベース２０は、保存先アドレスを１０００とするセグメントデータ２００−４と、保存先アドレスを１２００とするセグメントデータ２００−５と、保存先アドレスを１１００とするセグメントデータ２００−６とを有する。セグメントデータ２００−４は、セグメントデータ２００−６に対するポインタを接頭部に含み、セグメントデータ２００−６は、セグメントデータ２００−５に対するポインタを接頭部に含む。
【００４９】
（ｂ）は、セグメントデータの削除後の階層型データベース２０及び更新履歴記録部４０を示す。セグメントデータ更新部３４０は、セグメントデータ２００−４とセグメントデータ２００−５の間のセグメントデータ２００−６を削除する場合に、セグメントデータ２００−４が有するセグメントデータ２００−６に対するポインタを、セグメントデータ２００−５の保存先アドレスに変更する。
【００５０】
この結果、階層型データベース２０は、削除されたセグメントデータ２００−６を含まない状態となる。また、セグメントデータ２００−４は、セグメントデータ２００−６に対するポインタ（即ち１１００）に代えて、セグメントデータ２００−５に対するポインタ（即ち１２００）を含む。
【００５１】
また、セグメントデータ２００−４内のポインタが１１００から１２００に変更されたので、更新履歴記録処理部３５０は、セグメントデータ２００−４の保存先アドレスを保存先アドレス記録領域４００に記録し、その保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に、セグメントデータ２００−６の保存先アドレスを記録する。また、更新履歴記録処理部３５０は、その保存先アドレス記録領域４００に対応する変更後ポインタ記録領域４２０に、セグメントデータ２００−５の保存先アドレスを記録する（Ｓ７７０の処理に対応）。
【００５２】
また、セグメントデータ２００−６が削除されたので、更新履歴記録処理部３５０は、セグメントデータ２００−６の保存先アドレスを保存先アドレス記録領域４００の他のエントリに記録し、当該他のエントリに対応する変更前ポインタ記録領域４１０に、セグメントデータ２００−５の保存先アドレスを記録する。また、更新履歴記録処理部３５０は、当該他のエントリに対応する変更後ポインタ記録領域４２０に、ポインタ不保持情報を記録する（Ｓ７４０の処理に対応）。
【００５３】
図１０は、セグメントデータが分割される処理の一例を示す。（ａ）は、セグメントデータが分割される前における階層型データベース２０を示す。図９（ａ）と略同一であるから説明を省略する。（ｂ）は、セグメントデータの分割後の階層型データベース２０及び更新履歴記録部４０を示す。
【００５４】
セグメントデータ更新部３４０は、セグメントデータ２００−５へのポインタを有するセグメントデータ２００−６の一部をセグメントデータ２００−７に分割する場合に、セグメントデータ２００−６内に、セグメントデータ２００−７へのポインタを追加し、セグメントデータ２００−６の一部が分割された旨を示す分割フラグを追加する。この結果、階層型データベース２０は、分割先のセグメントデータ２００−７を新たに含む。また、セグメントデータ２００−６は、セグメントデータ２００−７に対するポインタ（即ち１４００）と、分割フラグとを更に含む。
【００５５】
また、セグメントデータ２００−６に対して、セグメントデータ２００−７の保存先アドレスへのポインタが追加され、分割フラグが追加されたので、更新履歴記録処理部３５０は、セグメントデータ２００−６の保存先アドレスである１１００を保存先アドレス記録領域４００に記録し、保存先アドレス記録領域４００に対応する変更前ポインタ記録領域４１０に対して、セグメントデータ２００−５の保存先アドレスである１２００を記録する。そして、更新履歴記録処理部３５０は、分割フラグと、セグメントデータ２００−７の保存先アドレスである１４００とを、保存先アドレス記録領域４００に対応する変更後ポインタ記録領域４２０に記録する（Ｓ７９０の処理に対応）。
【００５６】
また、セグメントデータ２００−７が追加されたので、更新履歴記録処理部３５０は、セグメントデータ２００−７の保存先アドレスである１４００を保存先アドレス記録領域４００の他のエントリに記録し、当該他のエントリに対応する変更前ポインタ記録領域４１０に、ポインタ不保持情報を記録する。そして、更新履歴記録処理部３５０は、当該他のエントリに対応する変更後ポインタ記録領域４２０に、当該セグメントデータが分割先のデータである旨を示す分割先フラグを記録する（Ｓ７９５の処理に対応）。
【００５７】
続いて、読出済アドレスが互いに異なる３例を用いて、整合性の判断処理の具体例を示す。
図１１は、既に読み出されたアドレスにセグメントデータが追加される処理の一例を示す。（ａ）は、セグメントデータが追加される前の階層型データベース２０を示す。本例において読出済アドレス記録部３３０は、昇順にインクリメントされるものとし、図示の時点においてアドレス値２５００を格納している。
【００５８】
階層型データベース２０は、セグメントデータ２００−４と、セグメントデータ２００−５と、セグメントデータ２００−６とを含む。セグメントデータ２００−４は、セグメントデータ２００−５に対するポインタを含む。セグメントデータ２００−５は、セグメントデータ２００−６に対するポインタを含む。また、セグメントデータ２００−４、セグメントデータ２００−５、及びセグメントデータ２００−６の保存先アドレスはそれぞれ１０００、１１００、及び１２００である。即ち全てのセグメントデータはデータ読出部３００により読出し済みである。
【００５９】
（ｂ）は、セグメントデータが追加された後の階層型データベース２０及び更新履歴記録部４０を示す。セグメントデータ更新部３４０は、新たなセグメントデータ２００−８を階層型データベース２０に追加し、セグメントデータ２００−６内のポインタによりセグメントデータ２００−８を指示させる。読出済アドレスである２５００より先頭側のアドレスの内容が更新されたので、更新履歴記録処理部３５０は、セグメントデータ２００−６及びセグメントデータ２００−８の各々について履歴を記録する。
【００６０】
具体的には、更新履歴記録処理部３５０は、セグメントデータ２００−６の保存先アドレスである１２００を保存先アドレス記録領域４００に記録し、変更前のポインタの値である０を変更前ポインタ記録領域４１０に記録し、変更後のポインタの値である２０００を変更後ポインタ記録領域４２０に記録する。また、更新履歴記録処理部３５０は、セグメントデータ２００−８の保存先アドレスである２０００を保存先アドレス記録領域４００に記録し、ポインタ不保持情報を変更前ポインタ記録領域４１０に記録し、変更後のポインタの値である０を変更後ポインタ記録領域４２０に記録する。
【００６１】
アドレスハッシュ値生成部３１０は、更新前における保存先アドレスを合計するので、１０００＋１１００＋１２００により３３００をアドレスハッシュ値として生成する。ポインタハッシュ値生成部３２０は、更新前におけるポインタの値を合計するので、１０００＋１１００＋１２００により３３００をポインタハッシュ値として生成する。
【００６２】
そして、アドレスハッシュ値補正部３６０は、ポインタ不保持情報を記録した変更前ポインタ記録領域４１０に対応する保存先アドレス記録領域４００の値の合計値をアドレスハッシュ値に加える。即ち３３００＋２０００により５３００がアドレスハッシュ値の補正値として生成される。また、ポインタハッシュ値補正部３７０は、更新履歴記録部４０の変更前ポインタ記録領域４１０に記録されたポインタの値の合計値を、ポインタ不保持情報を除外して算出し、ポインタハッシュ値から差し引く。即ちポインタハッシュ値は不変である。更に、ポインタハッシュ値補正部３７０は、更新履歴記録部４０の変更後ポインタ記録領域４２０に記録されたポインタの値の合計値を、ポインタ不保持情報を除外して算出し、ポインタハッシュ値に加える。即ちポインタハッシュ値は３３００＋２０００により５３００となる。
【００６３】
以上の補正の結果、整合性判断部３８０は、補正されたアドレスハッシュ値及び補正されたポインタハッシュ値を比較して一致しているので、階層型データベース２０が整合していると判断することができる。
【００６４】
図１２は、既に読み出されたアドレス及び未だ読み出されていないアドレスの双方が更新される処理の一例を示す。（ａ）は、セグメントデータが追加される前の階層型データベース２０を示す。本図は図１１（ａ）と略同一であるので説明を省略する。
【００６５】
（ｂ）は、セグメントデータが追加された後の階層型データベース２０及び更新履歴記録部４０を示す。セグメントデータ更新部３４０は、新たなセグメントデータ２００−８を階層型データベース２０に追加し、セグメントデータ２００−６内のポインタによりセグメントデータ２００−８を指示させる。読出済アドレスである１５００より先頭側のアドレスの内容が更新されたので、更新履歴記録処理部３５０は、セグメントデータ２００−６について履歴を記録する。
【００６６】
具体的には、更新履歴記録処理部３５０は、セグメントデータ２００−６の保存先アドレスである１２００を保存先アドレス記録領域４００に記録し、変更前のポインタの値である０を変更前ポインタ記録領域４１０に記録し、変更後のポインタの値である２０００を変更後ポインタ記録領域４２０に記録する。一方、更新履歴記録処理部３５０は、セグメントデータ２００−８については保存先アドレスが読出済アドレスより後方にあるので、変更履歴を記録しない。
【００６７】
アドレスハッシュ値生成部３１０は、読み出したセグメントデータの保存先アドレスを合計するので、１０００＋１１００＋１２００＋２０００により５３００をアドレスハッシュ値として生成する。ポインタハッシュ値生成部３２０は、読み出したポインタの値を合計するので、１０００＋１１００＋１２００により３３００をポインタハッシュ値として生成する。
【００６８】
そして、ポインタハッシュ値補正部３７０は、更新履歴記録部４０の変更前ポインタ記録領域４１０に記録されたポインタの値の合計値を、ポインタ不保持情報を除外して算出し、ポインタハッシュ値から差し引く。即ちポインタハッシュ値は不変である。更に、ポインタハッシュ値補正部３７０は、更新履歴記録部４０の変更後ポインタ記録領域４２０に記録されたポインタの値の合計値を、ポインタ不保持情報を除外して算出し、ポインタハッシュ値に加える。即ちポインタハッシュ値は３３００＋２０００により５３００となる。
【００６９】
以上の補正の結果、整合性判断部３８０は、アドレスハッシュ値及び補正されたポインタハッシュ値を比較して一致しているので、階層型データベース２０が整合していると判断することができる。
【００７０】
図１３は、未だ読み出されていないアドレスにセグメントデータが追加される処理の一例を示す。（ａ）は、セグメントデータが追加される前の階層型データベース２０を示す。本図は図１１（ａ）と略同一であるので説明を省略する。但し、読出済アドレスは１１５０であり、セグメントデータ２００−６は読出済でない。
【００７１】
（ｂ）は、セグメントデータが追加された後の階層型データベース２０を示す。セグメントデータ更新部３４０は、新たなセグメントデータ２００−８を階層型データベース２０に追加し、セグメントデータ２００−６内のポインタによりセグメントデータ２００−８を指示させる。読出済アドレスである１１５０より後方のアドレスの内容のみが変更されたので、更新履歴記録処理部３５０は、更新履歴を記録しない。
【００７２】
そして、アドレスハッシュ値生成部３１０は、読み出したセグメントデータの保存先アドレスを合計するので、１０００＋１１００＋１２００＋２０００により５３００をアドレスハッシュ値として生成する。ポインタハッシュ値生成部３２０は、読み出したポインタの値を合計するので、１０００＋１１００＋１２００＋２０００により５３００をポインタハッシュ値として生成する。
【００７３】
本図の例の場合、既に読み出されたアドレスの内容は更新されていないので、アドレスハッシュ値及びポインタハッシュ値は補正されない。そして、整合性判断部３８０は、アドレスハッシュ値及びポインタハッシュ値を比較して一致しているので、階層型データベース２０が整合していると判断することができる。
【００７４】
以上、３例から明らかなように、本実施例におけるデータベース管理システム３０によれば、読出済アドレスのセグメントデータが更新されない場合のみならず、読出済アドレスのセグメントデータが更新された場合であっても、階層型データベース２０の整合性を適切に判断することができる。例えば、新たに追加したセグメントデータは読出済みでなく、そのセグメントデータに対するポインタのみが読出済であっても、整合性を適切に判断することができる。このようなオンライン・ポインタ・チェックを可能とすることにより、階層型データベース２０の可用性を大幅に高めることができる。
【００７５】
図１４は、データベース管理システム３０として機能するコンピュータ８００のハードウェア構成の一例を示す。本図においては、コンピュータ８００が、メインフレームと呼ばれる大型汎用計算機である場合を例に、そのハードウェア構成を説明する。コンピュータ８００は、主記憶装置８０２と、少なくとも１つの中央処理装置８０４と、記憶制御部８０６と、チャネル・サブシステム８０８と、少なくとも１つの制御装置８１０と、少なくとも１つの入出力デバイス８１２ａ〜ｄとを備える。
【００７６】
主記憶装置８０２は、入出力デバイス８１２ａ〜ｄから入力したデータ及びプログラムを格納する。そして、主記憶装置８０２は、中央処理装置８０４及びチャネル・サブシステム８０８からアドレスの指定を受けると、そのアドレスに格納しているデータを中央処理装置８０４及びチャネル・サブシステム８０８に送る。主記憶装置８０２は、格納しているデータを高速に読み書き可能であり、この高速な読み書きにより、中央処理装置８０４による高速演算処理が可能となる。
【００７７】
中央処理装置８０４は、コンピュータ８００の全体を制御する中心的な役割を果たし、例えば、少なくとも１つのオペレーティングシステム８０５を実行する。オペレーティングシステム８０５は、コンピュータ８００におけるプログラムの実行及び入出力処理を制御する。例えば、オペレーティングシステム８０５は、中央処理装置８０４上で動作する他のプログラムの実行を制御してもよいし、入出力デバイス８１２ａ〜ｄまでの各々におけるデータ転送を制御してもよい。
【００７８】
記憶制御部８０６は、双方向又は片方向に通信可能なバス８１４を経由して中央処理装置８０４に接続される。記憶制御部８０６は、更に、バス８１６を経由して主記憶装置８０２に接続され、バス８１８を経由してチャネル・サブシステム８０８に接続される。記憶制御部８０６は、例えば、中央処理装置８０４又はチャネル・サブシステム８０８から受けたアクセスリクエストを一時的に格納し（キューイング処理）、所定のタイミングでそのアクセスリクエストを主記憶装置８０２に送信してもよい。
【００７９】
チャネル・サブシステム８０８は、各々の制御装置８１０に対して、データ転送路８２０を経由して接続される。そして、チャネル・サブシステム８０８は、入出力デバイス８１２ａ〜ｄ及び主記憶装置８０２間でのデータ転送を制御する。これにより、中央処理装置８０４が入出力デバイス８１２ａ〜ｄとの間で通信する処理負荷が軽減されるので、中央処理装置８０４による演算処理と、入出力デバイス８１２ａ〜ｄによる入出力処理とを並列に実行させることができ、結果としてコンピュータ８００を効率的に動作させることができる。
【００８０】
また、チャネル・サブシステム８０８は、少なくとも１つのチャネルパス８２２により、入出力デバイス８１２ａ〜ｄとデータ転送する。各々のチャネルパス８２２は、チャネル・サブシステム８０８内に設けられたチャネル８２４を有する。また、各々のチャネルパス８２２は、少なくとも１つの制御装置８１０と、データ転送路８２０を有する。ここで、データ転送路８２０は、例えば、(ESCON: Enterprise Systems Connection Architecture)に基づくシリアルリンクであってもよい。これに代えて、データ転送路８２０は、パラレルOEMIであってもよいし、ファイバチャネルであってもよい。
【００８１】
制御装置８１０は、入出力デバイス８１２ａ〜ｄの少なくとも１つを制御する。例えば、制御装置８１０は、入出力デバイス８１２ａ〜ｄの各々におけるデータ転送のタイミングを制御してもよい。制御装置８１０は、バス８２６を経由して、入出力デバイス８１２ａ〜ｄの少なくとも１つに接続する。一例として、制御装置８１０は、最大２５６個の入出力デバイスに接続可能である。
【００８２】
入出力デバイス８１２ａ〜ｄの各々は、制御装置８１０、チャネル・サブシステム８０８、及び記憶制御部８０６を順次経由して主記憶装置８０２との間でデータ転送を行う。ここで、入出力デバイス８１２ａは、具体的には、磁気テープドライブであり、入出力デバイス８１２ｄは、ハードディスクドライブである。これに代えて、又はこれに加えて、入出力デバイス８１２ａ〜ｄの各々は、パンチカードリーダ、ディスプレイ、キーボード、プリンタ、通信デバイス、各種センサー、又はその他の記憶装置であってもよい。一例として、入出力デバイス８１２ａ〜ｄの少なくとも何れか１つは、階層型データベース２０と接続され、階層型データベース２０に対するアクセスを行ってもよい。
【００８３】
コンピュータ８００に提供されるプログラムは、テープ記録媒体８３５等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力デバイス８１２ａによって読み出され、チャネル・サブシステム８０８を経由して主記憶装置８０２に格納される。そして、主記憶装置８０２に格納されたプログラムは、再度チャネル・サブシステム８０８を経由して入出力デバイス８１２ｄ（ハードディスクドライブ）にインストールされる。プログラムがコンピュータ８００等に働きかけて行わせる動作は、図１から図１３において説明したデータベース管理システム３０における動作と同一であるから、説明を省略する。
【００８４】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク、ＣＤ−ＲＯＭの他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ８００に提供してもよい。
【００８５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００８６】
【図１】図１は、データベースシステム１０の概略を示す。
【図２】図２は、階層型データベース２０のデータ構造の一例を示す。
【図３】図３は、データベース管理システム３０の機能を機能ブロックに分類して示す。
【図４】図４は、更新履歴記録部４０のデータ構造の一例を示す。
【図５】図５は、アドレスハッシュ値及びポインタハッシュ値を生成して整合性を判断する処理の処理フローを示す。
【図６】図６は、更新履歴を記録する処理の処理フローを示す。
【図７】図７は、図６のＳ６４０における処理の詳細を示す。
【図８】図８は、セグメントデータが追加される処理の一例を示す。
【図９】図９は、セグメントデータが削除される処理の一例を示す。
【図１０】図１０は、セグメントデータが分割される処理の一例を示す。
【図１１】図１１は、既に読み出されたアドレスにセグメントデータが追加される処理の一例を示す。
【図１２】図１２は、既に読み出されたアドレス及び未だ読み出されていないアドレスの双方が更新される処理の一例を示す。
【図１３】図１３は、未だ読み出されていないアドレスにセグメントデータが追加される処理の一例を示す。
【図１４】図１４は、データベース管理システム３０として機能するコンピュータ８００のハードウェア構成の一例を示す。
【符号の説明】
【００８７】
１０  データベースシステム
２０  階層型データベース
３０  データベース管理システム
４０  更新履歴記録部
２００  セグメントデータ
２１０  接頭部
２２０  データ部
２３０  ポインタ
２４０  保存先アドレス
３００  データ読出部
３１０  アドレスハッシュ値生成部
３２０  ポインタハッシュ値生成部
３３０  読出済アドレス記録部
３４０  セグメントデータ更新部
３５０  更新履歴記録処理部
３６０  アドレスハッシュ値補正部
３７０  ポインタハッシュ値補正部
３８０  整合性判断部
４００  保存先アドレス記録領域
４１０  変更前ポインタ記録領域
４２０  変更後ポインタ記録領域
８００  コンピュータ
【図１】
2006139619.tif 000003
【図２】
2006139619.tif 000004
【図３】
2006139619.tif 000005
【図４】
2006139619.tif 000006
【図５】
2006139619.tif 000007
【図６】
2006139619.tif 000008
【図７】
2006139619.tif 000009
【図８】
2006139619.tif 000010
【図９】
2006139619.tif 000011
【図１０】
2006139619.tif 000012
【図１１】
2006139619.tif 000013
【図１２】
2006139619.tif 000014
【図１３】
2006139619.tif 000015
【図１４】
2006139619.tif 000016