(57)【要約】【課題】  階層型データベースに対し定義される索引データベースの整合性の検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体を提供すること。【解決手段】本発明の情報処理装置１０は、階層型データベース１２を構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部２０と、分割先ポインタ・レコードと分割先データ部レコードとを比較して、分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、分割先データ部のキー情報を渡すポインタ検証部（２２，３２）と、索引に含まれる索引キー情報と、渡されたキー情報とを比較して、索引キー情報の整合性を検証するキー検証部２４とを含む。【選択図】図１
2010066793.tif 000002
【特許請求の範囲】
【請求項１】
階層型データベースに対して定義される索引の整合性を検証する情報処理装置であって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と
を含む、情報処理装置。
【請求項２】
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡す、請求項１に記載の情報処理装置。
【請求項３】
前記ポインタ検証部は、前記分割先データ部レコードに含まれる前記保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合、削除済みであるとして処理を進める、請求項２に記載の情報処理装置。
【請求項４】
前記キー検証部は、渡された前記キー情報に一致する索引キー情報が前記索引中に存在しない場合、出力部に通知してエラーを出力させる、請求項３に記載の情報処理装置。
【請求項５】
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項４に記載の情報処理装置。
【請求項６】
階層型データベースを管理するデータベース管理システム部をさらに含み、
前記データベース管理システム部は、前記分割されたセグメント・データを削除する場合、その分割先データ部を残す、請求項５に記載の情報処理装置。
【請求項７】
階層型データベースに対して定義される索引の整合性を検証するための方法であって、情報処理装置が、
前記階層型データベースを構成する、分割されたセグメント・データの接頭部を読み込んで、該分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードを作成するステップと、
分割されたセグメント・データの分割先データ部を読み込んで、該分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードを作成するステップと、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報の整合性を検証するステップと、
前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を検証処理に渡すステップと、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するステップと
を実行する、情報処理方法。
【請求項８】
情報処理装置が、索引対象である非分割のセグメント・データに含まれるキー情報を前記索引キー情報の整合性を検証する処理へ渡すステップをさらに実行する、請求項７に記載の情報処理方法。
【請求項９】
前記分割先ポインタ情報の整合性を検証するステップでは、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項８に記載の情報処理方法。
【請求項１０】
階層型データベースに対して定義される索引の整合性を検証するためのコンピュータ実行可能なプログラムであって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と
をコンピュータに実現するためのコンピュータ実行可能なプログラム。
【請求項１１】
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡す、請求項１０に記載のコンピュータ実行可能なプログラム。
【請求項１２】
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項１１に記載のコンピュータ実行可能なプログラム。
【請求項１３】
請求項１０〜１２のいずれか１項に記載のコンピュータ実行可能なプログラムを格納するコンピュータ可読な記録媒体。
【請求項１４】
階層型データベースに対して定義される索引の整合性を検証する情報処理装置であって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と、
階層型データベースを管理するデータベース管理システムとを含み、
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡し、
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出し、また、前記分割先データ部レコードに含まれる前記保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合、削除済みであるとして処理を進め、
前記キー検証部は、渡された前記キー情報に一致する索引キー情報が前記索引中に存在しない場合、出力部に通知してエラーを出力させ、
前記データベース管理システムは、前記分割されたセグメント・データを削除する場合、その分割先データ部を残す、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに関連する整合性の検証処理に関し、より詳細には、階層型データベースに対し定義される索引データベースの整合性の検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
従来より、階層型データベース・システムは、必要資源が少なく、高速、かつ応答時間の見積り精度が高いことから、大規模データベースに用いられている。階層型データベース・システム（例えば、ＩＢＭ（登録商標）ＩＭＳ  ＤＬ／Ｉ）は、各々のデータ・エレメントをツリー構造で管理する。この階層型データベースにおいて、最小のデータ単位をセグメント・オカレンス（以下、単にセグメントとして参照する。）と呼び、ツリー構造の最上位に位置するセグメントは、ルートセグメントと呼ぶ。ルートセグメントは、従属セグメントを有し、その従属セグメントは、さらに従属セグメントを有することができる。このようなツリーの集合が階層型データベースを構成している。
【０００３】
階層型データベースのツリー構造は、それぞれのセグメントについて、その従属セグメントの保存先アドレスを示すポインタ値により維持される。上記保存先アドレスは、例えば、相対バイトアドレス（ＲＢＡ：Relative Byte Address）によって指定される。これは、データベースを記録するパーティションの特定のアドレスを基準としたアドレスの相対値である。ポインタ値は、データベースを記録するディスク上のセグメント・データにおいて、接頭部に記録され、データベース管理システムにより管理される。
【０００４】
セグメントへのアクセスは、通常、ルートセグメントから階層順にポインタをたどることにより行われるが、索引を定義することにより、セグメントをそのキーによって定義されている順序とは異なる順序で処理することが可能とされる。索引のデータベース（以下、索引データベースとして参照する）は、ＩＰＳ（Index Pointer Segment）と呼ばれるタイプのセグメントから構成され、ＩＰＳは、その接頭部に検索するセグメント（ＩＴＳ；Index Target Segment）のＲＢＡをポインタ値として格納し、そのデータ部に、呼び出しの際に修飾子として使用する１以上のフィールドを有するセグメント（ＩＳＳ；Index Source Segment）のキー値を格納している。これにより、ＩＳＳからＩＴＳへのチェインが張られることとなる。
【０００５】
階層データベースには、上記ポインタ値が数多く存在し、その整合性を維持することは必須である。しかしながら、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により、ポインタ値に不整合が生じる場合がある。そこで、階層型データベースでは、ポインタの整合性を検証するポインタチェック・プログラムを定期的に実行している。
【０００６】
このような、ポインタチェック・プログラムとしては、例えば、ＩＢＭ（登録商標）  ＩＭＳ  ＨＰ  Ｐｏｉｎｔｅｒ  Ｃｈｅｃｋｅｒを挙げることができ、このプログラムは、デーベース管理システムとは独立にポインタ値の整合性チェックを行っている（非特許文献１）。この整合性の検証処理は、データベース内のポインタのチェインをたどって読み込むのではなく、ディスク上のデータの先頭から順次読み込んで、スキャンし、全セグメントの開始ＲＢＡと、そのセグメントを指すポインタ値とを抽出し、その２種類の値を比較することにより、ポインタ値の不整合を検出する。
【０００７】
また、データベースが索引付けされている場合、索引データベース内のポインタ値に加え、索引キー値の整合性も維持されている必要がある。そこで、階層型データベースに対してキー値の整合性を検証するキーチェック・プログラムも定期的に実行している。キーチェック・プログラムでは、索引付けされたデータベースのスキャン中に、ＩＳＳのキーを抽出し、ＩＰＳにおけるキーの値と比較することにより、キー値の不整合を検出する。
【非特許文献１】”IMS High Performance Pointer Checker for z/OS, V2R1, User's Guide Vol. 1”、[online]、２００６年４月３日、［２００８年８月２５日検索］、インターネット<URL; http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/fabp1b10/CCONTENTS>
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来のポインタ・プログラムおよびキーチェック・プログラムでは、ある特定の状況では、キーチェックを実施することができなかった。階層型データベースのセグメントには、固定長のフォーマットおよび可変長フォーマットのセグメントが存在する。そして、通常、単一のセグメントを構成する接頭部とデータ部とは、連続してディスク上に保存される。しかしながら、可変長フォーマットにおいて、更新されてデータ部の長さが変更されると、更新データがアロケートされたサイズを超えてしまう場合など、ディスク上の元の位置に収まりきらない場合が発生する。この場合、データベース管理システムは、単一のセグメントを構成する接頭部とデータ部とを分割して保存し、接頭部にデータ部の保存位置を示すポインタ値を作成する。このような分割されたセグメントをスプリット・セグメントと呼ぶ。
【０００９】
そして、スプリット・セグメントが削除される場合、データベース管理システムは、スプリット・セグメントの接頭部については、その内容をクリアしてフリー・スペースとするか、あるいは削除済みか否かを示す削除バイト（Delete Byte；ＤＢ）中の削除ビットを、非削除を示す値（ＯＮ）にする。そして、ＩＳＳを削除する場合には、対応するＩＰＳも削除する。しかしながら、データベースの処理効率の観点から、ディスク上の他の保存位置へのシークを要するスプリット・セグメントのデータ部の削除処理が行われないことがある。
【００１０】
従来のポインタ値の整合性の検証処理では、ブロック毎にデータベースを読み込みながらスキャンを行うため、スプリット・セグメントのデータ部を見つけたとしても、データ部だけでは、当該データ部に対応するセグメントが実際に削除済みであるか否かを判断することができなかった。つまり、続くキー値の整合性の検証処理において、ＩＰＳのキー値の不一致を検出しても、スプリット・セグメントが削除されているためなのか、何らかのエラーが発生しているのかを判断することができなかった。
【００１１】
実際には、キーチェック・プログラムは、ＩＳＳが削除済みにもかかわらず、不整合としてエラーを報告してしまう可能性があった。また、非特許文献１に開示されるＩＢＭ（登録商標）  ＩＭＳ  ＨＰ  Ｐｏｉｎｔｅｒ  Ｃｈｅｃｋｅｒでは、スプリット・セグメントのＩＳＳを見つけた場合に、キー値の整合性の検証処理を中止していた。
【００１２】
本発明は、上記問題点に鑑みてなされたものであり、データベース中に分割されたセグメントが存在する場合であっても、階層型データベースの索引について、正しくキー情報の不整合を検出可能な整合性検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明では、上記課題を解決するために、まず、階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報（ＶＬＳポインタ値）を含む分割先ポインタ・レコード（ＶＬＳポインタ・レコード）と、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコード（ＶＬＳセグメント・レコード）とを作成する。そして、分割先ポインタ・レコードと分割先データ部レコードとを比較して、分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合にのみ、分割先データ部のキー情報を、後続する索引キー情報の整合性を検証する処理に渡す。
【００１４】
データベース管理システム部は、分割されたセグメント・データを削除する際に、トランザクションのパフォーマンスの観点から、その分割先データ部を残す場合がある。上記構成によれば、セグメント・データが削除されたにもかかわらず分割先データ部を検出してしまった場合にも、その削除が正しく検知され、有効なキー情報のみが後続する索引キー情報の整合性を検証する処理に渡されることとなり、ひいては、分割されたセグメントがデータベース中に存在する場合であっても、階層型データベースに対して定義される索引において、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により発生しうるポインタ値およびキー値の不整合を好適に検出することが可能となる。
【００１５】
また上記構成では、分割されたセグメント・データにおける接頭部−データ部間の分割ポインタ情報の整合性を検証するために用意される分割先データ部レコード（ＶＬＳセグメント・レコード）中に、該分割先データ部に収容されるキー情報を含ませるのみで、削除済みの分割先データ部を正しく検出することが可能となる。そのため、分割されたセグメント・データに対応するために確保しなければならない記憶領域の増加を、最小限に抑えることが可能とされる。
【００１６】
本発明では、セグメント・データを読み込む処理の際に、索引対象である非分割のセグメント・データが見つかった場合に、そのセグメント・データに含まれるキー情報を、後続する索引キー情報の整合性を検証する処理に渡すことができる。また本発明では、分割先データ部レコードに含まれる保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合に、当該セグメント・データが削除済みであるとして処理を進めることができる。また本発明では、キー検証処理の際に、渡されたキー情報に一致する索引キー情報が索引中に存在しない場合、出力部に通知してエラーを出力させることができる。上記構成により、分割先データ部に対応した接頭部が削除されている場合に誤ったエラー報告してしまうことがなく、管理者は、正確なエラーレポートを得ることが可能とされる。
【００１７】
さらに本発明では、分割先データ部レコードおよび分割先ポインタ・レコードをソートして、突き合わせ処理することにより、分割先ポインタ情報の不整合を検出することができる。上記構成によれば、分割先ポインタ情報の不整合を検出するためのロジックを利用して、検証処理に渡すべき有効なキー情報を判定しているため、余分なロジックを付加する必要がないという利点も備えているといえる。
【００１８】
さらに本発明では、階層型データベースに対して定義される索引の整合性を検証する処理を、データベース管理システムとは別の階層型データベースにアクセス可能な情報処理装置上に実現することができる。また、索引の整合性を検証する処理を実装する情報処理装置上に階層型データベースを管理するデータベース管理システム部をさらに含むこともできる。このデータベース管理システム部は、分割されたセグメント・データを削除する場合、その分割先データ部を残すことができる。これにより、整合性の検証処理を可能としつつ、分割されたセグメントの存在が許容されるため、階層型データベースに対するトランザクションの効率の低下を防止することができる。
【００１９】
また本発明では、上記索引は、索引対象のセグメント・データを指す索引ポインタ情報と、索引キー情報とを含む索引セグメント・データを含む索引データベースとして構成することができる。また、上記索引キーの整合性を検証する処理を、セグメント・データの保存位置情報を含む通常セグメント・レコードと、セグメント・データ内のポインタ情報を含む通常ポインタ・レコードとを突き合わせて、ポインタ情報の整合性を検証する処理フローに、組み込むことができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明について実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。なお、以下の本発明の実施形態では、階層型データベースに対し定義される索引データベースの整合性検証機能を実現するデータベース管理装置を例として説明する。
【００２１】
図１は、本発明の実施形態におけるデータベース管理装置１０の機能ブロック図である。データベース管理装置１０は、概ねメインフレームなどの大型汎用コンピュータとして構成され、データベース１２に対しアクセスするとともに、データベース１２の整合性を検証する。図１に示すデータベース管理装置１０に含まれる各機能部（詳細は後述する。）は、メモリ上にプログラムを展開し、プログラムの実行により各ハードウェア資源を動作制御することによって、データベース管理装置１０上に実現される。
【００２２】
データベース１２は、データを木構造で表したデータモデルに従う階層型データベースとして構成されており、ＩＭＳなどのデータベース管理システム（ＤＢＭＳ）により管理されている。データベース１２は、Ｉ／Ｏインタフェースを介してデータベース管理装置１０に接続されたディスク装置など、ストレージ・デバイスの記憶領域により提供される。データベース１２中のデータは、セグメント・オカレンス（以下、単にセグメントとして参照する。）と呼ばれるデータ群から構成されている。そして、各セグメントは、他のセグメントに対するポインタ値と、適宜キー値を含むデータ・エレメントとを含んで構成されている。
【００２３】
以下、図２および図３を参照して、データベース１２内のデータ構造を説明する。図２は、階層型データベースのデータ構造を示す。階層型データベース１００は、複数のセグメントを記録している。図２に示すセグメント１１０は、ルート部分を示すルート・アンカー・ポイント（ＲＡＰ；Root Anchor Point）１０２から指されており、ルートセグメントと呼ばれる。セグメント１１０は、接頭部とデータ部とから構成されており、接頭部には、セグメントのタイプを識別するセグメント・コード（ＳＣ；Segment Code）を保持するＳＣフィールド１１０ａ、そのセグメントが削除されているか否かを示す削除ビットと、そのセグメントがスプリットされているか否かを示すスプリット・ビットとを含む削除バイト（ＤＢ；Delete Byte）を保持するＤＢフィールド１１０ｂ、およびポインタ域フィールド１１０ｃを有している。データ部には、１以上のデータ・エレメントを収容するデータ・フィールド１１０ｄを有している。
【００２４】
セグメント１１０は、所定の保存先アドレスにて示される保存位置を開始点としてディスク上に保存されている。ここで、保存先アドレスとは、例えば、データベース１２の所定の基準アドレスと比較したセグメント１１０の先頭アドレスの位置、つまり相対バイトアドレス（ＲＢＡ；Relative Byte Address）をいう。図２に示すセグメント１１０のポインタ域フィールド１１０ｃには、それぞれセグメント１２０−１およびセグメント１２０−２など他のセグメントを指すポインタ値（保存先アドレス）を含んでいる。
【００２５】
通常、単一のセグメントの接頭部とデータ部とは、連続してディスク上に保存される。しかしながら、データベース管理システムは、可変長フォーマットにおいて、更新によりデータ部の長さが変更され、アロケートされたサイズを超えてしまう場合などには、セグメントを分割して、スプリット・セグメントを生成する。図２には、スプリット・セグメント１３０が示されている。セグメントを構成する接頭部１３２とデータ部１３４とは、ディスク上の離間した位置に保存されている。スプリット・セグメント１３０では、接頭部において、ＳＣフィールド１３２ａ、ＤＢフィールド１３４ｂおよびポインタ域フィールド１３２ｃの直後に、分割先のデータ部１３４の保存先アドレスを指すＶＬＳ（Variable Length Segment）ポインタ値を保持するＶＬＳポインタ・フィールド１３２ｄが付加されている。そして、データ部１３４は、ＳＣフィールド１３４ａ、ＤＢフィールド１３４ｂ、およびデータ・フィールド１３４ｃを含んで構成される。データ部１３４のＤＢフィールド１３４ｂは、分割先のデータ部であることを示す値が書き込まれている。
【００２６】
本実施形態のデータベース１２では、各セグメントの接頭部に記録されたポインタ値を辿ることにより、順次、他のセグメントにアクセスすることができる階層構造を構成しており、また各スプリット・セグメントの接頭部の直後に付されたＶＬＳポインタ値を辿ることにより、分割先のデータ部にアクセスすることができる構造を構成している。
【００２７】
セグメントが削除される場合、ＤＢＭＳは、セグメントのＤＢフィールド中の削除ビットの値を、削除を示す値（ＯＮ）に書き換えるか、またはセグメントの記憶領域をフリー・スペースとして開放して、削除を実施する。そして、上記スプリット・セグメント１３０が削除される場合、ＤＢＭＳは、スプリット・セグメント１３０の接頭部１３２については、削除を実施するが、接頭部が削除されていればデータ部には辿られないため、トランザクションのパフォーマンスを優先させる観点から、スプリット・セグメント１３０のデータ部１３４についてまで削除処理を実施しない場合がある。
【００２８】
図３は、索引が定義されるデータベースおよび該データベースに対し定義される索引データベースのデータ構造を一例として示す図である。図３には、索引付けされたデータベース（以下、索引付きデータベースとして参照する。）１４０と、該索引付きデータベース１４０に対して定義された索引データベース１５０とが示されている。図３は、索引を用いたセグメントのアクセス方法についても示す。
【００２９】
図３に示す索引付きデータベース１４０には、ルート・セグメントであるＣＯＵＲＳＥセグメント１４２、その従属セグメントであるＣＬＡＳＳセグメント１４４、さらにそれに従属するＩＮＳＴＲセグメント１４６およびＳＴＵＤＥＮＴセグメント１４８による階層構造が示されている。ここで、「ＣＯＵＲＳＥ」、「ＣＬＡＳＳ」、「ＩＮＳＴＲ」および「ＳＴＵＤＥＮＴ」は、セグメントのタイプを示し、それぞれ異なるセグメント・コードが割り当てられる。ここで、セグメント・コードは、各セグメントのタイプに割り当てられる番号である。また、例えば「ＣＬＡＳＳ」タイプのセグメントには、「Ｍａｔｈ」、「Ｃｈｅｍｉｓｔｒｙ」など、特定のセグメント・オカレンスが含まれている。図３に示す索引データベース１５０には、索引を構成するセグメント１５２−１〜３が示されている。
【００３０】
ＤＢＭＳは、索引を設けるために、インデックス・ソース・セグメント（ＩＳＳ：Index Source Segment）、インデックス・ターゲット・セグメント（ＩＴＳ：Index Target Segment）、およびインデックス・ポインタ・セグメント（ＩＰＳ；Index Pointer Segment）を定義付ける。図３に示すデータ構造では、ＣＵＲＳＥセグメント１４２がＩＴＳ、ＳＴＵＤＥＮＴセグメントがＩＳＳ、索引データベース１５０内のセグメント１５２−１〜３がＩＰＳとなる。
【００３１】
ＩＰＳ１５２は、その接頭部に、ＤＢフィールド１５２ａおよび索引ポインタ・フィールド１５２ｂを有し、そのデータ部に、検索のためのキー値を格納する索引キー・フィールド１５２ｃを有する。ＩＰＳ１５２の索引ポインタ・フィールド１５２ｂは、データベース１２を利用するアプリケーションが、索引付きデータベース１４０から取り出そうとしているセグメントを指す保存先アドレスを索引ポインタ値として保持する。ＩＰＳ１５２の索引キー・フィールド１５２ｃは、アプリケーションが呼び出し中に修飾子として使用する索引キー値を保持する。
【００３２】
なお、図３に示す例では、保存先アドレス（ＲＢＡ）を用いる直接ポインタにより索引付けする場合を例示しているが、シンボリック・ポインタを用いることもできる。その場合には、接頭部の索引ポインタ・フィールド１５２ｂの代わりに、取り出そうとしているセグメントを指すシンボリック・ポインタを保持する連結キー・フィールドをデータ部に含んでいてもよい。また、ＩＰＳ１５２のデータ部には、図３に示したもの以外の他のフィールドを適宜付加することもできる。なお、以下の説明では、保存先アドレス（ＲＢＡ）を用いる場合の実施形態を用いて説明する。
【００３３】
ＩＴＳは、索引対象となる索引付きデータベース１４０の中に存在し、アプリケーションが取り出す必要のあるセグメントであり、ＩＰＳが指すセグメントである。ＩＴＳは、保存先アドレスまたはシンボリック・ポインタを用いて直接アクセスされる。ＩＳＳも、索引対象となる索引付きデータベース１４０の中に存在し、ＩＰＳが持つ索引キー・フィールドに対応するフィールドを有している。索引付けにより、ＩＳＳのデータ部からキー値がコピーされて、ＩＰＳの索引キー・フィールドに置かれる。ＩＰＳ内の索引キー値によりＩＳＳとＩＰＳとが関連付けられ、ＩＰＳ内の索引ポインタ値によりＩＴＳとＩＰＳとが関連付けられ、これによりＩＳＳからＩＴＳへのチェインが張られる。
【００３４】
再び図１を参照すると、本発明の実施形態のデータベース管理装置１０は、整合性を検証するために、データベース１２を構成するセグメントを読み込んで、後述する各種ワークレコードを作成する読込部２０と、セグメントが含むポインタ値の整合性を検証するポインタ検証部２２と、セグメントが含むキー値の整合性を検証する索引キー検証部２４と、エラー出力部２６とを含んで構成される。各種ワークレコードは、データベース管理装置１０の主記憶装置やディスク装置などの記憶領域に格納されることとなる。
【００３５】
ポインタ検証部２２は、より具体的には、通常ポインタ検証部２８と、索引ポインタ検証部３０と、分割ポインタ検証部３２とを含んで構成される。通常ポインタ検証部２８は、索引付きデータベース１４０を含む検索対象となり得るデータベースにおいて、セグメント間のポインタの整合性を検証し、一方、分割ポインタ検証部３２は、スプリット・セグメントにおける接頭部−データ部間のポインタの整合性を検証する。索引ポインタ検証部３０は、上記索引付きデータベース１４０および上記索引データベース１５０間での索引ポインタの整合性を検証する。
【００３６】
上記読込部２０は、索引付きデータベース１４０を構成するセグメントを含むブロックを順次読み込んで、セグメントを識別し、有効なセグメントの保存先アドレスおよびセグメント・コードを含むワークレコード（以下、セグメント・レコードとして参照する。）を作成し、通常ポインタ検証部２８および索引ポインタ検証部３０へ渡す。また、読込部２０は、識別したセグメントから、そのセグメントの接頭部にあるポインタ域フィールドに保持されるポインタ値、および該ポインタ値が指すセグメント（以下、ポイント先セグメントとして参照する。）のセグメント・コードを含むワークレコード（以下、ポインタ・レコードとして参照する。）を作成し、通常ポインタ検証部２８へ渡す。通常ポインタ検証部２８は、渡された上記ワークレコードを用いてセグメント間のポインタの整合性を検証する。読込部２０は、さらに、セグメントがＩＳＳである場合には、そのセグメント・コード、およびデータ・フィールドに収容されるキー値を含むワークレコード（キー・レコードとして参照する。）を作成し、索引キー検証部２４へ渡す。
【００３７】
読込部２０は、さらに、読み込み処理中、ＯＮ状態のスプリット・ビットを検出することによって有効なスプリット・セグメントの接頭部を見つけると、対応するデータ部の保存位置を指すＶＬＳポインタ値およびセグメント・コードを含むワークレコード（以下、ＶＬＳポインタ・レコードとして参照する。）を作成し、分割ポインタ検証部３２へ渡す。また、読込部２０は、読み込み処理中、分割先のデータ部であることを示す値の削除バイトを検出することによってスプリット・セグメントのデータ部を見つけると、そのデータ部の保存先アドレス、セグメント・コード、および適宜データ部に収容されるキー値を含むワークレコード（以下、ＶＬＳセグメント・レコードとして参照する。）を作成し、分割ポインタ検証部３２へ渡す。分割ポインタ検証部３２は、渡された上記ワークレコードを用いて、スプリット・セグメントの接頭部およびデータ部間のＶＬＳポインタの整合性を検証する。分割ポインタ検証部３２は、整合性が認められ、且つ対応するセグメントがＩＳＳで有る場合には、ＶＬＳセグメント・レコードを索引キー検証部２４へ渡す。
【００３８】
索引データベース１５０が定義される場合には、読込部２０は、さらに、索引データベース１５０を構成するＩＰＳを含むブロックを順次読み込んで、ＩＰＳの検索ポインタ・フィールド内の索引ポインタ値を含むワークレコード（ＩＰＳポインタ・レコードとして参照する。）を作成し、索引ポインタ検証部３０へ渡す。また読込部２０は、ＩＰＳのキー・フィールド内の索引キー値を含むワークレコード（ＩＰＳキー・レコードとして参照する。）を作成し、索引ポインタ検証部３０へ渡す。索引ポインタ検証部３０は、渡されたワークレコードを用いて、上記索引付きデータベース１４０および上記索引データベース１５０間での索引ポインタの整合性を検証する。
【００３９】
索引キー検証部２４は、読込部２０から渡されたキー・レコード、および分割ポインタ検証部３２から渡されたＶＬＳセグメント・レコードを用いて、索引データベースおよび索引付きデータベース間での索引キー値の整合性を検証する。
【００４０】
上記通常ポインタ検証部２８、索引ポインタ検証部３０、分割ポインタ検証部３２、および索引キー検証部２４は、それぞれ不整合を検出すると、検出したエラーをエラー出力部２６へ通知する。エラー出力部２６は、通知されたエラーをまとめて、例えば図示しない所定の管理端末にレポートとして報告する。
【００４１】
以下、図４〜図９を参照して、階層型データベース、および該階層型データベースに対し定義される索引データベースの整合性検証機能の詳細について説明する。図４〜図６は、本発明の実施形態のデータベース管理装置１０が実行する整合性検証処理を示すフローチャートである。図４および図５は、ポイントＡにより、図５および図６は、ポイントＢにより、処理フローが連結されている。図４に示す処理は、例えば、図示しない管理端末からの整合性の検証処理の開始要求、または所与のスケジュールにより呼び出されて、ステップＳ１００から開始される。
【００４２】
読込部２０は、ステップＳ１０１では、索引付きデータベース１４０のブロックを読み込み、ステップＳ１０２では、読み込んだブロックからセグメントを識別する。ステップＳ１０３〜ステップＳ１１０の処理では、セグメントの種類に応じてワークレコードが作成される。図７は、図４に示したステップＳ１０３〜ステップＳ１１０によるワークレコードの作成処理を、用いるデータ構造とともに示す図である。図７には、通常のセグメント１２０、スプリット・セグメントの接頭部１３２、およびスプリット・セグメントのデータ部１３４が示されている。ステップＳ１０３では、削除ビットおよびスプリット・ビットを含む削除バイトの値を検査して、処理を分岐させる。
【００４３】
再び図４を参照すると、ステップＳ１０３で、識別されたセグメントが、スプリット・セグメントではない通常のセグメントである場合（非スプリット・セグメント）には、ステップＳ１０４へ処理が進められる。ステップＳ１０４では、識別されたセグメントのＤＢフィールド中の削除ビットの値が削除を示す値（ＯＮ）であるか、非削除を示す値（ＯＦＦ）であるかを判定する。ステップＳ１０４で、非削除を示す値（ＯＦＦ）であると判定された場合（ＹＥＳ）は、ステップＳ１０５へ処理を進める。ステップＳ１０５では、読込部２０は、セグメントの保存先アドレスを取得し、またセグメントを、セグメントの接頭部のポインタ域フィールドに含まれるポインタ値に分解し、セグメント・レコードおよびポインタ・レコードを作成し、通常ポインタ検証部２８および索引ポインタ検証部３０へ渡す。
【００４４】
ステップＳ１０６では、さらに、データベースの構造を定義するスキーマを参照して、セグメントがＩＳＳであるか否かを判定する。セグメントの索引付けは、セグメント・コードを指定することによって行われる。したがって、セグメントの接頭部にあるセグメント・コードを調べることにより、そのセグメントがＩＳＳであるか否かが判定される。
【００４５】
ステップＳ１０６で、ＩＳＳであると判定された場合（ＹＥＳ）には、ステップＳ１０７へ処理を進める。ステップＳ１０７では、読込部２０は、セグメントのデータ部のデータ・フィールドに含まれるキー値を取得し、キー・レコードを作成し、索引キー検証部２４へ渡し、ステップＳ１１２へ処理を進める。一方、ステップＳ１０４で、削除を示す値（ＯＮ）であると判定された場合（ＮＯ）には、直接ステップＳ１１２へ処理を進められる。またステップＳ１０６で、ＩＳＳではないと判定された場合（ＮＯ）にも、同様に、直接ステップＳ１１２へ処理を進められる。
【００４６】
図７に示すように、本発明の実施形態による読込部２０は、通常のセグメント１２０を識別して、その削除ビットが非削除を示す値（ＯＦＦ）である場合には、セグメント間のポインタの整合性を検証するために、その開始位置ＲＢＡおよびＳＣフィールドの値からセグメント・レコード１６０を作成し、またポインタ域フィールドの値からポインタ・レコード１６２を作成する。なお、ポイント先セグメントのセグメント・コードは、好適には、ポインタ域フィールドのデータ構造から求めることができる。さらに、読込部２０は、識別した通常のセグメント１２０がＩＳＳである場合には、ＳＣフィールドの値、およびデータ・フィールドに収容されるキー値を取得し、キー・レコード１６４を作成する。
【００４７】
図４を再び参照すると、ステップＳ１０３で、識別されたセグメントが、スプリット・セグメントの接頭部である場合には、ステップＳ１０８へ処理が進められる。ステップＳ１０８では、スプリット・セグメントの接頭部内のＤＢフィールドを読み、削除ビットの値が削除を示す値（ＯＮ）であるか、非削除を示す値（ＯＦＦ）であるかを判定する。ステップＳ１０８で、非削除を示す値（ＯＦＦ）であると判定された場合（ＹＥＳ）は、ステップＳ１０９へ進める。読込部２０は、ステップＳ１０９では、セグメントの接頭部のポインタ域フィールドに含まれるポインタ値に分解し、セグメント・レコードおよびポインタ・レコードを作成し、通常ポインタ検証部２８および索引ポインタ検証部３０へ渡す。さらに、ステップＳ１１０では、読込部２０は、ＶＬＳポインタ・フィールドに保持されるＶＬＳポインタ値を取得し、ＶＬＳポインタ・レコードを作成し、分割ポインタ検証部３２に渡し、ステップＳ１１２へ処理を進める。一方、ステップＳ１０８で、削除を示す値（ＯＮ）であると判定された場合（ＮＯ）には、直接ステップＳ１１２へ処理を進められる。
【００４８】
図７に示すように、読込部２０は、スプリット・セグメントの接頭部１３２を識別して、その削除ビットが非削除（ＯＦＦ）を示す場合には、その開始位置ＲＢＡおよびＳＣフィールドの値を取得し、セグメント・レコード１６０を作成し、またポインタ域フィールドの値を取得し、ポインタ・レコード１６２を作成する。加えて読込部２０は、スプリット・セグメントの接頭部１３２のＳＣフィールドおよびＶＬＳポインタ・フィールドの値を取得し、ＶＬＳポインタ・レコード１６６を作成する。
【００４９】
図４を再び参照すると、ステップＳ１０３で、識別されたセグメントが、スプリット・セグメントのデータ部である場合には、ステップＳ１１１へ処理が進められる。ステップＳ１１１では、読込部２０は、スプリット・セグメントのデータ部の保存先アドレス、ＳＣフィールド、データ・フィールドの値からＶＬＳセグメント・レコードを作成し、分割ポインタ検証部３２へ渡し、ステップＳ１１２へ処理を進める。
【００５０】
図７に示すように、読込部２０は、スプリット・セグメントのデータ部１３４を識別して、その開始位置ＲＢＡ、ＳＣフィールドの値、および適宜データ・フィールドが収容するキー値を取得し、ＶＬＳセグメント・レコード１６８を作成する。
【００５１】
図４を再び参照すると、ステップＳ１１２では、読込部２０は、当該ブロックの中に、次に処理すべきセグメントが残されているか否かを判定する。ステップＳ１１２で、次に処理すべきセグメントが存在する場合（ＹＥＳ）には、ステップＳ１０２へループさせ、次のセグメントの処理へ進める。一方、ステップＳ１１２で、次に処理すべきセグメントがない場合（ＮＯ）には、ステップＳ１１３へ処理を進める。
【００５２】
ステップＳ１１３では、読込部２０は、索引付きデータベース１４０に、次に処理すべきブロックが残されているか否かを判定する。ステップＳ１１３で、次に処理すべきブロックがある場合（ＹＥＳ）には、ステップＳ１０１へループさせ、次のブロックに対する処理へ進める。一方、ステップＳ１１３で、次に処理すべきセグメントがない場合（ＮＯ）には、ポイントＡへ処理を進める。
【００５３】
図５は、図４に示したポイントＡ以降の処理フローを示す。ステップＳ２００では、通常ポインタ検証部２８は、渡されたセグメント・レコード１６０およびポインタ・レコード１６２とを用いて、索引付きデータベース１４０内のセグメント間のポインタの整合性を検証する。本発明の実施形態では、セグメント間のポインタの整合性検証する手法としては、特に限定されるわけではないが、好適には、セグメント・レコード１６０およびポインタ・レコード１６２を、セグメント・コードおよび保存先アドレスの値をソートキーとしてソートマージし、ポインタ値とセグメンの開始ＲＢＡの値とを比較し、これらの値が一致する組合せが見つかり、かつセグメント・コードが一致すれば、ポインタの整合性が有りとし、一方、一致する組合せが存在しないこと、およびセグメント・コードが一致しないことをもって、ポインタの不整合を検出するという手法を使用することができる。なお、セグメント間のポインタ整合性の検証処理自体の具体的実装ついては、これ以上の詳細な説明は省略する。
【００５４】
ステップＳ２０１〜ステップＳ２１４の処理では、分割ポインタ検証部３２は、渡されたＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６とを用いて、スプリット・セグメントの接頭部−データ部間のＶＬＳポインタの整合性を検証する。本発明の実施形態では、接頭部−データ部間のＶＬＳポインタの整合性を検証する手法としては、好適には、ＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６を、セグメント・コードおよび保存先アドレスの値をソートキーとしてソートマージして、分割ポインタ値と分割先の開始ＲＢＡの値とを比較し、この値に一致する組合せが見つかり、かつセグメント・コードが一致すれば、ポインタの整合性があり、これに対して、一致する組合せが存在しないこと、およびセグメント・コードが一致しないことをもって、不整合を検出するという手法を使用することができる。また、その際には、ＶＬＳセグメント・レコード１６８に対応するＶＬＳポインタ・レコード１６６が存在しない場合には、そのスプリット・セグメントのデータ部がその接頭部において既に削除済みであるとして、エラーを報告せずに処理を進める。
【００５５】
以下、接頭部−データ部間の分割ポインタの整合性の検証処理について、より具体的に説明する。ステップＳ２０１では、分割ポインタ検証部３２は、ＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６を、それぞれＲＢＡおよびＳＣをソートキーとしてソートする。本実施形態では、ＲＢＡを主のソートキーとして、昇順にソートする。ステップＳ２０２では、ソートしたワークレコードの先頭の組合せから処理対象に設定する。ステップＳ２０３では、分割ポインタ検証部３２は、処理対象の組合せを突き合わせて、ＶＬＳセグメント・レコード１６８が保持するデータ部の保存先アドレスと、ＶＬＳポインタ・レコード１６６が保持するＶＬＳポインタ値とを比較する。
【００５６】
ステップＳ２０４では、突き合わせたデータ部の保存先アドレス（ＲＢＡ）とＶＬＳポインタ値（ＲＢＡ）とが一致するか否かを判定する。ステップＳ２０４で、ＲＢＡの値が一致する場合（ＹＥＳ）には、ステップＳ２０５へ処理を進める。ステップＳ２０５では、処理対象の組合せにおいてセグメント・コードが一致するか否かを判定する。ステップＳ２０５で、セグメント・コードの値が一致すると判定された場合（ＹＥＳ）には、ステップＳ２０６へ処理を進める。ステップＳ２０６では、データベースの構造を定義するスキーマを参照して、対応するスプリット・セグメントがＩＳＳであるか否かを判定する。ステップＳ２０６で、ＩＳＳであると判定された場合（ＹＥＳ）には、ステップＳ２０７へ処理を進める。
【００５７】
ステップＳ２０７では、分割ポインタ検証部３２は、処理対象のＶＬＳセグメント・レコードを索引キー検証部２４へ渡す。一方、ステップＳ２０６で、対応するスプリット・セグメントがＩＳＳではないと判定された場合（ＮＯ）には、直接ステップＳ２０８へ処理を進める。ステップＳ２０８では、ＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６を進めて、次ぎの組合せに処理対象を設定し、ステップＳ２１４へ処理を進める。ステップＳ２１４では、ＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６の処理対象の組合せが終端に達したか否かを判定する。ステップＳ２１４で、終端に達したと判定された場合（ＹＥＳ）には、ポイントＢへ処理を渡し、一方、終端に達していないと判定された場合（ＮＯ）には、ステップＳ２０３へ処理をループさせ、次の組合せの処理対象に対する突き合わせを実行する。
【００５８】
ステップＳ２０５で、セグメント・コードが不一致であった場合（ＮＯ）には、ステップＳ２０９へ処理を進める。ステップＳ２０９では、分割ポインタ検証部３２は、セグメント・コードが不一致であるとして、エラー出力部２６にその旨ポインタ・エラーを報告し、ステップＳ２０８へ処理を進め、ＶＬＳセグメント・レコード１６８およびＶＬＳポインタ・レコード１６６を進めて、次ぎの組合せに処理対象を設定し、ステップＳ２１４へ処理を進める。
【００５９】
一方、ステップＳ２０４で、ＲＢＡが不一致である場合（ＮＯ）には、ステップＳ２１０へ処理を進める。ステップＳ２１０では、ＶＬＳセグメント・レコード１６８側のＲＢＡの値が小さいか否かを判定する。ここでは、処理対象のＶＬＳセグメント・レコードに対応するＶＬＳポインタ・レコード１６６が存在するか否かを判定している。ステップＳ２１０で、ＶＬＳセグメント・レコード１６８側のＲＢＡの値が小さいと判定された場合（ＹＥＳ）、つまり、処理対象のＶＬＳセグメント・レコード１６８に対応するＶＬＳポインタ・レコード１６６が存在しないと判定された場合には、ステップＳ２１１へ処理を進める。ステップＳ２１１では、ＶＬＳセグメント・レコード１６８を進めて、次ぎの組合せへ処理対象を設定する。
【００６０】
一方、ステップＳ２１０で、ＶＬＳセグメント・レコード１６８側のＲＢＡの値が大きいと判定された場合（ＮＯ）には、ステップＳ２１２へ処理を進める。この場合、ステップＳ２１１では、分割ポインタ検証部３２は、ポインタが不整合であるとして、エラー出力部２６にその旨ポインタ・エラーを報告する。ステップＳ２１３では、ＶＬＳポインタ・レコード１６６を進めて次ぎの組合せへ処理対象を設定し、ステップＳ２１４へ処理を進める。
【００６１】
ステップＳ２０１〜ステップＳ２１４に示した処理により、各ＶＬＳセグメント・レコードに含まれるキー値のうち、ＶＬＳポインタの整合性が確認されたキー値のみが、索引キー検証部２４に渡されることとなる。
【００６２】
図６は、図５に示したポイントＢ以降の処理フローを示す。索引データベース１５０が定義される場合には、ステップＳ３００〜ステップＳ３０４の処理により、索引データベース１５０内のＩＰＳが読み込まれて、索引ポインタ値および索引キー値の整合性を検証するために、ワークレコードが作成される。
【００６３】
読込部２０は、ステップＳ３００では、索引データベース１５０のブロックを読み込み、ステップＳ３０１では、読み込んだブロックからＩＰＳを識別する。読込部２０は、ステップＳ３０２では、識別されたセグメントのＤＢフィールドを読み、削除ビットの値が非削除を示す値（ＯＦＦ）であれば、索引付きデータベース１４０および索引データベース１５０間の索引ポインタおよび索引キー値の整合性を検証するために、ＩＰＳポインタ・レコードおよびＩＰＳキー・レコードを作成し、それぞれ索引ポインタ検証部３０および索引キー検証部２４へ渡す。
【００６４】
図８は、図５に示したステップＳ３０２の処理によるワークレコードの作成処理を、用いるデータ構造とともに示す図である。図８に示すように、本発明の実施形態による読込部２０は、ＩＰＳ１５２を識別して、その削除ビットが非削除を示す値（ＯＦＦ）である場合には、索引ポインタの整合性を検証するために、そのポインタ・フィールドの値からＩＰＳポインタ・レコード１７０を作成し、またそのキー・フィールドの値からＩＰＳキー・レコード１７２を作成する。
【００６５】
再び図６を参照すると、ステップＳ３０３では、読込部２０は、当該ブロックの中に次に処理すべきＩＰＳが残されているか否かを判定する。ステップＳ３０３で、次に処理すべきＩＰＳが存在する場合（ＹＥＳ）には、ステップＳ３０１へループさせ、次のＩＰＳの処理へ進める。一方、ステップＳ３０３で、次に処理すべきＩＰＳがない場合（ＮＯ）には、ステップＳ３０４へ処理を進める。
【００６６】
ステップＳ３０４では、読込部２０は、索引付きデータベース１４０に、次に処理すべきブロックが残されているか否かを判定する。ステップＳ３０４で、次に処理すべきブロックがある場合（ＹＥＳ）には、ステップＳ３００へループさせ、次のブロックに対する処理へ進める。一方、ステップＳ３０４で、次に処理すべきセグメントがない場合（ＮＯ）には、ステップＳ３０５へ処理を進める。
【００６７】
ステップＳ３０５では、索引ポインタ検証部３０は、読込部２０から渡されたＩＰＳポインタ・レコード１７０と、セグメント・レコード１６０のうちＩＴＳに対応するレコードとを用いて、索引ポインタの整合性を検証する。本発明の実施形態では、索引ポインタの整合性検証する手法としては、特に限定されるわけではないが、好適には、ＩＰＳポインタ・レコード１７０と、ＩＴＳのセグメント・レコード１６０とを、保存先アドレスの値をソートキーとしてソートマージし、索引ポインタ値とセグメントの開始ＲＢＡの値とを比較し、これらの値が一致する組合せが見つかれば、ポインタの整合性がありとし、一致する組合せが存在しないことをもって、ポインタの不整合を検出するという手法を使用することができる。なお、索引ポインタ自体の整合性検証処理の具体的実装ついては、これ以上の詳細な説明は省略する。
【００６８】
ステップＳ３０６〜ステップＳ３１０の処理では、索引キー検証部２４は、図８に示すように、図４に示したステップＳ１０７の処理、および図５に示したステップＳ２０７の処理でそれぞれ渡されたキー・レコード１６４およびＶＬＳセグメント・レコード１６８を用いて、索引付きデータベース１４０および索引データベース１５０間の索引キー値の整合性を検証する。本発明の実施形態では、索引キー値の整合性を検証する手法としては、好適には、渡されたＶＬＳセグメント・レコード１６８およびキー・レコード１６４に含まれるキー値を比較し、この値に一致する組合せが見つかれば、ポインタの整合性があり、これに対して、一致する組合せが存在しないことをもって、不整合を検出するという手法を使用することができる。
【００６９】
以下、索引キー値の整合性の検証処理について、より具体的に説明する。ステップＳ３０６では、渡されたＶＬＳセグメント・レコード１６８およびキー・レコード１６４中のキー値を処理対象に設定する。ステップＳ３０７では、索引キー検証部２４は、処理対象のキー値と、ＩＰＳキー・レコード１７２に含まれる索引キー値とを順次比較する。ステップＳ３０８では、索引キー検証部２４は、一致するキー値がＩＰＳキー・レコード１７２中に処理対象に存在するか否かを判定する。ステップＳ３０８で、一致するキー値がＩＰＳキー・レコード１７２中に存在しないと判定された場合（ＮＯ）には、ステップＳ３０９へ処理を進める。ステップＳ３０９では、索引キー検証部２４は、索引キー値が不整合であるとして、その旨キー・エラーをエラー出力部２６に報告し、ステップＳ３１０へ処理を進める。
【００７０】
一方、ステップＳ３０８で、一致するキー値がＩＰＳキー・レコード中に存在すると判定された場合（ＹＥＳ）には、ステップＳ３１０へ処理を進める。ステップＳ３１０では、渡されたＶＬＳセグメント・レコードおよびキー・レコード中に、次に処理すべきキー値が残っているか否かを判定する。ステップＳ３１０で、次に処理すべきキー値が残っていると判定された場合（ＹＥＳ）には、ステップＳ３０６へループさせ、次のキー値に対する処理を進める。一方、ステップＳ３１０で、次に処理すべきキー値が残っていないと判定された場合（ＮＯ）には、ステップＳ３１１で処理を終了させる。
【００７１】
図９は、本発明の実施形態の整合性検証処理のうち、索引キー値の整合性を検証する処理を、用いるデータ構造とともに示す図である。図９には、ＩＴＳ１８０−１〜３、ＩＳＳであるスプリット・セグメントの接頭部１８２−１〜３、およびＩＳＳであるスプリット・セグメントのデータ部１８４−１〜４を含んで構成される索引付きデータベース１４０が示されている。ここで、データ部１８４−４は、ＤＢＭＳによるセグメントの際に、削除処理が実施されず残されたデータ部に対応する。また図９には、ＩＰＳ１８６−１〜３を含んで構成される索引データベース１５０が示されている。
【００７２】
図９に示す索引付きデータベース１４０が読み込まれると、ＶＬＳポインタ・レコードのセット１９０、およびＶＬＳセグメント・レコードのセット１９２が作成される。ＶＬＳポインタ・レコードのセット１９０およびＶＬＳセグメント・レコードのセット１９２がソートおよび突き合わせ処理されて、有効なペア１９４−１〜３と、削除済みレコード１９６と、その他、不整合レコードが特定される。本実施形態の索引キー検証処理では、そのうち有効なペア１９４のみが、有効キー値１９８−１〜３として索引データベース１５０内の索引キー値との整合性検証処理に渡される。引き続く索引キー値の整合性の検証処理では、削除済みにも関わらずエラー報告してしまうような不具合や、索引から削除されているべき索引キーを見逃してしまうような不具合が発生しない。すなわち、上述した実施形態の整合性検証処理では、スプリット・セグメントが存在する場合であっても、適切に索引キーの整合性の検証が実施可能となる。
【００７３】
なお、上述した実施形態における整合性検証処理では、セグメント間のポインタおよび分割ポインタの整合性を検証した後に、索引データベース１５０を読み込む構成としたが、その順序は特に限定されるものではなく、他の実施形態では、索引付きデータベース１４０の読み込みと連続して、索引データベース１５０を読み込む構成とすることもできる。さらに、他の実施形態では、階層型データベースに対し定義される索引データベースの整合性検証機能のみを実施する場合には、ＩＳＳやＩＴＳではないセグメントのワークレコードや、ポインタ・レコードの作成を省略することもできる。
【００７４】
図１０は、データベース管理装置１０のハードウェア構成を一例として示す。図１０は、データベース管理装置１０をメインフレーム５０などの汎用大型コンピュータを用いて構成する場合を例に説明する。メインフレーム５０は、少なくとも１つの中央処理装置５２と、主記憶装置５４と、記憶制御部５６と、チャンネル・サブシステム５８と、少なくとも１つの制御装置６０と、少なくとも１つの入出力デバイス６２ａ〜ｄとを含んで構成される。
【００７５】
主記憶装置５４は、入出力デバイス６２ａ〜ｄから入力されるデータおよびプログラムを記憶する。そして、主記憶装置５４は、中央処理装置５２およびチャンネル・サブシステム５８からアドレスの指定を受けると、そのアドレスに記憶しているデータを中央処理装置５２およびチャンネル・サブシステム５８へ送出する。主記憶装置５４は、記憶しているデータを高速に読書可能に構成されており、これにより、中央処理装置５２による高速演算処理が可能とされる。
【００７６】
中央処理装置５２は、メインフレーム５０の全体を制御し、例えば、オペレーティング・システム５３を動作させる。オペレーティング・システム５３は、メインフレーム５０におけるプログラムの実行および入出力処理を制御する。オペレーティング・システム５３は、中央処理装置５２上で動作する他のプログラムの実行を制御してもよい。例えば、本実施形態の整合性検証処理に対応するプログラムに加え、階層型データベースを管理するためのＤＢＭＳプログラムを実行することができる。また、オペレーティング・システム５３は、入出力デバイス６２ａ〜ｄのそれぞれにおけるデータ転送を制御することもできる。
【００７７】
記憶制御部５６は、双方向または単方向に通信可能なバス６４を介して中央処理装置５２に接続される。記憶制御部５６は、さらに、バス６６を経由して、主記憶装置５４に接続され、さらに、バス６８を経由して、チャンネル・サブシステム５８に接続される。記憶制御部５６は、例えば、中央処理装置５２またはチャンネル・サブシステム５８から受領したアクセス要求を一時的に格納し、所定のタイミングでアクセス要求を主記憶装置５４に送出する、所謂キューイング処理を行うことができる。
【００７８】
チャンネル・サブシステム５８は、それぞれ制御装置６０に対してデータ転送路７６を介して接続される。チャンネル・サブシステム５８は、入出力デバイス６２ａ〜ｄおよび主記憶装置５４間でのデータ転送を制御する。これにより、中央処理装置５２が入出力デバイス６２ａ〜ｄとの間で通信するための処理負荷が軽減されるため、中央処理装置５２による演算処理と、入出力デバイス６２ａ〜ｄによる入出力処理とを並列に実行させることができ、もって、メインフレーム５０を効率的に動作させることが可能となる。
【００７９】
また、チャンネル・サブシステム５８は、少なくとも１つのチャンネルパス７２により、入出力デバイス６２ａ〜ｄとのデータ転送を行う。それぞれのチャンネルパス７２は、チャンネル・サブシステム５８内に設けられたチャネル７４を有する。また、それぞれのチャンネルパス７２は、少なくとも１つの制御装置６０と、データ転送路７６とを有する。ここで、データ転送路７６は、例えば、ＥＳＣＯＮ（登録商標；Enterprise Systems Connection Architecture）に基づくシリアルリンクとすることができる。また、データ転送路７６は、ＥＳＣＯＮ（登録商標）に代えて、またはＥＳＣＯＮ（登録商標）に加えて、パラレルＯＥＭＩであってもよいし、ＦＩＣＯＮ（登録商標；FIbre Connection）であってもよい。
【００８０】
制御装置６０は、バス７８を介して入出力デバイス６２ａ〜ｄの少なくとも１つに接続し、入出力デバイス６２ａ〜ｄの少なくとも１つを制御する。制御装置６０は、入出力デバイス６２ａ〜ｄのそれぞれにおけるデータ転送のタイミングを制御することができる。
【００８１】
入出力デバイス６２ａ〜ｄのそれぞれは、制御装置６０、チャンネル・サブシステム５８、および記憶制御部５６を順次経由して、主記憶装置５４との間でデータ転送を行う。ここで、入出力デバイス６２ａは、具体的には、磁気テープドライブであり、入出力デバイス６２ｂ〜ｄは、ハードディスクドライブである。これに代えて、またはこれに加えて、入出力デバイス６２ａ〜ｄのそれぞれは、パンチカードリーダ、ディスプレイ装置、キーボード、プリンタ、通信デバイス、各種センサ、またはその他の記憶装置であってもよい。入出力デバイス６２のいずれか１つは、データベース１２と接続され、アクセス制御を行うことができる。
【００８２】
なお、上述までは、データベース管理装置１０は、メインフレーム５０として構成される場合を例として説明してきた。しかしながら、データベース管理装置１０は、その他、ミッドレンジ・コンピュータ、ワークステーション、パーソナル・コンピュータなどとして構成することもできる。
【００８３】
以上説明したように、本発明の実施形態によれば、データベース中に分割されたセグメント（スプリット・セグメント）が存在する場合であっても、階層型データベースの索引（索引データベース）について、正しくキー情報の不整合を検出可能な整合性検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体が提供される。
【００８４】
上述したように、本発明の実施形態の構成によれば、セグメントが削除されたにもかかわらずそのデータ部を検出してしまった場合にも、その削除が正しく検知され、有効なキー情報のみが後続する索引キー情報の整合性を検証する処理に渡されることとなり、ひいては、スプリット・セグメントがデータベース中に存在する場合であっても、索引付きデータベース１４０に対して定義される索引データベース１５０において、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により発生し得る索引キー値の不整合を好適に検出することが可能となる。したがって、ＤＢＭＳは、スプリット・セグメントを削除する際に、不整合の検証処理可能にその分割先データ部を残すことができ、トランザクションのパフォーマンスの低下を好適に防止することができる。
【００８５】
スプリット・セグメントに対応させて索引データベースの整合性を検証する処理としては、例えば、読み込み処理中、分割されたＩＳＳの接頭部のＶＬＳポインタ、および分割されたＩＳＳのデータ部の保存先アドレスをメモリ上に確保したテーブルに別途それぞれコピーし、後にＶＬＳポインタに一致する保存先アドレスを検索し、一致するものが見つかった場合にのみ、キー検証処理の対象とするという手法が考えられる。しかしながら、このメモリ上にテーブル展開する手法は、メモリ領域に関して限界を有し、スプリット・セグメントが数百万件となるケースでは、処理すべき索引付きデータベースおよび索引データベースが複数になると、さらに必要なメモリ領域が増大してしまい、大きな問題となる可能性がある。
【００８６】
これに対して、本発明の実施形態によれば、スプリット・セグメントにおける接頭部−データ部間のＶＬＳポインタ情報の整合性を検証するために用意されるＶＬＳセグメント・レコード中に、データ部に収容されるキー情報を含ませるのみで、削除済みのスプリット・セグメントのデータ部を正しく検出することが可能となる。そのため、スプリット・セグメントに対応するために確保しなければならない記憶領域の増加を、最小限に抑えることが可能とされる。
【００８７】
さらに本発明の実施形態によれば、ＶＬＳセグメント・レコードおよびＶＬＳポインタ・レコードをソートして、突き合わせ処理するという、ＶＬＳポインタ情報の不整合を検出するためのロジックを利用して、検証処理に渡すべき有効なキー情報を判定しているため、削除済みであるか否かを別途調査する上記メモリ上にテーブル展開する手法と比較しても、テーブル検索やテーブルへのコピーなど、有効キーの判定のための余分なロジックを付加する必要がないという利点も備えているといえる。
【００８８】
なお、本発明につき、発明の理解を容易にするために各機能部および各機能部の処理を記述したが、本発明は、上述した特定の機能部が特定の処理を実行する外、処理効率や実装上のプログラミングなどの効率を考慮して、いかなる機能部に、上述した処理を実行するための機能を割当てることができる。
【００８９】
本発明の上記機能は、アセンブラ、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｊａｖａ（登録商標）Ｂｅａｎｓ、Ｊａｖａ（登録商標）Ａｐｐｌｅｔ、Ｊａｖａ（登録商標）Ｓｃｒｉｐｔ、Ｐｅｒｌ、Ｒｕｂｙなどのレガシープログラミング言語またはオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、装置可読な記録媒体に格納して頒布または伝送して頒布することができる。
【００９０】
これまで本発明を、特定の実施形態をもって説明してきたが、本発明は、実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施形態におけるデータベース管理装置の機能ブロック図。
【図２】階層型データベースのデータ構造を示す図。
【図３】索引データベースおよび該データベースに対し定義される索引データベースのデータ構造を一例として示す図。
【図４】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート（ポイントＡまでの処理フロー）。
【図５】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート（ポイントＡからポイントＢまでの処理フロー）。
【図６】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート（ポイントＢ以降の処理フロー）。
【図７】ワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図８】索引に関するワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図９】本発明の実施形態の整合性検証処理のうち、索引キー値の整合性を検証する処理を、用いるデータ構造とともに示す図。
【図１０】データベース管理装置のハードウェア構成を一例として示す図。
【符号の説明】
【００９２】
１０…データベース管理装置、１２…データベース、２０…読込部、２２…ポインタ検証部、２４…索引キー検証部、２６…エラー出力部、２８…通常ポインタ検証部、３０…索引ポインタ検証部、３２…分割ポインタ検証部、５０…メインフレーム、５２…中央処理装置、５３…オペレーティング・システム、５４…主記憶装置、５６…記憶制御部、５８…チャンネル・サブシステム、６０…制御装置、６２…入出力デバイス、６４，６６，６８，７８…バス、７２…チャンネルパス、７４…チャネル、７６…データ転送路、１００…階層型データベース、１０２…ＲＡＰ、１１０…セグメント、１１０ａ…ＳＣフィールド、１１０ｂ…ＤＢフィールド、１１０ｃ…ポインタ域フィールド、１１０ｄ…データ・フィールド、１２０…セグメント、１３０…スプリット・セグメント、１３２…接頭部、１３２ａ…ＳＣフィールド、１３２ｂ…ＤＢフィールド、１３２ｃ…ポインタ域フィールド、１３２ｄ…ＶＬＳポインタ・フィールド、１３４…データ部、１３４ａ…ＳＣフィールド、１３４ｂ…ＤＢフィールド、１３４ｃ…データ・フィールド、１４２，１４４，１４６，１４８…セグメント、１５０…索引データベース、１５２…ＩＰＳ、１５２ａ…ＤＢフィールド、１５２ｂ…索引ポインタ・フィールド、１５２ｃ…索引キー・フィールド、１６０…セグメント・レコード、１６２…ポインタ・レコード、１６４…キー・レコード、１６６…ＶＬＳポインタ・レコード、１６８…ＶＬＳセグメント・レコード、１７０…ＩＰＳポインタ・レコード、１７２…ＩＰＳキー・レコード、１８０…ＩＴＳ、１８２…接頭部、１８４…データ部、１８６…ＩＰＳ、１９０…ＶＬＳポインタ・レコード・セット、１９２…ＶＬＳセグメント・レコード・セット、１９４…有効ペア、１９６…削除済みレコード、１９８…有効キー
【図１】
2010066793.tif 000003
【図２】
2010066793.tif 000004
【図３】
2010066793.tif 000005
【図４】
2010066793.tif 000006
【図５】
2010066793.tif 000007
【図６】
2010066793.tif 000008
【図７】
2010066793.tif 000009
【図８】
2010066793.tif 000010
【図９】
2010066793.tif 000011
【図１０】
2010066793.tif 000012