説明

情報処理装置、情報処理方法、プログラムおよび記録媒体

【課題】 階層型データベースに対し定義される索引データベースの整合性の検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体を提供すること。
【解決手段】本発明の情報処理装置10は、階層型データベース12を構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部20と、分割先ポインタ・レコードと分割先データ部レコードとを比較して、分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、分割先データ部のキー情報を渡すポインタ検証部(22,32)と、索引に含まれる索引キー情報と、渡されたキー情報とを比較して、索引キー情報の整合性を検証するキー検証部24とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースに関連する整合性の検証処理に関し、より詳細には、階層型データベースに対し定義される索引データベースの整合性の検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体に関する。
【背景技術】
【0002】
従来より、階層型データベース・システムは、必要資源が少なく、高速、かつ応答時間の見積り精度が高いことから、大規模データベースに用いられている。階層型データベース・システム(例えば、IBM(登録商標)IMS DL/I)は、各々のデータ・エレメントをツリー構造で管理する。この階層型データベースにおいて、最小のデータ単位をセグメント・オカレンス(以下、単にセグメントとして参照する。)と呼び、ツリー構造の最上位に位置するセグメントは、ルートセグメントと呼ぶ。ルートセグメントは、従属セグメントを有し、その従属セグメントは、さらに従属セグメントを有することができる。このようなツリーの集合が階層型データベースを構成している。
【0003】
階層型データベースのツリー構造は、それぞれのセグメントについて、その従属セグメントの保存先アドレスを示すポインタ値により維持される。上記保存先アドレスは、例えば、相対バイトアドレス(RBA:Relative Byte Address)によって指定される。これは、データベースを記録するパーティションの特定のアドレスを基準としたアドレスの相対値である。ポインタ値は、データベースを記録するディスク上のセグメント・データにおいて、接頭部に記録され、データベース管理システムにより管理される。
【0004】
セグメントへのアクセスは、通常、ルートセグメントから階層順にポインタをたどることにより行われるが、索引を定義することにより、セグメントをそのキーによって定義されている順序とは異なる順序で処理することが可能とされる。索引のデータベース(以下、索引データベースとして参照する)は、IPS(Index Pointer Segment)と呼ばれるタイプのセグメントから構成され、IPSは、その接頭部に検索するセグメント(ITS;Index Target Segment)のRBAをポインタ値として格納し、そのデータ部に、呼び出しの際に修飾子として使用する1以上のフィールドを有するセグメント(ISS;Index Source Segment)のキー値を格納している。これにより、ISSからITSへのチェインが張られることとなる。
【0005】
階層データベースには、上記ポインタ値が数多く存在し、その整合性を維持することは必須である。しかしながら、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により、ポインタ値に不整合が生じる場合がある。そこで、階層型データベースでは、ポインタの整合性を検証するポインタチェック・プログラムを定期的に実行している。
【0006】
このような、ポインタチェック・プログラムとしては、例えば、IBM(登録商標) IMS HP Pointer Checkerを挙げることができ、このプログラムは、デーベース管理システムとは独立にポインタ値の整合性チェックを行っている(非特許文献1)。この整合性の検証処理は、データベース内のポインタのチェインをたどって読み込むのではなく、ディスク上のデータの先頭から順次読み込んで、スキャンし、全セグメントの開始RBAと、そのセグメントを指すポインタ値とを抽出し、その2種類の値を比較することにより、ポインタ値の不整合を検出する。
【0007】
また、データベースが索引付けされている場合、索引データベース内のポインタ値に加え、索引キー値の整合性も維持されている必要がある。そこで、階層型データベースに対してキー値の整合性を検証するキーチェック・プログラムも定期的に実行している。キーチェック・プログラムでは、索引付けされたデータベースのスキャン中に、ISSのキーを抽出し、IPSにおけるキーの値と比較することにより、キー値の不整合を検出する。
【非特許文献1】”IMS High Performance Pointer Checker for z/OS, V2R1, User's Guide Vol. 1”、[online]、2006年4月3日、[2008年8月25日検索]、インターネット<URL; http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/fabp1b10/CCONTENTS>
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、従来のポインタ・プログラムおよびキーチェック・プログラムでは、ある特定の状況では、キーチェックを実施することができなかった。階層型データベースのセグメントには、固定長のフォーマットおよび可変長フォーマットのセグメントが存在する。そして、通常、単一のセグメントを構成する接頭部とデータ部とは、連続してディスク上に保存される。しかしながら、可変長フォーマットにおいて、更新されてデータ部の長さが変更されると、更新データがアロケートされたサイズを超えてしまう場合など、ディスク上の元の位置に収まりきらない場合が発生する。この場合、データベース管理システムは、単一のセグメントを構成する接頭部とデータ部とを分割して保存し、接頭部にデータ部の保存位置を示すポインタ値を作成する。このような分割されたセグメントをスプリット・セグメントと呼ぶ。
【0009】
そして、スプリット・セグメントが削除される場合、データベース管理システムは、スプリット・セグメントの接頭部については、その内容をクリアしてフリー・スペースとするか、あるいは削除済みか否かを示す削除バイト(Delete Byte;DB)中の削除ビットを、非削除を示す値(ON)にする。そして、ISSを削除する場合には、対応するIPSも削除する。しかしながら、データベースの処理効率の観点から、ディスク上の他の保存位置へのシークを要するスプリット・セグメントのデータ部の削除処理が行われないことがある。
【0010】
従来のポインタ値の整合性の検証処理では、ブロック毎にデータベースを読み込みながらスキャンを行うため、スプリット・セグメントのデータ部を見つけたとしても、データ部だけでは、当該データ部に対応するセグメントが実際に削除済みであるか否かを判断することができなかった。つまり、続くキー値の整合性の検証処理において、IPSのキー値の不一致を検出しても、スプリット・セグメントが削除されているためなのか、何らかのエラーが発生しているのかを判断することができなかった。
【0011】
実際には、キーチェック・プログラムは、ISSが削除済みにもかかわらず、不整合としてエラーを報告してしまう可能性があった。また、非特許文献1に開示されるIBM(登録商標) IMS HP Pointer Checkerでは、スプリット・セグメントのISSを見つけた場合に、キー値の整合性の検証処理を中止していた。
【0012】
本発明は、上記問題点に鑑みてなされたものであり、データベース中に分割されたセグメントが存在する場合であっても、階層型データベースの索引について、正しくキー情報の不整合を検出可能な整合性検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体を提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明では、上記課題を解決するために、まず、階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報(VLSポインタ値)を含む分割先ポインタ・レコード(VLSポインタ・レコード)と、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコード(VLSセグメント・レコード)とを作成する。そして、分割先ポインタ・レコードと分割先データ部レコードとを比較して、分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合にのみ、分割先データ部のキー情報を、後続する索引キー情報の整合性を検証する処理に渡す。
【0014】
データベース管理システム部は、分割されたセグメント・データを削除する際に、トランザクションのパフォーマンスの観点から、その分割先データ部を残す場合がある。上記構成によれば、セグメント・データが削除されたにもかかわらず分割先データ部を検出してしまった場合にも、その削除が正しく検知され、有効なキー情報のみが後続する索引キー情報の整合性を検証する処理に渡されることとなり、ひいては、分割されたセグメントがデータベース中に存在する場合であっても、階層型データベースに対して定義される索引において、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により発生しうるポインタ値およびキー値の不整合を好適に検出することが可能となる。
【0015】
また上記構成では、分割されたセグメント・データにおける接頭部−データ部間の分割ポインタ情報の整合性を検証するために用意される分割先データ部レコード(VLSセグメント・レコード)中に、該分割先データ部に収容されるキー情報を含ませるのみで、削除済みの分割先データ部を正しく検出することが可能となる。そのため、分割されたセグメント・データに対応するために確保しなければならない記憶領域の増加を、最小限に抑えることが可能とされる。
【0016】
本発明では、セグメント・データを読み込む処理の際に、索引対象である非分割のセグメント・データが見つかった場合に、そのセグメント・データに含まれるキー情報を、後続する索引キー情報の整合性を検証する処理に渡すことができる。また本発明では、分割先データ部レコードに含まれる保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合に、当該セグメント・データが削除済みであるとして処理を進めることができる。また本発明では、キー検証処理の際に、渡されたキー情報に一致する索引キー情報が索引中に存在しない場合、出力部に通知してエラーを出力させることができる。上記構成により、分割先データ部に対応した接頭部が削除されている場合に誤ったエラー報告してしまうことがなく、管理者は、正確なエラーレポートを得ることが可能とされる。
【0017】
さらに本発明では、分割先データ部レコードおよび分割先ポインタ・レコードをソートして、突き合わせ処理することにより、分割先ポインタ情報の不整合を検出することができる。上記構成によれば、分割先ポインタ情報の不整合を検出するためのロジックを利用して、検証処理に渡すべき有効なキー情報を判定しているため、余分なロジックを付加する必要がないという利点も備えているといえる。
【0018】
さらに本発明では、階層型データベースに対して定義される索引の整合性を検証する処理を、データベース管理システムとは別の階層型データベースにアクセス可能な情報処理装置上に実現することができる。また、索引の整合性を検証する処理を実装する情報処理装置上に階層型データベースを管理するデータベース管理システム部をさらに含むこともできる。このデータベース管理システム部は、分割されたセグメント・データを削除する場合、その分割先データ部を残すことができる。これにより、整合性の検証処理を可能としつつ、分割されたセグメントの存在が許容されるため、階層型データベースに対するトランザクションの効率の低下を防止することができる。
【0019】
また本発明では、上記索引は、索引対象のセグメント・データを指す索引ポインタ情報と、索引キー情報とを含む索引セグメント・データを含む索引データベースとして構成することができる。また、上記索引キーの整合性を検証する処理を、セグメント・データの保存位置情報を含む通常セグメント・レコードと、セグメント・データ内のポインタ情報を含む通常ポインタ・レコードとを突き合わせて、ポインタ情報の整合性を検証する処理フローに、組み込むことができる。
【発明を実施するための最良の形態】
【0020】
以下、本発明について実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。なお、以下の本発明の実施形態では、階層型データベースに対し定義される索引データベースの整合性検証機能を実現するデータベース管理装置を例として説明する。
【0021】
図1は、本発明の実施形態におけるデータベース管理装置10の機能ブロック図である。データベース管理装置10は、概ねメインフレームなどの大型汎用コンピュータとして構成され、データベース12に対しアクセスするとともに、データベース12の整合性を検証する。図1に示すデータベース管理装置10に含まれる各機能部(詳細は後述する。)は、メモリ上にプログラムを展開し、プログラムの実行により各ハードウェア資源を動作制御することによって、データベース管理装置10上に実現される。
【0022】
データベース12は、データを木構造で表したデータモデルに従う階層型データベースとして構成されており、IMSなどのデータベース管理システム(DBMS)により管理されている。データベース12は、I/Oインタフェースを介してデータベース管理装置10に接続されたディスク装置など、ストレージ・デバイスの記憶領域により提供される。データベース12中のデータは、セグメント・オカレンス(以下、単にセグメントとして参照する。)と呼ばれるデータ群から構成されている。そして、各セグメントは、他のセグメントに対するポインタ値と、適宜キー値を含むデータ・エレメントとを含んで構成されている。
【0023】
以下、図2および図3を参照して、データベース12内のデータ構造を説明する。図2は、階層型データベースのデータ構造を示す。階層型データベース100は、複数のセグメントを記録している。図2に示すセグメント110は、ルート部分を示すルート・アンカー・ポイント(RAP;Root Anchor Point)102から指されており、ルートセグメントと呼ばれる。セグメント110は、接頭部とデータ部とから構成されており、接頭部には、セグメントのタイプを識別するセグメント・コード(SC;Segment Code)を保持するSCフィールド110a、そのセグメントが削除されているか否かを示す削除ビットと、そのセグメントがスプリットされているか否かを示すスプリット・ビットとを含む削除バイト(DB;Delete Byte)を保持するDBフィールド110b、およびポインタ域フィールド110cを有している。データ部には、1以上のデータ・エレメントを収容するデータ・フィールド110dを有している。
【0024】
セグメント110は、所定の保存先アドレスにて示される保存位置を開始点としてディスク上に保存されている。ここで、保存先アドレスとは、例えば、データベース12の所定の基準アドレスと比較したセグメント110の先頭アドレスの位置、つまり相対バイトアドレス(RBA;Relative Byte Address)をいう。図2に示すセグメント110のポインタ域フィールド110cには、それぞれセグメント120−1およびセグメント120−2など他のセグメントを指すポインタ値(保存先アドレス)を含んでいる。
【0025】
通常、単一のセグメントの接頭部とデータ部とは、連続してディスク上に保存される。しかしながら、データベース管理システムは、可変長フォーマットにおいて、更新によりデータ部の長さが変更され、アロケートされたサイズを超えてしまう場合などには、セグメントを分割して、スプリット・セグメントを生成する。図2には、スプリット・セグメント130が示されている。セグメントを構成する接頭部132とデータ部134とは、ディスク上の離間した位置に保存されている。スプリット・セグメント130では、接頭部において、SCフィールド132a、DBフィールド134bおよびポインタ域フィールド132cの直後に、分割先のデータ部134の保存先アドレスを指すVLS(Variable Length Segment)ポインタ値を保持するVLSポインタ・フィールド132dが付加されている。そして、データ部134は、SCフィールド134a、DBフィールド134b、およびデータ・フィールド134cを含んで構成される。データ部134のDBフィールド134bは、分割先のデータ部であることを示す値が書き込まれている。
【0026】
本実施形態のデータベース12では、各セグメントの接頭部に記録されたポインタ値を辿ることにより、順次、他のセグメントにアクセスすることができる階層構造を構成しており、また各スプリット・セグメントの接頭部の直後に付されたVLSポインタ値を辿ることにより、分割先のデータ部にアクセスすることができる構造を構成している。
【0027】
セグメントが削除される場合、DBMSは、セグメントのDBフィールド中の削除ビットの値を、削除を示す値(ON)に書き換えるか、またはセグメントの記憶領域をフリー・スペースとして開放して、削除を実施する。そして、上記スプリット・セグメント130が削除される場合、DBMSは、スプリット・セグメント130の接頭部132については、削除を実施するが、接頭部が削除されていればデータ部には辿られないため、トランザクションのパフォーマンスを優先させる観点から、スプリット・セグメント130のデータ部134についてまで削除処理を実施しない場合がある。
【0028】
図3は、索引が定義されるデータベースおよび該データベースに対し定義される索引データベースのデータ構造を一例として示す図である。図3には、索引付けされたデータベース(以下、索引付きデータベースとして参照する。)140と、該索引付きデータベース140に対して定義された索引データベース150とが示されている。図3は、索引を用いたセグメントのアクセス方法についても示す。
【0029】
図3に示す索引付きデータベース140には、ルート・セグメントであるCOURSEセグメント142、その従属セグメントであるCLASSセグメント144、さらにそれに従属するINSTRセグメント146およびSTUDENTセグメント148による階層構造が示されている。ここで、「COURSE」、「CLASS」、「INSTR」および「STUDENT」は、セグメントのタイプを示し、それぞれ異なるセグメント・コードが割り当てられる。ここで、セグメント・コードは、各セグメントのタイプに割り当てられる番号である。また、例えば「CLASS」タイプのセグメントには、「Math」、「Chemistry」など、特定のセグメント・オカレンスが含まれている。図3に示す索引データベース150には、索引を構成するセグメント152−1〜3が示されている。
【0030】
DBMSは、索引を設けるために、インデックス・ソース・セグメント(ISS:Index Source Segment)、インデックス・ターゲット・セグメント(ITS:Index Target Segment)、およびインデックス・ポインタ・セグメント(IPS;Index Pointer Segment)を定義付ける。図3に示すデータ構造では、CURSEセグメント142がITS、STUDENTセグメントがISS、索引データベース150内のセグメント152−1〜3がIPSとなる。
【0031】
IPS152は、その接頭部に、DBフィールド152aおよび索引ポインタ・フィールド152bを有し、そのデータ部に、検索のためのキー値を格納する索引キー・フィールド152cを有する。IPS152の索引ポインタ・フィールド152bは、データベース12を利用するアプリケーションが、索引付きデータベース140から取り出そうとしているセグメントを指す保存先アドレスを索引ポインタ値として保持する。IPS152の索引キー・フィールド152cは、アプリケーションが呼び出し中に修飾子として使用する索引キー値を保持する。
【0032】
なお、図3に示す例では、保存先アドレス(RBA)を用いる直接ポインタにより索引付けする場合を例示しているが、シンボリック・ポインタを用いることもできる。その場合には、接頭部の索引ポインタ・フィールド152bの代わりに、取り出そうとしているセグメントを指すシンボリック・ポインタを保持する連結キー・フィールドをデータ部に含んでいてもよい。また、IPS152のデータ部には、図3に示したもの以外の他のフィールドを適宜付加することもできる。なお、以下の説明では、保存先アドレス(RBA)を用いる場合の実施形態を用いて説明する。
【0033】
ITSは、索引対象となる索引付きデータベース140の中に存在し、アプリケーションが取り出す必要のあるセグメントであり、IPSが指すセグメントである。ITSは、保存先アドレスまたはシンボリック・ポインタを用いて直接アクセスされる。ISSも、索引対象となる索引付きデータベース140の中に存在し、IPSが持つ索引キー・フィールドに対応するフィールドを有している。索引付けにより、ISSのデータ部からキー値がコピーされて、IPSの索引キー・フィールドに置かれる。IPS内の索引キー値によりISSとIPSとが関連付けられ、IPS内の索引ポインタ値によりITSとIPSとが関連付けられ、これによりISSからITSへのチェインが張られる。
【0034】
再び図1を参照すると、本発明の実施形態のデータベース管理装置10は、整合性を検証するために、データベース12を構成するセグメントを読み込んで、後述する各種ワークレコードを作成する読込部20と、セグメントが含むポインタ値の整合性を検証するポインタ検証部22と、セグメントが含むキー値の整合性を検証する索引キー検証部24と、エラー出力部26とを含んで構成される。各種ワークレコードは、データベース管理装置10の主記憶装置やディスク装置などの記憶領域に格納されることとなる。
【0035】
ポインタ検証部22は、より具体的には、通常ポインタ検証部28と、索引ポインタ検証部30と、分割ポインタ検証部32とを含んで構成される。通常ポインタ検証部28は、索引付きデータベース140を含む検索対象となり得るデータベースにおいて、セグメント間のポインタの整合性を検証し、一方、分割ポインタ検証部32は、スプリット・セグメントにおける接頭部−データ部間のポインタの整合性を検証する。索引ポインタ検証部30は、上記索引付きデータベース140および上記索引データベース150間での索引ポインタの整合性を検証する。
【0036】
上記読込部20は、索引付きデータベース140を構成するセグメントを含むブロックを順次読み込んで、セグメントを識別し、有効なセグメントの保存先アドレスおよびセグメント・コードを含むワークレコード(以下、セグメント・レコードとして参照する。)を作成し、通常ポインタ検証部28および索引ポインタ検証部30へ渡す。また、読込部20は、識別したセグメントから、そのセグメントの接頭部にあるポインタ域フィールドに保持されるポインタ値、および該ポインタ値が指すセグメント(以下、ポイント先セグメントとして参照する。)のセグメント・コードを含むワークレコード(以下、ポインタ・レコードとして参照する。)を作成し、通常ポインタ検証部28へ渡す。通常ポインタ検証部28は、渡された上記ワークレコードを用いてセグメント間のポインタの整合性を検証する。読込部20は、さらに、セグメントがISSである場合には、そのセグメント・コード、およびデータ・フィールドに収容されるキー値を含むワークレコード(キー・レコードとして参照する。)を作成し、索引キー検証部24へ渡す。
【0037】
読込部20は、さらに、読み込み処理中、ON状態のスプリット・ビットを検出することによって有効なスプリット・セグメントの接頭部を見つけると、対応するデータ部の保存位置を指すVLSポインタ値およびセグメント・コードを含むワークレコード(以下、VLSポインタ・レコードとして参照する。)を作成し、分割ポインタ検証部32へ渡す。また、読込部20は、読み込み処理中、分割先のデータ部であることを示す値の削除バイトを検出することによってスプリット・セグメントのデータ部を見つけると、そのデータ部の保存先アドレス、セグメント・コード、および適宜データ部に収容されるキー値を含むワークレコード(以下、VLSセグメント・レコードとして参照する。)を作成し、分割ポインタ検証部32へ渡す。分割ポインタ検証部32は、渡された上記ワークレコードを用いて、スプリット・セグメントの接頭部およびデータ部間のVLSポインタの整合性を検証する。分割ポインタ検証部32は、整合性が認められ、且つ対応するセグメントがISSで有る場合には、VLSセグメント・レコードを索引キー検証部24へ渡す。
【0038】
索引データベース150が定義される場合には、読込部20は、さらに、索引データベース150を構成するIPSを含むブロックを順次読み込んで、IPSの検索ポインタ・フィールド内の索引ポインタ値を含むワークレコード(IPSポインタ・レコードとして参照する。)を作成し、索引ポインタ検証部30へ渡す。また読込部20は、IPSのキー・フィールド内の索引キー値を含むワークレコード(IPSキー・レコードとして参照する。)を作成し、索引ポインタ検証部30へ渡す。索引ポインタ検証部30は、渡されたワークレコードを用いて、上記索引付きデータベース140および上記索引データベース150間での索引ポインタの整合性を検証する。
【0039】
索引キー検証部24は、読込部20から渡されたキー・レコード、および分割ポインタ検証部32から渡されたVLSセグメント・レコードを用いて、索引データベースおよび索引付きデータベース間での索引キー値の整合性を検証する。
【0040】
上記通常ポインタ検証部28、索引ポインタ検証部30、分割ポインタ検証部32、および索引キー検証部24は、それぞれ不整合を検出すると、検出したエラーをエラー出力部26へ通知する。エラー出力部26は、通知されたエラーをまとめて、例えば図示しない所定の管理端末にレポートとして報告する。
【0041】
以下、図4〜図9を参照して、階層型データベース、および該階層型データベースに対し定義される索引データベースの整合性検証機能の詳細について説明する。図4〜図6は、本発明の実施形態のデータベース管理装置10が実行する整合性検証処理を示すフローチャートである。図4および図5は、ポイントAにより、図5および図6は、ポイントBにより、処理フローが連結されている。図4に示す処理は、例えば、図示しない管理端末からの整合性の検証処理の開始要求、または所与のスケジュールにより呼び出されて、ステップS100から開始される。
【0042】
読込部20は、ステップS101では、索引付きデータベース140のブロックを読み込み、ステップS102では、読み込んだブロックからセグメントを識別する。ステップS103〜ステップS110の処理では、セグメントの種類に応じてワークレコードが作成される。図7は、図4に示したステップS103〜ステップS110によるワークレコードの作成処理を、用いるデータ構造とともに示す図である。図7には、通常のセグメント120、スプリット・セグメントの接頭部132、およびスプリット・セグメントのデータ部134が示されている。ステップS103では、削除ビットおよびスプリット・ビットを含む削除バイトの値を検査して、処理を分岐させる。
【0043】
再び図4を参照すると、ステップS103で、識別されたセグメントが、スプリット・セグメントではない通常のセグメントである場合(非スプリット・セグメント)には、ステップS104へ処理が進められる。ステップS104では、識別されたセグメントのDBフィールド中の削除ビットの値が削除を示す値(ON)であるか、非削除を示す値(OFF)であるかを判定する。ステップS104で、非削除を示す値(OFF)であると判定された場合(YES)は、ステップS105へ処理を進める。ステップS105では、読込部20は、セグメントの保存先アドレスを取得し、またセグメントを、セグメントの接頭部のポインタ域フィールドに含まれるポインタ値に分解し、セグメント・レコードおよびポインタ・レコードを作成し、通常ポインタ検証部28および索引ポインタ検証部30へ渡す。
【0044】
ステップS106では、さらに、データベースの構造を定義するスキーマを参照して、セグメントがISSであるか否かを判定する。セグメントの索引付けは、セグメント・コードを指定することによって行われる。したがって、セグメントの接頭部にあるセグメント・コードを調べることにより、そのセグメントがISSであるか否かが判定される。
【0045】
ステップS106で、ISSであると判定された場合(YES)には、ステップS107へ処理を進める。ステップS107では、読込部20は、セグメントのデータ部のデータ・フィールドに含まれるキー値を取得し、キー・レコードを作成し、索引キー検証部24へ渡し、ステップS112へ処理を進める。一方、ステップS104で、削除を示す値(ON)であると判定された場合(NO)には、直接ステップS112へ処理を進められる。またステップS106で、ISSではないと判定された場合(NO)にも、同様に、直接ステップS112へ処理を進められる。
【0046】
図7に示すように、本発明の実施形態による読込部20は、通常のセグメント120を識別して、その削除ビットが非削除を示す値(OFF)である場合には、セグメント間のポインタの整合性を検証するために、その開始位置RBAおよびSCフィールドの値からセグメント・レコード160を作成し、またポインタ域フィールドの値からポインタ・レコード162を作成する。なお、ポイント先セグメントのセグメント・コードは、好適には、ポインタ域フィールドのデータ構造から求めることができる。さらに、読込部20は、識別した通常のセグメント120がISSである場合には、SCフィールドの値、およびデータ・フィールドに収容されるキー値を取得し、キー・レコード164を作成する。
【0047】
図4を再び参照すると、ステップS103で、識別されたセグメントが、スプリット・セグメントの接頭部である場合には、ステップS108へ処理が進められる。ステップS108では、スプリット・セグメントの接頭部内のDBフィールドを読み、削除ビットの値が削除を示す値(ON)であるか、非削除を示す値(OFF)であるかを判定する。ステップS108で、非削除を示す値(OFF)であると判定された場合(YES)は、ステップS109へ進める。読込部20は、ステップS109では、セグメントの接頭部のポインタ域フィールドに含まれるポインタ値に分解し、セグメント・レコードおよびポインタ・レコードを作成し、通常ポインタ検証部28および索引ポインタ検証部30へ渡す。さらに、ステップS110では、読込部20は、VLSポインタ・フィールドに保持されるVLSポインタ値を取得し、VLSポインタ・レコードを作成し、分割ポインタ検証部32に渡し、ステップS112へ処理を進める。一方、ステップS108で、削除を示す値(ON)であると判定された場合(NO)には、直接ステップS112へ処理を進められる。
【0048】
図7に示すように、読込部20は、スプリット・セグメントの接頭部132を識別して、その削除ビットが非削除(OFF)を示す場合には、その開始位置RBAおよびSCフィールドの値を取得し、セグメント・レコード160を作成し、またポインタ域フィールドの値を取得し、ポインタ・レコード162を作成する。加えて読込部20は、スプリット・セグメントの接頭部132のSCフィールドおよびVLSポインタ・フィールドの値を取得し、VLSポインタ・レコード166を作成する。
【0049】
図4を再び参照すると、ステップS103で、識別されたセグメントが、スプリット・セグメントのデータ部である場合には、ステップS111へ処理が進められる。ステップS111では、読込部20は、スプリット・セグメントのデータ部の保存先アドレス、SCフィールド、データ・フィールドの値からVLSセグメント・レコードを作成し、分割ポインタ検証部32へ渡し、ステップS112へ処理を進める。
【0050】
図7に示すように、読込部20は、スプリット・セグメントのデータ部134を識別して、その開始位置RBA、SCフィールドの値、および適宜データ・フィールドが収容するキー値を取得し、VLSセグメント・レコード168を作成する。
【0051】
図4を再び参照すると、ステップS112では、読込部20は、当該ブロックの中に、次に処理すべきセグメントが残されているか否かを判定する。ステップS112で、次に処理すべきセグメントが存在する場合(YES)には、ステップS102へループさせ、次のセグメントの処理へ進める。一方、ステップS112で、次に処理すべきセグメントがない場合(NO)には、ステップS113へ処理を進める。
【0052】
ステップS113では、読込部20は、索引付きデータベース140に、次に処理すべきブロックが残されているか否かを判定する。ステップS113で、次に処理すべきブロックがある場合(YES)には、ステップS101へループさせ、次のブロックに対する処理へ進める。一方、ステップS113で、次に処理すべきセグメントがない場合(NO)には、ポイントAへ処理を進める。
【0053】
図5は、図4に示したポイントA以降の処理フローを示す。ステップS200では、通常ポインタ検証部28は、渡されたセグメント・レコード160およびポインタ・レコード162とを用いて、索引付きデータベース140内のセグメント間のポインタの整合性を検証する。本発明の実施形態では、セグメント間のポインタの整合性検証する手法としては、特に限定されるわけではないが、好適には、セグメント・レコード160およびポインタ・レコード162を、セグメント・コードおよび保存先アドレスの値をソートキーとしてソートマージし、ポインタ値とセグメンの開始RBAの値とを比較し、これらの値が一致する組合せが見つかり、かつセグメント・コードが一致すれば、ポインタの整合性が有りとし、一方、一致する組合せが存在しないこと、およびセグメント・コードが一致しないことをもって、ポインタの不整合を検出するという手法を使用することができる。なお、セグメント間のポインタ整合性の検証処理自体の具体的実装ついては、これ以上の詳細な説明は省略する。
【0054】
ステップS201〜ステップS214の処理では、分割ポインタ検証部32は、渡されたVLSセグメント・レコード168およびVLSポインタ・レコード166とを用いて、スプリット・セグメントの接頭部−データ部間のVLSポインタの整合性を検証する。本発明の実施形態では、接頭部−データ部間のVLSポインタの整合性を検証する手法としては、好適には、VLSセグメント・レコード168およびVLSポインタ・レコード166を、セグメント・コードおよび保存先アドレスの値をソートキーとしてソートマージして、分割ポインタ値と分割先の開始RBAの値とを比較し、この値に一致する組合せが見つかり、かつセグメント・コードが一致すれば、ポインタの整合性があり、これに対して、一致する組合せが存在しないこと、およびセグメント・コードが一致しないことをもって、不整合を検出するという手法を使用することができる。また、その際には、VLSセグメント・レコード168に対応するVLSポインタ・レコード166が存在しない場合には、そのスプリット・セグメントのデータ部がその接頭部において既に削除済みであるとして、エラーを報告せずに処理を進める。
【0055】
以下、接頭部−データ部間の分割ポインタの整合性の検証処理について、より具体的に説明する。ステップS201では、分割ポインタ検証部32は、VLSセグメント・レコード168およびVLSポインタ・レコード166を、それぞれRBAおよびSCをソートキーとしてソートする。本実施形態では、RBAを主のソートキーとして、昇順にソートする。ステップS202では、ソートしたワークレコードの先頭の組合せから処理対象に設定する。ステップS203では、分割ポインタ検証部32は、処理対象の組合せを突き合わせて、VLSセグメント・レコード168が保持するデータ部の保存先アドレスと、VLSポインタ・レコード166が保持するVLSポインタ値とを比較する。
【0056】
ステップS204では、突き合わせたデータ部の保存先アドレス(RBA)とVLSポインタ値(RBA)とが一致するか否かを判定する。ステップS204で、RBAの値が一致する場合(YES)には、ステップS205へ処理を進める。ステップS205では、処理対象の組合せにおいてセグメント・コードが一致するか否かを判定する。ステップS205で、セグメント・コードの値が一致すると判定された場合(YES)には、ステップS206へ処理を進める。ステップS206では、データベースの構造を定義するスキーマを参照して、対応するスプリット・セグメントがISSであるか否かを判定する。ステップS206で、ISSであると判定された場合(YES)には、ステップS207へ処理を進める。
【0057】
ステップS207では、分割ポインタ検証部32は、処理対象のVLSセグメント・レコードを索引キー検証部24へ渡す。一方、ステップS206で、対応するスプリット・セグメントがISSではないと判定された場合(NO)には、直接ステップS208へ処理を進める。ステップS208では、VLSセグメント・レコード168およびVLSポインタ・レコード166を進めて、次ぎの組合せに処理対象を設定し、ステップS214へ処理を進める。ステップS214では、VLSセグメント・レコード168およびVLSポインタ・レコード166の処理対象の組合せが終端に達したか否かを判定する。ステップS214で、終端に達したと判定された場合(YES)には、ポイントBへ処理を渡し、一方、終端に達していないと判定された場合(NO)には、ステップS203へ処理をループさせ、次の組合せの処理対象に対する突き合わせを実行する。
【0058】
ステップS205で、セグメント・コードが不一致であった場合(NO)には、ステップS209へ処理を進める。ステップS209では、分割ポインタ検証部32は、セグメント・コードが不一致であるとして、エラー出力部26にその旨ポインタ・エラーを報告し、ステップS208へ処理を進め、VLSセグメント・レコード168およびVLSポインタ・レコード166を進めて、次ぎの組合せに処理対象を設定し、ステップS214へ処理を進める。
【0059】
一方、ステップS204で、RBAが不一致である場合(NO)には、ステップS210へ処理を進める。ステップS210では、VLSセグメント・レコード168側のRBAの値が小さいか否かを判定する。ここでは、処理対象のVLSセグメント・レコードに対応するVLSポインタ・レコード166が存在するか否かを判定している。ステップS210で、VLSセグメント・レコード168側のRBAの値が小さいと判定された場合(YES)、つまり、処理対象のVLSセグメント・レコード168に対応するVLSポインタ・レコード166が存在しないと判定された場合には、ステップS211へ処理を進める。ステップS211では、VLSセグメント・レコード168を進めて、次ぎの組合せへ処理対象を設定する。
【0060】
一方、ステップS210で、VLSセグメント・レコード168側のRBAの値が大きいと判定された場合(NO)には、ステップS212へ処理を進める。この場合、ステップS211では、分割ポインタ検証部32は、ポインタが不整合であるとして、エラー出力部26にその旨ポインタ・エラーを報告する。ステップS213では、VLSポインタ・レコード166を進めて次ぎの組合せへ処理対象を設定し、ステップS214へ処理を進める。
【0061】
ステップS201〜ステップS214に示した処理により、各VLSセグメント・レコードに含まれるキー値のうち、VLSポインタの整合性が確認されたキー値のみが、索引キー検証部24に渡されることとなる。
【0062】
図6は、図5に示したポイントB以降の処理フローを示す。索引データベース150が定義される場合には、ステップS300〜ステップS304の処理により、索引データベース150内のIPSが読み込まれて、索引ポインタ値および索引キー値の整合性を検証するために、ワークレコードが作成される。
【0063】
読込部20は、ステップS300では、索引データベース150のブロックを読み込み、ステップS301では、読み込んだブロックからIPSを識別する。読込部20は、ステップS302では、識別されたセグメントのDBフィールドを読み、削除ビットの値が非削除を示す値(OFF)であれば、索引付きデータベース140および索引データベース150間の索引ポインタおよび索引キー値の整合性を検証するために、IPSポインタ・レコードおよびIPSキー・レコードを作成し、それぞれ索引ポインタ検証部30および索引キー検証部24へ渡す。
【0064】
図8は、図5に示したステップS302の処理によるワークレコードの作成処理を、用いるデータ構造とともに示す図である。図8に示すように、本発明の実施形態による読込部20は、IPS152を識別して、その削除ビットが非削除を示す値(OFF)である場合には、索引ポインタの整合性を検証するために、そのポインタ・フィールドの値からIPSポインタ・レコード170を作成し、またそのキー・フィールドの値からIPSキー・レコード172を作成する。
【0065】
再び図6を参照すると、ステップS303では、読込部20は、当該ブロックの中に次に処理すべきIPSが残されているか否かを判定する。ステップS303で、次に処理すべきIPSが存在する場合(YES)には、ステップS301へループさせ、次のIPSの処理へ進める。一方、ステップS303で、次に処理すべきIPSがない場合(NO)には、ステップS304へ処理を進める。
【0066】
ステップS304では、読込部20は、索引付きデータベース140に、次に処理すべきブロックが残されているか否かを判定する。ステップS304で、次に処理すべきブロックがある場合(YES)には、ステップS300へループさせ、次のブロックに対する処理へ進める。一方、ステップS304で、次に処理すべきセグメントがない場合(NO)には、ステップS305へ処理を進める。
【0067】
ステップS305では、索引ポインタ検証部30は、読込部20から渡されたIPSポインタ・レコード170と、セグメント・レコード160のうちITSに対応するレコードとを用いて、索引ポインタの整合性を検証する。本発明の実施形態では、索引ポインタの整合性検証する手法としては、特に限定されるわけではないが、好適には、IPSポインタ・レコード170と、ITSのセグメント・レコード160とを、保存先アドレスの値をソートキーとしてソートマージし、索引ポインタ値とセグメントの開始RBAの値とを比較し、これらの値が一致する組合せが見つかれば、ポインタの整合性がありとし、一致する組合せが存在しないことをもって、ポインタの不整合を検出するという手法を使用することができる。なお、索引ポインタ自体の整合性検証処理の具体的実装ついては、これ以上の詳細な説明は省略する。
【0068】
ステップS306〜ステップS310の処理では、索引キー検証部24は、図8に示すように、図4に示したステップS107の処理、および図5に示したステップS207の処理でそれぞれ渡されたキー・レコード164およびVLSセグメント・レコード168を用いて、索引付きデータベース140および索引データベース150間の索引キー値の整合性を検証する。本発明の実施形態では、索引キー値の整合性を検証する手法としては、好適には、渡されたVLSセグメント・レコード168およびキー・レコード164に含まれるキー値を比較し、この値に一致する組合せが見つかれば、ポインタの整合性があり、これに対して、一致する組合せが存在しないことをもって、不整合を検出するという手法を使用することができる。
【0069】
以下、索引キー値の整合性の検証処理について、より具体的に説明する。ステップS306では、渡されたVLSセグメント・レコード168およびキー・レコード164中のキー値を処理対象に設定する。ステップS307では、索引キー検証部24は、処理対象のキー値と、IPSキー・レコード172に含まれる索引キー値とを順次比較する。ステップS308では、索引キー検証部24は、一致するキー値がIPSキー・レコード172中に処理対象に存在するか否かを判定する。ステップS308で、一致するキー値がIPSキー・レコード172中に存在しないと判定された場合(NO)には、ステップS309へ処理を進める。ステップS309では、索引キー検証部24は、索引キー値が不整合であるとして、その旨キー・エラーをエラー出力部26に報告し、ステップS310へ処理を進める。
【0070】
一方、ステップS308で、一致するキー値がIPSキー・レコード中に存在すると判定された場合(YES)には、ステップS310へ処理を進める。ステップS310では、渡されたVLSセグメント・レコードおよびキー・レコード中に、次に処理すべきキー値が残っているか否かを判定する。ステップS310で、次に処理すべきキー値が残っていると判定された場合(YES)には、ステップS306へループさせ、次のキー値に対する処理を進める。一方、ステップS310で、次に処理すべきキー値が残っていないと判定された場合(NO)には、ステップS311で処理を終了させる。
【0071】
図9は、本発明の実施形態の整合性検証処理のうち、索引キー値の整合性を検証する処理を、用いるデータ構造とともに示す図である。図9には、ITS180−1〜3、ISSであるスプリット・セグメントの接頭部182−1〜3、およびISSであるスプリット・セグメントのデータ部184−1〜4を含んで構成される索引付きデータベース140が示されている。ここで、データ部184−4は、DBMSによるセグメントの際に、削除処理が実施されず残されたデータ部に対応する。また図9には、IPS186−1〜3を含んで構成される索引データベース150が示されている。
【0072】
図9に示す索引付きデータベース140が読み込まれると、VLSポインタ・レコードのセット190、およびVLSセグメント・レコードのセット192が作成される。VLSポインタ・レコードのセット190およびVLSセグメント・レコードのセット192がソートおよび突き合わせ処理されて、有効なペア194−1〜3と、削除済みレコード196と、その他、不整合レコードが特定される。本実施形態の索引キー検証処理では、そのうち有効なペア194のみが、有効キー値198−1〜3として索引データベース150内の索引キー値との整合性検証処理に渡される。引き続く索引キー値の整合性の検証処理では、削除済みにも関わらずエラー報告してしまうような不具合や、索引から削除されているべき索引キーを見逃してしまうような不具合が発生しない。すなわち、上述した実施形態の整合性検証処理では、スプリット・セグメントが存在する場合であっても、適切に索引キーの整合性の検証が実施可能となる。
【0073】
なお、上述した実施形態における整合性検証処理では、セグメント間のポインタおよび分割ポインタの整合性を検証した後に、索引データベース150を読み込む構成としたが、その順序は特に限定されるものではなく、他の実施形態では、索引付きデータベース140の読み込みと連続して、索引データベース150を読み込む構成とすることもできる。さらに、他の実施形態では、階層型データベースに対し定義される索引データベースの整合性検証機能のみを実施する場合には、ISSやITSではないセグメントのワークレコードや、ポインタ・レコードの作成を省略することもできる。
【0074】
図10は、データベース管理装置10のハードウェア構成を一例として示す。図10は、データベース管理装置10をメインフレーム50などの汎用大型コンピュータを用いて構成する場合を例に説明する。メインフレーム50は、少なくとも1つの中央処理装置52と、主記憶装置54と、記憶制御部56と、チャンネル・サブシステム58と、少なくとも1つの制御装置60と、少なくとも1つの入出力デバイス62a〜dとを含んで構成される。
【0075】
主記憶装置54は、入出力デバイス62a〜dから入力されるデータおよびプログラムを記憶する。そして、主記憶装置54は、中央処理装置52およびチャンネル・サブシステム58からアドレスの指定を受けると、そのアドレスに記憶しているデータを中央処理装置52およびチャンネル・サブシステム58へ送出する。主記憶装置54は、記憶しているデータを高速に読書可能に構成されており、これにより、中央処理装置52による高速演算処理が可能とされる。
【0076】
中央処理装置52は、メインフレーム50の全体を制御し、例えば、オペレーティング・システム53を動作させる。オペレーティング・システム53は、メインフレーム50におけるプログラムの実行および入出力処理を制御する。オペレーティング・システム53は、中央処理装置52上で動作する他のプログラムの実行を制御してもよい。例えば、本実施形態の整合性検証処理に対応するプログラムに加え、階層型データベースを管理するためのDBMSプログラムを実行することができる。また、オペレーティング・システム53は、入出力デバイス62a〜dのそれぞれにおけるデータ転送を制御することもできる。
【0077】
記憶制御部56は、双方向または単方向に通信可能なバス64を介して中央処理装置52に接続される。記憶制御部56は、さらに、バス66を経由して、主記憶装置54に接続され、さらに、バス68を経由して、チャンネル・サブシステム58に接続される。記憶制御部56は、例えば、中央処理装置52またはチャンネル・サブシステム58から受領したアクセス要求を一時的に格納し、所定のタイミングでアクセス要求を主記憶装置54に送出する、所謂キューイング処理を行うことができる。
【0078】
チャンネル・サブシステム58は、それぞれ制御装置60に対してデータ転送路76を介して接続される。チャンネル・サブシステム58は、入出力デバイス62a〜dおよび主記憶装置54間でのデータ転送を制御する。これにより、中央処理装置52が入出力デバイス62a〜dとの間で通信するための処理負荷が軽減されるため、中央処理装置52による演算処理と、入出力デバイス62a〜dによる入出力処理とを並列に実行させることができ、もって、メインフレーム50を効率的に動作させることが可能となる。
【0079】
また、チャンネル・サブシステム58は、少なくとも1つのチャンネルパス72により、入出力デバイス62a〜dとのデータ転送を行う。それぞれのチャンネルパス72は、チャンネル・サブシステム58内に設けられたチャネル74を有する。また、それぞれのチャンネルパス72は、少なくとも1つの制御装置60と、データ転送路76とを有する。ここで、データ転送路76は、例えば、ESCON(登録商標;Enterprise Systems Connection Architecture)に基づくシリアルリンクとすることができる。また、データ転送路76は、ESCON(登録商標)に代えて、またはESCON(登録商標)に加えて、パラレルOEMIであってもよいし、FICON(登録商標;FIbre Connection)であってもよい。
【0080】
制御装置60は、バス78を介して入出力デバイス62a〜dの少なくとも1つに接続し、入出力デバイス62a〜dの少なくとも1つを制御する。制御装置60は、入出力デバイス62a〜dのそれぞれにおけるデータ転送のタイミングを制御することができる。
【0081】
入出力デバイス62a〜dのそれぞれは、制御装置60、チャンネル・サブシステム58、および記憶制御部56を順次経由して、主記憶装置54との間でデータ転送を行う。ここで、入出力デバイス62aは、具体的には、磁気テープドライブであり、入出力デバイス62b〜dは、ハードディスクドライブである。これに代えて、またはこれに加えて、入出力デバイス62a〜dのそれぞれは、パンチカードリーダ、ディスプレイ装置、キーボード、プリンタ、通信デバイス、各種センサ、またはその他の記憶装置であってもよい。入出力デバイス62のいずれか1つは、データベース12と接続され、アクセス制御を行うことができる。
【0082】
なお、上述までは、データベース管理装置10は、メインフレーム50として構成される場合を例として説明してきた。しかしながら、データベース管理装置10は、その他、ミッドレンジ・コンピュータ、ワークステーション、パーソナル・コンピュータなどとして構成することもできる。
【0083】
以上説明したように、本発明の実施形態によれば、データベース中に分割されたセグメント(スプリット・セグメント)が存在する場合であっても、階層型データベースの索引(索引データベース)について、正しくキー情報の不整合を検出可能な整合性検証処理を実行する情報処理装置、情報処理方法、プログラムおよび記録媒体が提供される。
【0084】
上述したように、本発明の実施形態の構成によれば、セグメントが削除されたにもかかわらずそのデータ部を検出してしまった場合にも、その削除が正しく検知され、有効なキー情報のみが後続する索引キー情報の整合性を検証する処理に渡されることとなり、ひいては、スプリット・セグメントがデータベース中に存在する場合であっても、索引付きデータベース140に対して定義される索引データベース150において、データベースのオペレーションミスや、ソフトウェアまたはハードウェアの欠陥により発生し得る索引キー値の不整合を好適に検出することが可能となる。したがって、DBMSは、スプリット・セグメントを削除する際に、不整合の検証処理可能にその分割先データ部を残すことができ、トランザクションのパフォーマンスの低下を好適に防止することができる。
【0085】
スプリット・セグメントに対応させて索引データベースの整合性を検証する処理としては、例えば、読み込み処理中、分割されたISSの接頭部のVLSポインタ、および分割されたISSのデータ部の保存先アドレスをメモリ上に確保したテーブルに別途それぞれコピーし、後にVLSポインタに一致する保存先アドレスを検索し、一致するものが見つかった場合にのみ、キー検証処理の対象とするという手法が考えられる。しかしながら、このメモリ上にテーブル展開する手法は、メモリ領域に関して限界を有し、スプリット・セグメントが数百万件となるケースでは、処理すべき索引付きデータベースおよび索引データベースが複数になると、さらに必要なメモリ領域が増大してしまい、大きな問題となる可能性がある。
【0086】
これに対して、本発明の実施形態によれば、スプリット・セグメントにおける接頭部−データ部間のVLSポインタ情報の整合性を検証するために用意されるVLSセグメント・レコード中に、データ部に収容されるキー情報を含ませるのみで、削除済みのスプリット・セグメントのデータ部を正しく検出することが可能となる。そのため、スプリット・セグメントに対応するために確保しなければならない記憶領域の増加を、最小限に抑えることが可能とされる。
【0087】
さらに本発明の実施形態によれば、VLSセグメント・レコードおよびVLSポインタ・レコードをソートして、突き合わせ処理するという、VLSポインタ情報の不整合を検出するためのロジックを利用して、検証処理に渡すべき有効なキー情報を判定しているため、削除済みであるか否かを別途調査する上記メモリ上にテーブル展開する手法と比較しても、テーブル検索やテーブルへのコピーなど、有効キーの判定のための余分なロジックを付加する必要がないという利点も備えているといえる。
【0088】
なお、本発明につき、発明の理解を容易にするために各機能部および各機能部の処理を記述したが、本発明は、上述した特定の機能部が特定の処理を実行する外、処理効率や実装上のプログラミングなどの効率を考慮して、いかなる機能部に、上述した処理を実行するための機能を割当てることができる。
【0089】
本発明の上記機能は、アセンブラ、C、C++、Java(登録商標)、Java(登録商標)Beans、Java(登録商標)Applet、Java(登録商標)Script、Perl、Rubyなどのレガシープログラミング言語またはオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、装置可読な記録媒体に格納して頒布または伝送して頒布することができる。
【0090】
これまで本発明を、特定の実施形態をもって説明してきたが、本発明は、実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【図面の簡単な説明】
【0091】
【図1】本発明の実施形態におけるデータベース管理装置の機能ブロック図。
【図2】階層型データベースのデータ構造を示す図。
【図3】索引データベースおよび該データベースに対し定義される索引データベースのデータ構造を一例として示す図。
【図4】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート(ポイントAまでの処理フロー)。
【図5】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート(ポイントAからポイントBまでの処理フロー)。
【図6】本発明の実施形態のデータベース管理装置が実行する整合性検証処理を示すフローチャート(ポイントB以降の処理フロー)。
【図7】ワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図8】索引に関するワークレコードの作成処理を、用いるデータ構造とともに示す図。
【図9】本発明の実施形態の整合性検証処理のうち、索引キー値の整合性を検証する処理を、用いるデータ構造とともに示す図。
【図10】データベース管理装置のハードウェア構成を一例として示す図。
【符号の説明】
【0092】
10…データベース管理装置、12…データベース、20…読込部、22…ポインタ検証部、24…索引キー検証部、26…エラー出力部、28…通常ポインタ検証部、30…索引ポインタ検証部、32…分割ポインタ検証部、50…メインフレーム、52…中央処理装置、53…オペレーティング・システム、54…主記憶装置、56…記憶制御部、58…チャンネル・サブシステム、60…制御装置、62…入出力デバイス、64,66,68,78…バス、72…チャンネルパス、74…チャネル、76…データ転送路、100…階層型データベース、102…RAP、110…セグメント、110a…SCフィールド、110b…DBフィールド、110c…ポインタ域フィールド、110d…データ・フィールド、120…セグメント、130…スプリット・セグメント、132…接頭部、132a…SCフィールド、132b…DBフィールド、132c…ポインタ域フィールド、132d…VLSポインタ・フィールド、134…データ部、134a…SCフィールド、134b…DBフィールド、134c…データ・フィールド、142,144,146,148…セグメント、150…索引データベース、152…IPS、152a…DBフィールド、152b…索引ポインタ・フィールド、152c…索引キー・フィールド、160…セグメント・レコード、162…ポインタ・レコード、164…キー・レコード、166…VLSポインタ・レコード、168…VLSセグメント・レコード、170…IPSポインタ・レコード、172…IPSキー・レコード、180…ITS、182…接頭部、184…データ部、186…IPS、190…VLSポインタ・レコード・セット、192…VLSセグメント・レコード・セット、194…有効ペア、196…削除済みレコード、198…有効キー

【特許請求の範囲】
【請求項1】
階層型データベースに対して定義される索引の整合性を検証する情報処理装置であって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と
を含む、情報処理装置。
【請求項2】
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡す、請求項1に記載の情報処理装置。
【請求項3】
前記ポインタ検証部は、前記分割先データ部レコードに含まれる前記保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合、削除済みであるとして処理を進める、請求項2に記載の情報処理装置。
【請求項4】
前記キー検証部は、渡された前記キー情報に一致する索引キー情報が前記索引中に存在しない場合、出力部に通知してエラーを出力させる、請求項3に記載の情報処理装置。
【請求項5】
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項4に記載の情報処理装置。
【請求項6】
階層型データベースを管理するデータベース管理システム部をさらに含み、
前記データベース管理システム部は、前記分割されたセグメント・データを削除する場合、その分割先データ部を残す、請求項5に記載の情報処理装置。
【請求項7】
階層型データベースに対して定義される索引の整合性を検証するための方法であって、情報処理装置が、
前記階層型データベースを構成する、分割されたセグメント・データの接頭部を読み込んで、該分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードを作成するステップと、
分割されたセグメント・データの分割先データ部を読み込んで、該分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードを作成するステップと、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報の整合性を検証するステップと、
前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を検証処理に渡すステップと、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するステップと
を実行する、情報処理方法。
【請求項8】
情報処理装置が、索引対象である非分割のセグメント・データに含まれるキー情報を前記索引キー情報の整合性を検証する処理へ渡すステップをさらに実行する、請求項7に記載の情報処理方法。
【請求項9】
前記分割先ポインタ情報の整合性を検証するステップでは、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項8に記載の情報処理方法。
【請求項10】
階層型データベースに対して定義される索引の整合性を検証するためのコンピュータ実行可能なプログラムであって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と
をコンピュータに実現するためのコンピュータ実行可能なプログラム。
【請求項11】
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡す、請求項10に記載のコンピュータ実行可能なプログラム。
【請求項12】
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出する、請求項11に記載のコンピュータ実行可能なプログラム。
【請求項13】
請求項10〜12のいずれか1項に記載のコンピュータ実行可能なプログラムを格納するコンピュータ可読な記録媒体。
【請求項14】
階層型データベースに対して定義される索引の整合性を検証する情報処理装置であって、
前記階層型データベースを構成するセグメント・データを読み込んで、分割されたセグメント・データの分割先を指す分割先ポインタ情報を含む分割先ポインタ・レコードと、分割先データ部の保存先アドレス、および該分割先データ部に含まれるキー情報を含む分割先データ部レコードとを作成する読込部と、
前記分割先ポインタ・レコードと前記分割先データ部レコードとを比較して、前記分割先ポインタ情報が整合し且つ対応するセグメント・データが索引対象である場合に、前記分割先データ部のキー情報を渡すポインタ検証部と、
前記索引に含まれる索引キー情報と、渡された前記キー情報とを比較して、前記索引キー情報の整合性を検証するキー検証部と、
階層型データベースを管理するデータベース管理システムとを含み、
前記読込部は、索引対象である非分割のセグメント・データに含まれるキー情報を前記キー検証部へ渡し、
前記ポインタ検証部は、前記分割先データ部レコードおよび前記分割先ポインタ・レコードをソートして、突き合わせ処理することにより、前記分割先ポインタ情報の不整合を検出し、また、前記分割先データ部レコードに含まれる前記保存先アドレスを指す分割先ポインタ情報を有した分割先ポインタ・レコードが存在しない場合、削除済みであるとして処理を進め、
前記キー検証部は、渡された前記キー情報に一致する索引キー情報が前記索引中に存在しない場合、出力部に通知してエラーを出力させ、
前記データベース管理システムは、前記分割されたセグメント・データを削除する場合、その分割先データ部を残す、情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2010−66793(P2010−66793A)
【公開日】平成22年3月25日(2010.3.25)
【国際特許分類】
【出願番号】特願2008−229722(P2008−229722)
【出願日】平成20年9月8日(2008.9.8)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100110607
【弁理士】
【氏名又は名称】間山 進也
【Fターム(参考)】