(57)【要約】【課題】  階層型データベースの整合性の検証処理を実行すること。【解決手段】  本発明の情報処理装置１００は、階層型データベース１１０内のセグメントにつき、該セグメントを指す基点を識別する基点識別値を算出する算出部１３０と、階層型データベース１１０内に格納された基点を取得して、該基点が保持するポインタ情報に、該基点の格納位置から求められる第１の基点識別値を関連付けて、ポインタ・レコードを作成する基点レコード作成部１２２と、階層型データベース１１０内に格納されたセグメントを取得して、該セグメントの保存アドレスに、前記算出部に関連して第２の基点識別値を与える検証データを関連付けて、セグメント・レコードを作成するデータ・レコード作成部１２４と、セグメント・レコードおよびポインタ・レコードを比較して、階層型データベース内に形成される基点からセグメントへの連鎖の整合性を検証する検証部１４０とを含む。【選択図】図１
2010257226.tif 000002
【特許請求の範囲】
【請求項１】
階層型データベースを検証する情報処理装置であって、
前記階層型データベース内のセグメントに対し、該セグメントを指す基点を識別する基点識別値を算出する算出部と、
前記階層型データベース内に格納された基点を取得して、該基点が保持するポインタ情報に、該基点の格納位置から求められる第１の基点識別値を関連付けて、ポインタ・レコードを作成する基点レコード作成部と、
前記階層型データベース内に格納されたセグメントを取得して、該セグメントの保存アドレスに、前記算出部に関連して第２の基点識別値を与える検証データを関連付けて、セグメント・レコードを作成するデータ・レコード作成部と、
前記セグメント・レコードおよび前記ポインタ・レコードを比較して、前記階層型データベース内に形成される基点からセグメントへの連鎖の整合性を検証する検証部と
を含む、情報処理装置。
【請求項２】
前記データ・レコード作成部は、取得した前記セグメントが保持する兄弟セグメントを指すポインタ情報に、前記算出部に関連して前記第２の基点識別値を与える前記検証データを関連付けて、第２のポインタ・レコードを作成する、請求項１に記載の情報処理装置。
【請求項３】
前記データ・レコード作成部は、前記セグメント・レコードおよび前記第２のポインタ・レコードに、取得した前記セグメントが保持するキー値を関連付ける、請求項２に記載の情報処理装置。
【請求項４】
前記検証部は、作成された前記セグメント・レコードおよび前記ポインタ・レコードをソートして、突き合わせ処理することにより、前記連鎖の不整合を検出する、請求項３に記載の情報処理装置。
【請求項５】
前記検証部は、前記保存アドレスおよび前記ポインタ情報が一致する前記セグメント・レコードおよび前記ポインタ・レコードについて、基点識別値に不一致を見出した場合に、前記連鎖の不整合と判定する、請求項４に記載の情報処理装置。
【請求項６】
前記検証部は、前記保存アドレスおよび前記ポインタ情報が一致する前記セグメント・レコードおよび前記ポインタ・レコードについて、キー値の大小関係に矛盾を見出した場合に、前記連鎖の不整合と判定する、請求項５に記載の情報処理装置。
【請求項７】
前記データ・レコード作成部は、取得した前記セグメントが保持するキー値を与え前記算出部を呼び出し、前記第２の基点識別値を算出させ、算出された前記第２の基点識別値そのものを前記検証データとして関連付けて、前記セグメント・レコードおよび前記第２のポインタ・レコードを作成する、請求項２に記載の情報処理装置。
【請求項８】
前記データ・レコード作成部は、取得した前記セグメントが保持するキー値を前記検証データとして関連付けて、前記セグメント・レコードおよび前記第２のポインタ・レコードを作成し、前記検証部は、比較の前に、前記セグメント・レコードまたは前記第２のポインタ・レコードに含まれるキー値を与え前記算出部を呼び出して、前記第２の基点識別値を算出させる、請求項２に記載の情報処理装置。
【請求項９】
前記基点識別値は、基点を格納する単位記憶領域を識別する識別値と、前記単位記憶領域内での該基点の序列を識別する識別値とから導出される値である、請求項１に記載の情報処理装置。
【請求項１０】
前記連鎖を構成するセグメントは、ルートセグメントであり、前記基点は、ルート・アンカー・ポイントである、請求項１に記載の情報処理装置。
【請求項１１】
階層型データベースを検証する方法であって、情報処理装置が、
前記階層型データベース内に格納された基点を取得して、該基点が保持するポインタ情報に、該基点の格納位置から求められる第１の基点識別値を関連付けて、ポインタ・レコードを作成するステップと、
前記階層型データベース内に格納されたセグメントを取得して、取得された前記セグメントの保存アドレスに、前記階層型データベース内のセグメントに対し該セグメントを指す基点を識別する基点識別値を算出する算出モジュールに関連して第２の基点識別値を与える検証データを関連付けて、セグメント・レコードを作成するステップと、
前記セグメント・レコードおよび前記ポインタ・レコードを比較して、前記階層型データベース内に形成される基点からセグメントへの連鎖の整合性を検証するステップと
を実行する、情報処理方法。
【請求項１２】
取得した前記セグメントが保持する兄弟セグメントを指すポインタ情報に、前記第２の基点識別値を与える前記検証データを関連付けて、第２のポインタ・レコードを作成するステップをさらに含む、請求項１１に記載の情報処理方法。
【請求項１３】
前記セグメント・レコードを作成するステップでは、前記セグメント・レコードに、取得した前記セグメントが保持するキー値を関連付け、
前記第２のポインタ・レコードを作成するステップでは、前記第２のポインタ・レコードに、取得した前記セグメントが保持するキー値を関連付ける、請求項１２に記載の情報処理方法。
【請求項１４】
前記検証するステップでは、作成された前記セグメント・レコードおよび前記ポインタ・レコードをソートして、突き合わせ処理することにより、前記連鎖の不整合を検出する、請求項１３に記載の情報処理方法。
【請求項１５】
前記セグメント・レコードを作成するステップでは、取得した前記セグメントが保持する前記キー値を与え前記算出モジュールを呼び出し、前記第２の基点識別値を算出させ、算出された前記第２の基点識別値そのものを前記検証データとして関連付けて、前記セグメント・レコードを作成する、請求項１１に記載の情報処理方法。
【請求項１６】
前記セグメント・レコードを作成するステップでは、取得した前記セグメントが保持する前記キー値を前記検証データとして関連付けて、前記セグメント・レコードを作成し、前記整合性を検証するステップでは、比較の前に、前記セグメント・レコードに含まれるキー値を与え前記算出モジュールを呼び出して、前記第２の基点識別値を算出させる、請求項１１に記載の情報処理方法。
【請求項１７】
階層型データベースを検証するためのコンピュータ実行可能なプログラムであって、
前記階層型データベース内のセグメントに対し、該セグメントを指す基点を識別する基点識別値を算出する算出部、
前記階層型データベース内に格納された基点を取得して、該基点が保持するポインタ情報に、該基点の格納位置から求められる第１の基点識別値を関連付けて、ポインタ・レコードを作成する基点レコード作成部、
前記階層型データベース内に格納されたセグメントを取得して、該セグメントの保存アドレスに、前記算出部に関連して第２の基点識別値を与える検証データを関連付けて、セグメント・レコードを作成するデータ・レコード作成部、および
前記セグメント・レコードおよび前記ポインタ・レコードを比較して、前記階層型データベース内に形成される基点からセグメントへの連鎖の整合性を検証する検証部
をコンピュータに実現するためのコンピュータ実行可能なプログラム。
【請求項１８】
請求項１７に記載のコンピュータ実行可能なプログラムを格納するコンピュータ可読な記録媒体。
【請求項１９】
階層型データベースを検証する情報処理装置であって、
前記階層型データベース内のセグメントにつき、該セグメントを指す基点を識別する基点識別値を算出する算出部と、
前記階層型データベース内に格納された基点を取得して、該基点が保持するポインタ情報に、基点を格納する単位記憶領域を識別する識別値と、前記単位記憶領域内での該基点の序列を識別する識別値とから導出される第１の基点識別値を関連付けて、ポインタ・レコードを作成する基点レコード作成部と、
前記階層型データベース内に格納されたセグメントを取得して、取得した前記セグメントが保持するキー値を与え前記算出部を呼び出し、第２の基点識別値を算出させ、該セグメントの保存アドレス、および前記セグメントが保持する兄弟セグメントを指すポインタ情報に、それぞれ、算出させた前記第２の基点識別値と、取得した前記セグメントが保持するキー値とを関連付けて、セグメント・レコードおよび第２のポインタ・レコードを作成するデータ・レコード作成部と、
前記セグメント・レコードおよび前記ポインタ・レコードをソートし、突き合わせて比較することにより、前記階層型データベース内に形成される基点からセグメントへの連鎖の整合性を検証する検証部と
を含み、
前記検証部は、前記保存アドレスおよび前記ポインタ情報が対応する前記セグメント・レコードおよび前記ポインタ・レコードについて、基点識別値に不一致を見出した場合に、前記連鎖の不整合と判定し、また前記保存アドレスおよび前記ポインタ情報が対応する前記セグメント・レコードおよび前記ポインタ・レコードについて、キー値の大小関係に矛盾を見出した場合に、前記連鎖の不整合と判定し、前記連鎖を構成するセグメントは、ルートセグメントであり、前記基点は、ルート・アンカー・ポイントである、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに関連する整合性を検証する処理に関し、より詳細には、階層型データベースの整合性の検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
階層型データベース・システムは、必要資源が少なく、高速で、かつ応答時間の見積り精度が高いことから、高い信頼性、可用性、処理速度および容量が要求される用途に好適に用いられている。階層型データベース・システム（例えば、ＩＢＭ（登録商標）ＩＭＳ  ＤＬ／Ｉ）は、各々のデータ・エレメントをツリー構造で管理している。この階層型データベースにおいて、最小のデータ単位をセグメント・オカレンス（以下、単にセグメントとして参照する。）と呼び、ツリー構造の最上位に位置するセグメントをルートセグメントと呼ぶ。ルートセグメントは、従属セグメントを有し、その従属セグメントは、さらに従属セグメントを有することができる。このようなルートセグメントを頂点としたツリーの集合により、階層型データベースが構成される。
【０００３】
階層型データベースは、そのデータベース内のセグメントのツリー構造を維持する手法に応じて、主として順次アクセス方式および直接アクセス方式に分類することができる。順次アクセス方式では、セグメントのツリー構造は、相互に物理的隣接の保管場所にセグメントを入れることによって維持される。これに対して、直接アクセス方式では、セグメントがポインタでお互いを指し合うことによって、データベースの内のセグメントのツリー構造が維持される。
【０００４】
直接アクセス方式の階層型データベースにおいて、セグメントは、それぞれ、そのセグメントに関連付けられる他のセグメントを指し示すポインタが収容される接頭部と、アプリケーション・プログラム等が処理するデータである１以上のデータ・エレメントが収容されるデータ部とを含む。接頭部のポインタは、より具体的には、関連付けられるセグメントの保存先アドレスを示す相対バイトアドレス（ＲＢＡ：Relative Byte Address）値が用いられる。そして、ルートセグメントから順次ポインタを辿ることにより、所定のセグメントへアクセスすることができる。
【０００５】
階層データベースには、上述のようなポインタが数多く存在し、これらの整合性を維持することは必須である。しかしながら、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により、ポインタに不整合が生じる場合がある。そこで、階層型データベースでは、ポインタの整合性を検証するポインタチェック・プログラムを定期的に実行している。
【０００６】
このような、ポインタチェック・プログラムとしては、例えば、ＩＢＭ（登録商標）  ＩＭＳ  Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｐｏｉｎｔｅｒ  Ｃｈｅｃｋｅｒを挙げることができる。このポインタチェック・プログラムは、データベース管理システム（以下、ＤＢＭＳと参照する。）とは独立にポインタの整合性の検証処理を実行する（非特許文献１）。ポインタの整合性の検証処理は、データベース内のポインタのチェインを辿って読み込むのではなく、ディスク上のデータの先頭から順次読み込んで、スキャンし、全セグメントの保存先アドレスと、そのセグメントを指すポインタ値とを抽出する。そして、これらの２種類の値を比較することにより、ポインタ値の不整合を検出する。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】”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>
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記非特許文献１に記載される従来技術のポインタチェック・プログラムを用いれば、ルートセグメントを頂点としたツリー構造内のポインタ整合性を検証することが可能とされる。しかしながら、上記従来技術のポインタチェック・プログラムでは、以下に説明するように、ツリー構造の頂点となるルートセグメントをデータベース内でチェインするポインタが、正しく関連づけられているかどうかを検証することができない場合があり、従来では問題となっていた。
【０００９】
図１２は、階層型データベースにおいて、チェインされる一連のルートセグメントを示す概略図である。図１２に示すように、階層型データベース５００において、各ルートセグメントは、複数のブロック５１０ａ〜５１０ｅにわたって記録される。また、図１２に示すように、各ブロック５１０には、それぞれ所定のルートセグメントを指す１以上のＲＡＰ（Root Anchor Point）５２０が作成される。
【００１０】
ランダム化モジュールを用いてルートセグメントにアクセスする場合、ルートセグメントがチェインされるＲＡＰは、ランダム化モジュールによって決定される。このＲＡＰは、作成されるブロックの相対ブロック番号と、ブロック内での序数を示すＲＡＰ番号とにより識別される。ルートセグメントがデータベース内に保管される場合、ルートセグメントのキー・フィールドに収容されるキー値に応じて、ランダム化モジュールがそのルートセグメントをチェインするＲＡＰを決定する。そして、決定されたＲＡＰ内に、そのルートセグメントのＲＢＡ値が格納され、同期点処理（ＳＹＮＣ）により更新が確定される。一方、所望のキー値を有するルートセグメントを参照しようとする場合には、ランダム化モジュールにキー値を渡し、キー値から特定される相対ブロック番号のブロックを読み出し、該ブロック内のＲＡＰ番号で特定されるＲＡＰを基点としたチェインを辿り、目的のルートセグメントを参照する。
【００１１】
ランダム化モジュールは、ハッシュ関数等の所定の数学アルゴリズムに従って、キー値から相対ブロック番号およびＲＡＰ番号へ変換している。このため、図１２に示すように、複数のルートセグメントが単一のＲＡＰからチェインされる場合がある。このようなチェインは、シノニム・チェイン（Synonym Chain）と呼ばれる。
【００１２】
図１２に示す例では、ＲＡＰ５２０からルートセグメントＡ５３０、ルートセグメントＢ５４０およびルートセグメントＣ５５０へ、シノニム・チェインが張られている。この場合、ＲＡＰ５２０は、一番始めに作成されたルートセグメントＡの保存先アドレス（ＲＢＡ値）を保持し、次のルートセグメントＢ５４０の保存先アドレスは、ルートセグメントＡ５３０の接頭部５３２のポインタ域フィールド５３２ａに設けられた物理兄弟順方向（Physical Twin Forward：ＰＴＦ）ポインタ５３６に収容される。同様にルートセグメントＣ５５０の保存先アドレスは、ルートセグメントＢ５４０のＰＴＦポインタ５４６に収容される。またこの際に、ルートセグメントのキー値の順序に対応してシノニム・チェインが形成される。
【００１３】
上述したように、特定のＲＡＰを基点としてチェインを辿ることによってルートセグメントへのアクセスがなされるため、ルートセグメントは、正しい相対ブロック番号およびＲＡＰ番号のＲＡＰからチェインされていなければならない。しかしながら、ルートセグメントを保管する際に、ＤＢＭＳやデータベース作成ユーティリティなどのプログラムエラーや、ランダム化モジュールのエラーが発生し、ルートセグメントが不正なＲＡＰからチェインされてしまう可能性がある。また、ランダム化モジュールは、特定のデータベースに応じてユーザによりカスタマイズすることができるが、オペレーションミスなどにより、一時的に誤ったランダム化モジュールが使用されてしまう可能性もある。
【００１４】
ルートセグメントが誤ったＲＡＰからチェインされてしまうと、その誤ってチェインされたルートセグメントに辿りつくことができなくなってしまう。また、ルートセグメントのキー値の順序に対応してシノニム・チェインが形成されていなければならないという制約が有る場合もある。
【００１５】
非特許文献１の従来のポインタチェック・プログラムでは、階層型データベース内において、ルートセグメントが正しいＲＡＰからチェインされているか否かを検証することができず、また、シノニム・チェインにおけるルートセグメントのキー値の順序に対する制約にも対応できるものではなかった。したがって、このＲＡＰを基点としたルートセグメントへのポインタ・チェインの整合性を検証することが可能な技術の開発が依然として望まれていた。
【００１６】
本発明は、上記従来技術における問題点に鑑みてなされたものであり、本発明は、階層型データベース内に形成される基点からセグメントへの一連のチェイン（連鎖）の整合性を、効率的に検証することが可能な情報処理装置、情報処理方法、プログラムおよび記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明は、上記従来技術の不都合に鑑みてなされたものであり、本発明では、階層型データベース内に格納された基点を取得して、この基点が保持するポインタ情報に、その記憶位置から求められる第１の基点識別値を関連付けて、ポインタ・レコードを作成する。さらに、階層型データベース内に格納されたセグメントを取得して、取得されたセグメントを指すべき基点を識別する第２の基点識別値（セグメントが属する本来の基点の基点識別値）を与える検証データを、このセグメントの保存アドレスに関連付けて、セグメント・レコードを作成する。この検証データは、上記ランダム化モジュールなどの算出部に関連して上記第２の基点識別値を与えるものである。そして、作成されたセグメント・レコードおよびポインタ・レコードを比較することによって、階層型データベース内に形成される基点からセグメントへのチェイン（連鎖）の整合性を検証する。
【００１８】
本発明の上記構成によれば、格納位置から求められる第１の基点識別値と、上記ランダム化モジュールなどの算出部に関連して第２の基点識別値を与える検証データとが、比較するワークレコードに付属させられているため、所定のセグメントが、正しい基点からチェインされたものであるか否かを判断することが可能となる。
【００１９】
また本発明では、上記取得したセグメントが保持する兄弟セグメントを指すポインタ情報に、上記ランダム化モジュールなどの算出部に関連して第２の基点識別値を与える検証データを関連付けて、さらに、第２のポインタ・レコードを作成することができる。この場合に、保存アドレスおよびポインタ情報が一致するセグメント・レコードおよびポインタ・レコードについて、基点識別値に不一致を見出した場合に、上記チェインの不整合と判定することができる。
【００２０】
上記構成によれば、セグメントについて作成されるポインタ・レコードとセグメント・レコードとの両方に基点識別値が関連付けられているため、ポインタによりチェインされる兄弟セグメントの二者間における基点識別値の整合性を検証することができ、ひいては基点からセグメントへの一連のチェイン全体の整合性を検証することが可能となる。
【００２１】
また本発明では、セグメント・レコードおよび第２のポインタ・レコードに、取得したセグメントが保持するキー値を関連付けることができる。この場合、保存アドレスおよびポインタ情報が一致するセグメント・レコードおよびポインタ・レコードについて、キー値の大小関係に矛盾を見出した場合に、チェインの不整合と判定することができる。ここで、キー値の大小関係が矛盾する場合とは、ポイント元からポイント先へとキー値が昇順となるべき場合には、セグメント・レコードのキー値が、ポイン・レコードのキー値より小さい場合であり、逆に降順となるべき場合には、セグメント・レコードのキー値が、ポイン・レコードのキー値より大きい場合に対応する。
【００２２】
上記構成によれば、セグメントについて作成されるポインタ・レコードとセグメント・レコードとの両方にキー値が付属させられるため、セグメントと他の兄弟セグメントとの間のチェインにおけるキー値の整合性を検証することが可能となり、ひいては、階層型データベース内に形成される基点からセグメントへのチェインの完全性が検証可能となる。
【００２３】
また本発明では、取得したセグメントが保持するキー値を与え算出部を呼び出し、第２の基点識別値を算出させ、算出された第２の基点識別値そのものを上記検証データとして関連付けて、セグメント・レコードおよび第２のポインタ・レコードを作成することができる。あるいは、取得したセグメントが保持するキー値を検証データとして関連付けて、セグメント・レコードおよび第２のポインタ・レコードを作成することができる。この場合、比較の前に、セグメント・レコードまたは第２のポインタ・レコードに含まれるキー値を与え算出部を呼び出して、第２の基点識別値を算出させ、これにより整合性を検証することができる。セグメント・レコードおよび第２のポインタ・レコードに、取得したセグメントが保持するキー値を関連付ける場合には、キー値から基点識別値が導出可能であるため、キー値を上記検証データとして活用することができる。この構成によれば、データベースを読み込む処理中に算出部を呼び出さなくとも良いため、データベースの読み込み処理の総所要時間を低減することができ、またワークレコードのサイズを減少させることが可能となる。
【００２４】
さらに本発明では、上記セグメント・レコードおよびポインタ・レコードをソートして、突き合わせ処理することにより、チェインの不整合を検出することができる。上記構成によれば、階層型データベースに関連する他のポインタ値の整合性を検証するためのロジックを利用して、基点からセグメントへのチェインの整合性を検証可能であるため、余分なロジックを付加する必要がないという利点も備えているものといえる。
【００２５】
また本発明では、上記基点識別値としては、基点を格納する単位記憶領域を識別する識別値と、この単位記憶領域内での該基点の序列を識別する識別値とから導出される値を用いることができる。また本発明では、検証対象であるチェインを構成するセグメントは、ルートセグメントであり、上記基点は、ルート・アンカー・ポイントとすることができる。さらに本発明では、階層型データベース内に形成される基点からセグメントへのチェインの整合性を検証する処理を、データベース管理システムとは別の階層型データベースにアクセス可能な情報処理装置上に実現することができる。あるいは、階層型データベース内に形成される基点からセグメントへのチェインの整合性を検証する処理を実装する情報処理装置上に、階層型データベースを管理するデータベース管理システムをさらに含むこともできる。さらに本発明によれば、上記特徴を有する情報処理方法、プログラムおよび記録媒体が提供される。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施形態によるデータベース管理装置上に実現される機能ブロックを示す図。
【図２】本発明の実施形態におけるデータベース内のデータ構造を示す図。
【図３】本実施形態のデータベースに関連するデータ構造の詳細を示す図。
【図４】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート（１／２）。
【図５】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート（２／２）。
【図６】ワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図７】本発明の実施形態の整合性検証処理の一連の流れを、用いるデータ構造とともに示す図。
【図８】本発明の実施形態のデータベース管理装置が実行する他の整合性検証処理を示すフローチャート。
【図９】一連のチェインの整合性を検証する他の処理におけるワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図１０】本発明の実施形態の他の整合性検証処理の一連の流れを、用いるデータ構造とともに示す図。
【図１１】データベース管理装置のハードウェア構成を一例として示す図。
【図１２】階層型データベースにおいて、チェインされる一連のルートセグメントを示す概略図。
【発明を実施するための形態】
【００２７】
以下、本発明について特定の実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。なお、以下、階層型データベース内のポインタ整合性検証機能を備えるデータベース管理装置を一例として、本発明の実施形態について説明する。
【００２８】
図１は、本発明の実施形態によるデータベース管理装置１００上に実現される機能ブロックを示す図である。データベース管理装置１００は、概ねメインフレームなどの大型汎用コンピュータとして構成される。データベース管理装置１００は、データベース１１０を管理し、データベース１１０内のデータへのアクセス要求を処理するとともに、データベース１１０内の各種ポインタの整合性を検証する機能を備えている。図１に示すデータベース管理装置１００の各機能部（詳細は後述する。）は、メモリ上にプログラムを展開し、プログラムを実行することにより各ハードウェア資源を動作制御することによって、データベース管理装置１００上に実現される。
【００２９】
本実施形態のデータベース１１０は、データを木構造によって表現する、いわゆる階層型データモデルに従って構成されており、データベース管理装置１００が実装するＩＭＳなどのデータベース管理システム（ＤＢＭＳ）により管理されている。データベース１１０の記憶領域は、データベース管理装置１００にＩ／Ｏインタフェースを介して接続されたディスク装置などのストレージ・デバイスにより提供される。
【００３０】
データベース１１０に保管されるレコードは、セグメント・オカレンス（以下、単にセグメントとして参照する。）と呼ばれるデータの群から構成される。本実施形態のデータベース１１０においては、各セグメントは、関連する他のセグメントを指すポインタ値と、データ・エレメントとを含んで構成される。そして、データベース１１０内において、セグメントがポインタでお互いを指し合うことによって、レコードのツリー構造が維持される。
【００３１】
以下、図２および図３を参照して、データベース１１０内のデータ構造について説明する。図２は、本発明の実施形態におけるデータベース内のデータ構造を示す図である。データベース１１０は、単位記憶領域としての複数のブロック２００ａ〜２００ｄから構成される。各ブロック２００は、データベース１１０のレコードの頂点となるルートセグメントを指すルート・アンカー・ポイント（以下、ＲＡＰとして参照する。）２１０を含むことができる。ＲＡＰ２１０は、データベース１１０にデータを保管する際やデータベース１１０から読み出す際に辿られるチェインの基点となる。なお、データベース１１０において、ＶＳＡＭ（仮想記憶アクセス方式：Virtual Storage Access Method）を用いている場合には、上記１以上のＲＡＰを含む単位記憶領域は、制御インターバル（Control Interval：ＣＩ）と呼ばれる。
【００３２】
データベース１１０内の各ＲＡＰ２１０は、ブロック２００を識別する相対ブロック番号（Relative Block Number：ＲＢＮ）と、そのブロック内でのＲＡＰの序列を識別するＲＡＰ番号とを連結して導出されるＲＡＰ識別値を用いて参照される。つまり。ＲＡＰ識別値は、当該ＲＡＰの記憶位置から求められる。なお、以下の説明では、ＲＡＰ識別値を「ＢＢＢＲ」で表記する場合があることに留意されたい。「ＢＢＢＲ」の表記において、「ＢＢＢ」の部分は、相対ブロック番号に、「Ｒ」の部分は、ＲＡＰ番号に対応する。図２に示す例では、ＲＡＰ２１０ａは、ＲＢＮ＝００１およびＲＡＰ番号＝１からＢＢＢＲ＝００１１で参照され、同様に、ＲＡＰ２１０ｄは、ＲＢＮ＝ｎｎｎおよびＲＡＰ番号＝ｍからＢＢＢＲ＝ｎｎｎｍで参照される。
【００３３】
単位ブロック当たりのＲＡＰ数は、データベース１１０の初期設定時に指定され、初期設定時に１以上のＲＡＰ２１０が各ブロックに作成される。つまり、データベース１１０には、ＲＡＰが作成されるブロックのブロック数Ｎおよび単位ブロック当たりのＲＡＰ数Ｍとして、（Ｎ×Ｍ）個のＲＡＰが作成されることになる。
【００３４】
図３は、本実施形態のデータベースに関連するデータ構造の詳細を示す。図３（Ａ）は、本実施形態のデータベース内に記録されるルートセグメントの詳細なデータ構造を示す。ルートセグメント２２０は、その管理情報を収容する接頭部２２２と、アプリケーション・プログラム等が処理するデータである１以上のデータ・エレメントが収容されるデータ部２２４とを含む。
【００３５】
ルートセグメント２２０の接頭部２２２には、セグメントのタイプを識別するセグメント・コード（Segment Code：ＳＣ）を保持するＳＣフィールド２２６と、そのセグメントが削除されているか否かなどを示す削除バイト（Delete Byte：ＤＢ）を保持するＤＢフィールドと、ポインタ域フィールド２２８とが設けられている。ルートセグメント２２０のＳＣフィールド２２６には、それがルートセグメントであることを示すＳＣ値（＝１）が保持される。ポインタ域フィールド２２８には、そのルートセグメント２２０に関連付けられる他のセグメントを指す種々のポインタ値が収容される。ルートセグメント２２０のポインタ域フィールド２２８は、兄弟関係にある他のルートセグメントを指す物理兄弟順方向（Physical Twin Forward：ＰＴＦ）ポインタを含む。
【００３６】
図３（Ｂ）は、本実施形態のデータベース内においてチェインされる一連のルートセグメントを示す。各ルートセグメント２２０は、所定の保存先アドレスにて表される保存位置を開始点としてディスク上に保存されている。ここで、保存先アドレスとは、例えばデータベース１１０の所定の基準アドレスと比較したルートセグメント２２０の先頭アドレスの位置、つまり相対バイトアドレス（ＲＢＡ；Relative Byte Address）をいう。ＲＡＰ２１０には、該ＲＡＰが指すルートセグメントの保存先アドレスがポインタ情報として保管される。
【００３７】
図３（Ｂ）に示すルートセグメントＡ２２０ａは、所定のＲＡＰ識別値（ＢＢＢＲ＝００１１）で参照されるＲＡＰ２１０から指されており、ＲＡＰ２１０には、ルートセグメントＡ２２０ａの保存先アドレス（ＲＢＡ＝０１００）が保持されている。ルートセグメントＡ２２０ａのＰＴＦフィールド２３０ａには、兄弟関係にあるルートセグメントＢ２２０ｂの保存先アドレス（ＲＢＡ＝０２００）が保持されている。同様に、ルートセグメントＢ２２０ｂのＰＴＦフィールド２３０ｂには、さらに兄弟関係にあるルートセグメントＣ２２０ｃの保存先アドレス（ＲＢＡ＝８０００）が保持されている。そして、ルートセグメントＣ２２０ｃのＰＴＦフィールド２３０ｃには、チェインの終端を示すアドレス値（ＲＢＡ＝００００）が保持されている。
【００３８】
図３に示す例では、データベース１１０内において、ＲＡＰ２１０を基点として、ルートセグメントＡ２２０ａ、ルートセグメントＢ２２０ｂおよびルートセグメントＣ２２０ｃへとチェインが形成されている。単一のＲＡＰから複数のルートセグメントへ貼られるチェインをシノニム・チェインとして参照する。
【００３９】
本実施形態のデータベース１１０では、対応するＲＡＰを基点として、ＲＡＰやルートセグメントのＰＴＦフィールドに記録されたポインタ値を参照してチェインを辿ることにより、所望のルートセグメントにアクセスすることができる階層構造が構成されている。データベース１１０には、図１に示す所定のランダム化モジュール１３０が関連付けられており、ルートセグメントがチェインされるＲＡＰは、ランダム化モジュール１３０により決定される。より具体的には、ランダム化モジュール１３０は、ハッシュ関数等の所定の数学アルゴリズムに従って、与えられたキー値を相対ブロック番号およびＲＡＰ番号に変換する。
【００４０】
ここで、本実施形態のデータベース１１０に対するデータの保管および読み出しについて説明を加える。データベース１１０内に新たなルートセグメントを保管する場合、所定のランダム化モジュール１３０にそのキー値が与えられ、新たなルートセグメントをチェインさせるＲＡＰが決定される。ここで、ランダム化モジュール１３０が、新たな保管先として例えばＲＡＰ２１０に決定した場合、ルートセグメントＣ２２０ｃのＰＴＦフィールド２３０ｃに新たなルートセグメントの保存先アドレスが格納されることになる。一方、ルートセグメントＣ２２０ｃを参照しようとする場合には、ルートセグメントＣ２２０ｃに対応する所定のキー値をランダム化モジュール１３０に与え、そのキー値から特定されるＲＡＰ２１０を基点としてチェインを辿ることによって、目的のルートセグメントＣ２２０ｃを参照することになる。
【００４１】
以下、再び図１を参照して、本発明の実施形態による階層型データベース内のポインタの整合性検証機能について詳細を説明する。本発明の実施形態によるデータベース管理装置１００は、データベース１１０を構成しているブロックを順次読み込んで、後述する各種ワークレコードを作成する読込部１２０と、作成されたワークレコードを用いて、データベース１１０に関連する整合性を検証する検証部１４０と、検出されたエラーをレポート出力するエラー出力部１５０とを含む。各種ワークレコードは、データベース管理装置１００のメモリなどの一次記憶装置や、ハードディスクなどの二次記憶装置が提供する記憶領域に格納される。
【００４２】
本実施形態の読込部１２０は、ＲＡＰに関連するワークレコードを作成するＲＡＰレコード作成部１２２と、ルートセグメントに関連するワークレコードを作成するルート・レコード作成部１２４とを含んで構成される。ＲＡＰレコード作成部１２２およびルート・レコード作成部１２４は、それぞれ、本実施形態の基点レコード作成部およびデータ・レコード作成部を構成する。また本実施形態の検証部１４０は、上記ワークレコード作成部１２２，１２４により作成されたワークレコードを用いて、ＲＡＰを基点として１以上のルートセグメントへ張られるチェイン（以下、ＲＡＰチェインと参照する。）の整合性を検証するチェイン検証部１４２を含んで構成される。
【００４３】
なお、以下に説明する実施形態では、読込部１２０は、ＲＡＰおよびルートセグメントに関連するワークレコードを作成し、検証部１４０は、このワークレコードを用いて、ＲＡＰチェインの整合性を検証するものとして説明する。しかしながら、他の実施形態では、読込部１２０は、階層型データベース内の他のポインタやキー値に関連するワークレコードを作成するように構成することができ、検証部１４０は、これらのワークレコードを用いて、他のポインタやキー値の整合性検証処理を実行するように構成することができる。またこの場合に、ＲＡＰチェインの整合性を検証する処理に並列して、他のポインタやキー値の整合性を検証する処理が実行されることを妨げない。
【００４４】
上記ＲＡＰレコード作成部１２２は、読み込まれたブロック内のＲＡＰを識別し、このブロックのＲＢＮと、このＲＡＰのブロック内における序列とを連結して、ＲＡＰ識別値を導出する。そして、ＲＡＰレコード作成部１２２は、このＲＡＰに保持されるポインタ値に、ＲＡＰの記憶位置から導出されるＲＡＰ識別値を関連付けてワークレコード（以下、ポインタ・レコードとして参照する。）を作成し、検証部１４０へ渡す。
【００４５】
上記ルート・レコード作成部１２４は、読み込まれたブロック内の、ルートセグメントであることを示すＳＣ値（＝１）を有するセグメントを識別すると、このルートセグメントのキー値をランダム化モジュール１３０に与え、ＲＡＰ識別値を算出させる。この算出されたＲＡＰ識別値は、正しいランダム化モジュール１３０により算出された、当該ルートセグメントをチェインすべき本来のＲＡＰのものである。そして、ルート・レコード作成部１２４は、識別されたルートセグメントの保存先アドレスに、ランダム化モジュール１３０から取得したＲＡＰ識別値を関連付けてワークレコード（以下、セグメント・レコードとして参照する。）を作成し、検証部１４０へ渡す。
【００４６】
ルート・レコード作成部１２４は、さらに、このルートセグメントのＰＴＦフィールドに保持されるポインタ値に、上記ランダム化モジュール１３０から取得したＲＡＰ識別値を関連付けてポインタ・レコードを作成し、検証部１４０へ渡す。なお、ＰＴＦフィールドに終端を示すポインタ値が保持されている場合には、ポインタ・レコードは作成されなくてもよい。
【００４７】
作成されるポインタ・レコードのセット１６０には、ＲＡＰおよびルートセグメントの両方に関連するレコードが含まれ、セグメント・レコードのセット１７０には、ルートセグメントに関連するレコードが含まれることになる。
【００４８】
チェイン検証部１４２は、渡されたポインタ・レコードのセット１６０およびセグメント・レコードのセット１７０を用いて、ＲＡＰチェインの整合性を検証する。そして、チェイン検証部１４２は、その不整合を検出すると、エラー出力部１５０へ通知する。エラー出力部１５０は、通知された不整合のエラーをまとめて、例えば図示しない所定の管理端末にレポートとして報告する。
【００４９】
また、本発明の実施形態によるＲＡＰチェインの整合性検証機能では、オプションとして、ルートセグメントのキー値の順序に対応してシノニム・チェインが形成されていなければならないという制約に対応して、チェインされるルートセグメントの順序の正しさを検証することもできる。この場合に、上記ルート・レコード作成部１２４は、識別されたルートセグメントのキー値をさらに関連付けて、セグメント・レコードおよびポインタ・レコードを作成することができる。そして、キー値を含むレコードを受け取ったチェイン検証部１４２は、渡されたポインタ・レコードのセット１６０およびセグメント・レコードのセット１７０を用いて、レコード間でキー値の大小関係を比較し、ルートセグメントのチェインの順序の正しさを検証することができる。
【００５０】
以下、図４〜図７を参照して、階層型データベース内に形成される、ＲＡＰを基点としたルートセグメントへの一連のチェインの整合性を検証する処理について、詳細を説明する。なお、図４〜図７を参照して説明する整合性検証処理は、オプションとしてのルートセグメントのキー値の順序の検証が指定されない場合の処理に対応する。
【００５１】
図４および図５は、本発明の実施形態のデータベース管理装置１００が実行する整合性検証処理を示すフローチャートである。図４および図５は、ポイントＡにより処理フローが連結される。図４に示す処理は、例えば、図示しない管理端末からの整合性の検証処理の開始要求、または所与のスケジュールに応答して呼び出されて、ステップＳ１００から開始される。
【００５２】
ステップＳ１０１では、読込部１２０は、データベース１１０のブロックを読み込み、ＲＡＰレコード作成部１２２に処理を渡す。ステップＳ１０２では、ＲＡＰレコード作成部１２２は、読み込まれたブロックからＲＡＰを識別し、処理すべきＲＡＰが有るか否かを判定する。ステップＳ１０２で、処理すべきＲＡＰが存在すると判定された場合（ＹＥＳ）には、ステップＳ１０３へ処理が進められる。
【００５３】
図６は、ワークレコードの作成処理を、用いるデータ構造とともに示す図である。図６（Ａ）は、図４に示すステップＳ１０３およびステップＳ１０４によるＲＡＰのポインタ・レコードの作成処理を、用いるデータ構造とともに示している。ステップＳ１０３では、ＲＡＰレコード作成部１２２は、ブロックから識別したＲＡＰに保持されるポイント先ＲＢＡ２５４を取得する。ＲＡＰレコード作成部１２２は、ステップＳ１０４で、現在のブロックのＲＢＮと、ＲＡＰのブロック内での序列を示すＲＡＰ番号とを連結してＲＡＰ識別値（ＢＢＢＲ）２５２を導出し、ポイント先ＲＢＡ２５４に付して、ＲＡＰのポインタ・レコード２５０を作成し、ステップＳ１０２へループさせる。
【００５４】
ステップＳ１０２〜Ｓ１０４のループにより、各ブロック毎にＭ個有るＲＡＰのポインタ・レコードが作成される。ステップＳ１０２で、処理すべきＲＡＰがもう存在しないと判定された場合（ＮＯ）には、ステップＳ１０５に進められ、ルート・レコード作成部１２４に処理が渡される。
【００５５】
ステップＳ１０５では、ルート・レコード作成部１２４は、読み込まれたブロックから、ルートセグメントであることを示すＳＣ値（＝１）を有するセグメントを識別し、処理すべきルートセグメントが存在するか否かを判定する。ステップＳ１０５で、処理すべきルートセグメントが存在すると判定された場合（ＹＥＳ）には、ステップＳ１０６へ処理を進める。
【００５６】
図６（Ｂ）は、図４に示すステップＳ１０６〜ステップＳ１０８によるルートセグメントのセグメント・レコードおよびポインタ・レコードの作成処理を、用いるデータ構造とともに示している。ステップＳ１０６では、ルート・レコード作成部１２４は、識別したルートセグメントから、その開始ＲＢＡ２６２、ＰＴＦフィールド２３０に保持されるポイント先ＲＢＡ２７２、データ部のキー・フィールド２３２に保持されるキー値などのデータを取得する。
【００５７】
ステップＳ１０７では、ルート・レコード作成部１２４は、取得したキー値を引数としてランダム化モジュール１３０をコールし、ランダム化モジュール１３０により算出されたＲＡＰ識別値を取得する。ルート・レコード作成部１２４は、ステップＳ１０８で、算出されたＲＡＰ識別値（ＢＢＢＲ）２６４をルートセグメントの開始ＲＢＡ２６２に付して、ルートセグメントのセグメント・レコード２６０を作成する。また、ルート・レコード作成部１２４は、そのルートセグメントがＲＡＰチェインの終端でなければ、ＰＴＦフィールドのポイント先ＲＢＡ２７２に、上記算出されたＲＡＰ識別値（ＢＢＢＲ）２７４を付して、ルートセグメントのポインタ・レコード２７０を作成し、ステップＳ１０５へループさせる。この場合に、ルートセグメントがチェインされる一連の順序をワークレコードから判別できるようにするために、ポイント元ＲＢＡ２７８をさらに付して、ルートセグメントのポインタ・レコード２７０を作成することもできる。
【００５８】
ステップＳ１０５〜Ｓ１０８のループにより、各ブロック内に保管されたすべてのルートセグメントにつき、ルートセグメントに関連するワークレコードが作成される。ステップＳ１０５で、処理すべきルートセグメントが存在しないと判定された場合（ＮＯ）には、ステップＳ１０９へ処理が進められる。
【００５９】
ステップＳ１０９では、読込部１２０は、データベース１１０に、次に処理すべきブロックが残されているか否かを判定する。ステップＳ１０９で、次に処理すべきブロックがある場合（ＹＥＳ）には、ステップＳ１０１へループさせ、次のブロックに対する処理へ進める。一方、ステップＳ１０９で、次に処理すべきセグメントがない場合（ＮＯ）には、整合性検証処理に必要なワークレコードが揃ったことを示すため、ポイントＡへ処理を進める。
【００６０】
図５は、図４に示したポイントＡ以降の処理フローを示す。ステップＳ２０１〜ステップＳ２１１の処理では、チェイン検証部１４２は、渡されたセグメント・レコードのセット１７０およびポインタ・レコードのセット１６０を用いて、ＲＡＰを基点として１以上のルートセグメントへ張られる一連のチェインの整合性を検証する。
【００６１】
本実施形態では、ＲＡＰを基点としたチェインの整合性を検証する手法として、セグメント・レコードのセット１７０およびポインタ・レコードのセット１６０を、ＲＢＡをソートキーとしてソートマージして、ポイント先ＲＢＡと開始ＲＢＡの値とを比較するという手法を好適に採用することができる。この手法では、ＲＢＡの値に一致する組合せが見つかり、その組み合わせにおいてＲＡＰ識別値が一致すれば、比較の二者間のチェインが整合していると判定し、一方、ＲＢＡが一致する組合せが存在しないこと、およびＲＡＰ識別値が一致しないことをもって、不整合を検出する。
【００６２】
以下、ＲＡＰチェインの整合性の検証処理について、より具体的に説明する。ステップＳ２０１では、チェイン検証部１４２は、セグメント・レコードのセット１７０およびポインタ・レコードのセット１６０を、それぞれＲＢＡをソートキーとしてソートする。ステップＳ２０２では、ソートしたワークレコードの先頭の組合せから処理対象に設定する。ステップＳ２０３では、チェイン検証部１４２は、処理対象の組合せを突き合わせて、セグメント・レコードの保存先アドレス（開始ＲＢＡ）と、ポインタ・レコードのポインタ値（ポイント先ＲＢＡ）とを比較する。
【００６３】
ステップＳ２０４では、チェイン検証部１４２は、突き合わせた保存先アドレス（開始ＲＢＡ）とポインタ値（ポイント先ＲＢＡ）とが一致するか否かを判定する。ステップＳ２０４で、ＲＢＡの値が一致すると判定された場合（ＹＥＳ）には、ステップＳ２０５へ処理を進める。ステップＳ２０５では、さらに、処理対象の組合せにおいてＲＡＰ識別値が一致するか否かを判定する。
【００６４】
ステップＳ２０５で、ＲＡＰ識別値が一致しないと判定された場合（ＮＯ）には、ステップＳ２０６へ処理を進める。この場合、比較の二者間のチェイン自体は成立しているものの、下流側のルートセグメントが、本来の正しいＲＡＰからチェインされていないことを示している。またこの場合、不整合が検出されたルートセグメント以下のチェインも不整合であることを示している。このため、ステップＳ２０６では、チェイン検証部１４２は、ＲＡＰ識別値が不一致であるとして、エラー出力部１５０にエラーを通知する。
【００６５】
一方、ステップＳ２０５で、ＲＡＰ識別値が一致すると判定された場合（ＹＥＳ）には、直接ステップＳ２０７へ処理を進める。ステップＳ２０７では、セグメント・レコードおよびポインタ・レコードを進めて、次ぎの組合せに処理対象を設定し、ステップＳ２０８へ処理を進める。
【００６６】
再びステップＳ２０４を参照すると、ステップＳ２０４で、ＲＢＡの値が一致しないと判定された場合（ＮＯ）には、ステップＳ２１０へ処理を進める。この場合、比較の二者間のチェイン自体が成立していないため、ステップＳ２１０では、ポインタが不整合であるとして、エラー出力部１５０にエラーを通知する。ステップＳ２１１では、保存先アドレスおよびポインタ値のＲＢＡの大小に応じて、次のセグメント・レコードまたはポインタ・レコードに処理を進めて、次ぎの組合せに処理対象を設定し、ステップＳ２０８へ処理を進める。例えば、小さい値のＲＢＡから突き合わせる場合には、ＲＢＡが小さい方のレコードを次に進める。
【００６７】
ステップＳ２０８では、セグメント・レコードおよびポインタ・レコードの処理対象の組合せが終端に達したか否かを判定する。ステップＳ２０８で、終端に達したと判定された場合（ＹＥＳ）には、ステップＳ２０９で処理を終了させる。一方、ステップＳ２０８で、終端に達していない判定された場合（ＮＯ）には、ステップＳ２０３へ処理をループさせ、次の組合せの処理対象に対する突き合わせを実行する。
【００６８】
図７は、本発明の実施形態のＲＡＰチェインの整合性検証処理の一連の流れを、用いるデータ構造とともに示す図である。図７には、データベース１１０内に、特定のＲＡＰ識別値（ＢＢＢＲ＝００１１）で参照されるＲＡＰ２１０ａを基点として、ルートセグメントＡ２２０ａ、ルートセグメントＢ２２０ｂ、ルートセグメントＣ２２０ｃへチェインが形成されている様子が示されている。ここで、ルートセグメントＣ２２０ｃは、本来ＲＡＰ識別値（ＢＢＢＲ＝０５１１）で参照されるＲＡＰ２１０ｂからチェインされているべきものであるが、ＲＡＰ２１０ａ（ＢＢＢＲ＝００１１）を基点として誤ってチェインされているものとする。
【００６９】
図７に示すデータベース１１０が読み込まれると、ワークレコード作成部１２２，１２４により、ＲＡＰのポインタ・レコード２５０のセットと、ルートセグメントのセグメント・レコード２６０のセットおよびポインタ・レコード２７０のセットが作成される。そして、チェイン検証部１４２により、ポインタ・レコード２５０，２７０のセットと、セグメント・レコード２６０のセットとが、それぞれソートおよび突き合わせ処理されて、整合するペアＰＡＩＲ１，ＰＡＩＲ２と、不整合なペアＰＡＩＲ３とが検出される。つまり、ＲＢＡ＝８０００のルートセグメントＣ２２０ｃが、誤ったＲＡＰ２１０ａ（ＢＢＢＲ＝００１１）からチェインされていることが判定される。
【００７０】
ここで、上記ルートセグメントＣ２２０ｃの他、ルートセグメントＢ２２０ｂも、正しくはＲＡＰ識別値（ＢＢＢＲ＝０５１１）のＲＡＰ２１０ｂからチェインされているべきものであるとした場合を考える。この場合、ルートセグメントＢ２２０ｂのポインタ・レコードと、ルートセグメントＣ２２０ｃのセグメント・レコードとの突き合わせでは、ＲＡＰ識別値の不整合が検出されない。しかしながら、ルートセグメントＡ２２０ａのポインタ・レコードと、ルートセグメントＢ２２０ｂのセグメント・レコードとの突き合わせにおいてＲＡＰ識別値の不整合が検出されるため、その下流側のルートセグメントＢ２２０ｂからルートセグメントＣ２２０ｃへのチェインも誤っていることが認識される。
【００７１】
本発明の実施形態による、ＲＡＰチェインの整合性検証処理によれば、記憶位置から求められるＲＡＰ識別値と、ランダム化モジュール１３０の計算により求められる本来のＲＡＰ識別値とが、比較するワークレコードに付属させられているため、所定のルートセグメントが、正しいＲＡＰからチェインされているか否かを判断することが可能となる。
【００７２】
また、ルートセグメントについて作成されるポインタ・レコード２７０とセグメント・レコード２６０との両方にＲＡＰ識別値が付属させられるため、ポインタによりチェインされる兄弟関係のルートセグメント二者間におけるＲＡＰ識別値の整合性を検証することができ、ひいてはＲＡＰから終端のルートセグメントまでの一連のチェイン全体の整合性を検証することが可能となる。
【００７３】
以下、図４、図８〜図１０を参照して、階層型データベース内に形成されるＲＡＰを基点とした１以上のルートセグメントへの一連のチェインの整合性を検証する他の処理について、詳細を説明する。なお、図４、図８〜図１０を参照して説明する整合性検証処理は、ルートセグメントのキー値の順序の整合性を検証するオプションが指定された場合の処理に対応し、例えば図示しない管理端末からの検証処理の開始要求またはスケジュールにおいてオプション指定された場合に呼び出される。
【００７４】
図８は、本発明の実施形態のデータベース管理装置１００が実行する他の整合性検証処理を示すフローチャートである。図８は、図４に示したポイントＡから連結される。なお、一連のチェインの整合性を検証する他の処理においては、ステップＳ１０４およびステップＳ１０８の処理を除き、ポイントＡの前までは同一の処理フローに従って処理される。
【００７５】
図９は、一連のチェインの整合性を検証する他の処理におけるワークレコードの作成処理を、用いるデータ構造とともに示す図である。図９（Ａ）は、図４に示すステップＳ１０３およびステップＳ１０４によるＲＡＰのポインタ・レコードの作成処理を、データ構造とともに示している。他の処理において、ステップＳ１０４では、ＲＡＰレコード作成部１２２は、ＲＡＰ識別値（ＢＢＢＲ）２８２をポイント先ＲＢＡ２８４に付すとともに、ＮＵＬＬ値のキー値２８６を付して、ＲＡＰのポインタ・レコード２８０を作成する。
【００７６】
図９（Ｂ）は、図４に示すステップＳ１０６〜ステップＳ１０８によるルートセグメントのセグメント・レコードおよびポインタ・レコードの作成処理を、データ構造とともに示している。この他の処理において、ステップＳ１０８では、ルート・レコード作成部１２４は、ランダム化モジュール１３０により算出されたＲＡＰ識別値２９４をルートセグメントの開始ＲＢＡ２９２に付すとともに、データ部のキー・フィールド２３２に保持されるキー値２９６を付して、ルートセグメントのセグメント・レコード２９０を作成する。
【００７７】
また、ステップＳ１０８では、ルート・レコード作成部１２４は、ＰＴＦフィールド２３０のポイント先ＲＢＡ３０２に、上記算出されたＲＡＰ識別値３０４を付すとともに、キー・フィールド２３２のキー値３０６を付して、ルートセグメントのポインタ・レコード３００を作成する。この場合に、ルートセグメントがチェインされる一連の順序をワークレコードから判別できるようにするために、ポイント元ＲＢＡ３０８をさらに付すことができる。
【００７８】
続いて図８に示すステップＳ３０１〜ステップＳ３１３の処理では、チェイン検証部１４２は、渡されたセグメント・レコードのセットおよびポインタ・レコードのセットを用いて、ＲＡＰを基点として１以上のルートセグメントへ張られる一連のチェインの整合性を、キー値の順序とともに検証する。
【００７９】
ステップＳ３０１では、チェイン検証部１４２は、セグメント・レコード２９０のセットおよびポインタ・レコード２８０，３００のセットを、それぞれＲＢＡをソートキーとしてソートする。チェイン検証部１４２は、ステップＳ３０２で、ソートしたワークレコードの先頭の組合せから処理対象に設定し、ステップＳ３０３で、処理対象の組合せを突き合わせて、ステップＳ３０４で、突き合わせた保存先アドレス（ＲＢＡ）とポインタ値（ＲＢＡ）とが一致するか否かを判定する。ステップＳ３０４で、ＲＢＡの値が一致すると判定された場合（ＹＥＳ）には、ステップＳ３０５へ処理を進める。ステップＳ３０５では、さらに、処理対象の組合せにおいてＲＡＰ識別値が一致するか否かを判定する。
【００８０】
ステップＳ３０５で、ＲＡＰ識別値が一致しないと判定された場合（ＮＯ）には、ステップＳ３０６へ処理を進める。ステップＳ３０６では、チェイン検証部１４２は、ＲＡＰ識別値が不一致であるとして、エラー出力部１５０にエラーを通知する。一方、ステップＳ３０５で、ＲＡＰ識別値が一致すると判定された場合（ＹＥＳ）には、直接ステップＳ３０７へ処理を進める。
【００８１】
ステップＳ３０７では、チェイン検証部１４２は、キー値の大小関係に矛盾が無いか否かを判定する。例えば、ルートセグメントが、キー値が昇順となるようチェインされなければならないという制約が有る場合には、セグメント・レコードのキー値の方が、ポインタ・レコードのキー値よりも大きくなければならない。逆の場合には、ポインタ・レコードのキー値の方が、セグメント・レコードのキー値よりも大きくなければならない。ステップＳ３０７では、キー値の大小関係が制約に適合しているか否かによって、矛盾が有るか否かを判定する。
【００８２】
ステップＳ３０７で、キー値の大小関係に矛盾が有ると判定された場合（ＮＯ）には、ステップＳ３０８へ処理を進める。ステップＳ３０８では、チェイン検証部１４２は、キー順序が不整合として、エラー出力部１５０にエラーを通知する。一方、ステップＳ３０７で、キー値の大小関係に矛盾が無いと判定された場合（ＹＥＳ）には、直接ステップＳ３０９へ処理を進める。ステップＳ３０９では、次のセグメント・レコードおよびポインタ・レコードへ進めて、次ぎの組合せに処理対象を設定し、ステップＳ３１０へ処理を進める。
【００８３】
再びステップＳ３０４を参照すると、ステップＳ３０４で、ＲＢＡの値が一致しないと判定された場合（ＮＯ）には、ステップＳ３１２へ処理を進め、ポインタが不一致であるとして、エラー出力部１５０にエラーを通知する。ステップＳ３１３では、ＲＢＡの値の大小に応じて、次のセグメント・レコードまたはポインタ・レコードに処理を進めて、次ぎの組合せに処理対象を設定し、ステップＳ３１０へ処理を進める。
【００８４】
ステップＳ３１０では、セグメント・レコードおよびポインタ・レコードの処理対象の組合せが終端に達したか否かを判定する。ステップＳ３１０で、終端に達したと判定された場合（ＹＥＳ）には、ステップＳ３１１で処理を終了させる。一方、ステップＳ３１０で、終端に達していない判定された場合（ＮＯ）には、ステップＳ３０３へ処理をループさせ、次の組合せの処理対象に対する突き合わせを実行する。
【００８５】
図１０は、本発明の実施形態の他の整合性検証処理の一連の流れを、用いるデータ構造とともに示す図である。図１０には、データベース１１０内に、ＲＡＰ識別値（ＢＢＢＲ＝００１１）で参照されるＲＡＰ２１０ａを基点として、ルートセグメントＤ２２０ｄ、ルートセグメントＥ２２０ｅ、ルートセグメントＦ２２０ｆへ張られるチェインが形成されている様子が示されている。ここで、ルートセグメント２２０ｄ、２２０ｅ，２２０ｆは、すべて正しいＲＡＰからチェインされているものとする。
【００８６】
図７に示すデータベース１１０が読み込まれると、ワークレコード作成部１２２，１２４により、ＲＡＰのポインタ・レコード２８０のセットと、ルートセグメントのセグメント・レコード２９０のセットおよびポインタ・レコード３００のセットが作成される。そして、チェイン検証部１４２により、ポインタ・レコード２８０，３００のセットと、セグメント・レコード２９０のセットとが、それぞれソートおよび突き合わせ処理されて、キー値の大小関係に矛盾の無いペアＰＡＩＲ４，ＰＡＩＲ６と、キー値の大小関係に矛盾のある不整合なペアＰＡＩＲ５とが検出される。ＰＡＩＲ５においては、ポインタ・レコードのキー値が、対応するセグメント・レコードのキー値よりも大きくなっており、ルートセグメント２２０ｄ、２２０ｅ，２２０ｆが、キー値が昇順となるようにチェインされていないことが判定される。なお、ＰＡＩＲ６は、一見して整合しているように見られるが、近傍のＰＡＩＲ５に不整合があるため、レポートでは、不整合なチェインであるとして通知することができる。
【００８７】
以上説明した、ルートセグメントのキー値の順序の整合性を検証するオプションが指定された場合のＲＡＰチェインの整合性検証処理によれば、ルートセグメントについて作成されるポインタ・レコードとセグメント・レコードとの両方にキー値が付属させられるため、ルートセグメントと他の兄弟セグメントとの間のチェインにおけるキー値の順序の整合性を検証することが可能となる。ひいては、階層型データベース内に形成される基点からセグメントへのチェインの完全性が検証可能となる。
【００８８】
なお、上述までは、ルートセグメントについて作成されるポインタ・レコードとセグメント・レコードとに、ＲＡＰ識別値とキー値との両方を付属させるものとして説明してきた。つまり、ＲＡＰ識別値自体が検証データとして用いられている。しかしながら、他の実施形態では、キー値を付属させる場合には、ＲＡＰ識別値の付属を省略することもできる。
【００８９】
この実施形態では、図４に示すステップＳ１０７の処理が省略され、ステップＳ１０８では、ルート・レコード作成部１２４は、ＲＡＰ識別値２９４の付加を省略して、データ部のキー・フィールド２３２に保持されるキー値２９６を付して、ルートセグメントのセグメント・レコード２９０およびポインタ・セグメント３００を作成する。そして、図８に示すステップＳ３０５の判定の前に、チェイン検証部１４２は、突き合わせ対象のルートセグメントのワークレコードに含まれるキー値を引数として、データベース１１０に関連付けられたランダム化モジュール１３０をコールし、このランダム化モジュール１３０により算出されたＲＡＰ識別値を取得する。そして、ステップＳ３０５で、処理対象の組合せにおいてＲＡＰ識別値が一致するか否かを判定する。この場合には、キー値が、ランダム化モジュール１３０に関連してＲＡＰ識別値を与える検証データとして用いられている。
【００９０】
この実施形態では、データベース１１０を読み込む処理中にランダム化モジュール１３０をコールしなくても良いため、データベースの読み込み処理の総所要時間を低減することができ、またワークレコードのサイズを減少させることができる。なお、キー値を付す場合に、ＲＡＰ識別値も付すか省略するかは、環境や検証対象のデータベースの特性に応じて選択すればよい。
【００９１】
以下、データベース管理装置のハードウェア構成について説明する。図１１は、データベース管理装置１００のハードウェア構成を一例として示す。図１１は、データベース管理装置１００をメインフレーム５０などの汎用大型コンピュータを用いて構成する場合を例に説明する。メインフレーム５０は、少なくとも１つの中央処理装置５２と、主記憶装置５４と、記憶制御部５６と、チャネル・サブシステム５８と、少なくとも１つの制御装置６０と、少なくとも１つの入出力デバイス６２ａ〜ｄとを含んで構成される。
【００９２】
主記憶装置５４は、入出力デバイス６２ａ〜ｄから入力されるデータおよびプログラムを記憶する。そして、主記憶装置５４は、中央処理装置５２およびチャネル・サブシステム５８からアドレスの指定を受けると、そのアドレスに記憶しているデータを中央処理装置５２およびチャネル・サブシステム５８へ送出する。主記憶装置５４は、記憶しているデータを高速に読書可能に構成されており、これにより、中央処理装置５２による高速演算処理が可能とされる。
【００９３】
中央処理装置５２は、メインフレーム５０の全体を制御し、例えば、オペレーティング・システム５３を動作させる。オペレーティング・システム５３は、メインフレーム５０におけるプログラムの実行および入出力処理を制御する。オペレーティング・システム５３は、中央処理装置５２上で動作する他のプログラムの実行を制御してもよい。例えば、本実施形態の整合性検証処理に対応するプログラムに加え、階層型データベースを管理するためのＤＢＭＳプログラムを実行することができる。また、オペレーティング・システム５３は、入出力デバイス６２ａ〜ｄのそれぞれにおけるデータ転送を制御することもできる。
【００９４】
記憶制御部５６は、双方向または単方向に通信可能なバス６４を介して中央処理装置５２に接続される。記憶制御部５６は、さらに、バス６６を経由して、主記憶装置５４に接続され、さらに、バス６８を経由して、チャネル・サブシステム５８に接続される。記憶制御部５６は、例えば、中央処理装置５２またはチャネル・サブシステム５８から受領したアクセス要求を一時的に格納し、所定のタイミングでアクセス要求を主記憶装置５４に送出する、いわゆるキューイング処理を行うことができる。
【００９５】
チャネル・サブシステム５８は、それぞれ制御装置６０に対してデータ転送路７６を介して接続される。チャネル・サブシステム５８は、入出力デバイス６２ａ〜ｄおよび主記憶装置５４間でのデータ転送を制御する。これにより、中央処理装置５２が入出力デバイス６２ａ〜ｄとの間で通信するための処理負荷が軽減されるため、中央処理装置５２による演算処理と、入出力デバイス６２ａ〜ｄによる入出力処理とを並列に実行させることができ、もって、メインフレーム５０を効率的に動作させることが可能となる。
【００９６】
また、チャネル・サブシステム５８は、少なくとも１つのチャネルパス７２により、入出力デバイス６２ａ〜ｄとのデータ転送を行う。それぞれのチャネルパス７２は、チャネル・サブシステム５８内に設けられたチャネル７４を有する。また、それぞれのチャネルパス７２は、少なくとも１つの制御装置６０と、データ転送路７６とを有する。ここで、データ転送路７６は、例えば、ＥＳＣＯＮ（登録商標；Enterprise Systems Connection Architecture）に基づくシリアルリンクとすることができる。また、データ転送路７６は、ＥＳＣＯＮ（登録商標）に代えて、またはＥＳＣＯＮ（登録商標）に加えて、パラレルＯＥＭＩであってもよいし、ＦＩＣＯＮ（登録商標；FIbre Connection）であってもよい。
【００９７】
制御装置６０は、バス７８を介して入出力デバイス６２ａ〜ｄの少なくとも１つに接続し、入出力デバイス６２ａ〜ｄの少なくとも１つを制御する。制御装置６０は、入出力デバイス６２ａ〜ｄのそれぞれにおけるデータ転送のタイミングを制御することができる。
【００９８】
入出力デバイス６２ａ〜ｄのそれぞれは、制御装置６０、チャネル・サブシステム５８、および記憶制御部５６を順次経由して、主記憶装置５４との間でデータ転送を行う。ここで、入出力デバイス６２ａは、具体的には、磁気テープドライブであり、入出力デバイス６２ｂ〜ｄは、ハードディスクドライブである。これに代えて、またはこれに加えて、入出力デバイス６２ａ〜ｄのそれぞれは、パンチカードリーダ、ディスプレイ装置、キーボード、プリンタ、通信デバイス、各種センサ、またはその他の記憶装置であってもよい。入出力デバイス６２のいずれか１つは、データベース１１０と接続され、アクセス制御を行うことができる。
【００９９】
なお、上述までは、データベース管理装置１００は、メインフレーム５０として構成される場合を例として説明してきた。しかしながら、データベース管理装置１００は、その他、ミッドレンジ・コンピュータ、ワークステーション、パーソナル・コンピュータなどとして構成することもできる。
【０１００】
以上説明したように、本発明の実施形態によれば、階層型データベース内に形成される基点からセグメントへの一連のチェイン（連鎖）の整合性を、効率的に検証することが可能な効率的に検出可能な整合性検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体が提供される。
【０１０１】
本発明の実施形態によれば、階層型データベース内に形成される基点のＲＡＰからルートセグメントへの一連のチェイン（連鎖）におけるＲＡＰとルートセグメントとの二者間の整合性、あるいはルートセグメントとその兄弟のルートセグメントとの二者間の整合性を検証することができ、ひいては基点のＲＡＰから１以上のルートセグメントへの一連のチェイン全体の整合性を効率的に検出することが可能となる。
【０１０２】
上述したように、ＲＡＰからの一連のチェインにおけるポインタが整合している場合でも、ルートセグメントが正しいＲＡＰからチェインされていない蓋然性がある。本発明の実施形態によれば、このような、ルートセグメントがチェインされるＲＡＰの正しさを判定することができる。したがって、データベースにおいて、（ｉ）ルートセグメントを保管する処理中に、ＤＢＭＳやデータベース作成ユーティリティ等のプログラムエラーにより、ランダム化モジュールから割り振られた値とは相違するＲＡＰ識別値が誤って使用されルートセグメントが保管されてしまった場合、（ｉｉ）ルートセグメントを保管する際に、ランダム化モジュールのエラーにより本来とは異なる値を算出してまった場合、（ｉｉｉ）オペレーションミス等により、一時的に誤ったランダム化モジュールを使用してしまった場合などにおいて発生する、ＲＡＰを基点とした１以上のルートセグメントへの一連のチェインの不整合を、好適に検出することが可能となる。
【０１０３】
他のシノニム・チェインの整合性を検証する処理としては、以下に説明する手法も考えられる。この手法では、読み込み処理中、ＲＡＰのポインタおよびＲＡＰ識別値を含むＲＡＰ情報と、ルートセグメントの開始ＲＢＡ、ＰＴＦポインタ値およびキー値を含むルートセグメント情報とを、メモリ上に確保したテーブルに別途それぞれコピーする。そして、後にＲＡＰのポインタ値に一致する保存先アドレスを有するルート情報を検索し、一致するものが見つかった場合に、キー値を引数としてランダム化モジュールをコールし、ＲＡＰ情報のＲＡＰ識別値と、計算されたＲＡＰ識別値とを比較して不整合を検出する。しかしながら、このメモリ上にテーブル展開し検索するという手法は、メモリ領域に関して限界を有し、データベース内で、ルートセグメントのキー・フィールドが記憶領域の半分程度を占めてしまうような場合、膨大な容量のメモリが必要となってしまう。データベースやセグメントの定義に依存するが、４ギガ・バイトのメモリを要することもある。特に、数百、数千というデータベースに関連するポインタの整合性を検証する必要があるケースでは、１データベースのポインタの検証処理のために数ギガ・バイトのメモリを使用してしまうと、システムの処理遅延や停止を引き起こす可能性が有り、一般に許容されない。
【０１０４】
これに対して、上述した本発明の実施形態によれば、ＲＡＰを基点とした一連のチェインの整合性を検証するために用意されるセグメント・レコードおよびポインタ・レコードの容量が、上記キー値の整合性検証処理が指定されない場合には、１レコード当たり４バイトといったＲＡＰ識別値分の容量の増加のみで対応できるので、ワークレコード全体（データベースに関連する他の情報、セグメント・コード、ポインタ種別などの情報を含むことができる。通常、合計で約４０バイト程度である。）に比べても、１割程度の増加率となる。また、上記キー値の整合性検証処理が指定される場合であっても、一般には、数バイト程度のキー値分の増加量で対応できる。また仮にキー値が数十バイト程度まで増大した場合であっても、メモリ上に展開する場合に比べて、記憶容量や処理時間への影響の観点からも有利である。
【０１０５】
さらに本発明の実施形態によれば、セグメント・レコードおよびポインタ・レコードをソートして、突き合わせ処理するというロジックを利用して、ＲＡＰチェインの整合性を検証することができるため、上記メモリ上にテーブル展開する手法と比較しても、テーブル検索やテーブルへのコピーなど、有効キーの判定のための余分なロジックを付加する必要がないという利点も備えているといえる。
【０１０６】
なお、上述までの説明では、特定のデータ構造を有するデータベースを例に、本発明の実施形態の整合性検証機能について説明してきたが、本発明の整合性検証機能は、所定のモジュールにより導出される基点から所定のセグメントへのチェインが形成され得る、いかなる階層型データベースに対して適用することができる。
【０１０７】
なお、本発明につき、発明の理解を容易にするために各機能部および各機能部の処理を記述したが、本発明は、上述した特定の機能部が特定の処理を実行するほか、処理効率や実装上のプログラミングなどの効率を考慮して、いかなる機能部に、上述した処理を実行するための機能を割当てることができる。
【０１０８】
本発明の上記機能は、アセンブラ、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）、ＪａｖａＢｅａｎｓ（登録商標）、Ｊａｖａ（登録商標）Ａｐｐｌｅｔ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｅｒｌ、Ｒｕｂｙなどのレガシープログラミング言語またはオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、装置可読な記録媒体に格納して頒布または伝送して頒布することができる。
【０１０９】
これまで本発明を、特定の実施形態をもって説明してきたが、本発明は、実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【符号の説明】
【０１１０】
５０…メインフレーム、５２…中央処理装置、５３…オペレーティング・システム、５４…主記憶装置、５６…記憶制御部、５８…チャネル・サブシステム、６０…制御装置、６２…入出力デバイス、６４，６６，６８，７８…バス、７２…チャネルパス、７４…チャネル、７６…データ転送路、１００…データベース管理装置、１１０…データベース、１２０…読込部、１２２…ＲＡＰレコード作成部、１２４…ルート・レコード作成部、１３０…ランダム化モジュール、１４０…検証部、１４２…チェイン検証部、１５０…エラー出力部、１６０…ポインタ・レコードのセット、１７０…セグメント・レコードのセット、２００…ブロック、２１０…ＲＡＰ、２２０…ルートセグメント、２２２…接頭部、２２４…データ部、２２６…ＳＣフィールド、２２８…ポインタ域フィールド、２３０…ＰＴＦフィールド、２３２…キー・フィールド、２５０…ポインタ・レコード、２５２…ＲＡＰ識別値、２５４…ポイント先ＲＢＡ、２６０…セグメント・レコード、２６２…開始ＲＢＡ、２６４…ＲＡＰ識別値、２７０…ポインタ・レコード、２７２…ポイント先ＲＢＡ、２７４…ＲＡＰ識別値、２８０…ポインタ・レコード、２８２…ＲＡＰ識別値、２８４…ポイント先ＲＢＡ、２８６…キー値、２９０…セグメント・レコード、２９２…開始ＲＢＡ、２９４…ＲＡＰ識別値、２９６…キー値、３００…ポイント・レコード、３０２…ポイント先ＲＢＡ、３０４…ＲＡＰ識別値、３０６…キー値、３０８…ポイント元ＲＢＡ、５００…階層型データベース、５１０…ブロック、５２０…ＲＡＰ、５３０…ルートセグメントＡ、５３２…接頭部、５３２ａ…ポインタ域フィールド、５３６…ＰＴＦポインタ、５４０…ルートセグメントＢ、５４６…ＰＴＦポインタ、５５０…ルートセグメントＣ
【図１】
2010257226.tif 000003
【図２】
2010257226.tif 000004
【図３】
2010257226.tif 000005
【図４】
2010257226.tif 000006
【図５】
2010257226.tif 000007
【図６】
2010257226.tif 000008
【図７】
2010257226.tif 000009
【図８】
2010257226.tif 000010
【図９】
2010257226.tif 000011
【図１０】
2010257226.tif 000012
【図１１】
2010257226.tif 000013
【図１２】
2010257226.tif 000014