(57)【特許請求の範囲】
【請求項１】
データベースユーザからのデータベースの操作を受け付けるデータベース操作入出力装置と、データベースにレコードを挿入するレコード挿入機能部と、データベースに格納されたレコードを参照・更新するレコード参照・更新機能部と、レコード参照・更新機能部からのデータベース破壊修復依頼によりデータベース破壊を修復するデータベース破壊修復機能部と、データベースの実体である複数のインデックス及び複数のテーブルを管理するデータベース管理部とを備え、
前記データベース操作入出力装置は、前記ユーザからのデータベースへのレコード挿入要求及びレコード参照・更新要求操作を受け付けて、それぞれ前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出す手段を有し、
前記レコード挿入機能部は、前記データベース管理部のテーブルにレコードを挿入し、そのレコード挿入の際に、レコードにレコードＩＤを付与して前記テーブルに格納するとともに、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入する手段を有し、
前記レコード参照・更新機能部は、前記データベース管理部のテーブルに格納されたレコードを参照・更新し、前記レコード参照・更新の際、リーフノードからレコードへのポインタを取得し、そのポインタの指すアドレスに存在するレコードのレコードＩＤと、リーフノードのレコードＩＤが一致の場合には、レコード参照・更新処理を行い、不一致の場合には、データベース破壊と判断して、前記データベース破壊修復機能部にデータベース破壊修復依頼を出す手段を有し、
前記データベース破壊修復機能部は、前記テーブル内のレコードのレコードＩＤの列を順次走査して、リーフノードのレコードＩＤと同一のレコードＩＤを検索し、同一のレコードＩＤが検索された場合、リーフノードのレコードへのポインタを、検索された同一のレコードＩＤを含むレコードのアドレスで上書きしてデータベース破壊を修復する手段を有し、かつ、同一のレコードＩＤが検索されなかった場合、当該リーフノードを削除してデータベース破壊を修復する手段を有する、
ことを特徴とするデータベース自動修復装置。
【請求項２】
請求項１記載のデータベース自動修復装置において、
前記データベース操作入出力装置は、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出した際のそれぞれの処理結果を受け取り、前記ユーザに通知する手段を有し、
前記レコード挿入機能部は、前記レコードにレコードＩＤを付与して前記テーブルに格納するとともに、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入した際のそれぞれの処理結果をデータベース操作入出力装置に通知する手段を有し、
前記レコード参照・更新機能部は、レコードＩＤが一致の場合のレコード参照・更新処理と、前記ＩＤが不一致の場合のデータベース破壊修復機能部よりの修復依頼を出した際のそれぞれの処理結果を前記データベース操作入出力装置に通知する手段を有する、
ことを特徴とするデータベース自動修復装置。
【請求項３】
データベースユーザからのデータベースの操作を受け付けるデータベース操作入出力装置と、データベースにレコードを挿入するレコード挿入機能部と、データベースに格納されたレコードを参照・更新するレコード参照・更新機能部と、レコード参照・更新機能部からのデータベース破壊修復依頼によりデータベース破壊を修復するデータベース破壊修復機能部と、データベースの実体である複数のインデックス及び複数のテーブルを管理するデータベース管理部とを備えたデータベース自動修復方法であって、
前記データベース操作入出力装置は、前記ユーザからのデータベースへのレコード挿入要求及びレコード参照・更新要求操作を受け付けるステップと、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出すステップとを有し、
前記レコード挿入機能部は、前記データベース管理部のテーブルにレコードを挿入するステップと、前記レコード挿入の際に、前記レコードにレコードＩＤを付与して前記テーブルに格納するステップと、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入するステップとを有し、
前記レコード参照・更新機能部は、前記データベース管理部のテーブルに格納されたレコードを参照・更新するステップと、前記レコード参照・更新の際、前記リーフノードからレコードへのポインタを取得し、そのポインタの指すアドレスに存在するレコードのレコードＩＤと、リーフノードのレコードＩＤが一致の場合には、レコード参照・更新処理を行うステップと、前記それぞれのＩＤが不一致の場合には、データベース破壊と判断して、前記データベース破壊修復機能部にデータベース破壊修復依頼を出すステップとを有し、
前記データベース破壊修復機能部は、前記テーブル内のレコードのレコードＩＤの列を順次走査して、リーフノードのレコードＩＤと同一のレコードＩＤを検索するステップと、同一のレコードＩＤが検索された場合、リーフノードのレコードへのポインタを、検索された同一のレコードＩＤを含むレコードのアドレスで上書きしてデータベース破壊を修復するステップとを有し、かつ、同一のレコードＩＤが検索されなかった場合、当該リーフノードを削除してデータベース破壊を修復するステップとを有する、
ことを特徴とするデータベース自動修復方法。
【請求項４】
請求項３記載のデータベース自動修復方法において、
前記データベース操作入出力装置は、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出すステップを実施した際のそれぞれの処理結果を受け取り、前記ユーザに通知するステップを有し、
前記レコード挿入機能部は、前記レコードにレコードＩＤを付与して前記テーブルに格納するステップと、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入するステップの実施によるそれぞれの処理結果を前記データベース操作入出力装置に通知するステップを有し、
前記レコード参照・更新機能部は、レコードＩＤが一致の場合のレコード参照・更新処理するステップと、前記ＩＤが不一致の場合のデータベース破壊修復機能部よりの修復依頼を出すステップの実施によるそれぞれの処理結果を前記データベース操作入出力装置に通知するステップとを有する、
ことを特徴とするデータベース自動修復方法。
【請求項５】
請求項３から４のいずれか１項に記載のデータベース自動修復方法の各ステップをコンピュータに実行させるデータベース自動修復プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特に、データベース破壊が発生している状況において、データベースシステムが自動的にデータベースの修復を行い、サービスの停止を必要とせずにデータベースを復旧させることを可能とする、データベース自動修復装置及びその方法並びにデータベース自動修復プログラムに関するものである。
【背景技術】
【０００２】
データベースに格納されるテーブル（表）のレコード（行）を高速に検索する方法として、事前にインデックスを作成しておき、このインデックスを使用することで高速な検索を可能とする方法がある。
【０００３】
このようなインデックス方式で、一般的なデータベースシステムで使用されるものとしては、木構造のインデックスのＢ＋−ｔｒｅｅ等がある（例えば、非特許考文献１参照。）。
【０００４】
このような木構造のインデックスリーフノード（末端のノード）に、例えば、図５に示す、キー値とテーブル内のレコードへのポインタＰを格納しておき、レコードの検索を行う際には、キー値を使用して木構造のインデックスをたどり、リーフノードのキー値とポインタＰの組みを特定し、そのポインタＰが示す場所を参照することで該当レコードを検索することができる。
【０００５】
図５に示すテーブル中にｎ個のレコードが格納されている場合に、図６（ａ）に示すように、一件ずつキー値で順次検索するとＯ（ｎ）のオーダの検索コストがかかるのに対し、図６（ｂ）に示す木構造のインデックスを使用して検索すると、Ｏ（ｌｏｇ  ｎ）のオーダに検索コストが低減され、高速な検索が可能となる。
【非特許文献１】ＤＯＵＧＡＬＡＳ  ＣＯＭＥＲＤ，“Ｔｈｅ  Ｕｂｉｑｕｉｔｏｕｓ  Ｂ−Ｔｒｅｅ”，ＡＣＭ  Ｃｏｍｐｕｔｉｎｇ  Ｓｕｒｖｅｙｓ，Ｖｏｌ  １１，Ｎｏ２，１２１−１３８，Ｊｕｎｅ  １９７９．
【発明の開示】
【発明が解決しようとする課題】
【０００６】
データベースの更新（レコードの挿入、削除、更新）が発生する際には、木構造のインデックスも更新されることになる。その更新の際にハードウェアの不具合、またはソフトウェアの不具合があった場合には、例えば、図７に示すようにインデックスには、キー値とポインタＰは存在（図中○印）するが、テーブルにはレコードが存在しないとき、木構造のインデックスリーフノードに格納されたポインタＰが、テーブル内の正しいレコードのアドレスを指していない状態（図中×印）が発生する。これをデータベース破壊と呼ぶ。このようなデータベース破壊の状態では、正常なデータベースの参照・更新処理ができなくなるため、サービスの継続が不可能になってしまう。
【０００７】
データベース破壊を復旧する方法として、定期的に取得しておいたバックアップから復旧させる方法が考えられる。この復旧方法では、バックアップされたデータベースからの再起動が必要となり、一旦データベースのサービスを停止する必要がある。しかし、電話サービス等の２４時間３６５日無停止でサービスを継続することが必要な業務では、サービスを停止することは許容できないため、バックアップからの復旧は許容できない。
【０００８】
一方、サービス継続中（オンライン）にデータベースを修復する方法として、データベース破壊が発生しているポインタと同じリーフノードに格納されているキー値と同一のキー値を持つレコードを、テーブル内の全レコードを順次検索することで探し、同一のキー値が見つかった場合には、インデックスのポインタを修正することでデータベース破壊を復旧する方法が考えられる。
【０００９】
しかし、レコードのキー値がテーブル内で一意でなく、異なるレコードでキー値が同一となるレコードがテーブル内に格納されている場合には、どのレコードのアドレスをポインタに設定すべきか決定できないため、データベースを修復することができない。
【００１０】
よって、データベースのサービスを停止することなく自動的に、かつ異なるレコードが同一のキー値データベース破壊を修復する方法が必要となる。
【００１１】
本発明の目的は、上記のような問題点に鑑みてなされたもので、データベース破壊が発生しても、そのデータベースを自動修復することによって、データベースのサービスを停止することなく、サービスの継続を可能としたデータベース自動修復装置及びその方法並びにデータベース自動修復プログラム提供することにある。
【課題を解決するための手段】
【００１２】
上記課題を達成するために、請求項１に係る発明は、データベースユーザからのデータベースの操作を受け付けるデータベース操作入出力装置と、データベースにレコードを挿入するレコード挿入機能部と、データベースに格納されたレコードを参照・更新するレコード参照・更新機能部と、レコード参照・更新機能部からのデータベース破壊修復依頼によりデータベース破壊を修復するデータベース破壊修復機能部と、データベースの実体である複数のインデックス及び複数のテーブルを管理するデータベース管理部とを備え、
前記データベース操作入出力装置は、前記ユーザからのデータベースへのレコード挿入要求及びレコード参照・更新要求操作を受け付けて、それぞれ前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出す手段を有し、
前記レコード挿入機能部は、前記データベース管理部のテーブルにレコードを挿入し、そのレコード挿入の際に、レコードにレコードＩＤを付与して前記テーブルに格納するとともに、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入する手段を有し、
前記レコード参照・更新機能部は、前記データベース管理部のテーブルに格納されたレコードを参照・更新し、前記レコード参照・更新の際、リーフノードからレコードへのポインタを取得し、そのポインタの指すアドレスに存在するレコードのレコードＩＤと、リーフノードのレコードＩＤが一致の場合には、レコード参照・更新処理を行い、不一致の場合には、データベース破壊と判断して、前記データベース破壊修復機能部にデータベース破壊修復依頼を出す手段を有し、
前記データベース破壊修復機能部は、前記テーブル内のレコードのレコードＩＤの列を順次走査して、リーフノードのレコードＩＤと同一のレコードＩＤを検索し、同一のレコードＩＤが検索された場合は、リーフノードのレコードへのポインタを、検索された同一のレコードＩＤを含むレコードのアドレスで上書きしてデータベース破壊を修復する手段を有し、かつ、同一のレコードＩＤが検索されなかった場合、当該リーフノードを削除してデータベース破壊を修復する手段を有することを特徴とする。
【００１３】
また、請求項２に係る発明は、請求項１において、前記データベース操作入出力装置は、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出した際のそれぞれの処理結果を受け取り、前記ユーザに通知する手段を有し、
前記レコード挿入機能部は、前記レコードにレコードＩＤを付与して前記テーブルに格納するとともに、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入した際のそれぞれの処理結果を前記データベース入出力操作装置に通知する手段を有し、
前記レコード参照・更新機能部は、レコードＩＤが一致の場合のレコード参照・更新処理と、前記ＩＤが不一致の場合のデータベース破壊修復機能部よりの修復依頼を出した際のそれぞれの処理結果を前記データベース操作入出力装置に通知する手段を有する、ことを特徴とする。
【００１４】
また、請求項３に係る発明は、データベースユーザからのデータベースの操作を受け付けるデータベース操作入出力装置と、データベースにレコードを挿入するレコード挿入機能部と、データベースに格納されたレコードを参照・更新するレコード参照・更新機能部と、レコード参照・更新機能部からのデータベース破壊修復依頼によりデータベース破壊を修復するデータベース破壊修復機能部と、データベースの実体である複数のインデックス及び複数のテーブルを管理するデータベース管理部とを備えたデータベース自動修復方法であって、
前記データベース操作入出力装置は、前記ユーザからのデータベースへのレコード挿入要求及びレコード参照・更新要求操作を受け付けるステップと、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出すステップとを有し、
前記レコード挿入機能部は、前記データベース管理部のテーブルにレコードを挿入するステップと、前記レコード挿入の際に、前記レコードにレコードＩＤを付与して前記テーブルに格納するステップと、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入するステップとを有し、
前記レコード参照・更新機能部は、前記データベース管理部のテーブルに格納されたレコードを参照・更新するステップと、前記レコード参照・更新の際、前記リーフノードからレコードへのポインタを取得し、そのポインタの指すアドレスに存在するレコードのレコードＩＤと、リーフノードのレコードＩＤが一致の場合には、レコード参照・更新処理を行うステップと、前記それぞれのＩＤが不一致の場合には、データベース破壊と判断して、前記データベース破壊修復機能部にデータベース破壊修復依頼を出すステップとを有し、
前記データベース破壊修復機能部は、前記テーブル内のレコードのレコードＩＤの列を順次走査して、リーフノードのレコードＩＤと同一のレコードＩＤを検索するステップと、同一のレコードＩＤが検索された場合は、リーフノードのレコードへのポインタを、検索された同一のレコードＩＤを含むレコードのアドレスで上書きしてデータベース破壊を修復するステップとを有し、かつ、同一のレコードＩＤが検索されなかった場合、当該リーフノードを削除してデータベース破壊を修復するステップとを有する、ことを特徴とする。
【００１５】
また、請求項４に係る発明は、請求項３において、前記データベース操作入出力装置は、前記レコード挿入機能部及びレコード参照・更新機能部に、レコードの挿入指示及びレコード参照・更新指示を出すステップを実施した際のそれぞれの処理結果を受け取り、前記ユーザに通知するステップを有し、
前記レコード挿入機能部は、前記レコードにレコードＩＤを付与して前記テーブルに格納するステップと、レコードへのポインタを保持するリーフノードを前記データベース管理部のインデックスに挿入するステップの実施によるそれぞれの処理結果を前記データベース操作入出力装置に通知するステップを有し、
前記レコード参照・更新機能部は、レコードＩＤが一致の場合のレコード参照・更新処理するステップと、前記ＩＤが不一致の場合のデータベース破壊修復機能部よりの修復依頼を出すステップの実施によるそれぞれの処理結果を前記データベース操作入出力装置に通知するステップとを有する、ことを特徴とする。
【００１６】
また請求項５に係る発明は、請求項３から４のいずれか１項に記載のデータベース自動修復方法の各ステップをコンピュータに実行させることを特徴とするプログラムである。
【発明の効果】
【００１７】
本発明によれば、データベース破壊が発生しても、データベースのサービスを停止することなく、データベースを自動修復することによって、データベースのサービスの継続が可能となり、システムの可用性が向上する。また、レコードＩＤを使用してデータベースを修復することにより、キー値がテーブル内で一意でなく、同一のキー値のレコードが複数存在する場合でも、データベースの自動修復が可能となる。
【発明を実施するための最良の形態】
【００１８】
以下本発明の実施の形態を図面に基づいて説明する。図１は本発明のデータベース自動修復装置を示す構成図である。データベース自動修復装置は、データベースユーザからのデータベースの操作を受け付けるデータベース操作入出力装置００１と、データベースにレコードを挿入するレコード挿入機能部００２と、データベースに格納されたレコードを参照・更新するレコード参照・更新機能部００３と、レコード参照・更新機能部００３からのデータベース破壊修復依頼によりデータベース破壊を修復するデータベース破壊修復機能部００４と、データベースの実体である複数のインデックス及び複数のテーブルを管理するデータベース管理部００５とからなる。
【００１９】
データベース操作入出力装置００１では、データベースユーザからのレコード挿入要求、レコード参照・更新要求を受け付けて、それぞれレコード挿入機能部００２、レコード参照・更新機能部００３に、レコードの挿入指示、レコード参照・更新指示を出す。その後、データベース操作入出力装置００１は、レコード挿入機能部００２、レコード参照・更新機能部００３からそれぞれの処理結果を受け取り、データベースのユーザに処理結果を通知する。
【００２０】
レコード挿入機能部００２では、データベース管理部００５のテーブルにレコードを挿入し、その処理結果をデータベース操作入出力装置００１に通知する。レコードの挿入の際には、図２に示すように、レコードにレコードＩＤを付与してテーブル内に格納し、さらに、この挿入したレコードのレコードＩＤ、キー値、レコードへのポインタＰを保持するリーフノードを木構造インデックスに挿入する。このとき、レコードＩＤはテーブル内において、レコードが一意に識別可能となる数値とする。
【００２１】
次に、図１に戻って、レコード参照・更新機能部００３では、データベース管理部００５のテーブルに格納されたレコードを参照・更新し、その処理結果をデータベース操作入出力装置００１に通知する。レコードの参照・更新する際には、ユーザが指定したキー値：Ｋで、木構造インデックスをルートノードからリーフノードへと走査して、このキー値：Ｋを含むリーフノード：Ｌを取得する。そのリーフノード：Ｌからレコードへのポインタ：Ｐを取得し、そのポインタ：Ｐの指すアドレスに存在するレコードのレコードＩＤと、リーフノード：ＬのレコードＩＤが一致している場合には、正常にレコード参照・更新処理を行い、その処理結果をデータベース操作入出力装置００１に通知する。
【００２２】
一方、上記処理で、ポインタ：Ｐの指すアドレスに存在するレコードのレコードＩＤと、リーフノード：ＬのレコードＩＤが一致していない場合には、データベース（ＤＢ）破壊が発生していると判断し、ＤＢ破壊修復機能部００４にＤＢ破壊修復依頼を出す。その後、ＤＢ破壊修復機能部００４より処理結果をレコード参照・更新機能部００３が受け取り、その処理結果をデータベース操作入出力装置００１に通知する。
【００２３】
ＤＢ破壊修復機能部００４では、テーブル内のレコードの、レコードＩＤの列を順次走査して、リーフノード：ＬのレコードＩＤと同一のレコードＩＤを検索する。
【００２４】
この順次走査で同一のレコードＩＤが検索された場合は、リーフノード：Ｌのレコードへのポインタ：Ｐを、この検索された同一のレコードＩＤを含むレコードのアドレスで上書きしてデータベース破壊を修復する。そして正常にレコード参照・更新処理を行い、レコード参照・更新機能部００３に処理結果を通知する。なお、この処理結果通知の際には、データベースの修復を行った旨も通知して、過去にデータベースが破壊状態にあったことをユーザに認識させる。
【００２５】
同一のレコードＩＤが検索されなかった場合は、既に削除済みのレコードであったと判断し、対象レコードは存在しなかったとして、レコード参照・更新機能部００３に処理結果を通知する。ただし、この処理結果通知の際には、データベースの修復を行った旨も通知して、過去にデータベースが破壊状態にあったことをユーザに認識させる。
【００２６】
以上の手段により、データベースを停止することなく、データベース破壊の修復（復旧）を行う。
【００２７】
次に上記実施の形態における処理の流れを図３、図４に示すフローチャートにより述べる。
【００２８】
（１）データベースのテーブルへのレコードの挿入の処理
データベースのユーザよりテーブルへレコード挿入要求をデータベース操作入出力装置００１が受け付ける。要求を受け付ける為のユーザとデータベース操作入出力装置００１間のインターフェースとしては、ＳＱＬ（ＳＱＬ９２：ＩＳ９０７５−１９９２、ＪＩＳ  Ｘ３００５−１９９５など）を使用することができる。（ステップ１００１）
ステップ１００１でデータベース操作入出力装置００１が受け取ったレコードの挿入をレコード挿入機能部００２に指示する。（ステップ１００２）
ステップ１００２で挿入を指示されたレコードに、レコード挿入機能部００２にて、格納対象テーブル内で一意となる番号をレコードＩＤとして付与する。（ステップ１００３）
ステップ１００３でレコードＩＤが付与されたレコードを、データベース管理部００５の格納対象テーブルに格納する。（ステップ１００４）
ステップ１００４で格納されたレコード内のキー値を使用して、木構造インデックス内でリーフノードを格納する位置を決定する。位置の決定方法としては、前述した非特許文献１に記載のＢ＋−Ｔｒｅｅ等のアルゴリズムを使用することができる。（ステップ１００５）
ステップ１００５で決定された位置にリーフノードを挿入する。（ステップ１００６）
ステップ１００６で設置されたリーフノードに、ステップ１００３で付与したレコードＩＤと同じ番号のレコードＩＤを格納する。（ステップ１００７）
ステップ１００６で設置されたリーフノードに、ステップ１００５で位置の決定に使用したキー値を格納する。（ステップ１００８）
ステップ１００６で設置されたリーフノードに、ステップ１００４で格納したレコードのアドレスをポインタとして格納する。（ステップ１００９）
データベース操作入出力装置００１へステップ１００２で受け付けた要求の処理が完了したことを通知する。（ステップ１０１０）
データベース操作入出力装置００１で、ユーザに対しステップ１００１で受け付けた要求の処理が完了したことを通知する。（ステップ１０１１）。
【００２９】
（２）レコードの更新・参照処理時にデータベース破壊が発見されなかった場合の処理
データベースのユーザよりレコードの更新・参照処理の要求をデータベース操作入出力装置００１が受け付ける。要求を受け付ける為のユーザとデータベース操作入出力装置００１間のインターフェースとしては、ＳＱＬ（ＳＱＬ９２：ＩＳ９０７５−１９９２、ＪＩＳ  Ｘ３００５−１９９５など）を使用することができる。（ステップ２００１）
ステップ２００１でデータベース操作入出力装置００１が受け付けたレコードの参照・更新をレコード参照・更新機能部００２に指示する。（ステップ２００２）
レコード参照・更新機能部００２にて、ステップ２００２で受け付けた指示の中から、更新・参照処理要求の対象となるレコードのキー値を抽出し、そのキー値でインデックスを走査し、そのキー値が格納されているリーフノードを取得する。インデックスの走査方法としては、前述の非特許文献１に記載のＢ＋−Ｔｒｅｅ等のアルゴリズムを使用することができる。（ステップ２００３）
ステップ２００３で取得したリーフノードに格納されているレコードＩＤを取得する。（ステップ２００４）
ステップ２００３で取得したリーフノードに格納されているレコードへのポインタを取得する。（ステップ２００５）
ステップ２００５で取得したレコードへのポインタをたどって、ポインタが指し示すレコードを取得する。（ステップ２００６）
ステップ２００６で取得したレコードからレコードＩＤを取得する。（ステップ２００７）
ステップ２００４で取得したレコードＩＤと、ステップ２００７で取得したレコードＩＤが一致していることを確認する。（ステップ２００８）
ステップ２００６で取得したレコードに対して、データベース操作入出力装置００１から指示された更新・参照処理を行う。（ステップ２００９）
ステップ２００９で実施した処理結果をデータベース操作入出力装置００１に通知する。（ステップ２０１０）
データベース操作入出力装置００１にて、ユーザに対しステップ２０１０で受け取った処理結果を通知する。（ステップ２０１１）。
【００３０】
（３）レコードの更新・参照処理時にデータベース破壊を検出し、テーブル内で一致するレコードＩＤが検索できた場合の処理
ステップ２００１からステップ２００７までは前記（２）項と同じ動作となる。
【００３１】
ステップ２００４で取得したレコードＩＤと、ステップ２００７で取得したレコードＩＤが一致していないことを確認する。（ステップ２００８）
ステップ２００４で取得したレコードＩＤと同じレコードＩＤを持つ（一致する）レコードをテーブル内から検索する。（ステップ２０１２）
ステップ２０１２にて同じレコードＩＤを持つ（一致する）レコードが検索できたことを確認する。（ステップ２０１３）
ステップ２００３で取得したリーフノードのポインタを、ステップ２０１２で検索されたレコードのアドレスで上書きして、このレコードを指すように修正する。（ステップ２０１４）
ステップ２０１２で検索したレコードに対して、データベース操作入出力装置００１からレコード参照・更新機能部００３に指示された更新・参照処理を行う。（ステップ２０１５）
ステップ２０１４で実施したデータベース修復処理の内容と、ステップ２０１５で実施した処理結果をレコード参照・更新機能部００３に通知する。（ステップ２０１６）
レコード参照・更新機能部００３にて、ステップ２０１６で受け取った処理結果をデータベース操作入出力装置００１に通知する。（ステップ２０１７）
データベース操作入出力装置００１にて、ユーザに対しステップ２０１７で受け取った処理結果を通知する。（ステップ２０１８）。
【００３２】
（４）レコードの更新・参照処理時にデータベース破壊を検出し、テーブル内で一致するレコードＩＤが検索できなかった場合の処理
ステップ２００１からステップ２０１２までは、（３）項と同じ動作となる。
【００３３】
ステップ２０１０にて同じレコードＩＤを持つレコードがテーブル内に存在しなかったことを確認する。（ステップ２０１３）
ステップ２００３で取得したリーフノードを削除する。リーフノードの削除方法としては、前述した非特許文献１に記載のＢ＋−Ｔｒｅｅ等のアルゴリズムを使用することができる。（ステップ２０１９）
ステップ２０１９で実施したデータベース修復処理の内容と、更新・参照処理要求の対象レコードはテーブル内に存在していないこと（レコード削除済み）をレコード参照・更新機能部００３に通知する。（ステップ２０２０）
レコード参照・更新機能部００３にて、ステップ２０２０で受け取った処理結果をデータベース操作入出力装置００１に通知する。（ステップ２０２１）
データベース操作入出力装置００１にて、ユーザに対しステップ２０２１で受け取った処理結果を通知する。（ステップ２０２２）。
【００３４】
図１に示した構成図における各部の一部若しくは全部の機能部をコンピュータプログラムで構成し、そのプログラムを、コンピュータを用いて実行して、本発明を実現することができること、あるいは、図３、図４に示したステップをコンピュータのプログラムで構成し、そのプログラムをコンピュータに実行させることができることは言うまでもなく、コンピュータでその機能部を実現するためのプログラム、あるいは、コンピュータにその処理ステップを実行させるためのプログラムを、そのコンピュータが読み取り可能な記録媒体、例えば、フレキシブルディスクや、ＭＯ、ＲＯＭ、メモリカード、ＣＤ、ＤＶＤ、リムーバブルディスクなどに記録して、保存したり、配布したりすることが可能である。
【００３５】
また、上記のプログラムをインターネットや電子メールなど、ネットワークを通して提供することも可能である。このように、記録媒体やネットワークにより提供されたプログラムをコンピュータにインストールすることで、本発明が実施可能となる。
【図面の簡単な説明】
【００３６】
【図１】本発明のデータベース自動修復装置を示す構成図。
【図２】データベース管理部におけるテーブルと木構造インデックスとの関係を示す説明図。
【図３】データベース自動修復装置における処理の流れを述べるフローチャート。
【図４】データベース自動修復装置における処理の流れを述べるフローチャート。
【図５】テーブルと木構造インデックスとの関係を示す説明図。
【図６】高速検索が可能であるかを説明する図。
【図７】データベース破壊を説明する図。
【符号の説明】
【００３７】
００１…データベース操作入出力装置
００２…レコード挿入機能部
００３…レコード参照・更新機能部
００４…データベース（ＤＢ）破壊修復機能部
００５…データベース管理部
【図１】
0005044475.tif 000002
【図２】
0005044475.tif 000003
【図３】
0005044475.tif 000004
【図４】
0005044475.tif 000005
【図５】
0005044475.tif 000006
【図６】
0005044475.tif 000007
【図７】
0005044475.tif 000008