(57)【要約】【課題】  ソート処理を１回に抑えたままで、処理時間の短縮を可能にするシステムおよび方法を提供する。【解決手段】  このシステムは、複数のパーティションを有する階層型データベースに作成されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証するシステムである。このシステムは、ポインタを読み出す読出部３１と、ポインタをアドレス順にソートするソート部３２と、ポインタをパーティション毎に振り分ける振分部３３と、ポインタを、セグメント・データのセグメント識別子と該セグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション毎に並列に実行する２以上の照合部３４とを備える。【選択図】  図５
2010061604.tif 000002
【特許請求の範囲】
【請求項１】
複数のパーティションを有する階層型データベースに格納されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証するシステムであって、
前記セグメント・データを識別するためのセグメント識別子と該セグメント・データの保存先アドレスとを含む前記ポインタを、前記インデックスから読み出す読出部と、
読み出された前記ポインタをアドレス順にソートするソート部と、
ソートされた前記ポインタを、該ポインタが指示するセグメント・データが保存されるパーティションに応じて２以上のパーティション群に振り分ける振分部と、
振り分けられた前記ポインタを、セグメント・データのセグメント識別子と該セグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション群毎に並列に実行する２以上の照合部とを備える、システム。
【請求項２】
前記照合部は、前記パーティションと同数設けられ、前記振分部は、前記ソートされたポインタをパーティション毎に振り分ける、請求項１に記載のシステム。
【請求項３】
前記照合部の数が前記パーティションの数より少ない場合、前記照合部の少なくとも１つが、少なくとも２つのパーティションに保存されたセグメント・データを指示するポインタを処理するために、前記ソート部は、前記少なくとも２つのパーティションの各々を識別するために処理順識別子を割り振り、前記処理順識別子で表される処理順と前記アドレス順とでソートする、請求項１に記載のシステム。
【請求項４】
前記振分部により振り分けられたポインタを前記パーティション群に対応した前記照合部へ入力するために、一時的に該ポインタを記憶する２以上のキュー部をさらに備える、請求項１に記載のシステム。
【請求項５】
複数のパーティションを有する階層型データベースに作成されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証する方法であって、前記方法は、読出部と、ソート部と、振分部と、２以上の照合部とを備える整合性検証システムにより実行され、
前記読出部により、前記セグメント・データを識別するためのセグメント識別子と該セグメント・データの保存先アドレスとを含む前記ポインタを、前記インデックスから読み出すステップと、
前記ソート部により、読み出された前記ポインタをアドレス順にソートするステップと、
前記振分部により、ソートされた前記ポインタを、該ポインタが指示するセグメント・データが保存されるパーティションに応じて２つ以上のパーティション群に振り分けるステップと、
前記２以上の照合部により、振り分けられた前記ポインタを、セグメント・データのセグメント識別子と該セグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション群毎に並列に実行するステップとを含む、方法。
【請求項６】
前記照合部は、前記パーティションと同数設けられ、前記振り分けるステップでは、前記ソートされたポインタをパーティション毎に振り分ける、請求項５に記載の方法。
【請求項７】
前記照合部の数が前記パーティションの数より少ない場合、前記照合部の少なくとも１つが、少なくとも２つのパーティションに保存されたセグメント・データを指示するポインタを処理するために、前記ソートするステップでは、前記少なくとも２つのパーティションの各々を識別するために処理順識別子を割り振り、前記処理順識別子で表される処理順と前記アドレス順とでソートする、請求項５に記載の方法。
【請求項８】
前記振り分けるステップで振り分けられたポインタを前記パーティション群に対応した前記照合部へ入力するために、一時的に該ポインタを記憶するステップをさらに含む、請求項５に記載の方法。
【請求項９】
複数のパーティションを有する階層型データベースに格納されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を判断する処理を実行するためのコンピュータ可読なプログラムであって、前記プログラムは、
前記セグメント・データを識別するためのセグメント識別子と該セグメント・データの保存先アドレスとを含む前記ポインタを、前記インデックスから読み出すステップと、
読み出された前記ポインタをアドレス順にソートするステップと、
ソートされた前記ポインタを、該ポインタが指示するセグメント・データが保存されるパーティションに応じて２つ以上のパーティション群に振り分けるステップと、
振り分けられた前記ポインタを、セグメント・データのセグメント識別子と該セグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション群毎に並列に実行するステップとを前記コンピュータに実行させる、プログラム。
【請求項１０】
前記振り分けるステップは、前記ソートされたポインタをパーティション毎に振り分ける、請求項９に記載のプログラム。
【請求項１１】
前記ソートするステップは、少なくとも２つのパーティションの各々を識別するために処理順識別子を割り振り、前記処理順識別子で表される処理順と前記アドレス順とでソートする、請求項９に記載のプログラム。
【請求項１２】
前記振り分けるステップで振り分けられたポインタを一時的に記憶するステップを実行させる、請求項９に記載のプログラム。
【請求項１３】
複数のパーティションを有する階層型データベースに格納されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証するシステムであって、
前記セグメント・データを識別するためのセグメント識別子と該セグメント・データの保存先アドレスとを含む前記ポインタを、前記インデックスから読み出す読出部と、
読み出された前記ポインタをアドレス順にソートするソート部と、
ソートされた前記ポインタを、該ポインタが指示するセグメント・データが保存されるパーティションに応じて２以上のパーティション群に振り分ける振分部と、
振り分けられた前記ポインタを、セグメント・データのセグメント識別子と該セグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション群毎に並列に実行する２以上の照合部とを備え、
前記照合部は、前記パーティションと同数設けられ、前記振分部は、前記ソートされたポインタをパーティション毎に振り分け、
前記照合部の数が前記パーティションの数より少ない場合、前記照合部の少なくとも１つが、少なくとも２つのパーティションに保存されたセグメント・データを指示するポインタを処理するために、前記ソート部は、前記少なくとも２つのパーティションの各々を識別するために処理順識別子を割り振り、前記処理順識別子で表される処理順と前記アドレス順とでソートし、
前記振分部により振り分けられたポインタを前記パーティション群に対応した前記照合部へ入力するために、一時的に該ポインタを記憶する２以上のキュー部をさらに備える、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに格納されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証するシステム、その検証方法およびプログラムに関する。
【背景技術】
【０００２】
データベースは、特定の項目に沿ったデータを集めて管理し、検索や抽出等によって再利用できるようにしたものである。データベースには、オペレーティング・システム（OS）が提供するファイル・システム上に直接構築されるものや、データベースをコンピュータ上で管理するためのデータベース管理システム（DBMS）を用いて構築されるものがある。
【０００３】
DBMSには、階層型データベース管理システムと呼ばれる、データを木構造で管理するものがある。木構造における各データ・エレメントは、セグメント・データであり、その木構造の頂点にある第１データ・エレメントは、ルート・セグメント・データである。このルート・セグメント・データに従属するセグメント・データは、子、それに従属するセグメント・データは、子の子、すなわち孫であり、この木構造は、ルート・セグメント・データを出発点として、そのルート・セグメント・データから子へ、子から孫へと辿るデータ構造とされている。このため、各セグメント・データは、従属するセグメント・データを指示するポインタを有している。
【０００４】
この階層型データベース管理システムが管理するデータベースとして、IMS（登録商標）データベースがあり、そのIMSデータベースにはHALDB（High Availability Large Databases）と呼ばれるものがある。HALDBは、大量のデータを格納することができる形式で、複数のパーティションと呼ばれるDBが複数集まった形をしている。
【０００５】
図１に、HALDBの構成例を示す。HALDBは、パーティション１、２、…、１０と、セグメント・データを格納する際に作成されたインデックス１１とを含む。ここでは、データベースが１０個の区画に分割され、１０個のパーティションから構成されている。インデックス１１は、データの検索時間を短縮するために作成されるファイルであり、データの検索や抽出を行う際に比較対象となるソース・キーと、セグメント・データを指示するポインタとのペアからなり、ソース・キーが与えられると、対応するセグメント・データを取得することができるように構成されている。
【０００６】
HALDBは、セグメント・データの挿入や削除が繰り返されると、不要な隙間が多く発生することから、定期的に再編成処理が実行される。この再編成処理では、データの内容を保持したままデータベースを作成しなおす処理が行われる。これにより、断片化、記憶効率の低下、アクセス速度の低下といった不具合が解消される。
【０００７】
HALDBでは、再編成処理が行われると、図１に示すように、セグメント・データの格納場所が、破線で示される場所から実線で示される場所へ移動することになるが、この再編成処理時には、インデックス１１は更新されず、予めセグメント・データに割り当てられたILK（Indirect List Key）という固有の識別子と新しい場所の相対バイト・アドレス（RBA）とがパーティション毎にILDS（Indirect List key Data Set）１２と呼ばれる場所に格納される。ここで、RBAは、所定の基準アドレスと比較したセグメント・データの先頭アドレスの位置で、具体的には、ファイルを構成するデータ・セット中の各レコードの、そのデータ・セットの先頭を０としたバイト・アドレスである。
【０００８】
また、HALDBでは、再編成処理の後に、インデックス１１を使用してセグメント・データを取得する場合、ILDS１２を使用して新しい場所のRBAを取得するように構成されている。このため、インデックス１１に含まれるセグメント・データを指示するポインタには、セグメント・データのRBAとILKとが含まれている。このポインタは、EPS（Extended Pointer Set）ポインタと呼ばれる。
【０００９】
EPSポインタに含まれるRBAは、再編成処理時に更新されないことから、セグメント・データの取得時に、そのセグメント・データの現在の場所を反映していない場合がある。そのために、ILDS１２は、セグメント・データの最新のRBAを保持し、ILDS１２を使用してセグメント・データの取得を可能にしている。しかしながら、セグメント・データの取得のたびに、ILDS１２から最新のRBAを読み出し、セグメント・データの場所を探索することは好ましくなく、出来る限りEPSポインタを使用してセグメント・データの場所を求めることが好ましい。
【００１０】
このため、EPSポインタの修復が定期的に実行される（非特許文献１参照）。なお、この修復処理は、EPS Healingと呼ばれる。
【００１１】
この修復処理が正しく行われるかも含め、データベースのポインタの整合性をチェックするものとして、ポインタ・チェッカがある（非特許文献２参照）。ポインタ・チェッカは、ポインタの問題を見つけて報告するもので、上記の再編成処理後のデータベースの整合性も含め、エラーとそのエラーが発生した場所を正確に指摘し、多くのレポートを作成する。
【００１２】
このポインタ・チェッカは、EPSポインタが古いセグメント・データの場所を示している場合、ILDS１２を使用して正しい場所に修復されるかをチェックするEPSチェック機能を備える。この機能では、データベースからEPSポインタを抽出し、その抽出したEPSポインタをILDS１２に格納されているILDSレコードと照合し、ESP Healingが正しく行われるか否かのチェックを行う。
【００１３】
EPSポインタに含まれるILKには、セグメント・データが存在するパーティション番号と、そのセグメント・データが最初に挿入された場所の初期RBAとが含まれる。
【００１４】
ILDS１２は、パーティション毎に１つ存在するため、パーティション番号が分かれば、照合処理に使用すべきILDS１２を特定することができる。また、ILDS１２内ではILKがRBA順にソートされているため、照合処理を行うためには、EPSポインタをRBA順にソート（並べ替え）する必要がある。このため、このポインタ・チェッカでは、EPSチェックを行うために、次の２段階の処理を行っている。
【００１５】
（１）EPSポインタをパーティション番号およびRBAでソートする。
（２）ソートされたEPSポインタとILDSレコードの照合を行う。
【００１６】
これらの処理を、図２を参照して詳細に説明すると、次のようなものになる。図２に示すテーブル１３のように、データベースに格納されたインデックスからEPSポインタ、すなわちEPSポインタが指示するセグメント・データが存在するパーティションのパーティション番号、そのセグメント・データのRBA、その他のデータを読み出す。読み出した後、EPSポインタをパーティション番号とRBAでソートする。最初に、パーティション番号１のEPSポインタを抽出し、RBA順に並べる。パーティション番号１のEPSポインタをすべて並べた後、パーティション番号２のEPSポインタを選択し、RBA順に並べる。このようにして最後のパーティション番号ｎのEPSポインタを並べ終えたところで、ソートを終了する。
【００１７】
ソート処理が終了した後、照合処理において、並び替えられたESPポインタを、対応するパーティション番号のILDS内のILDSレコードと照合する。この照合処理では、ILKを基に、ILKが一致するレコードがILDS内に存在するか否かをチェックする。上記のように、ILKはパーティション番号と初期RBAを含むことから、これらがすべて一致するかをチェックする。そして、一致していないEPSポインタに対しては、データベース管理者に対し、ポインタ・エラーを報告する。
【００１８】
この照合処理では、ソートされたEPSポインタがILDSレコードと同じ順に並んでいるため、skip sequential readを使用して効率良く行うことができる。このskip sequential readは、一部のレコードを順次読み出す方法であり、その詳細については、特許文献１に記載されている。
【特許文献１】米国特許出願公開第２００６／００８０２７０号明細書
【非特許文献１】IMS:Administration Guide:Database Manager、[on line]、[平成２０年８月２６日検索]、インターネット＜ＵＲＬ：http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/DFSADBE4/CCONTENTS＞
【非特許文献２】IMS High Performance Pointer Checker User’s Guide、[online]、[平成２０年８月２６日検索]、インターネット＜ＵＲＬ：http://publibfi.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/FABP1B10/CCONTENTS＞
【発明の開示】
【発明が解決しようとする課題】
【００１９】
ILDSが複数存在する場合、各ILDSとの照合処理を並列に実行することができれば、処理時間を短縮することができる。しかしながら、従来のシステムや方法では、パーティション番号とRBAでEPSポインタをソートしていることから、パーティション番号順に照合処理を行わなければならない。なぜなら、パーティション番号１に挿入されたセグメント・データを指示するポインタのすべてが照合処理へ入力されるまで、パーティション番号２に挿入されたセグメント・データを指示するポインタが入力されず、結果的に、パーティション番号順に照合処理が行われるからである。
【００２０】
現状、ポインタ・チェッカでは、同時にスキャン等の他のタスクも実行しており、他のタスクの妨げにならないようにするために、EPSポインタのソート処理を複数実行することはできないという状況がある。
【００２１】
また、上記のskip sequential readを使用して突き合わせ処理を効率良く行うことができるが、これでもまだ処理時間の短縮が不十分で、さらなる時間短縮が求められている。
【００２２】
そこで、現状の制約を満たすためにソート処理を１回に抑えたままで、さらなる処理時間の短縮を可能にするシステムおよび方法の提供が望まれていた。
【課題を解決するための手段】
【００２３】
本発明は、パーティション番号とRBAでソートするのではなく、RBAのみでソートしてEPSポインタをRBA順に並べ、パーティション番号の数だけ照合処理を並列に実行させ、RBA順に並んだEPSポインタを、パーティション番号に応じて対応する照合処理へ入力することにより、ソート処理を１回に抑えたままで、処理時間を短縮することができることを見出すことによりなされたものである。
【００２４】
EPSポインタに含まれるRBAの分布を考えてみると、各パーティション番号のEPSポインタに含まれるRBAの分布が似通っている場合、RBAのみでソート処理を行うと、パーティション番号が比較的均等に混ざった状態で分布することになる。したがって、RBAの分布が似通っている場合ほど、各照合処理へEPSポインタがほぼ均等に入力され、ほぼ均等に並列に処理が行われることになる。
【００２５】
一方、RBAの分布に重なりがまったくない場合は、ある照合処理のみにEPSポインタが入力され、その照合処理のみが実行される。これは、従来の照合処理においてかかる処理時間と同じであるが、重なりがまったくない分布というものは非常にまれなケースである。このことから、従来の照合処理に比較して処理速度を向上させることができるものであり、その結果、処理時間を短縮することができるものである。
【００２６】
また、あるパーティション番号に着目した場合、EPSポインタがRBA順に入力されることから、skip sequential readによる効率の良い突き合わせ処理を行うことが可能であり、さらに処理時間を短縮することができる。
【００２７】
したがって、上記課題は、本発明の整合性検証システム、検証方法およびその方法を実現するためのコンピュータ可読なプログラムを提供することにより解決することができる。
【００２８】
本発明の整合性検証システムは、複数のパーティションを有する階層型データベースに作成されたインデックスに含まれるポインタにより指示されるセグメント・データの保存先アドレスの整合性を検証するシステムである。この整合性を検証するために、インデックスからセグメント・データを識別するためのセグメント識別子とそのセグメント・データの保存先アドレスとを含むポインタを読み出す読出部と、読み出されたポインタをアドレス順にソートするソート部と、ソートされたポインタを、ポインタが指示するセグメント・データが保存されるパーティションに応じて２以上のパーティション群に振り分ける振分部と、振り分けられたポインタを、セグメント・データのセグメント識別子とそのセグメント・データの最新の保存先アドレスとを含むデータ・セットと照合する処理を、パーティション群毎に並列に実行する２以上の照合部とを備える。
【００２９】
照合部は、パーティションと同数設けることができ、この場合、振分部は、ソートされたポインタをパーティション毎に振り分け、２以上の照合部はパーティション毎に並列に照合処理を行う。
【００３０】
照合部とパーティションの数が同数ではなく、照合部の数がパーティションの数より少ない場合、照合部の少なくとも１つが、少なくとも２つのパーティションに保存されたセグメント・データを指示するポインタを処理することとなる。このため、ソート部は、少なくとも２つのパーティションの各々を識別するために処理順識別子を割り振り、処理順識別子で表される処理順とアドレス順とでソートする。
【００３１】
また、振分部により振り分けられたポインタを、パーティション群に対応した照合部へ効率良く入力し、処理するために、一時的にポインタを記憶する２以上のキュー部をさらに備えることができる。
【００３２】
本発明の検証方法は、上記の各部により実行される処理ステップを含む。本発明では、この検証方法を実行するためのコンピュータ可読なプログラムおよびそのプログラムを格納した記録媒体を提供することもできる。
【発明の効果】
【００３３】
本発明のシステムおよび方法を提供することにより、ソート処理を１回に抑えたままで従来のパーティション番号とRBAでソート処理する場合に比較して処理時間の短縮を図ることができる。
【発明を実施するための最良の形態】
【００３４】
以下、本発明を図面に示した具体的な実施の形態に沿って説明するが、本発明は、後述する実施の形態に限定されるものではない。
【００３５】
図３は、データベース整合性チェック・システムの概略構成を示した図である。データベース整合性チェック・システムは、複数のパーティションに分割されて複数のDBを構成する階層型データベース２０と、階層型データベース２０の整合性を検証する整合性検証システム３０とを備える。
【００３６】
階層型データベース２０は、図１に示すHALDBであり、パーティションと呼ばれる論理区画に分割され、複数のDBが集まった形とされている。したがって、この階層型データベース２０は、複数のパーティションを有するものとされている。また、階層型データベース２０は、データ構造が木構造とされ、木構造の各データ・エレメントとしてセグメント・データを含むものとされている。各セグメント・データには、従属するセグメント・データを指示するポインタが含まれる。また、階層型データベース２０は、項目に分けてセグメントが管理され、特定項目を素早く参照できるように項目を特定順番に並べ、その項目が出現する物理的な位置をまとめたインデックスを格納している。
【００３７】
インデックスは、ソース・キーとポインタとを含み、ポインタは、対応するセグメント・データのRBAと、対応するセグメント・データに固有の識別子であるILKとを有する。ILKは、そのセグメント・データが存在するパーティションのパーティション番号と、そのセグメント・データが最初に保存された場所を示す初期RBAと、再編成回数を示す再編成番号（Reorg Num）と、セグメント・データの種類を示す情報であるセグメント・コード(SC)とを含む。RBAやILK等については、上記に詳述したので、ここでは説明を省略する。
【００３８】
この階層型データベース２０は、新しいセグメント・データの追加と不要になったセグメント・データの削除を繰り返すことにより、記憶領域に不要な隙間が多く発生する。
【００３９】
ここで、図３には図示していないが、階層型データベース２０と接続され、階層型データベース２０の管理を行うものとして、データベース管理システムがある。このデータベース管理システムは、セグメント・データの格納の際、インデックスを作成し、セグメント・データの追加の際には、インデックスにポインタを追加する。また、データベース管理システムは、定期的に階層型データベース２０の再編成処理をパーティション毎に行う。この再編成処理を行う場合、データベース管理システムは、インデックスは更新せず、パーティション毎にILDSと呼ばれる場所にデータ・セットとしてセグメント・データを識別するためのILKと新しい場所を示す最新RBAとを関連付けて格納させる。これにより、階層型データベース２０には、各パーティションに対応した複数のILDSとインデックスが格納される。
【００４０】
また、データベース管理システムは、外部装置からの要求によりセグメント・データを取得する場合、インデックスを使用して行うが、再編成処理を行った場合には、インデックス中のポインタが古いRBAをもつので、ILDSを参照し最新RBAを用いて、そのセグメント・データを取得する。しかしながら、セグメント・データの取得のたびに、ILDSから最新RBAを読み出し、セグメント・データの場所を探索することは、処理ステップが増加して処理時間がかかることから、ポインタのRBAをILDS内の最新RBAに更新する。
【００４１】
整合性検証システム３０は、ポインタが有するセグメント・データの保存先アドレスの整合性を判断する処理を行う。整合性検証システム３０は、階層型データベース２０のインデックスからポインタを読み出し、ポインタをRBA順にソートし、ソートされたポインタを、ILKを基に照合し、ILDS内にそのILKをもつレコードが存在するか否かをチェックすることにより、整合性の検証を行う。
【００４２】
その結果、ILDS内にそのILKをもつレコードが存在しない場合、整合性がないことを意味するので、ポインタ・エラーをデータベース管理者へ報告する。
【００４３】
図４は、整合性検証システム３０として機能する情報処理装置のハードウェア構成の一例を示した図である。ハードウェア構成は、これに限られるものではないが、メモリ４０と、少なくとも１つのプロセッサ４１と、メモリ制御部４２と、チャネル・サブシステム４３と、少なくとも１つの制御装置４４と、少なくとも１つの入出力デバイス４５とを備える。
【００４４】
メモリ４０は、入出力デバイス４５から入力されたデータやプログラムを格納し、プロセッサ４１およびチャネル・サブシステム４３からのアドレス指定に応答して、そのアドレスに格納しているデータ等をプロセッサ４１およびチャネル・サブシステム４３へ送る。
【００４５】
プロセッサ４１は、情報処理装置全体を制御し、少なくとも１つのOSを実行する。OSは、情報処理装置におけるプログラムの実行や入出力処理を制御するものである。メモリ制御部４２は、バスを経由してメモリ４０、プロセッサ４１、チャネル・サブシステム４３のそれぞれに接続される。このメモリ制御部４２は、プロセッサ４１やチャネル・サブシステム４３が出したリクエストを一時的にキューに格納し、所定のタイミングでメモリ４０へ送ることができる。
【００４６】
チャネル・サブシステム４３は、各制御装置４４へ接続され、プロセッサ４１の処理負荷を軽減するために、入出力デバイス４５とメモリ４０との間のデータ転送を制御する。これにより、プロセッサ４１による演算処理と、入出力デバイス４５による入出力処理とを並列に実行させることができ、処理効率を向上させることができる。
【００４７】
制御装置４４は、入出力デバイス４５のデータ転送のタイミング等を制御する。入出力デバイス４５は、制御装置４４、チャネル・サブシステム４３、メモリ制御部４２を経由し、メモリ４０との間でデータ転送を行う。入出力デバイス４５としては、HDD、ディスプレイ、キーボード、プリンタ、通信デバイス、他の記憶装置を挙げることができ、入出力デバイス４５の１つには、階層型データベース２０が接続される。
【００４８】
整合性検証システム３０による整合性を検証する処理を実現するために、プログラムが記録された記録媒体が提供され、その記録媒体が入出力デバイス４５の１つに接続され、そのプログラムが、制御装置４４、チャネル・サブシステム４３、メモリ制御部４２を経由して、メモリ４０へ送られ、メモリ４０に格納される。格納されたプログラムは、再度それらを経由して入出力デバイス４５に接続されたHDDへインストールされ、適宜プロセッサ４１により読み出され、実行される。
【００４９】
プログラムが格納される記録媒体としては、フレキシブル・ディスク、CD-ROM、DVD、SDカード、フラッシュメモリ等を挙げることができる。
【００５０】
図５は、整合性検証システム３０の構成を機能毎に示した機能ブロック図である。図５では、階層型データベース２０の構成も例示しているが、階層型データベースについては図１を参照して既に説明したので、ここでは、整合性検証システム３０について詳細に説明する。整合性検証システム３０は、階層型データベース２０に格納されているインデックス２１からポインタを読み出す読出部３１と、読み出されたポインタをRBA順にソートするソート部３２と、ソートされたポインタを、そのポインタが指示するセグメント・データが保存されるパーティションに応じて２つ以上のパーティション群に振り分ける振分部３３と、振り分けられたポインタを、ILKを基に、ILDS２２内のILKと最新RBAとを含むILDSレコードと照合する処理を並列に実行する２つ以上の照合部３４とを備える。図５に示す実施形態では、パーティションの数ｎと同数のｎ個の照合部３４を備える構成とされている。
【００５１】
読出部３１は、階層型データベース２０に格納されたインデックス２１からポインタを読み出す。ポインタには、セグメント・データの固有の識別子ILKと、そのセグメント・データのRBAとが含まれており、これらの情報が読み出される。
【００５２】
ソート部３２は、読み出されたポインタに含まれるILK内のRBAのみをソート・キーとして、ポインタをソートする。RBAは、所定の基準アドレスと比較したデータ・セグメントが格納されている位置を示すものであるから、所定の基準アドレスに近い位置に格納されていれば、その値は小さく、その反対に遠い位置に格納されていれば、その値は大きくなる。また、各パーティションで基準アドレスは同じ値であるから、RBAが同じ値のものが複数存在する場合や、近似した値のものが複数存在する場合がある。
【００５３】
ソート部３２は、RBAが同じ値である場合は、読み出された順に、その他の場合には、RBAの値が小さい順にポインタを並べ替える。ソートされたポインタは、RBAの値が小さい順に並び替えられ、その順に振分部３３へ入力される。
【００５４】
振分部３３は、入力されたポインタを、そのポインタが指示するセグメント・データが格納されているパーティションに応じて、そのパーティションに対応した照合部３４へ入力するように振り分ける。図５に示す実施形態では、パーティションの数と、照合部３４の数が同数であるため、これらは１対１で対応付けられているが、パーティションの数に比較して照合部３４の数が少ない場合には、１つの照合部３４に対応付けられるパーティションを、２つ以上のパーティションからなるパーティション群として対応付け、ポインタをパーティション群で振り分けることにより所望の照合部３４へ入力することができる。この振り分けは、ポインタに含まれるILKを構成するパーティション番号を基に行うことができる。
【００５５】
各照合部３４へは、対応するパーティション毎にポインタが入力され、各照合部３４では並列に、ILKを基にILDS２２内のILDSレコードと照合し、ILKが一致するレコードが存在するか否かのチェックを行う。そのために、各照合部３４は、各ILDS２２からILDSレコードを読み出し取得する。照合部３４は、ILKが一致するレコードが存在する場合は、整合性ありと判断し、一致していない場合は、最新のものではなく、整合性なしと判断する。
【００５６】
照合部３４が整合性なしと判断した場合、ポインタ・エラーをデータベース管理者へ報告する。
【００５７】
図５に示す実施形態では、ILDS２２内のILDSレコードを照合部３４が読み出し、照合しているが、読出部３１が読み出し、照合部３４へ渡すように構成されていてもよいし、別途読出部を設け、その読出部が読み出すように構成されていてもよい。
【００５８】
この処理を、図６を参照して詳細に説明する。この処理は、断片化を防止するために定期的に実施される。まず、ステップ６００から処理を開始し、ステップ６１０で、インデックスからポインタを読み出す。ポインタは、格納順やソース・キー毎等、いかなる順に読み出すこともできる。次に、ステップ６２０で、読み出されたポインタを、RBAのみをソート・キーとしてソートする。
【００５９】
ステップ６２０のRBA順にソートされると、図７（ｂ）に示すように並べ替えられる。図７では、従来のパーティション番号とRBAの両方でソートした結果を、比較のために図７（ａ）に示している。図７（ｂ）を参照すると、パーティション番号は互いに相違しているが、RBAは基準アドレス‘00000000’Xから近い順に並んでいる。
【００６０】
再び図６を参照すると、ステップ６３０で、照合処理をパーティションの数だけ稼働させる。すなわち、パーティションの数と同じ数の照合部を、入力を受け付けると直ちに処理を開始することができる状態にさせる。ステップ６４０で、ソートされたポインタをRBA順に取り出し、パーティション番号毎に振り分ける。振り分けは、ポインタのILKに含まれるパーティション番号に基づき行われる。
【００６１】
ステップ６５０で、パーティション番号に対応した照合処理へ入力し、ILKを基に、そのパーティション番号に対応したILDS内のILDSレコードと照合し、ILKが一致するレコードが存在するかをチェックする。あるパーティション番号に着目すると、それに対応した照合処理へ入力されるポインタは、RBA順に入力されることから、skip sequential readによる照合処理が行われており、これは、効率の良い処理である。また、複数の照合処理が稼働し、それら複数の照合処理へポインタが順に入力されることから、同時に複数のポインタの照合処理が並列に行われる。このように複数の照合処理を並列に行うことで、処理時間を短縮することができる。すべてのポインタについて照合処理が終了したところで、ステップ６６０においてこの処理を終了する。
【００６２】
図５に示す実施形態では、振分部３３から照合部３４へ直接受け渡しているが、振分部３３により同じパーティションとして振り分けられたポインタが連続する場合、前のポインタの照合処理が終了するまで次のポインタの入力を受け付けない。これでは、さらに次に別の照合部で照合処理を行うことが可能であるのに、その照合処理を行うことができず、処理時間がかかってしまうという問題がある。
【００６３】
そこで、図８に示すように照合部３４と同じ数のキュー部３５を設け、照合部３４が入力を受け付けるまでそのポインタをキュー部３５で一時的に保持するように構成する。このキュー部３５を備えることで、振分部３３は、同じパーティションとして振り分けられたポインタが連続していても、それらポインタをキュー部３５に入力し、保持させておけばよく、その後の振り分け処理を停止することなく、継続して実施することができる。なお、キュー部３５は、FIFOキューとして構成することができ、FIFOキューは、先に入力されたポインタを先に出力するため、ソートしたRBA順に照合処理を行うことができる。
【００６４】
本発明のシステムにおける処理時間がどれだけ短縮されるかを確認するために、従来のシステムにおける処理時間と比較する比較実験を行った。従来のシステムは、パーティション番号とRBAでソートし、照合処理を行うPointer Checker V2を実装したシステムであり、本発明のシステムは、RBAのみでソートし、照合処理を行う、従来のPointer Checker V2を改良したPointer Checker V3を実装したシステムである。
【００６５】
データベースは、１．５GBの記憶容量のものを使用し、５つのパーティションに分け、ILDSを５つ格納している。ILDSに対応するRBAの分布は、図９に示すように、同一ではないが、ほぼ同じような分布とされている。なお、図９では、パーティション１から５まで順に並べられている。ここで、図９中のBINとは、RBAが取りうる値‘0000000’X〜‘FFFFFFFF’Xを２００等分し、番号を１から順に割り振ったものである。データベースに格納されるデータは、ルート・セグメントの数を２０００００とし、データベース管理システムとして４つのCPUを備えるz/OS（登録商標）システムで処理し、処理時間を測定した。z/OS（登録商標）システムとは、z/OS（登録商標）をOSとして組み込んだコンピュータシステムである。
【００６６】
測定結果は、図１０に示すように、従来のシステム（V2で表わす。）では処理時間が平均４２．３秒であるのに対し、本発明のシステム（V3で表わす。）では処理時間が３４．０秒であり、従来のシステムに対して約２０％処理時間を短縮することができた。これを照合処理（図１０中、濃い色で示される上側部分）のみについて参照してみると、従来のシステムでは平均１７．０秒であったものが、本発明のシステムでは平均８．３秒と、約半分の処理時間で処理することができている。
【００６７】
このことから、RBAのみの１回のソートで、かつ複数の照合部による処理を並列に実行することにより、処理時間を大幅に短縮することができていることが見出された。
【００６８】
これまでに説明した実施形態では、照合部３４の数とパーティションの数とが同数として詳細に説明してきた。しかしながら、本発明では、照合部３４の数とパーティションの数とが同数でなくてもよい。そこで、同数でない場合について詳細に説明するべく、例えば、並列に実行される照合部３４の数を、パーティションの数の半分にした場合について説明する。この場合の構成例を、図１１に示す。図１１では、１つの照合部３４に、２つのパーティションに存在するセグメント・データを指示するポインタが入力されている。
【００６９】
照合部の数を２として並列に稼働させ、４つのパーティションに存在するセグメント・データを指示するポインタを処理する場合について説明する。２つのパーティションに存在するセグメント・データを指示するポインタを１つの照合部３４により処理する場合、その照合部３４へ入力されたポインタが、いずれのパーティションに存在するセグメント・データを指示するものであるかを識別する必要がある。これは、セグメント・データの場所をRBAで示しているためである。そこで、この実施形態では、処理順番号を導入する。
【００７０】
４つのパーティションに対し、１〜４の番号を割り当て、１つの照合部（第１照合部）に対し、パーティション１番、２番を割り当て、もう１つの照合部（第２照合部）に対し、パーティション３番、４番を割り当てる。
【００７１】
このとき、第１照合部では、パーティション１番に存在するセグメント・セグメントを指し示すポインタを１番目に処理し、パーティション２番に存在するセグメント・セグメントを指し示すポインタを２番目に処理するように、ソート部３２では、パーティション１番に存在するセグメント・セグメントを指し示すポインタに対し、処理順番号１を割り当て、パーティション２番に存在するセグメント・セグメントを指し示すポインタに対し、処理順番号２を割り当てる。同様にして、第２照合部では、パーティション３番に存在するセグメント・セグメントを指し示すポインタを１番目に処理し、パーティション４番に存在するセグメント・セグメントを指し示すポインタを２番目に処理するように、ソート部３２では、パーティション３番に存在するセグメント・セグメントを指し示すポインタに対し、処理順番号１を割り当て、パーティション４番に存在するセグメント・セグメントを指し示すポインタに対し、処理順番号２を割り当てる。
【００７２】
その後、ソート部３２は、RBAと処理順番号とでソートし、照合部３４は、RBA順で、かつ処理順番号が１、２、１、２、…の順に入力を受け付け、照合処理を行う。ある照合部３４が処理する、あるパーティション番号に着目してみると、RBA順に入力されることから、RBA順に照合処理を行うものである。
【００７３】
図１２を参照して、この処理について詳細に説明する。まず、ステップ１２００から処理を開始し、ステップ１２１０で、インデックスからポインタを読み出す。次に、ステップ１２２０で、読出部３１が読み出したポインタに対し、ソート部３２は、処理順番号を割り当てる。例えば、パーティション１番に存在するセグメント・データを指し示すポインタに対しては、処理順番号１を割り当てる。次に、パーティション２番に存在するセグメント・データを指し示すポインタに対しては、処理順番号２を割り当てる。
【００７４】
ステップ１２３０において、ソート部３２は、処理順番号が割り当てられたポインタを、RBAを第１のソート・キーとして、処理順番号を第２のソート・キーとして、ソート処理を実行する。このソート処理では、RBA順で、かつ処理順番号が１、２、１、２、…の順に並ぶようにポインタが並べ替えられる。
【００７５】
ステップ１２４０で、照合処理をパーティションの数だけ稼働させる。すなわち、パーティションの数の半分の照合部を、入力を受け付けると直ちに処理を開始することができる状態にさせる。ステップ１２５０で、ソートされたポインタを順に取り出し、パーティション１番とパーティション２番とからなるパーティション群と、パーティション３番とパーティション４番とからなるパーティション群とに振り分ける。振り分けは、ポインタのILKに含まれるパーティション番号に基づき行われる。
【００７６】
そして、ステップ１２６０で、パーティション群に対応した照合処理へ入力し、ILKを基に、そのパーティション番号に対応したILDS内のILDSレコードと照合し、ILKが一致するレコードが存在するかをチェックする。複数の照合処理が稼働し、それら複数の照合処理へポインタが順に入力されることから、同時に複数のポインタの照合処理が並列に行われる。このように複数の照合処理を並列に行うことで、処理時間を短縮することができる。すべてのポインタについて照合処理が終了したところで、ステップ１２７０においてこの処理を終了する。
【００７７】
ここでは、１つの照合部に対し、２つのILDS内のILDSレコードを担当するように構成しているが、２つに限られるものではなく、３つ以上であってもよく、反対に、１つのILDS内のILDSレコードに対し、２つ以上の照合部により処理させることも可能である。
【００７８】
これまで、本発明のシステム、そのシステムにより実行される方法を、図面を参照して詳細に説明してきたが、本発明は上記実施の形態に限定されるものではなく、他の実施形態や、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【図面の簡単な説明】
【００７９】
【図１】HALDBの構成例を示した図。
【図２】従来のソートおよび照合処理を例示した図。
【図３】本発明のデータベース管理システムを含むデータベース・システムの構成例を示した図。
【図４】本発明のデータベース管理システムのハードウェア構成を例示した図。
【図５】本発明のデータベース管理システムの第１実施形態を示した機能ブロック図。
【図６】図５に示すシステムが実行するソートおよび照合処理の流れを示したフローチャート図。
【図７】ポインタをソートした結果を例示した図。
【図８】本発明のデータベース管理システムの第２実施形態を示した機能ブロック図。
【図９】各パーティションに格納されているレコード数を示した図。
【図１０】従来のシステムによる処理時間と、本発明のシステムによる処理時間とを比較した図。
【図１１】本発明のデータベース管理システムの第３実施形態を示した機能ブロック図。
【図１２】図１０に示すシステムが実行するソートおよび照合処理の流れを示したフローチャート図。
【符号の説明】
【００８０】
１、２、１０…パーティション、１１…インデックス、１２…ILDS、１３…テーブル、２０…階層型データベース、２１…インデックス、２２…ILDS、３０…整合性検証システム、３１…読出部、３２…ソート部、３３…振分部、３４…照合部、３５…キュー部、４０…メモリ、４１…プロセッサ、４２…メモリ制御部、４３…チャネル・サブシステム、４４…制御装置、４５…入出力デバイス
【図１】
2010061604.tif 000003
【図２】
2010061604.tif 000004
【図３】
2010061604.tif 000005
【図４】
2010061604.tif 000006
【図５】
2010061604.tif 000007
【図６】
2010061604.tif 000008
【図７】
2010061604.tif 000009
【図８】
2010061604.tif 000010
【図９】
2010061604.tif 000011
【図１０】
2010061604.tif 000012
【図１１】
2010061604.tif 000013
【図１２】
2010061604.tif 000014