(57)【要約】【課題】オブジェクトのデータ移行に伴って、オブジェクト識別子をキー値として持つインデックステーブルが移行先のシステムにおいて効率的に作成され得るデータ移行方法を、提供する。【解決手段】オブジェクト１１のデータ移行時において、オブジェクト１１の何れかの属性にインデックスが設定されている場合には、そのインデックスのアンロードファイルを生成するように、移行元のシステム１０を構成する。また、オブジェクトアンロードファイル内のレコードに基づいてオブジェクトを生成する際には、クラス番号変換テーブル及びインスタンス番号変換テーブルを生成するように、移行先のシステム２０を構成する。さらに、クラス番号変換テーブル及びインスタンス番号変換テーブルを参照しつつ、インデックスアンロードファイル内のレコードに基づいてインデックステーブルを生成するように、移行先のシステム２０を構成する。【選択図】    図１３
2004185270.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト識別子を定義付けられることによって何れかのクラスに所属するように管理されるとともに他のオブジェクトのオブジェクト識別子を属性値として有している多数のオブジェクト，及び、属性値についてのインデックスデータを記録している記録装置に繋がれるコンピュータに対し、
前記記録装置内のオブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成させ、
前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを生成させる
ことを特徴とするアンロードプログラム。
【請求項２】
各種の情報を記録する記録装置に繋がれるコンピュータに対し、
オブジェクトが持つオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中の属性値の集合に新たなオブジェクト識別子を採番させ、
一意な記録位置情報が定義された前記記録装置内の位置へ前記属性値の集合を記録させ、
データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成させ、
キー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照させて、対応する新たなオブジェクト識別子に変換させ、
前記レコード中に含まれるキー値ではないオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換させ、
変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納させる
ことを特徴とするロードプログラム。
【請求項３】
或るオブジェクト指向データベース管理システムがクラス毎に管理している多数のオブジェクトのそれぞれが、オブジェクト識別子を有しているとともに、他のオブジェクト識別子を属性値として有している場合において、そのオブジェクトが有する各属性値を、他のオブジェクト指向データベース管理システムへ移行するとともに、前記属性値についてのインデックステーブル内のインデックスデータをも移行する際のデータ移行方法であって、
移行元のオブジェクト指向データベース管理システムが、
前記オブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成するとともに、
前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記インデックステーブルからキー値が読み出される順に蓄積されているインデックスアンロードファイルを生成し、
移行先のオブジェクト指向データベース管理システムが、
前記オブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出す毎に、レコード中の属性値の集合に新たなオブジェクト識別子を採番し、一意な記録位置情報が定義された記録装置内の位置に前記属性値の集合を記録するするとともに、データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成し、
前記インデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出す毎に、レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換するとともに、前記レコード中のオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換し、変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての前記新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納する
ことを特徴とするデータ移行方法。
【請求項４】
前記インデックステーブルは、リーフインデックステーブルとして多数のテーブルに分割されており、各リーフインデックステーブルは、ルートインデックステーブル及びノードインデックステーブルとともに、Ｂツリー型のデータ構造を構成している
ことを特徴とする請求項３記載のデータ移行方法。
【請求項５】
前記ノードインデックステーブルは、クラス番号毎に作成されている
ことを特徴とする請求項４記載のデータ移行方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向データベース管理システムに対し、それに管理されているオブジェクトの中から純粋なデータ（属性値）部分だけを取り出させてそれらを移行用ファイルに格納させるアンロードプログラムと、移行先のシステムに対して移行用ファイル内のレコードを利用させてオブジェクトを生成させるロードプログラムと、オブジェクトの中から純粋なデータ（属性値）部分だけを取り出してそれらを別のシステムへ移行させる際のデータ移行方法とに、関する。
【０００２】
【従来の技術】
周知のように、オブジェクト指向データベース管理システム（ＯＯＤＢＭＳ：Ｏｂｊｅｃｔ  Ｏｒｉｅｎｔｅｄ  ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）の中には、ハードディスク等の記録装置内を物理的順序で検索するときよりも素早く検索結果を取得できるようにするための検索高速化技術が採用されているものがある（例えば、特許文献１，２参照）。このような検索高速化技術が採用されたＯＯＤＢＭＳには、記録装置内でのオブジェクトの記録位置情報とオブジェクトのもつ属性値とからなるインデックスデータが格納されたインデックステーブルが、用意されている。そして、このようなＯＯＤＢＭＳは、或る属性値を検索キーとしてオブジェクトの抽出を受け付けた場合には、上述したインデックステーブル内から当該属性値に一致するものを検出し、検出された属性値に対応する記録位置情報をそのテーブル内から読み出し、その記録位置情報にて示される記録装置内の位置へ直接アクセスし、そのオブジェクトの持つ属性値などを読み出す。上述したインデックステーブルは、オブジェクトが持つ幾つかの属性のうち、頻繁に検索されることが想定される属性に対して作成されており、そのような属性が幾つかある場合には、属性毎に作成される。
【０００３】
ところで、ＯＯＤＢＭＳの運用上、同一又は他のシステムにデータ（オブジェクトの有する各属性値）を移行する作業が行われることがある。この作業は、例えば、システムの記憶容量や管理機能の向上を図るため、データベースのバックアップを作成するため、複数のシステムに分けて運用していたデータベースを一つのシステムに統合するため、或いは、記録装置内でデータ（オブジェクトなど）を再配置（デフラグ）するために、行われる。このようなデータ移行では、移行前にオブジェクトに付与されていたオブジェクト識別子（クラス番号とインスタンス番号との組み合わせ）が一旦破棄され、移行後に、移行先のＯＯＤＢＭＳによって、そのシステム内でのみ有効なオブジェクト識別子が新たにオブジェクトに付与される。これは、通常、ＯＯＤＢＭＳでは、データベース管理プログラムの機能により、システム内だけで一意なオブジェクト識別子を各オブジェクトに付与して管理しているためである。
【０００４】
【特許文献１】
特開平０６−２５０９１２号公報
【特許文献２】
特許第２７０８２９４号公報
【０００５】
【発明が解決しようとする課題】
上述したようなＯＯＤＢＭＳでは、オブジェクトに対し、数値や文字列を属性値として持たせることができるが、それだけではなく、他のオブジェクトのオブジェクト識別子を属性値として持たせることもできる。このようにオブジェクトが属性値として他のオブジェクト識別子を持つことは、一般に、「リンクを貼る」と、称されている。そして、このように属性値がオブジェクト識別子である属性に対して上記検索高速化技術を適用する場合、ＯＯＤＢＭＳには、オブジェクトのオブジェクト識別子とそのオブジェクトの記録位置情報とを対応付けるインデックステーブルが用意されることとなる。
【０００６】
このような事情の下、上述したようなデータ移行において、オブジェクトとともに、オブジェクト識別子をキー値として持つインデックステーブルをそのまま移行したとしても、移行先ではオブジェクトには、新たなオブジェクト識別子が定義されてしまうため、検索時にそのインデックステーブルが参照されても、正しいオブジェクトを記録装置から読み出せない。このため、従来のデータ移行では、オブジェクト識別子をキー値として持つインデックステーブルを移行することはせず、オブジェクトのデータ移行が終わった後に、移行先のシステムに対して新たなインデックステーブルを一から作成させていた。
【０００７】
ところが、上述した検索高速化技術は、例えば十万件といった膨大な数のデータの中から目的のデータを高速に検出するためのものであるので、インデックステーブルにも、多量のインデックスデータが格納される。このため、オブジェクト識別子をキー値として持つインデックステーブルを一から作成するのに非常に時間と手間が掛かってしまうという問題があった。
【０００８】
そこで、本発明の課題は、オブジェクトのデータ移行に伴って、オブジェクト識別子をキー値として持つインデックステーブルが移行先のシステムにおいて効率的に作成され得るデータ移行方法と、このようなデータ移行方法を実現するための装置としてコンピュータを機能させるアンロードプログラム及びロードプログラムとを、提供することにある。
【０００９】
【課題を解決するための手段】
上記の課題を解決するために、本発明によるデータ移行方法は、以下のような構成を採用した。
【００１０】
すなわち、本発明によるデータ移行方法は、或るオブジェクト指向データベース管理システムがクラス毎に管理している多数のオブジェクトのそれぞれが、オブジェクト識別子を有しているとともに、他のオブジェクト識別子を属性値として有している場合において、そのオブジェクトが有する各属性値を、他のオブジェクト指向データベース管理システムへ移行するとともに、前記属性値についてのインデックステーブル内のインデックスデータをも移行する際のデータ移行方法であって、移行元のオブジェクト指向データベース管理システムが、前記オブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成するとともに、前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記インデックステーブルからキー値が読み出される順に蓄積されているインデックスアンロードファイルを生成し、移行先のオブジェクト指向データベース管理システムが、前記オブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出す毎に、レコード中の属性値の集合に新たなオブジェクト識別子を採番し、一意な記録位置情報が定義された記録装置内の位置に前記属性値の集合を記録するするとともに、データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成し、前記インデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出す毎に、レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換するとともに、前記レコード中のオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換し、変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての前記新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納することを、特徴としている。
【００１１】
このように構成されると、移行前のオブジェクト指向データベース管理システムでは、データ移行時に、オブジェクトアンロードファイルとともにインデックスアンロードファイルが作成され、移行先のオブジェクト指向データベース管理システムでは、オブジェクトアンロードファイル内のレコードからオブジェクトを生成する際に、クラス番号対応表及びインスタンス対応表が作成され、インデックスアンロードファイル内のレコードと各対応表とに基づいて、インデックステーブルが作成される。従って、本発明のデータ移行方法によれば、インデックスのデータ移行時に、インデックスアンロードファイル並びにクラス番号対応表及びインスタンス対応表が利用されるので、オブジェクト識別子をキー値として持つインデックステーブルを一から作成することに比べると、移行先のシステムにおいてインデックステーブルが効率的に作成される。また、移行先のシステムにおいて、オブジェクトのデータ移行とほぼ同時に、インデックステーブルが作成される。
【００１２】
また、上記の課題を解決するために、本発明によるアンロードプログラムは、以下のような構成を採用した。
【００１３】
すなわち、本発明によるアンロードプログラムは、オブジェクト識別子を定義付けられることによって何れかのクラスに所属するように管理されるとともに他のオブジェクトのオブジェクト識別子を属性値として有している多数のオブジェクト，及び、属性値についてのインデックスデータを記録している記録装置に繋がれるコンピュータに対し、前記記録装置内のオブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成させ、前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを生成させることを、特徴としている。
【００１４】
また、上記の課題を解決するために、本発明によるロードプログラムは、以下のような構成を採用した。
【００１５】
すなわち、本発明によるロードプログラムは、各種の情報を記録する記録装置に繋がれるコンピュータに対し、オブジェクトが持つオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出させ、前記レコードを一つ読み出す毎に、前記レコード中の属性値の集合に新たなオブジェクト識別子を採番させ、一意な記録位置情報が定義された前記記録装置内の位置に前記属性値の集合を記録させ、データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成させ、キー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出させ、前記レコードを一つ読み出す毎に、前記レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照させて、対応する新たなオブジェクト識別子に変換させ、前記レコード中に含まれるキー値ではないオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換させ、変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納させることを、特徴としている。
【００１６】
従って、これらのアンロードプログラム及びロードプログラムによれば、本発明のデータ移行方法を実現するための装置として移行元及び移行先のコンピュータを機能させることができることになる。
【００１７】
【発明の実施の形態】
以下、図面に基づいて本発明の実施形態を説明する。
【００１８】
図１は、本発明による実施形態の概略的な構成図である。本実施形態では、２台のシステム１０，２０が使用される。一方のシステム１０は、オブジェクト指向データベース管理システムとして以前より利用されていたものであり、多数のオブジェクトを記録している。他方のシステム２０は、新たなオブジェクト指向データベース管理システムとして利用されるために用意されたものである。
【００１９】
これらシステム１０，２０は、何れも、キーボードやマウス等の入力装置や表示装置や本体を備える一般的なコンピュータである。これらシステム１０，２０の本体には、図示されていないが、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やハードディスクドライブ等の記録装置，モデムやＬＡＮボード等の通信制御回路，及び、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が、内蔵されている。両システム１０，２０の通信制御回路同士は、ネットワーク等を介して、或いは直接に、接続されており、互いにデータを送受信することができる。
【００２０】
また、両システム１０，２０には、フレキシブルディスクドライブ，及び、コンパクトディスクドライブが、備えられている。フレキシブルディスクドライブやコンパクトディスクドライブは、コンピュータ可読媒体であるフレキシブルディスクＦＤやコンパクトディスクＣＤに格納されたデータやプログラムを読み出し、或いは、これらディスクＦＤ，ＣＤへデータやプログラムを書き込む装置である。フレキシブルディスクＦＤやコンパクトディスクＣＤから読み出されたデータやプログラムは、上記記録装置にインストールされる。
【００２１】
図２は、両システム１０，２０のハードディスクドライブ（ＨＤＤ）１０ａ，２０ａ内に記録されているデータやプログラムを説明するための説明図である。システム１０のＨＤＤ１０ａには、多数のオブジェクト１１及び多数のインデックステーブル１２が記録されているとともに、データベース管理プログラム１３及びアンロードプログラム１４がインストールされている。また、システム２０のＨＤＤ２０ａには、データベース管理プログラム２１及びロードプログラム２２がインストールされている。
【００２２】
＜オブジェクト＞
まず、オブジェクト１１について、説明する。図３は、オブジェクト１１を概念的に説明するために作成されたテーブルである。オブジェクト指向データベースにおいては、一つのテーブルに蓄積されているレコードの一つ一つがオブジェクトと称され、テーブルによって纏められるオブジェクト１１の集合体がクラスと称される。一つのクラスに所属するオブジェクト１１は、そのクラスのインスタンスと称され、オブジェクト１１には、そのクラス内で一意なインスタンス番号が付される。また、オブジェクト１１には、所属するクラスを全てのクラスの中から識別するためのクラス番号が付される。オブジェクト１１に付されるクラス番号及びインスタンス番号を組み合わせたものが、そのオブジェクト１１を全体の中から一意に識別するための識別子として利用され、この識別子は、オブジェクト識別子（ＯＩＤ：Ｏｂｊｅｃｔ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）と称されている。なお、ＯＩＤは、例えばクラス番号が３１であってインスタンス番号が０１である場合には、３１：０１と表記される。また、上述したように幾つかの属性値の集まりであるオブジェクト１１は、ＨＤＤ１０ａ内では、全体で一つの位置に記録される。さらに、各オブジェクト１１は、ＨＤＤ１０ａ内では、互いに無関係な個別の位置に、記録されており、その記録位置には、ＨＤＤ１０ａ内で一意なレコードアドレスが定義される。このレコードアドレスとＯＩＤは、常に対応付けられた状態で、後述するデータベース管理プログラム１３によって管理されている。そして、システム１０にＯＩＤが入力されると、後述するデータベース管理プログラム１３は、ＣＰＵ１０ｂに対し、このＯＩＤに対応するレコードアドレスにアクセスさせ、このレコードアドレスにあるオブジェクト１１に含まれる各属性値を直接読み出させる。以上のことから、オブジェクト１１は、レコードアドレスとＯＩＤとが定義付けられることにより、上述したテーブルを概念的に構成する。
【００２３】
なお、図３には、四つのテーブルが示されている。本実施形態では、四つのテーブルによって纏められるオブジェクトの集合体に対し、それぞれクラス３１，４１，４２，４３のクラス番号を定義している。クラス３１を概念的に示すテーブルは、「レコードアドレス」，「ＯＩＤ」，「属性１」，「属性２」及び「属性３」の項目欄（フィールド）からなるレコードをインスタンス（オブジェクト）毎に作成することによって、構成されている。「属性２」及び「属性３」には、オブジェクト１１の有する属性値としての数値及び名字が、記録されており、「属性１」には、クラス４１，４２，４３に所属するオブジェクト１１のＯＩＤが、記録されている。
【００２４】
また、クラス４１，４２，４３を概念的に示すテーブルは、「レコードアドレス」，「ＯＩＤ」，「属性４」及び「属性５」の項目欄（フィールド）からなるレコードをインスタンス（オブジェクト）毎に作成することによって、構成されている。「属性４」及び「属性５」には、オブジェクト１１の有する属性値としての県名及び市区町村名が、記録されている。
【００２５】
このような関係を有する多数のオブジェクト１１を有するシステム１０において、例えばクラス３１のインスタンス０４であるオブジェクト１１の「属性２」の値を要求する入力があった場合には、後述するデータベース管理プログラム１３は、ＣＰＵ１０ｂに対し、まず、ＯＩＤ＝３１：０４に対応するレコードアドレス（０００１０２１）にアクセスさせ、そのレコードアドレス（０００１０２１）にあるオブジェクトに含まれる「属性２」の値（１５１）を読み出させ、その値（１５１）を出力させる。
【００２６】
また、例えばクラス３１のインスタンス０４であるオブジェクト１１の「属性１」の値を要求する入力があった場合には、後述するデータベース管理プログラム１３は、ＣＰＵ１０ｂに対し、まず、ＯＩＤ＝３１：０４に対応するレコードアドレス（０００１０２１）にアクセスさせ、そのレコードアドレス（０００１０２１）にあるオブジェクトに含まれる「属性１」の値（４３：０３）を読み出させ、続いて、ＯＩＤ＝４３：０３に対応するレコードアドレス（０００１４２２）にアクセスさせ、そのレコードアドレス（０００１４２２）にあるオブジェクトに含まれる「属性４」及び「属性５」の値（京都府，八幡市）を読み出させ、その値（京都府，八幡市）を出力させる。
【００２７】
このクラス３１の「属性１」のように、属性値としてＯＩＤが記録されていると、クラス４１，４２，４３のインスタンス（オブジェクト）に含まれる属性値（県名及び市区町村名）が、あたかもクラス３１のインスタンス（オブジェクト）に含まれる属性値として出力される。このため、クラス３１の「属性１」のように属性値としてＯＩＤが記録されることは、通常、「リンクが貼られる」と、称されている。
【００２８】
＜インデックステーブル＞
次に、インデックステーブル１２について、説明する。インデックスは、大量なデータの中から目的のデータを高速に検索するためのデータベース用の技術である。例えば、或るクラスの或る属性について当該技術を適用する場合、すなわち、その属性の値が指定されたときにその属性値を含むオブジェクトをそのクラスの全インスタンスの中から抽出できるようにする場合、事前に、その属性の値とその値を有するオブジェクトのレコードアドレスとからなるレコード（通常、インデックスデータと称する）が蓄積されたインデックステーブルが、作成される。また、そのテーブル内のレコードは、属性値であるキー値が昇順又は降順となるように、ソートされている。そして、或るクラスに所属する多数のインスタンスの中から任意の属性値を持つオブジェクトの抽出を要求する入力があった場合において、そのクラスのその属性にインデックスが作成されていたときは、後述するデータベース管理プログラム１３は、ＣＰＵ１０ｂに対し、その属性用のインデックステーブル内を任意の属性値を検索キーとして検索させ、当該属性値と一致するキー値が存在した場合には、そのキー値に対応するレコードアドレスをインデックステーブル内から読み出させ、読み出されたレコードアドレスにあるオブジェクトに含まれる他の属性値やＯＩＤを読み出させ、読み出された属性値やＯＩＤを出力させる。このように、インデックステーブルを用いることにより、任意の属性値を持つオブジェクトを素早く検索することができる。
【００２９】
また、インデックスを用いた検索高速化技術では、一クラス内のオブジェクトの数量が膨大である場合（例えばオブジェクトの数量が十万個である場合）には、インデックステーブルが、所定個数（例えば千個）のインデックスデータを持つテーブル毎に分割され、分割後のそれぞれがリーフインデックステーブルとして作成される。また、リーフインデックステーブルに蓄積されるキー値の範囲を示す索引情報とそのリーフインデックステーブルのレコードアドレスとからなるレコードが蓄積されたルートインデックステーブルが、さらに作成される。そして、或るクラスに属する多数のインスタンスの中から任意の属性値を持つオブジェクトの抽出を要求する入力があった場合に、そのクラスのその属性にインデックスが作成されていたときは、後述するデータベース管理プログラム１３は、ＣＰＵ１０ｂに対し、その属性用のルートインデックステーブル内を任意の属性値を検索キーとして検索させ、当該属性値を範囲に含む索引情報が存在した場合には、その索引情報に対応するレコードアドレスをルートインデックステーブルから読み出させ、読み出されたレコードアドレスにアクセスさせる。さらに、当該プログラム１３は、ＣＰＵ１０ｂに対し、そのレコードアドレスにあるリーフインデックステーブル内を当該属性値を検索キーとして検索させ、当該属性値と一致するキー値が存在した場合には、そのキー値に対応するレコードアドレスを読み出させ、読み出されたレコードアドレスにアクセスさせ、そのレコードアドレスにあるオブジェクトに含まれる他の属性値やＯＩＤを読み出させ、読み出された属性値やＯＩＤを出力させる。このように一つのルートインデックステーブルと多数のリーフインデックステーブルからなるデータ構造は、通常、Ｂツリー型データ構造と称されている。但し、ここで説明したＢツリー型データ構造は、２階層であったが、３階層以上とすることもできる。その場合、ルートインデックステーブルと多数のリーフインデックステーブルの中間の階層として、ノードインデックステーブルが幾つか作成される。
【００３０】
なお、図３のクラス３１の「属性１」のように、属性値としてＯＩＤが記録されている属性に対してインデックスを作成する場合、ルートインデックステーブルの下位の階層のインデックステーブルとして、クラス毎のノードインデックステーブルが作成される。図４は、リンクが貼られた属性に対してインデックスが作成された例を概念的に説明するために作成されたテーブルである。図４に示されるように、ルートインデックステーブルは、ノードインデックステーブルに蓄積されるＯＩＤの範囲を示す索引情報（この索引情報は、通常、その範囲に属する属性値のうちの最大値である）とそのノードインデックステーブルのレコードアドレスとからなるレコードがノードインデックステーブル毎に蓄積されたものとなる。また、ノードインデックスは、その下位の階層のリーフインデックステーブルに蓄積されるＯＩＤの範囲を示す索引情報とそのリーフインデックステーブルのレコードアドレスとからなるレコードがリーフインデックステーブル毎に蓄積されたものとなる。また、リーフインデックステーブルは、属性値であるキー値とその属性値を持つオブジェクトのレコードアドレスとからなるインデックスデータが蓄積されたものである。
【００３１】
なお、上述したように、インデックスは、オブジェクトの数量が膨大である場合に用いられるものであるので、図４に示されるように、リーフインデックステーブルに蓄積されるインデックスデータが数個である場合は殆ど無いが、本実施形態を簡単に説明するために、以下では、図４に示した八つのインデックステーブル１２のみを用いる。
【００３２】
＜データベース管理プログラム＞
データベース管理プログラム１３，２１は、何れも、コンピュータをオブジェクト指向データベース管理システムとして機能させるためのプログラムであり、多数のオブジェクト１１を管理するためのプログラムである。具体的には、データベース管理プログラム１３，２１は、以下に示す機能を実現するための処理をＣＰＵ１０ａ，２０ａに対して行わせる。
【００３３】
（１）データベース領域の管理
▲１▼オブジェクトへの格納領域（ファイルやＨＤＤ内のエリア）の割り当て
▲２▼格納領域の容量の管理
（２）クラスの作成，更新及び削除
▲１▼オブジェクトの構造（属性の名称や値の種別）の定義及び変更
▲２▼クラス定義時のクラスへのクラス番号の採番
▲３▼クラス定義情報のデータベースへの格納
（３）オブジェクトの作成，更新及び削除
▲１▼オブジェクト作成時のオブジェクトへのＯＩＤの採番
▲２▼オブジェクトのデータベースへの格納
▲３▼更新又は削除時のデータメインテナンス
（４）オブジェクトに対する検索及び参照
▲１▼条件に合致するオブジェクトの探索
▲２▼オブジェクトの各属性の値の取得
▲３▼オブジェクトにリンクする他のオブジェクトの取得
（５）リンクの作成，更新及び削除
▲１▼リンク情報のデータベース内への格納
▲２▼オブジェクト削除時のリンク情報のメインテナンス
（６）インデックスの管理
▲１▼インデックス情報のデータベースへの格納
▲２▼オブジェクトの生成若しくは削除又は属性値変更時のインデックス書き換え
（７）セッション又はトランザクションの管理
▲１▼ＤＢへの接続の管理又は監視
▲２▼トランザクション単位でのデータ整合性の保証
【００３４】
＜アンロードプログラム＞
次に、アンロードプログラム１４について、説明する。アンロードプログラム１４は、オブジェクト指向データベース管理システムとして以前より利用されていたシステム１０から、新たなオブジェクト指向データベース管理システムとして利用されるために用意されたシステム２０へ、多数のオブジェクト１１及び多数のインデックステーブル１２をデータ移行する際に、データ移行用ファイルであるアンロードファイルをＣＰＵ１０ｂに対して作成させるプログラムである。
【００３５】
＜ロードプログラム＞
次に、ロードプログラム２２について、説明する。ロードプログラム２２は、上記アンロードプログラム１４とは逆に、ＣＰＵ２０に対し、アンロードファイル内のデータを利用して、オブジェクト指向データベース管理システムとして利用可能なオブジェクト及びインデックステーブルを生成させるプログラムである。
【００３６】
以下、システム１０からシステム２０へ多数のオブジェクト１１及び多数のインデックステーブル１２をデータ移行する際の処理について説明する。
【００３７】
まず、データベース管理プログラム１３が起動しているシステム１０の操作者は、そのシステム１０を操作して、所定のメニュー画面を表示させる。そして、操作者は、データ移行に関する操作画面を表示させ、その操作画面に表示された一つ又は多数のクラスの中から、システム２０へデータ移行させようと所望するクラスを幾つか選択する。また、操作者は、その操作画面に、移行先を示す情報を入力する。なお、本実施形態では、移行先はシステム２０である。そして、操作者は、所定のボタンをクリックする。すると、ＣＰＵ１０ｂがアンロードプログラム１４を読み込み、アンロード処理が開始される。図５は、アンロード処理の内容を示すフローチャートである。
【００３８】
アンロード処理の開始後、最初のＳ１０１では、ＣＰＵ１０ｂは、オブジェクトアンロード処理を実行する。このオブジェクトアンロード処理は、一般に行われている処理であるため、詳しい説明は省略するが、その概略としては、指定されたクラス毎にオブジェクトアンロードファイルが作成される。
【００３９】
次のＳ１０２では、ＣＰＵ１０ｂは、インデックスアンロード処理を実行する。より具体的には、ＣＰＵ１０ｂは、インデックスアンロードサブルーチンを実行する。図６は、インデックスアンロードサブルーチンの内容を示すフローチャートである。
【００４０】
インデックスアンロードサブルーチンの開始後、最初のＳ２０１では、ＣＰＵ１０ｂは、データベース管理プログラム１３による機能に対し、指定された各クラスについての情報を通知し、指定された各クラスの全ての属性についてインデックスが設定されているか否かを示すインデックス一覧情報を、取得する。
【００４１】
次のＳ２０２では、ＣＰＵ１０ｂは、指定されたクラスのうち、最初のクラスを処理対象として特定する。
【００４２】
次のＳ２０３では、ＣＰＵ１０ｂは、処理対象クラス内の一つ又は多数の属性のうち、最初の属性を処理対象として特定する。
【００４３】
次のＳ２０４では、ＣＰＵ１０ｂは、Ｓ２０１において取得されたインデックス一覧情報を参照して、処理対象属性にインデックスが設定されているか否かを、判別する。そして、ＣＰＵ１０ｂは、処理対象属性にインデックスが設定されていなかった場合には、処理をＳ２０７へ進め、処理対象属性にインデックスが設定されていた場合には、処理をＳ２０５へ進める。
【００４４】
Ｓ２０５では、ＣＰＵ１０ｂは、処理対象クラスの処理対象属性のために作成されている全てのリーフインデックステーブルから、インデックスデータを全て読み出す。なお、ＣＰＵ１０ｂは、クラス番号の順に、且つ、同じクラス番号内ではインスタンス番号の順に、インデックスデータを読み出す。例えば、図４の例で言えば、ＣＰＵ１０ｂは、クラス４１部分の第１リーフインデックステーブル内のインデックスデータを順に読み出し、次に、クラス４１部分の第２リーフインデックステーブル内のインデックスデータを順に読み出し、次に、クラス４２部分の第１リーフインデックステーブル内のインデックスデータを順に読み出し、最後に、クラス４３部分の第１リーフインデックステーブル内のインデックスデータを順に読み出す。従って、このＳ２０５において読み出されるインデックスデータは、順に読み出されることによって、自動的にソートされた状態となる。
【００４５】
次のＳ２０６では、ＣＰＵ１０ｂは、Ｓ２０５において読み出された全てのインデックスデータが格納されたインデックスアンロードファイルを生成する。図７は、このインデックスアンロードファイル内を概念的に示すテーブルである。図７に示されるように、インデックスアンロードファイル内には、処理対象クラスのクラス名及びクラス番号，並びに、インデックスが設定されている属性の属性名及び属性型（属性値の種類、数値，文字列，ＯＩＤ等）が、記録されている。また、インデックスアンロードファイル内には、処理対象クラス内のインスタンスのＯＩＤとその属性値であるＯＩＤとからなるレコードが、蓄積されている。そして、このインデックスアンロードファイル内では、各レコードは、Ｓ２０５において読み出された状態で、すなわち、自動的にソートされた状態で、格納される。ＣＰＵ１０ｂは、図７に示されるようなインデックスアンロードファイルを作成した後、処理をＳ２０７へ進める。
【００４６】
Ｓ２０７では、ＣＰＵ１０ｂは、処理対象クラス内の一つ又は多数の属性のうち、未処理の属性が存在するか否かを、判別する。そして、未処理の属性が処理対象クラス内に存在していた場合には、ＣＰＵ１０ｂは、処理をＳ２０８へ進める。
【００４７】
Ｓ２０８では、ＣＰＵ１０ｂは、処理対象クラス内の未処理の属性のうち、次の属性を処理対象として特定し、処理をＳ２０４へ戻す。
【００４８】
Ｓ２０４〜Ｓ２０８の処理ループを実行中、処理対象クラス内に未処理の属性が存在しなくなった場合には、ＣＰＵ１０ｂは、処理をＳ２０７からＳ２０９へ分岐させる。
【００４９】
Ｓ２０９では、ＣＰＵ１０ｂは、指定されたクラスのうち、未処理のクラスが存在するか否かを、判別する。そして、未処理のクラスが存在していた場合には、ＣＰＵ１０ｂは、処理をＳ２１０へ進める。
【００５０】
Ｓ２１０では、ＣＰＵ１０ｂは、未処理のクラスのうち、次のクラスを処理対象として特定し、処理をＳ２０３へ戻す。
【００５１】
Ｓ２０３〜Ｓ２１０の処理ループを実行中、未処理のクラスが存在しなくなった場合には、ＣＰＵ１０ｂは、処理をＳ２０９から分岐させる。そして、ＣＰＵ１０ｂは、インデックスアンロード処理を終了した後、図５のメインルーチンにおけるＳ１０３へ処理を進める。
【００５２】
Ｓ１０３では、ＣＰＵ１０ｂは、Ｓ１０１において生成された一つ又は多数のオブジェクトアンロードファイル，及び、Ｓ１０２において生成された一つ又は多数のインデックスアンロードファイルを、指定された移行先へ送信する。その後、ＣＰＵ１０ｂは、アンロード処理を終了する。
【００５３】
以上に示されるアンロード処理により、オブジェクトアンロードファイルが、指定されたクラス毎に生成されるとともに、インデックスアンロードファイルが、指定されたクラス内におけるインデックスが設定されている属性毎に作成される。また、生成されたオブジェクトアンロードファイル及びインデックスアンロードファイルが、本実施形態の移行先であるシステム２０へ、通信回線を通じて送信される。
【００５４】
なお、本実施形態では、システム１０にある各アンロードファイルが、通信回線を通じてシステム２０へ送信されるとしたが、これに限られるものではない。すなわち、各アンロードファイルは、フレキシブルディスクＦＤやコンパクトディスクＣＤなどのコンピュータ可読媒体に記録され、コンピュータ可読媒体がシステム２０の各ドライブに装着されることにより、システム１０からシステム２０へ送られても良い。
【００５５】
そして、新たなオブジェクト指向データベース管理システムとして利用されるために用意されたシステム２０では、各アンロードファイルの受信をトリガとして、ＣＰＵ２０ｂがロードプログラム２２を読み込み、ロード処理を実行する。図８は、そのロード処理の内容を示すフローチャートである。
【００５６】
ロード処理の開始後、最初のＳ３０１では、ＣＰＵ２０ｂは、システム１０から受信した一つ又は多数のオブジェクトアンロードファイルのうち、最初のオブジェクトアンロードファイルを処理対象として特定する。
【００５７】
次のＳ３０２では、ＣＰＵ２０ｂは、処理対象オブジェクトアンロードファイルについて、オブジェクトロード処理を実行する。このオブジェクトロード処理は、一般に行われている処理であるため、詳しい説明は省略するが、その概略としては、オブジェクトロードファイル内から読み出したレコード（属性値の集合）に対し、このシステム２０において一意な新たなＯＩＤが付与され、新ＯＩＤが付与された属性値の集合がオブジェクトとしてＨＤＤ２０ａ内に記録される。なお、そのオブジェクトの記録位置情報であるレコードアドレスは、データベース管理プログラム２１の機能によって、オブジェクトのＯＩＤと対応付けられた状態で、管理される。図９は、データ移行によって新たなＯＩＤが付与されたオブジェクトの一例を概念的に説明するために作成されたテーブルである。図９にも、図３と同様に、四つのテーブルが示されている。図３と図９とを比較して明らかなように、図９は、システム１０においてクラス番号が３１であったオブジェクトに対し、クラス番号７１が付与され、クラス７１内の各インスタンスに対し、新たなインスタンス番号が付与された例を、示している。同様に、図９は、システム１０においてクラス番号が４１，４２，４３であったオブジェクトに対し、それぞれ、クラス番号７３，７４，７２が付与され、各クラス７２，７３，７４内の各インスタンスに対し、新たなインスタンス番号が付与された例を示している。なお、図９に示されるように、このオブジェクトロード処理においては、属性値として記録されているＯＩＤは、システム１０において使われていた旧いＯＩＤのままである。ＣＰＵ２０ｂは、図９に示されるように、新たなＯＩＤが採番されたオブジェクトをＨＤＤ２０ａ内に記録した後、処理をＳ３０３へ進める。
【００５８】
Ｓ３０３では、ＣＰＵ２０ｂは、処理対象オブジェクトアンロードファイルについて、すなわち、一つのクラスについて、インスタンス番号変換テーブルを生成する。図１０は、インスタンス番号変換テーブルを概念的に説明するために作成された対応表である。図１０に示されるように、インスタンス番号変換テーブルは、オブジェクトについて用いられていた旧いインスタンス番号がデータ移行に伴って新しいインスタンス番号に置き換えられた際の置換前後のインスタンス番号の対応表である。なお、図１０には、四つのインスタンス番号変換テーブルが示されているが、このＳ３０３のステップでは、インスタンス番号変換テーブルが一つだけ生成され、Ｓ３０３のステップを繰り返し実行することによって、インスタンス番号変換テーブルが多数生成される。図１０に示されるように、概念的に示されるインスタンス番号変換テーブルは、「移行元」及び「移行先」の各項目欄からなるレコードがインスタンス毎に作成されることによって、構成されている。「移行元」及び「移行先」には、旧インスタンス番号及び新インスタンス番号が記録される。インスタンス番号変換テーブルは、作成されると、オブジェクトと同様に、ＨＤＤ２０ａ内に記録され、その記録位置を示すレコードアドレス（図１０では、７１〜７４の順に、０００５２８３，０００５３５２，０００５４８６，０００５５５３）を付与される。ＣＰＵ２０ｂは、図１０に示されるようなインスタンス番号変換テーブルを一つ生成した後、処理をＳ３０４へ進める。
【００５９】
Ｓ３０４では、ＣＰＵ２０ｂは、システム１０から受信した一つ又は多数のオブジェクトアンロードファイルの中に、未処理のオブジェクトアンロードファイルが存在するか否かを、判別する。そして、ＣＰＵ２０ｂは、未処理のオブジェクトアンロードファイルが存在していた場合には、処理をＳ３０５へ進める。
【００６０】
Ｓ３０５では、ＣＰＵ２０ｂは、未処理のオブジェクトアンロードファイルのうち、次のオブジェクトアンロードファイルを処理対象として特定し、処理をＳ３０２へ戻す。
【００６１】
Ｓ３０２〜Ｓ３０５の処理ループを実行中、未処理のオブジェクトアンロードファイルが存在しなくなった場合には、ＣＰＵ２０ｂは、処理をＳ３０４から分岐させ、処理をＳ３０６へ進める。
【００６２】
Ｓ３０６では、ＣＰＵ２０ｂは、Ｓ３０２〜Ｓ３０５の処理ループにおいて生成されたインスタンス番号変換テーブルに基づいて、クラス番号変換テーブルを生成する。図１１は、クラス番号変換テーブルを概念的に説明するために作成された対応表である。図１１に示されるように、クラス番号変換テーブルは、システム１０から受信した全てのオブジェクトアンロードファイルに対応する旧いクラス番号がシステム２０内において一意な新しいクラス番号に置き換えられた際の置換前後のクラス番号の対応表である。概念的に示されるクラス番号変換テーブルは、「移行元」，「移行先」及び「レコードアドレス」の各項目欄からなるレコードがクラス毎に作成されることによって、構成されている。「移行元」及び「移行先」には、旧クラス番号及び新クラス番号が記録され、「レコードアドレス」には、そのクラス番号に対応するインスタンス番号変換テーブルのレコードアドレスが記録される。クラス番号変換テーブルは、作成されると、オブジェクトと同様に、ＨＤＤ２０ａ内に記録され、その記録位置を示すレコードアドレス（図１１では、００２０６５３）を付与される。ＣＰＵ２０ｂは、図１１に示されるようなクラス番号変換テーブルを一つ生成した後、処理をＳ３０７へ進める。
【００６３】
Ｓ３０７では、ＣＰＵ２０ｂは、Ｓ３０３及びＳ３０６において生成された各インスタンス番号変換テーブル及びクラス番号変換テーブルを参照して、Ｓ３０２において新ＯＩＤを付与されたオブジェクトが属性値として持っている旧いＯＩＤを、新ＯＩＤに変換する。図１２は、属性値として有していた旧ＯＩＤが新ＯＩＤに変換された後のオブジェクトの一例を概念的に説明するために作成されたテーブルである。図９と図１２とを比較して明らかなように、クラス７１の「属性１」の値が、図３に示されたクラス４１〜４３のＯＩＤから、図９及び図１２に示されたクラス７２〜７４のＯＩＤに変換されている。ＣＰＵ２０ｂは、このような変換を行った後、処理をＳ３０８へ進める。
【００６４】
Ｓ３０８では、ＣＰＵ２０ｂは、システム１０から受信したファイルの中に、インデックスアンロードファイルが含まれているか否かを、判別する。そして、ＣＰＵ２０ｂは、インデックスアンロードファイルが含まれていなかった場合には、ロード処理を終了し、インデックスアンロードファイルが含まれていた場合には、処理をＳ３０９へ進める。
【００６５】
Ｓ３０９では、ＣＰＵ２０ｂは、システム１０から受信したインデックスアンロードファイルのうち、最初のインデックスアンロードファイルを処理対象として特定する。
【００６６】
次のＳ３１０では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイルについて、インデックスロード処理を実行する。具体的には、ＣＰＵ２０ｂは、インデックスロードサブルーチンを実行する。図１３は、インデックスロードサブルーチンの内容を示すフローチャートである。
【００６７】
インデックスロードサブルーチンの開始後、最初のＳ４０１では、ＣＰＵ２０ｂは、インデックスアンロードファイルから、属性型（図７参照）が何れのものであるかを、判別する。そして、ＣＰＵ２０ｂは、属性型がＯＩＤ以外であった場合には、処理をＳ４１１へ進める。
【００６８】
Ｓ４１１では、ＣＰＵ２０ｂは、当該クラスの当該属性についての新たなルートインデックステーブルと新たなリーフインデックステーブルとを生成する。なお、ここで生成されるルートインデックステーブルとリーフインデックステーブルは、レコードが記録されていない新規のテーブルである。
【００６９】
次のＳ４１２では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイルから、最初のレコードを、処理対象レコードとして読み出す。
【００７０】
次のＳ４１３では、ＣＰＵ２０ｂは、クラス番号変換テーブル及びインスタンス番号変換テーブルを参照して、処理対象レコードの中の旧ＯＩＤを新ＯＩＤに変換し、データベース管理プログラム２１の機能を利用して、変換後の新ＯＩＤに対応するレコードアドレスを読み出す。
【００７１】
次のＳ４１４では、ＣＰＵ２０ｂは、インデックスデータ数が所定の格納上限数に達していないリーフインデックステーブルに、処理対象レコード中の属性値とＳ４１３において読み出されたレコードアドレスとからなるインデックスデータを、記録する。
【００７２】
次のＳ４１５では、ＣＰＵ２０ｂは、Ｓ４１４においてインデックスデータが記録されたリーフインデックステーブルについて、インデックスデータ数が所定の格納上限数に到達しているか否かを、判別する。そして、ＣＰＵ２０ｂは、インデックスデータ数が所定の格納上限数に到達していなかった場合には、処理をＳ４１７へ進め、インデックスデータ数が所定の格納上限数に到達していた場合には、処理をＳ４１６へ進める。
【００７３】
次のＳ４１６では、ＣＰＵ２０ｂは、当該リーフインデックステーブルのレコードアドレスと当該リーフインデックステーブル内の属性値の範囲を示す索引情報とを、ルートインデックステーブルに記録し、新たなリーフインデックステーブルを生成し、処理をＳ４１７へ進める。
【００７４】
Ｓ４１７では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイル内に、未処理のレコードが存在するか否かを、判別する。そして、ＣＰＵ２０ｂは、未処理のレコードが存在していた場合には、処理をＳ４１８へ進める。
【００７５】
Ｓ４１８では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイル内における未処理のレコードのうち、次のレコードを処理対象レコードとして特定し、処理をＳ４１３へ戻す。
【００７６】
Ｓ４１３〜Ｓ４１８の処理ループの実行中、未処理のレコードが存在しなくなった場合には、ＣＰＵ２０ｂは、処理をＳ４１７から分岐させる。その後、ＣＰＵ２０ｂは、インデックスロード処理を終了し、図８のメインルーチンにおけるＳ３１１へ処理を進める。
【００７７】
一方、Ｓ４０１において、属性型がＯＩＤであった場合には、ＣＰＵ２０ｂは、処理をＳ４６１へ進める。
【００７８】
Ｓ４６１では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイルから、最初のレコードを、処理対象レコードとして読み出す。
【００７９】
次のＳ４６２では、ＣＰＵ２０ｂは、クラス番号変換テーブル及びインスタンス番号変換テーブルを参照して、処理対象レコードの中の旧ＯＩＤを新ＯＩＤに変換し、データベース管理プログラム２１の機能を利用して、変換後の新ＯＩＤに対応するレコードアドレスを読み出す。
【００８０】
次のＳ４６３では、ＣＰＵ２０ｂは、クラス番号変換テーブル及びインスタンス番号変換テーブルを参照して、処理対象レコードの中の属性値である旧ＯＩＤを、新ＯＩＤに変換する。
【００８１】
次のＳ４６４では、ＣＰＵ２０ｂは、Ｓ４６３において変換されたあとのＯＩＤの中のクラス番号が示すクラスについて、インデックステーブルが存在するか否かを、判別する。そして、ＣＰＵ２０ｂは、当該クラスについてインデックステーブルが存在していた場合には、処理をＳ４６６へ進め、当該クラスについてインデックステーブルが存在していなかった場合には、処理をＳ４６５へ進める。
【００８２】
Ｓ４６５では、ＣＰＵ２０ｂは、当該クラス用の新たなノードインデックステーブルと新たなリーフインデックステーブルとを生成する。なお、ここで生成されるノードインデックステーブルとリーフインデックステーブルは、レコードが記録されていない新規のテーブルである。ＣＰＵ２０ｂは、各テーブルを生成した後、処理をＳ４６６へ進める。
【００８３】
Ｓ４６６では、ＣＰＵ２０ｂは、インデックスデータ数が所定の格納上限数に達していない当該クラス用のリーフインデックステーブルに、Ｓ４６２において読み出されたレコードアドレスとＳ４６３において変換された後のキー値としての新ＯＩＤとからなるインデックスデータを、記録する。
【００８４】
Ｓ４６７では、ＣＰＵ２０ｂは、Ｓ４６６においてインデックスデータが記録された当該クラス用のリーフインデックステーブルについて、インデックスデータ数が所定の格納上限数に到達しているか否かを、判別する。そして、ＣＰＵ２０ｂは、インデックスデータ数が所定の格納上限数に到達していなかった場合には、処理をＳ４６９へ進め、インデックスデータ数が所定の格納上限数に到達していた場合には、処理をＳ４６８へ進める。
【００８５】
Ｓ４６８では、ＣＰＵ２０ｂは、当該リーフインデックステーブルのレコードアドレスと当該リーフインデックステーブル内の属性値の範囲を示す索引情報とを、当該クラス用のノードインデックステーブルに記録し、新たなリーフインデックステーブルを生成し、処理をＳ４６９へ進める。
【００８６】
Ｓ４６９では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイル内に、未処理のレコードが存在するか否かを、判別する。そして、ＣＰＵ２０ｂは、未処理のレコードが存在していた場合には、処理をＳ４７０へ進める。
【００８７】
Ｓ４７０では、ＣＰＵ２０ｂは、処理対象インデックスアンロードファイル内における未処理のレコードのうち、次のレコードを処理対象レコードとして特定し、処理をＳ４６２へ戻す。
【００８８】
Ｓ４６２〜Ｓ４７０の処理ループの実行中、未処理のレコードが存在しなくなった場合には、ＣＰＵ２０ｂは、処理をＳ４６９から分岐させ、処理をＳ４７１へ進める。
【００８９】
Ｓ４７１では、ＣＰＵ２０ｂは、新たなルートインデックステーブルを生成し、ノードインデックステーブルのレコードアドレスと当該ノードインデックステーブル内の属性値の範囲を示す索引情報とを、そのルートインデックステーブルに記録し、そのルートインデックステーブル内をクラス番号の順にソートする。図１４は、図４に示されたインデックステーブルがシステム２０へデータ移行されたときの状態を、示している。図４と図１４とを比較すると、データ移行に伴ってクラス４１，４２，４３がクラス７３，７４，７２に変換されているが、Ｓ４７１のステップにおいて、インデックステーブル内がソートされるので、ルートインデックステーブル内では、クラス７２，７３，７４の順にレコードが記録されている。ＣＰＵ２０ｂは、図１４のようなルートインデックステーブルを生成した後、インデックスロード処理を終了して、図８のメインルーチンにおけるＳ３１１へ処理を進める。
【００９０】
Ｓ３１１では、ＣＰＵ２０ｂは、システム１０から受信した一つ又は多数のインデックスアンロードファイルの中に、未処理のインデックスアンロードファイルが存在するか否かを、判別する。そして、ＣＰＵ２０ｂは、未処理のインデックスアンロードファイルが存在していた場合には、処理をＳ３１２へ進める。
【００９１】
Ｓ３１２では、ＣＰＵ２０ｂは、未処理のインデックスアンロードファイルのうち、次のインデックスアンロードファイルを処理対象として特定し、処理をＳ３１０へ戻す。
【００９２】
Ｓ３１０〜Ｓ３１２の処理ループを実行中、未処理のインデックスアンロードファイルが存在しなくなった場合には、ＣＰＵ２０ｂは、処理をＳ３１１から分岐させ、ロード処理を終了する。
【００９３】
以上に示されるロード処理により、オブジェクトアンロードファイル内のレコードは、新ＯＩＤを付与されて、当該システム２０向けに利用可能なオブジェクトとして生成される。また、インデックスアンロードファイル内のレコードは、キー値として数値や文字列を有している場合には、そのキー値を属性値として有するオブジェクトのレコードアドレスが正しく記録されたインデックステーブルが、当該システム２０向けに利用可能なインデックステーブルとして生成される。さらに、インデックスアンロードファイル内のレコードは、キー値としてシステム１０用の旧ＯＩＤを有している場合には、各変換テーブルが参照されて、その旧ＯＩＤが新しいＯＩＤへと変換され、その新ＯＩＤとその新ＯＩＤを属性値として有するオブジェクトのレコードアドレスとが正しく記録されたインデックステーブルが、当該システム２０向けに利用可能なインデックステーブルとして生成される。
【００９４】
以上に示されるように、本実施形態によれば、オブジェクトのデータ移行時において、オブジェクトの何れかの属性にインデックスが設定されている場合には、そのインデックスのアンロードファイルが生成され、また、オブジェクトアンロードファイル内のレコードに基づいてオブジェクトを生成する際には、クラス番号変換テーブル及びインスタンス番号変換テーブルが生成される。そして、移行先のシステム２０においては、クラス番号変換テーブル及びインスタンス番号変換テーブルが参照されつつ、インデックスアンロードファイル内のレコードに基づいて、そのシステム２０用のインデックステーブルが生成される。従って、オブジェクトのデータ移行に伴って、ＯＩＤをキー値として持つインデックステーブルが、移行先のシステム２０において、一から生成されることなく、各変換テーブル及びインデックスアンロードファイルによって効率的に作成される。
【００９５】
（付記１）
オブジェクト識別子を定義付けられることによって何れかのクラスに所属するように管理されるとともに他のオブジェクトのオブジェクト識別子を属性値として有している多数のオブジェクト，及び、属性値についてのインデックスデータを記録している記録装置に繋がれるコンピュータに対し、
前記記録装置内のオブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成させ、
前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを生成させる
ことを特徴とするアンロードプログラム。
【００９６】
（付記２）
各種の情報を記録する記録装置に繋がれるコンピュータに対し、
オブジェクトが持つオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中の属性値の集合に新たなオブジェクト識別子を採番させ、
一意な記録位置情報が定義された前記記録装置内の位置へ前記属性値の集合を記録させ、
データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成させ、
キー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照させて、対応する新たなオブジェクト識別子に変換させ、
前記レコード中に含まれるキー値ではないオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換させ、
変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納させる
ことを特徴とするロードプログラム。
【００９７】
（付記３）
或るオブジェクト指向データベース管理システムがクラス毎に管理している多数のオブジェクトのそれぞれが、オブジェクト識別子を有しているとともに、他のオブジェクト識別子を属性値として有している場合において、そのオブジェクトが有する各属性値を、他のオブジェクト指向データベース管理システムへ移行するとともに、前記属性値についてのインデックステーブル内のインデックスデータをも移行する際のデータ移行方法であって、
移行元のオブジェクト指向データベース管理システムが、
前記オブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成するとともに、
前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記インデックステーブルからキー値が読み出される順に蓄積されているインデックスアンロードファイルを生成し、
移行先のオブジェクト指向データベース管理システムが、
前記オブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出す毎に、レコード中の属性値の集合に新たなオブジェクト識別子を採番し、一意な記録位置情報が定義された記録装置内の位置に前記属性値の集合を記録するするとともに、データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成し、
前記インデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出す毎に、レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換するとともに、前記レコード中のオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換し、変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての前記新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納する
ことを特徴とするデータ移行方法。
【００９８】
（付記４）
前記インデックステーブルは、リーフインデックステーブルとして多数のテーブルに分割されており、各リーフインデックステーブルは、ルートインデックステーブル及びノードインデックステーブルとともに、Ｂツリー型のデータ構造を構成している
ことを特徴とする付記３記載のデータ移行方法。
【００９９】
（付記５）
前記ノードインデックステーブルは、クラス番号毎に作成されている
ことを特徴とする付記４記載のデータ移行方法。
【０１００】
（付記６）
前記移行元のオブジェクト指向データベース管理システムは、前記移行先のオブジェクト指向データベース管理システムに対し、データの送受信が可能となるように接続されており、前記オブジェクトアンロードファイル及び前記インデックスアンロードファイルを生成すると、これらファイルを前記移行先のオブジェクト指向データベース管理システムへ送信する
ことを特徴とする付記３，４又は５記載のデータ移行方法。
【０１０１】
（付記７）
オブジェクト識別子を定義付けられることによって何れかのクラスに所属するように管理されるとともに他のオブジェクトのオブジェクト識別子を属性値として有している多数のオブジェクト，及び、属性値についてのインデックスデータを記録している記録装置に繋がれるコンピュータに対し、
前記記録装置内のオブジェクトのオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルをクラス毎に生成させ、
前記インデックスデータ中のキー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを生成させる
アンロードプログラム
を格納したことを特徴とするコンピュータ可読媒体。
【０１０２】
（付記８）
各種の情報を記録する記録装置に繋がれるコンピュータに対し、
オブジェクトが持つオブジェクト識別子とそのオブジェクトが有する各属性値とからなるレコードが蓄積されたオブジェクトアンロードファイルを取得した場合には、前記オブジェクトアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中の属性値の集合に新たなオブジェクト識別子を採番させ、
一意な記録位置情報が定義された前記記録装置内の位置へ前記属性値の集合を記録させ、
データ移行前にその属性値の集合に付されていたオブジェクト識別子と前記新たなオブジェクト識別子とについてのクラス番号対応表及びインスタンス番号対応表を作成させ、
キー値としてのオブジェクト識別子とそのオブジェクト識別子を属性値として有するオブジェクトのオブジェクト識別子とからなるレコードが、前記キー値としてのオブジェクト識別子の順に蓄積されているインデックスアンロードファイルを取得した場合には、前記インデックスアンロードファイルからレコードを一つずつ読み出させ、
前記レコードを一つ読み出す毎に、前記レコード中にキー値として含まれるオブジェクト識別子を、前記各対応表を参照させて、対応する新たなオブジェクト識別子に変換させ、
前記レコード中に含まれるキー値ではないオブジェクト識別子を、前記各対応表を参照して、対応する新たなオブジェクト識別子に変換させ、
変換後のオブジェクト識別子に対応する記録位置情報と前記キー値としての新たなオブジェクト識別子とからなるインデックスデータをインデックステーブルに格納させる
ロードプログラム
を格納したことを特徴とするコンピュータ可読媒体。
【０１０３】
【発明の効果】
以上に説明したように、本発明によれば、オブジェクトのデータ移行に伴って、オブジェクト識別子をキー値として持つインデックステーブルが、移行先のシステムにおいて効率的に作成される。
【図面の簡単な説明】
【図１】本発明の実施形態の概略的な構成図
【図２】両システムのハードディスクドライブ内に記録されているデータやプログラムを説明するための説明図
【図３】オブジェクトを概念的に説明するために作成されたテーブル
【図４】リンクが貼られた属性に対してインデックスが作成された例を概念的に説明するために作成されたテーブル
【図５】アンロード処理の内容を示すフローチャート
【図６】インデックスアンロードサブルーチンの内容を示すフローチャート
【図７】インデックスアンロードファイル内を概念的に示すテーブル
【図８】ロード処理の内容を示すフローチャート
【図９】データ移行によって新たなＯＩＤが付与されたオブジェクトの一例を概念的に説明するために作成されたテーブル
【図１０】インスタンス番号変換テーブルを概念的に説明するために作成された対応表
【図１１】クラス番号変換テーブルを概念的に説明するために作成された対応表
【図１２】属性値として有していた旧ＯＩＤが新ＯＩＤに変換された後のオブジェクトの一例を概念的に説明するために作成されたテーブル
【図１３】インデックスロードサブルーチンの内容を示すフローチャート
【図１４】図４に示されたインデックステーブルが移行先のシステムへデータ移行されたときの状態を概念的に説明するために作成されたテーブル
【符号の説明】
１０    システム（移行元）
１０ａ  ハードディスクドライブ（ＨＤＤ）
１０ｂ  ＣＰＵ
１１    オブジェクト
１２    インデックステーブル
１３    データベース管理プログラム
１４    アンロードプログラム
２０    システム（移行先）
２０ａ  ＨＤＤ
２０ｂ  ＣＰＵ
２１    データベース管理プログラム
２２    ロードプログラム
【図１】
2004185270.tif 000003
【図２】
2004185270.tif 000004
【図３】
2004185270.tif 000005
【図４】
2004185270.tif 000006
【図５】
2004185270.tif 000007
【図６】
2004185270.tif 000008
【図７】
2004185270.tif 000009
【図８】
2004185270.tif 000010
【図９】
2004185270.tif 000011
【図１０】
2004185270.tif 000012
【図１１】
2004185270.tif 000013
【図１２】
2004185270.tif 000014
【図１３】
2004185270.tif 000015
【図１４】
2004185270.tif 000016