(57)【要約】本発明は、階層型データベースにおけるポインタの整合性をチェックすることを目的として、前記データベースのセグメント情報から、セグメントのタイプ及びセグメントに含まれるポインタのタイプを判別し、前記判別結果が、１つの親セグメントと複数の子セグメントが親子関係にあること示していた場合に、前記複数の子セグメントにおいて前記親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて次の子セグメンを指示する兄弟ポインタと、前記親セグメントにおいて前記特定の子セグメントを指示する子ポインタとを抽出する抽出部と、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算し、両者が相違していた場合に整合性エラーを示す構成を含む。
2011077858.tif 000002
【特許請求の範囲】
【請求項１】
階層型データベースにおけるポインタの整合性をチェックするためのシステムであって、
前記階層型データベースに記録されているセグメントの情報を読み取る読み取り部と、
前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別する判別部と、
前記判別部の判別結果に応じて、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出する抽出部と、
前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する計算部と、
前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すチェック部と、
を含むシステム。
【請求項２】
前記特定の子セグメントが前記複数の子セグメントにおける最初の子セグメントであり、前記兄弟ポインタが、前記最初の子セグメントから順方向に順に次の子セグメントを指示する、請求項１に記載のシステム。
【請求項３】
前記特定の子セグメントが前記複数の子セグメントにおける最後の子セグメントであり、前記兄弟ポインタが、前記最後の子セグメントから逆方向に順に次の子セグメントを指示する、請求項１に記載のシステム。
【請求項４】
前記計算部において前記第１のハッシュ値及び前記第２のハッシュ値の計算に使用する前記組み合わせがすべて同じ演算である、請求項１に記載のシステム。
【請求項５】
前記演算が加算、減算、乗算又は除算である、請求項４に記載のシステム。
【請求項６】
前記計算部が、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせを前記親セグメントの数だけ累算し、かつ前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせを前記複数の子セグメントにおける最後の子セグメントの分を除いた分だけ累算することにより前記第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせを前記子セグメントの数だけ累算することにより前記第２のハッシュ値を計算する、請求項５に記載のシステム。
【請求項７】
前記累算が加算により実行される、請求項６に記載のシステム。
【請求項８】
前記演算が減算又は除算の場合に、前記計算部は、前記第１のハッシュ値及び前記第２のハッシュ値を計算するときのオペランドの順序を同じにして減算又は除算を実行する、請求項６又は７に記載のシステム。
【請求項９】
読み取り部、判別部、抽出部、計算部及びチェック部を有するコンピュータで、階層型データベースにおけるポインタの整合性をチェックするための方法であって、
前記読み取り部が、前記階層型データベースに記録されているセグメントの情報を読み取るステップと、
前記判別部が、前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別するステップと、
前記判別部の判別結果に応じて、前記抽出部が、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出するステップと、
前記計算部が、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算するステップと、
前記チェック部が、前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すステップと、
を含む方法。
【請求項１０】
階層型データベースにおけるポインタの整合性をチェックするためのプログラムであって、コンピュータを
前記階層型データベースに記録されているセグメントの情報を読み取る読み取り部、
前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別する判別部、
前記判別部の判別結果に応じて、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出する抽出部、
前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する計算部、及び
前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すチェック部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースの整合性をチェックするためのシステム、方法及びプログラムに関するものであり、特に、階層型データベースにおけるポインタの整合性をチェックするためのシステム、方法およびプログラムに関するものである。
【背景技術】
【０００２】
ＩＢＭ（登録商標）  ＩＭＳ（商標）（非特許文献１参照）のような階層型データベースでは、データベースの整合性をチェックするために、ハッシュ・チェック機能と呼ばれる、高速ポインタ・チェック機能が提供されている（非特許文献２参照）。このハッシュ・チェック機能は、データベースに記録されている各セグメントが持っているポインタの値とポインタが指示するターゲット・セグメントの相対バイト・アドレス（ＲＢＡ）を直接比較する代わりに、ポインタの値の合計とターゲット・セグメントのＲＢＡの合計を比較することによって、整合性をチェックしている。【０００３】
ハッシュ・チェック機能は、両方の合計値が同じであれば整合性ありと判断し、合計値が異なっていれば整合性なしと判断する。ただし、整合性なしと判断した場合であっても、ハッシュ・チェックだけでは、どのポインタ又はＲＢＡが不正であるかまではわからないので、正確なチェックを行うためには、ポインタ値とＲＢＡの直接比較を実行する必要がある。【０００４】
明らかに、ハッシュ・チェックが有効であるためには、ポインタの数とターゲット・セグメントの数が同じでなければならない。すなわち、ポインタとターゲット・セグメントが１対１の関係になければならない。ところが、ポインタのタイプによっては、ポインタとターゲット・セグメントの関係がｎ対１になる場合がある。例えば、複数の子セグメントが同じ親セグメントを指示する親ポインタを持っている場合がこれに該当する。この場合、親ポインタの数がｎ（＞１）であるのに対してターゲット・セグメントである親セグメントの数が１であるから、従来のハッシュ・チェック機能では、このような親ポインタの整合性をチェックすることができなかった。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】IMS Administration Guide: Database Manager Version 9(http://publibfi.dhe.ibm.com/epubs/pdf/dfsadbg4.pdf)
【非特許文献２】IMS High Performance Pointer Checker User's Guide(http://publibfi.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/fabp1b10/CCONTENTS)
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従って、本発明の目的は、階層型データベースにおいてポインタの数とそれらのポインタが指示するターゲット・セグメントの数が異なっていても、正しいハッシュ・チェックによってポインタの整合性をチェックできるシステム、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の第１の態様によれば、階層型データベースにおけるポインタの整合性をチェックするためのシステムであって、前記階層型データベースに記録されているセグメントの情報を読み取る読み取り部と、前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別する判別部と、前記判別部の判別結果に応じて、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出する抽出部と、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する計算部と、前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すチェック部と、を含むシステムが提供される。【０００８】
本発明の第２の態様によれば、読み取り部、判別部、抽出部、計算部及びチェック部を有するコンピュータで、階層型データベースにおけるポインタの整合性をチェックするための方法であって、前記読み取り部が、前記階層型データベースに記録されているセグメントの情報を読み取るステップと、前記判別部が、前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別するステップと、前記判別部の判別結果に応じて、前記抽出部が、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出するステップと、前記計算部が、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算するステップと、前記チェック部が、前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すステップと、を含む方法が提供される。【０００９】
本発明の第３の態様によれば、階層型データベースにおけるポインタの整合性をチェックするためのプログラムであって、コンピュータを、前記階層型データベースに記録されているセグメントの情報を読み取る読み取り部、前記読み取り部が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別する判別部、前記判別部の判別結果に応じて、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出する抽出部、前記親セグメントの保存先アドレス及び前記子ポインタの値の組み合わせと、前記子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、前記子セグメントの保存先アドレス及び前記子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する計算部、及び前記第１のハッシュ値及び前記第２のハッシュ値が相違していた場合に整合性エラーを示すチェック部、として機能させるためのプログラムが提供される。【００１０】
いずれの態様においても、特定の子セグメントが複数の子セグメントにおける最初の子セグメントであり、兄弟ポインタが、最初の子セグメントから順方向に順に次の子セグメントを指示するようになっていてもよく、また、特定の子セグメントが複数の子セグメントにおける最後の子セグメントであり、兄弟ポインタが、最後の子セグメントから逆方向に順に次の子セグメントを指示するようになっていてもよい。【００１１】
また、計算部において第１のハッシュ値及び第２のハッシュ値の計算に使用する組み合わせがすべて同じ演算であり、その演算が加算、減算、乗算又は除算であってもよい。計算部は、親セグメントの保存先アドレス及び子ポインタの値の組み合わせを親セグメントの数だけ累算し、かつ子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせを子セグメントの数から複数の子セグメントにおける最後の子セグメントの分を除いた分だけ累算することにより第１のハッシュ値を計算し、子セグメントの保存先アドレス及び子セグメントに含まれる親ポインタの値の組み合わせを子セグメントの数だけ累算することにより第２のハッシュ値を計算するようにしてもよい。
【図面の簡単な説明】
【００１２】
【図１】本発明が対象とするデータベース・システムの概略を示す図。
【図２】図１のデータベース・システムに含まれる階層型データベースの構成例を示すブロック図。
【図３】階層型データベースにおいて、複数の子セグメントが同じ親セグメントを指示する親ポインタを有している場合の構成例を示すブロック図。
【図４】本発明に従うデータベース管理システムの機能構成例を示すブロック図。
【図５】本発明に従うデータベース管理システムの動作を示すフローチャート。
【図６】本発明に従うデータベース管理システムとして機能する情報処理装置のハードウェア構成の一例を示すブロック図。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら、本発明を実施するための形態（以下、単に実施形態という）について説明するが、以下の説明は単なる例示であって、特許請求の範囲に記載された本発明を制限するものではない。例えば、実施形態では、階層型データベースの例として、非特許文献２に記載のようなＩＢＭ社のＩＭＳ（商標）を取り上げるが、もちろん本発明は他の階層型データベースにも適用可能である。
【００１４】
本発明では、親ポインタ、子ポインタ及び兄弟ポインタという３種類のポインタを利用するので、まずこれらのポインタの意味を明らかにしておく。
【００１５】
親ポインタ
子セグメントに含まれるポインタの１つで、親セグメントの保存先アドレス（例えば相対バイト・アドレスＲＢＡ）を指示するポインタ。
【００１６】
子ポインタ
親セグメントに含まれるポインタの１つで、特定の子セグメントの保存先アドレスを指示するポインタ。特定の子セグメントと他の子セグメントが兄弟になっている場合、子ポインタにより指示される子セグメントは、それら複数の子セグメント（兄弟セグメント）のうちの最初の子セグメント又は最後の子セグメントである。
【００１７】
兄弟ポインタ
子セグメントに含まれるポインタの１つで、複数の子セグメントにおける次の子セグメントの保存先アドレスを指示するポインタ。子ポインタが指示する特定の子セグメントが最初の子セグメントであれば、兄弟ポインタは最初の子セグメントから順方向に順に次の子セグメントを指示する。また、子ポインタが指示する特定の子セグメントが最後の子セグメントであれば、兄弟ポインタは最後の子セグメントから逆方向に順に次の子セグメントを指示する。
【００１８】
図１は、本発明が対象とするデータベース・システム１０の概略を示す。データベース・システム１０は、階層型データベース２０と、本発明に従うデータベース管理システム３０とを備える。
【００１９】
階層型データベース２０は、図２に示すように、セグメント２００−１〜４に代表される複数のセグメントを記録している。図示の例では、セグメント２００−１がルート・セグメントになっており、ルート・アンカー・ポイント（ＲＡＰ）によって指定することができる。セグメント２００−１は、接頭部２１０−１と、データ部２２０−１とを含む。また、セグメント２００−１の保存先アドレスは１０００である。ここで、保存先アドレスとは、例えば、階層型データベース２０の所定の基準アドレスと比較したセグメント２００−１の先頭アドレスの位置（相対バイトアドレス：ＲＢＡ）をいう。接頭部２１０−１は、セグメント２００−２の保存先アドレスである１１００を指示するポインタ２３０−１と、その他のセグメントの保存先アドレスを指示するポインタ２４０−１と、セグメント・コード（ＳＣ）２５０−１とを含む。セグメント・コード２５０−１は、ルート・セグメントから順にセグメント・タイプを特定するために振られた番号である。図示の例では、セグメント２００−１はルート・セグメントであるから、セグメント・コード２５０−１は、例えば“０１”に設定される。
【００２０】
セグメント２００−２は、セグメント２００−１と同じく、接頭部２１０−２と、データ部２２０−２とを含む。接頭部２１０−２は、セグメント２００−３の保存先アドレスである１２００を指示するポインタ２３０−２と、更に他のセグメントの保存先アドレスを指示するポインタ２４０−２と、セグメント・コード２５０−２とを含む。セグメント２００−２は、ルート・セグメントの次のセグメント（従属セグメント）であるから、セグメント・コード２５０−２は、例えば“０２”に設定される。
【００２１】
セグメント２００−３も、接頭部２１０−３と、データ部２２０−３とを含む。セグメント２００−３は、セグメント２００−１から始まる一連の階層構造の終端部分に位置する。このため、接頭部２１０−３は、下位のセグメントを指すポインタは持たず、同じ親の兄弟を指すポインタのみを持っている。実際には、接頭部２１０−３は、何れのアドレスをも示さない所定のデータ（例えば、Ｎｕｌｌ）を、ポインタ２４０−３として含んでもよい。また、接頭部２１０−３のセグメント・コード２５０−３は、例えば“０３”に設定される。
【００２２】
図２は、各ポインタと、それによって指示されるターゲット・セグメントが１対１の関係にある通常の場合を示しており、従来のハッシュ・チェックを適用可能である。ところが、前述のように、場合によってはこの関係がｎ対１になることがある。その例を図３に示す。
【００２３】
図３は、１つの親セグメント３００と、この同じ親セグメント３００を指示する親ポインタをそれぞれ有する第１の子セグメント３１０（子１）、第２の子セグメント３２０（子２）及び第３の子セグメント３３０（子３）とを含む親子関係の構成例を示している。親セグメント３００は、セグメントのタイプを示すセグメント・コード（ＳＣ）３０１，子セグメント３１０、３２０、３３０のうちの特定の子セグメントを指示する子ポインタ３０２及びデータ３０３を含む。図３の例では、子ポインタ３０２が指示する特定の子セグメントは、３つの子セグメント３１０、３２０，３３０のうちの最初の子セグメント３１０である。親セグメント３００のセグメント・コード３０１は、親セグメントの作成時に、例えば“０１”に設定される。
【００２４】
第１の子セグメント３１０は、セグメント・コード３１１，次の子セグメント３２０を指示する兄弟ポインタ３１２，親セグメント３００を指示する親ポインタ３１３及びデータ３１４を含む。同様に、第２の子セグメント３２０は、セグメント・コード３２１、次の子セグメント３３０を指示する兄弟ポインタ３２２，親セグメント３００を指示する親ポインタ３２３及びデータ３２４を含み、第３の子セグメント３３０は、セグメント・コード３３１、兄弟ポインタ３３２，親ポインタ３３３及びデータ３３４を含む。
【００２５】
セグメント・コード３１１、３２１，３３１は、それぞれの子セグメントが同じセグメント３００を親として持っているので、兄弟を示す同じ値（例えば“０２”）に設定される。
【００２６】
それぞれの子セグメントに含まれる兄弟ポインタは、図３の例では、最初の子セグメント３１０から順方向に順に次の子セグメント指示するようになっている。最後の子セグメント３３０には次の子セグメントがないので、その兄弟ポインタ３３２は、例えばｎｕｌｌ（オールゼロ）に設定される。
【００２７】
ＩＢＭ（登録商標）  ＩＭＳ（商標）では、親セグメント３００に含まれる子ポインタ３０２が最後の子セグメント３３０を指示するようになっていてもよい。その場合は、各子セグメントに含まれる兄弟ポインタは上記とは逆の方向に次の子セグメント指示することになる。すなわち、最後の子セグメント３３０の兄弟ポインタ３３２はその前の第２の子セグメント３２０を指示し、第２の子セグメント３２０の兄弟ポインタ３２２は最初の子セグメント３１０を指示する。この場合、第１の子セグメント３１０の兄弟ポインタ３１２はｎｕｌｌに設定される。
【００２８】
なお、図３において、各セグメントの左側に示されているＲＢＡは、それぞれのセグメントの保存先アドレス（図３の例では開始位置）を示す相対バイト・アドレスを表しているが、保存先アドレスは、ＲＢＡに限らず、絶対アドレスなどの他のアドレスでも構わない。また、図３には、本発明の理解に必要なフィールドしか示していないが、実際には、各セグメントは図示以外にも各種のフィールドを含んでいる。例えば、セグメント・コードＳＣの次には削除バイトと呼ばれるフィールドがあり、当該セグメントが削除されて無効になっているかどうかを示すビットを含んでいる。
【００２９】
図３に示す各種ポインタのうち、子ポインタ３０２及び兄弟ポインタ３１２，３２２は対応するターゲット・セグメントをそれぞれ１つしか持たないので、ポインタとターゲット・セグメントが１対１の関係にあり、従って従来のハッシュ・チェックで整合性をチェックすることができる。しかしながら、親ポインタに関しては、３つの親ポインタ３１３，３２３，３３３に対して１つの同じ親セグメント３００がターゲット・セグメントとなっているため、ポインタとターゲット・セグメントが３対１の関係になり、従来のハッシュ・チェックでは整合性をチェックすることができなかった。
【００３０】
一般に、ｎ個のポインタに対して１つのターゲット・セグメントしか存在しない場合、当該ポインタをそれぞれ含むｎ個の異なった式が成立すれば、当該ポインタのハッシュ・チェックが可能といえる。本発明は、図３のような構成例において、ポインタの整合性エラーがなければ、次式が成立することに鑑み、ｎ対１のポインタ（親ポインタ）を１対１のポインタ（子ポインタ及び兄弟ポインタ）と組み合わせてハッシュ・チェックを実行する。
【００３１】
ｆ（親のＡＤＤＲ、ＣＰ）    ＝ｆ（子１のＡＤＤＲ、子１のＰＰ）    （１）
ｆ（子１のＰＰ、子１のＳＰ）＝ｆ（子２のＡＤＤＲ、子２のＰＰ）    （２）
ｆ（子２のＰＰ、子２のＳＰ）＝ｆ（子３のＡＤＤＲ、子３のＰＰ）    （３）
【００３２】
上式において、ＡＤＤＲは保存先アドレス（例えばＲＢＡ）を表し、ＣＰは子ポインタを表し、ＰＰは親ポインタを表し、ＳＰは兄弟ポインタを表している。また、上式中のｆ（Ａ、Ｂ）は、Ａ及びＢをオペランドとする二項演算を表している。二項演算は、加算（Ａ＋Ｂ）、減算（Ａ−Ｂ）、乗算（Ａ×Ｂ）及び除算（Ａ÷Ｂ）の任意の算術演算でよい。ただし、減算又は除算の場合は、左辺と右辺でオペランドの順序を同じにする必要がある。すなわち、例えば左辺において、親の保存先アドレスに関する値（保存先アドレスそのものと親ポインタ）をオペランドＡにした場合は、右辺においても親ポインタをオペランドＡにしなければならない。
【００３３】
実際のデータベースには、上述のような、１つの親セグメントと複数の子セグメントの組み合わせが多数存在している。そのような組み合わせの総数、すなわち親セグメントの総数をｎとし、子セグメントの総数をｍとすると、上記の式（１）〜（３）をすべての親子関係について次のように統合することができる。
【００３４】
Σ１ｆ（親ｉのＡＤＤＲ、ＣＰ）＋Σ２ｆ（子ｊのＰＰ、子ｊのＳＰ）
＝Σ３ｆ（子ｋのＡＤＤＲ、子ｋのＰＰ）    （４）
【００３５】
式（４）において、Σ１は、関数ｆ（親ｉのＡＤＤＲ、ＣＰ）の値を親セグメントの数ｎだけ、すなわち親１から親ｎまで累算することを表し、Σ２は、関数ｆ（子ｊのＰＰ、子ｊのＳＰ）の値をそれぞれの親子関係の組み合わせにおける最後の子セグメントを除いた分（総数はｎ−ｍ）だけ累算することを表し、Σ３は、関数ｆ（子ｋのＡＤＤＲ、子ｋのＰＰ）の値を子セグメントの数ｍだけ、すなわち子１から子ｍまで累算することを表している。累算は、例えば加算により実行される。Σ２において最後の子セグメントを除いているのは、最後の子セグメントの兄弟ポインタＳＰ（図３の例では兄弟ポインタ３３２）が対応するターゲット・セグメントを持っていないためである。ただし、最後の子セグメントの兄弟ポインタＳＰの値がゼロであり、かつｆ（子ｉのＰＰ、子ｉのＳＰ）の二項演算が乗算であれば、Σ３と同様に、Σ２も子セグメントの数ｍだけ累算するようにしても問題はない。そうすれば、最後の子セグメントを除外する処理を省くことができる。なお、ここでいう最後の子セグメントとは、兄弟ポインタを辿ったときの最後の子セグメントを指し、親セグメントに含まれる子ポインタがどの子セグメントを指示しているかによって異なる。
【００３６】
図４は、上記の式（４）に従ってハッシュ・チェックを実行するデータベース管理システム３０の機能構成例を示したものである。データベース管理システム３０は、階層型データベース２０に記録されているセグメントの情報を読み取る読み取り部４０２と、読み取り部４０２が読み取ったセグメント情報から、各セグメントのタイプ及び各セグメントに含まれるポインタのタイプを判別する判別部４０４と、判別部４０４の判別結果に応じて、複数の子セグメントから同じ親セグメントを指示する親ポインタと、前記複数の子セグメントにおいて特定の子セグメントから順に次の子セグメントを指示する兄弟ポインタとを抽出し、親セグメントから特定の子セグメントを指示する子ポインタを抽出する抽出部４０６と、親セグメントの保存先アドレス及び子ポインタの値の組み合わせと、子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、子セグメントの保存先アドレス及び子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する計算部４０８と、第１のハッシュ値及び第２のハッシュ値が相違していた場合に整合性エラーを示すチェック部４１０と、を含んでいる。
【００３７】
次に、図５のフローチャートを参照しながら、データベース管理システム３０の動作について説明する。
【００３８】
最初のステップＳ１で、読み取り部４０２が、階層型データベース２０に記録されているセグメントをその物理アドレスの順に読み取る。図３の例で説明すると、階層型データベース２０に記録されているのが４つのセグメント３００、３１０、３２０、３３０である場合、読み取り部４０２は、物理アドレスに従って、最初にセグメント３１０を読み取り、続いてセグメント３２０，３３０，３００を順に読み取る。ＩＢＭ（登録商標）  ＩＭＳ（商標）では、階層型データベース２０に記録されているセグメントの物理構造を定義した制御情報が制御情報記憶部４１２に保存されており、読み取り部４０２はこの制御情報を参照してセグメントを読み取り、読み取った内容を判別部４０４に送る。なお、前述の削除バイト・フィールドにおいて、セグメントが無効であることを示すビットがオンになっていると、読み取り部４０２は読み取った内容を判別部４０４に送ることなく廃棄する。
【００３９】
次のステップＳ２で、判別部４０４が、まず、読み取り部４０２から送られてきたセグメントの接頭部にあるセグメント・コード（例えばＳＣ３１１）を用いて、制御情報記憶部４１２に保存されている制御情報にアクセスする。この制御情報は、セグメント・コード毎に、そのセグメントがどのようなタイプで、どのようなポインタをどの位置に持っているかを示す情報を含んでおり、判別部４０４は、この情報を読み取ることにより、当該セグメントのタイプ及び当該セグメントが持っているポインタのタイプを判別する。本実施形態では、読み取り部４０２が最初に読み取ったセグメント３１０のセグメント・コード３１１は“０２”であり、これは、セグメント３１０が同じ親ポインタを持つ複数の子のうちの１つであることを示している。セグメント３２０及び３３０も同様である。これに対して、セグメント３００のセグメント・コード３０１は”０１”であり、これは、セグメント３００が特定の子セグメントを指示する子ポインタを持っていることを示している。
【００４０】
次にステップＳ３で、判別部４０４は、前述の制御情報から、判別したセグメントのタイプが同じ親ポインタを持つ複数の子のうちの１つかどうかを判断し、もし違っていれば、ステップＳ４に進んで、そのセグメントが特定の子セグメントを指示する子ポインタを持っているかどうかを判断する。ステップＳ３の判断結果がＹＥＳであれば、ステップＳ５に進んで、抽出部４０６が、ステップＳ２で判別部４０４により判別されて、その子セグメントに含まれている親ポインタ及び兄弟ポインタを抽出する。また、ステップＳ４での判断結果がＹＥＳであれば、ステップＳ６に進んで、抽出部４０６が、ステップＳ２で判別部４０４により判別されて、その親セグメントに含まれている子ポインタを抽出する。
【００４１】
ステップＳ５で親ポインタ及び兄弟ポインタを抽出した後、ステップＳ７で、抽出部４０６は、ステップＳ３で検出された子が複数の子のうちの最後の子かどうかを判断する。これは、ステップＳ５で抽出した兄弟ポインタがゼロかどうかをみることにより可能である。最後の子でなければ、抽出部４０６はステップＳ５で抽出した親ポインタ及び兄弟ポインタを計算部４０８に送るが、最後の子であれば、これらのポインタを計算部４０８に送ることなくステップＳ９に進む。
【００４２】
次のステップＳ８で、計算部４０８が、前出の式（４）の左辺により表される第１のハッシュ値と、式（４）の右辺により表される第２のハッシュ値を計算する。式（４）に示すように、計算部４０８は、親セグメントの保存先アドレス及び子ポインタの値の組み合わせと、子セグメントに含まれる親ポインタ及び兄弟ポインタの値の組み合わせとで第１のハッシュ値を計算し、子セグメントの保存先アドレス及び子セグメントに含まれる親ポインタの値の組み合わせから第２のハッシュ値を計算する。ここでいう組み合わせは加算、減算、乗算及び除算のうちの任意の演算でよいが、比較すべきハッシュ値を計算するのであるから、すべて同じ演算でなければならない。すなわち、親セグメントの保存先アドレス及び子ポインタの値の組み合わせが、例えば、親セグメントの保存先アドレスと子ポインタ値の加算で行われる場合は、他のすべての組み合わせも加算で行われる。
【００４３】
前述のように、組み合わせが減算又は除算の場合は、組み合わせるべき２つのオペランドの順序をすべての組み合わせで同じにする必要がある。また、組み合わせが乗算の場合は、最後の子セグメントを除外する処理（ステップＳ７）を省略することができる。
【００４４】
次のステップＳ９で、読み取り部４０２がステップＳ１で読み取ったセグメントが階層型データベース２０に記録されている最後のセグメントであるかどうかを判断する。最後のセグメントでなければ、ステップＳ１に戻って、読み取り部４０２が次のセグメントを読み取る。最後のセグメントであれば、ステップＳ１０に進んで、チェック部４１０がステップＳ８で計算された第１のハッシュ値と第２のハッシュ値を比較し、一致していればステップＳ１１で整合性ありを示し、不一致であればステップＳ１２で整合性なしを示す。
【００４５】
チェック部４１０がステップＳ１０でハッシュ値の不一致を検出した場合、これは、式（４）から明らかなように、親セグメントの保存先アドレス、子セグメントの保存先アドレス、親ポインタ、子ポインタ及び兄弟ポインタのいずれかが不正であることを示しているが、どれが不正であるかは不明である。しかし、子ポインタ及び兄弟ポインタに関しては、ターゲット・セグメントと１対１の対応関係があるため、従来のハッシュ・チェック機能を個別に適用可能である。
【００４６】
例えば、図５のステップＳ８において、子ポインタのハッシュ値（累算値）、子ポインタが指示する子セグメントの保存先アドレスのハッシュ値、兄弟ポインタのハッシュ値、及び兄弟ポインタが指示する子セグメントのハッシュ値を計算しておき、ステップＳ１０で、（子ポインタのハッシュ値＝子ポインタが指示する子セグメントの保存先アドレスのハッシュ値）、及び（兄弟ポインタのハッシュ値＝兄弟ポインタが指示する子セグメントのハッシュ値）が成立しているかどうかをみれば、子ポインタ及び兄弟ポインタのハッシュ・チェックが可能である。このハッシュ・チェックで整合性エラーが検出されなかったにもかかわらず、第１のハッシュ値及び第２のハッシュ値が不一致であれば、親ポインタと親セグメントの保存先アドレスの間に不整合が存在していることがわかる。
【００４７】
なお、ステップＳ９からステップＳ１０へ出たときの、ステップＳ３の判断結果がＹＥＳである回数は、本発明が対象とする子セグメントの総数を示している。同様に、ステップＳ９からステップＳ１０へ出たときの、ステップＳ４の判断結果がＹＥＳである回数は、本発明が対象とする親セグメントの総数を示している。更に、ステップＳ９からステップＳ１０へ出たときの、ステップ７の判断結果がＹＥＳである回数は、本発明が対象とする子セグメントのうちの最後の子セグメントの総数を示している。従って、ステップＳ３からステップＳ５へ出た回数と、ステップＳ４からステップＳ６へ出た回数と、ステップＳ７からステップＳ９へ出た回数をそれぞれカウントするカウンタを含む計数部を図４のデータベース管理システム３０に設けておけば、本発明が処理すべき親セグメント及び子セグメントの総数と、処理から除外すべき最後の子セグメントの総数を知ることができる。
【００４８】
以上のように、本発明のハッシュ・チェックは、１つの親セグメントと、この親セグメントを指示する親ポインタを含む複数の子セグメントからなる親子関係を対象にしているが、それ以外の場合、すなわちポインタとターゲット・セグメントが１対１の関係にある場合は、ポインタ値とターゲット・セグメントの保存先アドレスをそれぞれ累算する通常のハッシュ・チェック処理を実行すればよい。図５において、ステップＳ３及びＳ４の判断結果がいずれもＮＯの場合に実行されるステップＳ１３はこの処理を示している。
【００４９】
なお、ＩＢＭ（登録商標）  ＩＭＳ（商標）においては、上述の親子関係を物理関係及び論理関係として設定できるようになっている。物理関係は、親セグメントが子セグメントと同じパーティション又はデータベースにある場合で、前者を物理親、後者を物理子と呼ぶ。これに対して、論理関係は、親セグメントが子セグメントとは別のパーティション又はデータベースにある場合で、前者を論理親、後者を論理子と呼ぶ。本発明は、親子関係がどちらであっても等しく適用可能である。
【００５０】
図６は、データベース管理システム３０として機能する情報処理装置５００のハードウェア構成の一例を示す。本図においては、情報処理装置５００が、メインフレームと呼ばれる大型汎用計算機である場合を例に、そのハードウェア構成を説明する。情報処理装置５００は、主記憶装置５０２と、少なくとも１つの中央処理装置５０４と、記憶制御部５０６と、チャネル・サブシステム５０８と、少なくとも１つの制御装置５１０と、少なくとも１つの入出力デバイス５１２ａ〜ｄとを備える。
【００５１】
主記憶装置５０２は、入出力デバイス５１２ａ〜ｄから入力したデータ及びプログラムを格納する。そして、主記憶装置５０２は、中央処理装置５０４及びチャネル・サブシステム５０８からアドレスの指定を受けると、そのアドレスに格納しているデータを中央処理装置５０４及びチャネル・サブシステム５０８に送る。主記憶装置５０２は、格納しているデータを高速に読み書き可能であり、この高速な読み書きにより、中央処理装置５０４による高速演算処理が可能となる。
【００５２】
中央処理装置５０４は、情報処理装置５００の全体を制御する中心的な役割を果たし、例えば、少なくとも１つのオペレーティングシステム５０５を実行する。オペレーティングシステム５０５は、情報処理装置５００におけるプログラムの実行及び入出力処理を制御する。例えば、オペレーティングシステム５０５は、中央処理装置５０４上で動作する他のプログラムの実行を制御してもよいし、入出力デバイス５１２ａ〜ｄまでの各々におけるデータ転送を制御してもよい。
【００５３】
記憶制御部５０６は、双方向又は片方向に通信可能なバス５１４を経由して中央処理装置５０４に接続される。記憶制御部５０６は、更に、バス５１６を経由して主記憶装置５０２に接続され、バス５１８を経由してチャネル・サブシステム５０８に接続される。記憶制御部５０６は、例えば、中央処理装置５０４又はチャネル・サブシステム５０８から受けたアクセスリクエストを一時的に格納し（キューイング処理）、所定のタイミングでそのアクセスリクエストを主記憶装置５０２に送信してもよい。
【００５４】
チャネル・サブシステム５０８は、各々の制御装置５１０に対して、データ転送路５２０を経由して接続される。そして、チャネル・サブシステム５０８は、入出力デバイス５１２ａ〜ｄ及び主記憶装置５０２間でのデータ転送を制御する。これにより、中央処理装置５０４が入出力デバイス５１２ａ〜ｄとの間で通信する処理負荷が軽減されるので、中央処理装置５０４による演算処理と、入出力デバイス５１２ａ〜ｄによる入出力処理とを並列に実行させることができ、結果として情報処理装置５００を効率的に動作させることができる。
【００５５】
また、チャネル・サブシステム５０８は、少なくとも１つのチャネルパス５２２により、入出力デバイス５１２ａ〜ｄとデータ転送する。各々のチャネルパス５２２は、チャネル・サブシステム５０８内に設けられたチャネル５２４を有する。また、各々のチャネルパス５２２は、少なくとも１つの制御装置５１０と、データ転送路５２０を有する。ここで、データ転送路５２０は、例えば、ＥＳＣＯＮ（登録商標）（Ｅｎｔｅｒｐｒｉｓｅ  Ｓｙｓｔｅｍｓ  Ｃｏｎｎｅｃｔｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ）に基づくシリアルリンクであってもよい。これに代えて、データ転送路５２０は、パラレルＯＥＭＩであってもよいし、ファイバチャネルであってもよい。
【００５６】
制御装置５１０は、入出力デバイス５１２ａ〜ｄの少なくとも１つを制御する。例えば、制御装置５１０は、入出力デバイス５１２ａ〜ｄの各々におけるデータ転送のタイミングを制御してもよい。制御装置５１０は、バス５２６を経由して、入出力デバイス５１２ａ〜ｄの少なくとも１つに接続する。一例として、制御装置５１０は、最大２５６個の入出力デバイスに接続可能である。
【００５７】
入出力デバイス５１２ａ〜ｄの各々は、制御装置５１０、チャネル・サブシステム５０８、及び記憶制御部５０６を順次経由して主記憶装置５０２との間でデータ転送を行う。ここで、入出力デバイス５１２ａは、具体的には、磁気テープドライブであり、入出力デバイス５１２ｄは、ハードディスクドライブである。これに代えて、又はこれに加えて、入出力デバイス５１２ａ〜ｄの各々は、パンチカードリーダ、ディスプレイ、キーボード、プリンタ、通信デバイス、各種センサー、又はその他の記憶装置であってもよい。一例として、入出力デバイス５１２ａ〜ｄの少なくとも何れか１つは、データベース２０と接続され、データベース２０に対するアクセスを行ってもよい。
【００５８】
情報処理装置５００に提供されるプログラムは、テープ記録媒体５３５等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力デバイス５１２ａによって読み出され、チャネル・サブシステム５０８を経由して主記憶装置５０２に格納される。そして、主記憶装置５０２に格納されたプログラムは、再度チャネル・サブシステム５０８を経由して入出力デバイス５１２ｄ（ハードディスクドライブ）にインストールされる。プログラムが情報処理装置５００等に働きかけて行わせる動作は、図１から図５において説明した通りである。このプログラムは、情報処理装置５００を、前述の読み取り部４０２、判別部４０４、抽出部４０６、計算部４０８及びチェック部４１０として機能させるものである。
【００５９】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク、ＣＤ−ＲＯＭの他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置５００に提供してもよい。
【００６０】
以上、本発明を実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【符号の説明】
【００６１】
２０  階層型データベース
３０  データベース管理システム
４０２  読み取り部
４０４  判別部
４０６  抽出部
４０８  計算部
４１０  チェック部
【図１】
2011077858.tif 000003
【図２】
2011077858.tif 000004
【図３】
2011077858.tif 000005
【図４】
2011077858.tif 000006
【図５】
2011077858.tif 000007
【図６】
2011077858.tif 000008
【国際調査報告】
2011077858.tif 000009
2011077858.tif 000010