以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明の実施形態を示し、データベースを提供する計算機システムの一例を示すブロック図である。計算機システムは、データベース管理システム3130を実行するデータベース管理装置3100と、データベース300を格納する外部記憶装置(またはストレージ装置)3200と、データベース管理システム3130にアクセスを要求するクライアント計算機3000と、データベース管理装置3100と外部記憶装置3200及びクライアント計算機3000を接続するネットワーク3300を主体にして構成される。
データベース管理装置3100は、演算処理を行うプロセッサ3110と、データやプログラムを格納するメモリ3120とを備えてデータベース300をクライアント計算機3000に提供するデータベース管理システム3130を実行する。データベース管理装置3100は、外部記憶装置3200からデータベース管理システム3130のプログラムをメモリ3120へ読み込んで、プロセッサ3110が当該プログラムを実行する。
ネットワーク3300を介してデータベース管理装置3100からアクセスされる外部記憶装置3200は、データベース300及び当該データベースの関連情報を格納する。
データベース300は、表3220とインデックス3230から構成される。本実施形態では、データベース300は、レコード型のデータベースで構成される。
データベース関連情報としては、表3220へ挿入するデータを有するデータ一括挿入ファイル3210と、データベース300に対する操作を管理する管理点管理表5100と、データベース300を操作するときに利用するセグメント情報管理テーブル6100と表情報管理テーブル7100とを含む。なお、セグメントは、データベース300におけるデータ格納領域の単位であり、データベース300は複数のセグメントを有し、各セグメント内にデータレコードを格納し、各セグメントはデータベース管理システム3130が付与した一意のIDを有する。セグメント情報管理テーブル6100はセグメントの情報に基づいてデータの格納位置を管理する。データベース管理システム3120は、表情報管理テーブル7100とセグメント情報管理テーブル6100を、データの格納位置管理情報として利用する。
データ一括挿入ファイル3210は、データベース300の利用者(管理者やユーザなど)が操作するクライアント計算機3000が外部記憶装置3200に格納したデータである。
管理点管理表5100は、データ一括挿入処理においてデータを挿入したセグメントの範囲とデータ挿入対象表とデータ一括挿入処理の開始時刻及び終了時刻を管理する情報であり、データベース管理システム3130の管理点管理表処理部3134によって制御される。一回のデータ一括挿入処理で、ひとつのレコード(管理点レコード)が管理点管理表5100に追加される。
セグメント情報管理テーブル6100は、データベース300のセグメントの状態を記憶するテーブルで、データベース管理システム3130によって管理される。
表情報管理テーブル6100は、データベース300の表3220の状態を記憶するテーブルで、データベース管理システム3130によって管理される。
データベース管理装置3100は、データベース300を管理するデータベース管理システム3130を実行する。データベース管理システム3130は、クライアント計算機3000から受け付けたデータ一括挿入要求やデータ一括削除要求を処理する。なお、データベース管理システム3130は、クライアント計算機3000からのアクセス要求を受け付けて、外部記憶装置3200のデータベース300にアクセスする処理も行うが、この処理は公知または周知の処理を行えばよいので、本実施形態では説明を省略する。
データベース管理システム3130は、クライアント計算機3000からデータ一括挿入処理要求またはデータ一括削除処理要求を受け付けるデータ操作要求受付部3131と、外部記憶装置3200の各情報管理テーブルのデータを管理する情報管理テーブル管理部3132と、データ一括挿入処理の際に表3220へのデータ挿入処理を行う表データ挿入部3133と、管理点管理表5100に対する処理を管理する管理点管理表処理部3134とを主体にして構成される。
管理点管理表処理部3134は、後述するように管理点レコード検索処理3135と、管理点レコード生成処理3136と、管理点レコード削除処理3137と、管理点レコード更新処理3138を含む。
メモリ3120には、データベース管理システム3130に加えて、データ一括挿入処理またはデータ一括削除処理の際に使用するデータが格納される。これらのデータは、例えば、データ一括挿入処理の際に全データの格納に必要なセグメントの個数を格納する総セグメント数3140と、データ一括挿入処理の際にデータを格納するセグメント範囲、またはデータ一括削除処理にて削除対象のデータが格納されたセグメントの範囲を格納するセグメント範囲3150と、データ一括挿入処理の際にデータ挿入の対象となる表3220を特定する表名3160と、現在の日時を保持するカレントタイムスタンプ3170と、最後にデータを格納したセグメントIDを保持する保持セグメント(保持SEG)3180を含む。なお、セグメント範囲3150は、先頭セグメントのIDを格納する開始セグメントID3151と、最終セグメントのIDを格納する終了セグメントID3152とを含む。
図2は、データベース300にデータを一括して挿入する処理(データ一括挿入処理)の概要を示す流れ図である。
データベース管理システム3130のデータ操作要求受付部3131は、クライアント計算機3000からデータ一括挿入の処理要求1000を受け付ける。このデータ一括挿入要求には、外部記憶装置3200に格納されたデータ一括挿入ファイル3210を特定する情報(例えば、ファイル名)が含まれる。データ操作要求受付部3131は、データ一括挿入の処理要求1000を受け付けると、表データ挿入部3133を起動する。
データベース管理システム3130の表データ挿入部3133は、現在の日時をカレントタイムスタンプ3170から取得して開始日時とする(S801)。次に、表データ挿入部3133は、データ一括挿入ファイル3210を読み込んで、挿入するデータの格納に必要なセグメントの個数を演算して(S802)、総セグメント数3140に格納する。
データベース管理システム3130の表データ挿入部3133は、総セグメント数3140の値となるセグメントをデータベース300に確保して、メモリ3120上のセグメント範囲3150に設定した開始セグメントID3151と終了セグメントID3152を格納する(S803)。
次に、データベース管理システム3130は、管理点管理表処理部3134の管理点レコード生成処理3136を起動して、管理点管理表5100に新たなレコード(管理点レコード)を作成する(S804)。そして、管理点管理表処理部3134の管理点レコード生成処理3136が、上記ステップS804で生成したレコード(管理点レコード)の開始日時をS_TIME511へ格納し、データ一括挿入の開始セグメントID3151を開始セグメントS_SEG513へ格納し、終了セグメントID3152を終了セグメントF_SEG514に格納し、データ一括挿入を実施した表3220の名称をTABLE515に格納する。
次に、データベース管理システム313の表データ挿入部3133は、データ一括挿入処理要求1000で指定されたデータ一括挿入ファイル3210のデータを、データベース300の表3220に確保した上記開始セグメントID3151から終了セグメントID3152へ加える。データ一括の一括挿入が完了すると、データベース管理システム3130は、カレントタイムスタンプ3170から現在の日時を取得して終了日時とする。最後に管理点管理表処理部3134の管理点レコード更新部3138が、上記ステップS804で生成したレコード(管理点レコード)の終了日時をF_TIME512へ格納して、管理点管理表5100の新たなレコードを更新する。
以上のように、データ一括挿入処理では、新たな管理点レコードが管理点管理表5100に加えられて、データ一括挿入の開始日時S_TIME511及び終了日時F_TIME512と、一括挿入したデータの位置が開始セグメントS_SEG513と終了セグメントF_SEG514に格納され、表の名称がTABLE515に格納される。
ここで、管理点管理表5100は、表名(TABLE)515とデータ一括挿入の開始日時S_TIME511及び終了日時F_TIME512と、データの挿入位置を示す開始セグメントS_SEG513及び終了セグメントF_SEG514を一意で対応付けて管理するのである。これにより、後日、管理者やユーザがデータの一括削除を行う際に、データ一括挿入の開始日時及び終了日時を検索条件として指定することで、データの格納位置を容易に知ることができる。
図3は、データベース300からデータを一括して削除する処理(データ一括削除処理)の概要を示す流れ図である。
データベース管理システム3130のデータ操作要求受付部3131は、クライアント計算機3000からデータ一括削除の処理要求2000を受け付ける。このデータ一括削除要求2000には、図4で示すデータ一括削除要求4100のように、削除対象のテーブル名411と、削除対象とする管理点管理表5100のデータ一括挿入の開始日時(S_TIME)の範囲412が指定される。なお、図4は、クライアント計算機3000から送信されるデータ一括削除要求4100の一例を示す。データ一括削除要求には、管理点管理表5100が挿入されたデータを管理する要素である表名と挿入の開始日時(または開始日時の範囲)及び終了日時(または開始日時の範囲)が含まれる。
データベース管理システム3130は、管理点管理表処理部3134の管理点レコード検索処理3135を起動して、データ一括削除要求4100で指定されたデータを管理点管理表5100から検索する(S1202)。
ここで、データ一括削除要求4100は、表の名称(TABLE411)とデータ一括挿入の開始日時(S_TIME)の範囲412という管理者やユーザが容易に理解可能な情報を用いる点が本発明の特徴である。
管理点レコード検索処理3135(S1202)では、管理点管理表処理部3134が、表名411と、データ一括挿入の開始日時(S_TIME)の範囲412の検索条件に該当する管理点管理表5100のレコードを抽出する。そして、管理点管理表処理部3134は抽出した管理点管理表5100のレコードの開始セグメントS_SEG513と終了セグメントF_SEG514をセグメント範囲3150として取得し、セグメント範囲3150の開始セグメントID3151と終了セグメントID3152に格納する。この処理によって、管理者やユーザが指定した表名(TABLE411)とデータ一括挿入の開始日時の範囲412から削除するデータの位置を特定する。
次に、データベース管理システム3130は、情報管理テーブル管理部3132が、セグメント範囲3150に格納されたセグメントIDについて、セグメント情報管理テーブル6100のレコードを初期化してデータを削除する。この初期化は、後述するように、セグメント情報管理テーブル6100のテーブル名(TABLE_NAME)、次セグメントID(NEXTSEG_ID)、直前セグメントID(PREVSEG_ID)と残量(REST)を初期値(例えば、0)で更新する(S1204)。
次に、情報管理テーブル管理部3132が、表情報管理テーブル7100を初期化する(S1205)。情報管理テーブル管理部3132は、表情報管理テーブル7100のSEGMENTのうち、セグメント範囲3150の開始セグメントID3151から終了セグメントID3152の値を削除する。
次に、データベース管理システム3130は、管理点管理表処理部3134が検索処理S1202で抽出した管理点管理表5100のレコードを、管理点レコード削除処理3137を実行して削除する。
以上のように、データ一括削除処理では、クライアント計算機3000から表名とデータ一括挿入の開始日時S_TIMEをキーとして、管理者やユーザが容易に理解可能な情報でデータを指定して、データベース300から削除するデータを特定することが可能となる。つまり、データベース300の管理者は、削除対象の表の名称と、データ一括挿入処理の日時を取得すれば、削除対象のデータの所在を特定することができ、前記従来例に比してデータの削除に要する労力を大幅に低減することができる。
そして、データ一括削除では、セグメント情報管理テーブル6100と表情報管理テーブル7100の対象セグメントについて初期化し、管理点管理表5100の該当レコードを削除するだけであるので、極めて高速に大量のデータを一括して削除することが可能となる。
なお、データ一括削除処理が完了した後にも、データ一括挿入処理でデータベース300に追加したデータ自体は外部記憶装置3200に残るが、表情報管理テーブル7100のセグメント情報及びセグメント情報管理テーブル6100を初期化することで、データベース管理システム3130はアクセスすることはできない。データ一括削除処理後にデータベース300に残ったデータについては、再編成処理などを適宜実行することで記憶領域を解放することができる。
図5は、管理点管理表5100の一例を示す説明図である。管理点管理表5100は管理点管理表処理部3134がメモリ3120上または外部記憶装置3200のデータベース300上に生成して管理する。
管理点管理表5100は、データの一括挿入を開始した日時を格納するS_TIME511と、データの一括挿入が終了した日時を格納するF_TIME512と、データの一括挿入を開始したセグメントのIDを格納するS_SEG513と、データの一括挿入が終了したセグメントのIDを格納するF_SEG514と、データの一括挿入処理の対象となった表の名称(または、識別子)を格納するTABLE515から一つのレコードが構成される。なお、S_SEG513及びF_SEG514は1レコードに対して複数の要素を保持することができる(繰り返し列)。図5の行516は、データ一括挿入の処理開始S_TIME511が2009年1月02日の6時0分16秒で、データ一括挿入の終了開始F_TIME512が2009年1月02日の8時5分16秒で、開始セグメントIDS_SEG513が「4501」で、終了セグメントIDF_SEG514が「5000」で、対象となった表が「T1」であることを示す。
図6は、セグメント情報管理テーブル6100の一例を示す説明図である。セグメント情報管理テーブル6100は、セグメントの識別子を格納するセグメントID(SEGMENT_ID)611と、当該セグメントが格納するテーブルの名称を格納するテーブル名(TABLE_NAME)612と、当該セグメントの次のセグメントの識別子を格納するNEXTSEG_ID613と、当該セグメントの前のセグメントの識別子を格納するPREVSEG_ID614と、当該セグメントに格納可能なデータ量(ページ数)を格納するREST615とから一つのエントリが構成される。このセグメント情報管理テーブル6100は、各セグメントごとに上記1テーブルが生成される。
図7は、表情報管理テーブル7100の一例を示す説明図である。表情報管理テーブル7100は、表の名称を格納するテーブル名(TABLE_NAME)711と、当該表の識別子を格納するTABLE_ID712と、当該表が使用するセグメントの範囲を格納するSEGMENT713とから1テーブルが構成される。SEGMENT713には、表3220が使用する複数のセグメントの範囲を格納することができ、図示の例では、セグメントID=1−2000と4501−5000を使用している例を示す。この表情報管理テーブル7100は、各表ごとに上記1テーブルが生成される。
図8は、データベース管理装置が行うデータベースの一括挿入処理の概要を示すフローチャートである。この処理は、データベース管理装置3100のデータ操作要求受付部3131がクライアント計算機3000から挿入対象のテーブル名と、挿入対象のデータ一括挿入ファイル3210の名称を受け付けたときに開始される。
ステップS801では、データベース管理システム3130の表データ挿入部3133が、現在の日時をカレントタイムスタンプ3170から取得する。ステップS802では、表データ挿入部3133が、指定されたデータ一括挿入ファイル3210のレコード数や容量を参照して、指定された表3220にデータ一括挿入ファイル3210を追加するのに必要なセグメントの数を後述するように演算する。そして、表データ挿入部3133は、求めたセグメント数をメモリ3120上の総セグメント数3140へ格納する。
そして、ステップS803では、表データ挿入部3133が外部記憶装置3200のデータベース300の領域に、挿入するデータを格納するセグメントを確保する。表データ挿入部3133は、確保したセグメントの先頭のセグメントの識別子をセグメント範囲3150の開始セグメントID3151に格納し、最後のセグメントの識別子を終了セグメントID3152に格納する。
ステップS804では、管理点管理表処理部3134の管理点レコード生成処理3136が、管理点管理表5100に新たなレコードを追加して、データの一括挿入を開始した日時を格納するS_TIME511に、ステップS801で取得したカレントタイムスタンプ3170の値を設定し、データの一括挿入を開始したセグメントのIDを格納するS_SEG513に、S803で取得した開始セグメントID3151の値を設定し、データの一括挿入を開始したセグメントのIDを格納するF_SEG514に、S803で取得した終了セグメントID3152の値を設定する。
ステップS805では、表データ挿入部3133が、管理者などがクライアント計算機3000から外部記憶装置3200に書き込んだデータ一括挿入ファイル3210を読み込んで、ステップS803で確保したセグメントにデータを追加する。
ステップS806では、表データ挿入部3133が、カレントタイムスタンプ3170を取得して、ステップS807で管理点管理表処理部3134の管理点レコード更新処理3138が、管理点管理表5100のデータの一括挿入が終了した日時を格納するF_TIME512に格納し、上記ステップS804で追加した管理点管理表5100のレコードを更新する。
上記の処理によって、管理者などが用意したデータ一括挿入ファイル3210を表3220で一括して追加し、管理者が追加したレコードを識別する情報としてデータ一括挿入の開始日時と終了日時を管理点管理表5100に記録する。
図9は図8のステップS802で実行される必要セグメント数計算処理の一例を示すフローチャートである。
ステップS901では、表データ挿入部3133がクライアント計算機3000から指示されたデータ一括挿入ファイル3210を読み込んで、挿入するデータの1件当たりのデータ長と、挿入するデータの件数を取得し、クライアント計算機3000から指示された挿入対象の表3220の名称を取得する。
ステップS902では、表データ挿入部3133がデータベース300の1セグメントあたりのデータ長(例えば、固定値)と、ステップS901で取得した挿入データの1件当たりのデータ長から、次式により、
X=TRUNC(1セグメントあたりのデータ長÷挿入データの1件当たりのデータ長)
………(1)
データベース300の1セグメントに格納可能なデータ一括挿入ファイル3210のデータ数Xを求める。なお、上記(1)式でTRUNCは、小数点以下を切り捨てる関数である。
ステップS903では、表データ挿入部3133が、ステップS901で取得した挿入するデータの件数と、ステップS902で求めた1セグメントに格納可能なデータ一括挿入ファイル3210のデータ数Xから、次式により、
Y=ROUNDUP(挿入データ件数/X) ………(2)
データ一括挿入処理必要なセグメントの数Yを求める。なお、上記(2)式でROUNDUPは、小数点以下を切り上げる関数である。そして、表データ挿入部3133は、データ一括挿入処理必要なセグメントの数Yを、総セグメント数として保持する。
図10は、図8のステップS803で行われるデータ挿入セグメント確保処理の一例を示すフローチャートである。
表データ挿入部3133は、ステップS1001で、セグメント情報管理テーブル6100を読み込んで、セグメントID(611)=「1」の情報を参照する。ステップS1002では、表データ挿入部3133が、現在参照しているセグメント情報管理テーブル6100のNEXTSEG_ID613が0で、かつPREVSEG_IDT614が0であるか否かを判定する。この判定は、NEXTSEG_ID613=0、かつPREVSEG_ID614=0か否かを判定し、初期化されて使用されていないセグメントであるか否かを判定している。
表データ挿入部3133は、初期化されていればデータを格納可能なセグメントであると判定してステップS1004へ進む。一方、初期化されていないセグメントであれば、使用中のセグメントIDであるのでステップS1003に進む。ステップS1003では、表データ挿入部3133は、現在参照しているセグメントID(611)に1を加算して次のセグメントID(611)へ移動する。そして、ステップS1014で次のセグメントID(611)の値が最後のセグメントIDを超えていれば、全てのセグメントIDについて判定を行ったので処理を終了する。一方、ステップS1014で次のセグメントID(611)が最後のセグメントID以下であれば、ステップS1002へ戻って上記判定を繰り返す。
次に、ステップS1004では、表データ挿入部3133が保持しているデータ挿入開始セグメントIDとデータ挿入終了セグメントIDの個数が等しいか否かを判定する。個数が異なる場合には、ステップS1005へ進み、個数が等しい場合にはステップS1015へ進む。
ステップS1005では、表データ挿入部3133が現在参照しているセグメント情報管理テーブル6100のセグメントID611を、データ挿入開始セグメントIDとして保持する。
ステップS1015では、表データ挿入部3133が、データ挿入対象表に既にデータが格納されているか否かを判定する。既にデータが格納されている場合はS1006へ進み、データが格納されていない場合には、S1016へ進む。
ステップS1016で、情報管理テーブル管理部3132が、現在参照しているセグメントIDのセグメント情報管理テーブル6100のTABLE_NAME612に、上記ステップS901で取得した挿入対象の表名を設定し、PREVSEG_ID614に0を設定する。そして、表データ挿入部3133が、上記図8のステップS802で求めた総セグメント数から1を減じる。
ステップS1006では、保持セグメント3180で保持したセグメントID(前回値)のNEXTSEG_ID613を、表データ挿入部3133が現在参照しているセグメント情報管理テーブル6100のセグメントID611で更新する。
次に、ステップS1007では、表データ挿入部3133が、現在参照しているセグメントIDのセグメント情報管理テーブル6100のTABLE_NAME612に、上記ステップS901で取得した挿入対象の表名を設定し、PREVSEG_ID614に保持セグメント3180で保持した前回のSEGMENT_ID611を設定し、REST615に当該セグメントの領域長を設定し、当該セグメントIDのセグメント情報管理テーブル6100を更新する。
ステップS1008では、上記図8のステップS802で求めた総セグメント数から1を減じる。つまり、表データ挿入部3133は上記ステップS1007でひとつのセグメントをデータ一括挿入のために確保したので、残りの総セグメント数を1つ差し引く。
次に、ステップS1009では、表データ挿入部3133が、現在参照しているセグメントIDがPREVSEG_ID614に1を加えた値に等しいか否かを判定する。セグメントIDがPREVSEG_ID+1と等しければステップS1011へ進み、等しくなければステップS1010へ進む。
ステップS1010では、現在参照しているセグメントIDのセグメント情報管理テーブル6100のPREVSEG_ID614をデータ挿入終了セグメントIDとして表データ挿入部3133が保持する。
ステップS1011では、表データ挿入部3133が、ステップS1008でデクリメントした総セグメント数が0になったか否かを判定する。総セグメント数が0であればステップS1013へ進み、総セグメント数が0でなければステップS1012へ進む。
ステップS1012では、表データ挿入部3133が、現在参照しているセグメントIDを保持セグメント3180に保持してステップS1003で次のセグメントIDに移行して上記処理を繰り返す。
一方、ステップS1013では、表データ挿入部3133が、現在参照しているセグメントIDをデータ挿入終了セグメントIDとして表データ挿入部3133が保持セグメント3180に保持して処理を終了する。
以上の処理によって、セグメントID=1から順に、使用されていないセグメントが総セグメント数に達するまで、挿入対象の表名がTABLE_NAME612に格納され、前後のセグメントIDが、PREVSEG_ID614とNEXTSEG_ID613に格納されていく。そして、表データ挿入部3133は、データ一括挿入の開始セグメントIDと終了セグメントIDを保持する。
図11は、図8のステップS804で行われる管理点レコード生成処理の一例を示すフローチャートである。ステップS1101では、管理点管理表処理部3134の管理点レコード生成処理3136が、管理点管理表5100に新たなレコードを追加して、上記ステップS801で取得したカレントタイムスタンプ3170を、データ一括挿入の開始日時S_TIME511に格納する。以下の処理も、新たに追加したレコードに対して行う。
ステップS1102では、管理点管理表処理部3134の管理点レコード生成処理3136がデータ一括挿入ファイル3210から挿入対象の表の名称を取得し、追加したレコードのTABLE515に格納する。
ステップS1103では、管理点管理表処理部3134の管理点レコード生成処理3136が上記図10のステップS1005で取得したデータ挿入開始セグメントIDを、管理点管理表5100の開始セグメントS_SEG513へ格納する。
ステップS1104では、管理点管理表処理部3134の管理点レコード生成処理3136が上記図10のステップS1010で取得したデータ挿入終了セグメントIDを、管理点管理表5100の終了セグメントF_SEG514へ格納する。
ステップS1105では、図10のデータ挿入セグメント確保処理で確保した全てのデータ挿入開始セグメントIDを管理点管理表5100の新たなレコードに登録したか否かを管理点管理表処理部3134の管理点レコード生成処理3136が判定する。全てのデータ挿入開始セグメントIDについて登録が完了していればステップS1107へ進み、全てのデータ挿入開始セグメントIDについて登録が完了していなければステップS1106へ進む。
ステップS1106では、管理点管理表処理部3134の管理点レコード生成処理3136が、新たに追加したレコードの開始セグメントS_SEG513と終了セグメントF_SEG514に新たな格納要素(繰り返し列)を追加してステップS1103へ戻る。そして、管理点管理表処理部3134の管理点レコード生成処理3136は、追加された格納要素にデータ挿入開始セグメントIDとデータ挿入終了セグメントIDを格納していく。本実施形態の管理点管理表5100では、ひとつのレコードで開始セグメントS_SEG513と終了セグメントF_SEG514に複数の格納要素(繰り返し列)を設ける例を示すが、複数のレコードに分割してもよい。
一方、ステップS1107では、上記追加したレコードを管理点管理表5100に登録して処理を終了する。
図12は、図8のステップS805で行われるデータ挿入処理の一例を示すフローチャートである。ステップS1201では、表データ挿入部3133が上記図11の処理で管理点管理表5100に追加したレコードのTABLE515の表3220をデータベース300で選択し、開始セグメントS_SEG513の値を読み込んで、該当するセグメントIDを選択する。
ステップS1202では、表データ挿入部3133が、ステップS1201で選択したセグメントIDのセグメント情報管理テーブル6100を読み込んで、REST615の値が挿入するデータの1件のデータ長以上であるか否かを判定する。すなわち、現在選択しているセグメントに格納可能なデータ量(空き容量)が、これから格納するデータ一括挿入ファイル3210の1レコード分以上あるか否かを判定する。現在選択しているセグメントに1レコードが格納可能であればステップS1204へ進み、格納できない場合はステップS1203へ進む。
ステップS1203では、表データ挿入部3133が、現在選択しているセグメントIDのセグメント情報管理テーブル6100のNEXTSEG_ID613を読み込んで、次のセグメントIDへ移動する。
ステップS1204では、表データ挿入部3133が、現在選択しているセグメントにデータ一括挿入ファイル3210の1レコードを挿入する。
ステップS1205では、表データ挿入部3133が、現在選択しているセグメントIDのセグメント情報管理テーブル6100のRESTの値から、ステップS1204で挿入したレコード長を差し引いて更新する。
そして、ステップS1206では、表データ挿入部3133が、データ一括挿入ファイル3210の挿入データ件数から1を差し引いて更新する。
ステップS1207では、表データ挿入部3133が挿入データ件数が0になったか否かを判定する。挿入データ件数が0であれば処理を終了し、挿入データ件数が0でなければステップS1202へ戻って上記処理を繰り返す。
上記図12の処理によって、確保されたセグメントにデータ一括挿入ファイル3210のレコードが挿入される。
図13は、図8のステップS807で行われる管理点レコード更新処理の一例を示すフローチャートである。表データ挿入部3133は、図11の処理で追加した管理点管理表5100のレコードについて、図8のステップS806で取得したカレントタイムスタンプ3170の値をデータ挿入の終了日時F_TIME512に格納して処理を終了する。
上記図8〜図13の処理により、データ一括挿入ファイル3210のレコードが対象の表3220に一括して挿入され、管理点管理表5100にデータ一括挿入の開始日時、終了日時及び格納位置(セグメントID)が記録される。
図14は、データベース管理装置が行うデータベースの一括削除処理の一例を示すフローチャートである。図14の処理は、データ操作要求受付部3131がクライアント計算機3000から図4に示したようなデータ一括削除要求4100を受け付けると、データ操作要求受付部3131は管理点管理表処理部3134を起動して図14の処理を実行させる。
ステップS1401では、管理点管理表処理部3134が、受信したデータ一括削除要求4100からデータの一括削除の対象となる表名411と、削除の条件としてデータ一括挿入の日時の範囲412を取得して保持する。図4の例では、削除対象表が「T1」で、削除の条件がデータ一括挿入の日時が「2009年1月2日0時0分0秒」から「2009年1月2日23時59分59秒」までとなっている。
ステップS1402では、管理点管理表処理部3134が、管理点管理表5100の先頭レコードに検索用のカーソルC1を設定し、先頭のレコードを選択する。
ステップS1403では、後述の管理点管理表処理部3134の管理点レコード検索処理3135により、カーソルC1で選択した管理点管理表5100のレコードを削除対象表と削除の条件で検索する。検索の結果、選択した管理点管理表5100のレコードが削除の条件と削除の対象表を満たしていれば、管理点管理表処理部3134の管理点レコード検索処理3135は検索結果として「Y」を保持し、一方、削除の条件または削除の対象表を満たしていなければ「N」を保持する。
ステップS1404では、上記ステップS1403の検索結果が「Y」または「N」の何れであるかを判定し、「Y」であればステップS1405へ進み、「N」であればステップS1409に進む。
ステップS1405では、情報管理テーブル管理部3132が削除の条件と削除の対象表に合致するセグメント情報管理テーブル6100をレコードを後述するように初期化する。セグメント情報管理テーブル6100のレコードを初期化することで、削除対象データをデータベース管理システム3120からアクセス不能にすることで、データ自体はデータベース300の表3220に残留するものの、論理的に削除するものである。
ステップS1406では、情報管理テーブル管理部3132が削除の条件と削除の対象表に合致する表情報管理テーブル7100を後述するように初期化する。
ステップS1407では、管理点管理表処理部3134の管理点レコード削除処理3137により、ステップS1403の検索結果で「Y」となった管理点管理表5100のレコードを削除する。
ステップS1408では、管理点管理表処理部3134が、管理点管理表5100の全てのレコードについて検索が完了したか否かを判定する。管理点管理表5100の全てのレコードについて検索が完了していなければステップS1409に進んでカーソルC1を次のレコードに設定し、管理点管理表5100の全てのレコードについて検索が完了していれば処理を終了する。
上記処理により、データベース管理装置3100が受信したデータ一括削除要求4100に含まれる削除の対象となる表名411と、削除の条件としてのデータ一括挿入の日時の範囲412の検索条件に含まれる管理点管理表5100のレコードから、削除の対象となるセグメントIDを抽出してセグメント情報管理テーブル6100を初期化し、また、削除の対象となる表情報管理テーブル7100を更新することで、データの一括削除を実施する。
図15は、図14のステップS1403で行われる管理点レコード検索処理の一例を示すフローチャートである。ステップS1501では、管理点管理表処理部3134が、カーソルC1が設定されている管理点管理表5100のレコードの内容を取得し、データ一括挿入の開始日時S_TIME511(または終了日時F_TIME512)と、表の名称TABLE515を保持する。
ステップS1502では、管理点管理表処理部3134の管理点レコード削除処理3137は上記保持した開始日時S_TIME511(または終了日時F_TIME512)が、図14のステップS1401で保持した検索条件としてのデータ一括挿入の日時の範囲412に含まれるか否かを判定する。選択したレコードの開始日時S_TIME511(または終了日時F_TIME512)が検索条件に含まれる場合にはステップS1503へ進み、選択したレコードの開始日時S_TIME511(または終了日時F_TIME512)が検索条件に含まれない場合にはステップS1506へ進む。
ステップS1503では、管理点管理表処理部3134の管理点レコード削除処理3137が、上記ステップS1501で保持した表の名称TABLE515が、図14のステップS1401で保持した検索条件としての表名411に一致するか否かを判定する。選択したレコードの表の名称TABLE515が検索条件の表名411に一致する場合にはステップS1504へ進み、選択したレコードの表の名称TABLE515が検索条件の表名411に一致しない場合にはステップS1506へ進む。
ステップS1504では、選択したレコードの開始日時S_TIME511と表の名称TABLE515が検索条件を満足しているので、管理点管理表処理部3134の管理点レコード削除処理3137は現在の管理点管理表5100のレコードから開始セグメントS_SEG513と終了セグメントF_SEG514を取得して一致削除対象のデータの所在を特定する。なお、管理点管理表処理部3134は、取得した開始セグメントS_SEG513と終了セグメントF_SEG514をセグメント範囲3150の開始セグメントID3151と終了セグメントID3152へ格納することで保持することができる。
ステップS1505では、選択したレコードの開始日時S_TIME511(または終了日時F_TIME512)と表の名称TABLE515が検索条件を満足しているので、検索結果として「Y」を設定して処理を終了する。
ステップS1506では、選択したレコードの開始日時S_TIME511(または終了日時F_TIME512)または表の名称TABLE515が検索条件に一致しないので、検索結果として「N」を設定して処理を終了する。
図16は、図14のステップS1405で行われるセグメント情報管理テーブル初期化処理の一例を示すフローチャートである。
ステップS1601では、図15のステップS1504で取得した開始セグメントS_SEG513をセグメントIDに持つセグメント情報管理テーブル6100のレコードを選択する。
ステップS1602では、情報管理テーブル管理部3132が上記選択されたセグメント情報管理テーブル6100のレコードから直前のセグメントIDを格納するPREVSEG_ID614の値を取得する。
ステップS1603では、情報管理テーブル管理部3132が上記選択されたセグメント情報管理テーブル6100のレコードから次のセグメントIDを格納するNEXTSEG_ID613の値を取得する。
ステップS1604では、情報管理テーブル管理部3132が上記選択されたセグメント情報管理テーブル6100のレコードについて、セグメントID(SEGMENT_ID)611以外の要素を初期化する。すなわち、情報管理テーブル管理部3132は、セグメント情報管理テーブル6100のテーブル名(TABLE_NAME)612、次セグメントID(NEXTSEG_ID)613、直前セグメントID(PREVSEG_ID)614と残ページ数(REST)615を初期値(例えば、0)で更新する。
ステップS1605では、情報管理テーブル管理部3132が現在のセグメント情報管理テーブル6100のセグメントID611が、上記ステップS1504で保持した終了セグメントF_SEG514に等しいか否かを判定する。現在のセグメントID611が、データ一括挿入時の終了セグメントF_SEG514に等しい場合にはステップS1607へ進み、等しくない場合にはステップS1606へ進む。ここで、現在のセグメントID611が、データ一括挿入時の終了セグメントF_SEG514に等しい場合は、データ一括削除の対象の最後のセグメントである。一方、現在のセグメントID611が、データ一括挿入時の終了セグメントF_SEG514に等しくない場合は、データ一括削除のセグメントが他にも存在するので、ステップS1606へ進む。ステップS1606では、情報管理テーブル管理部3132はステップS1603で取得したNEXTSEG_ID613をセグメントIDとするセグメント情報管理テーブル6100のレコードに移動してから、上記ステップS1603以降の処理を繰り返す。
ステップS1607では、情報管理テーブル管理部3132が、現在の管理点管理表5100のレコードの開始セグメントS_SEG513と終了セグメントF_SEG514が繰り返し列であるか否かを判定する。ここで、開始セグメントS_SEG513と終了セグメントF_SEG514が繰り返し列である場合は、データ一括削除の対象のセグメントが残っている可能性がある。一方、開始セグメントS_SEG513と終了セグメントF_SEG514が繰り返し列でない場合は、本セグメントがデータ一括削除の対象の最後のセグメントである。現在の管理点管理表5100のレコードの開始セグメントS_SEG513と終了セグメントF_SEG514が繰り返し列の場合にはステップS1608へ進み、繰り返し列でなければステップS1610へ進む。
ステップS1608では、情報管理テーブル管理部3132は、現在選択している管理点管理表5100のレコードの終了セグメントF_SEG514が繰り返し列の最後の要素であるか否かを判定する。ここで、終了セグメントF_SEG514が繰り返し列の最後の要素である場合は、本セグメントがデータ一括削除の対象の最後のセグメントである。一方、終了セグメントF_SEG514が繰り返し列の最後の要素でない場合は、削除対象のセグメントがまだ残っている。最後の要素であればステップS1610へ進み、最後の要素でなければステップS1609へ進んで、繰り返し列の次の終了セグメントF_SEG514を取得してステップS1606からステップS1603へ戻って上記処理を繰り返す。
ステップS1610では、情報管理テーブル管理部3132が上記ステップS1602で保持した直前のセグメントID(PREVSEG_ID)614をSEGMENT_ID611とするセグメント情報管理テーブル6100のレコードで、NEXTSEG_ID613の値を、上記ステップS1603で取得したNEXTSEG_ID613で更新する。
ステップS1610では、情報管理テーブル管理部3132が上記ステップS1603で取得した次のセグメントID(NEXTSEG_ID)613をSEGMENT_ID611とするセグメント情報管理テーブル6100のレコードで、PREVSEG_ID614の値を、上記ステップS1602で取得したPREVSEG_ID614の値で更新する。
上記処理を繰り返すことで、削除対象のセグメント情報管理テーブル6100のレコードを初期化し、初期化したセグメントIDの直前のセグメントIDと直後のセグメントIDを関連づけてセグメントIDの連鎖(参照関係)を保持する。
図17は、図14のステップS1406で行われる表情報管理テーブル更新処理の一例を示すフローチャートである。ステップS1701では、情報管理テーブル管理部3132は、上記図15のステップS1501で取得した表の名称TABLE515をTABLE_NAME711に有する表情報管理テーブル7100のレコードを選択する。
ステップS1702では、情報管理テーブル管理部3132は、現在選択している表情報管理テーブル7100のレコードのSEGMENT713から、上記図15のステップS1504で取得した開始セグメントS_SEG513の値と、終了セグメントF_SEG514の値からなる範囲を削除する。
上記処理により、表情報管理テーブル7100からは、データ一括削除によってセグメント情報管理テーブル6100から削除されたセグメントIDの範囲が削除される。セグメントIDの削除によって、表3220にはレコードが残ってはいるもののデータベース管理システム3130からアクセスすることはできず、実質的に削除したこととなる。
図18は、本発明の変形例を示し、管理点管理表5100をデータベース300内に格納した場合の、管理点管理表5100のレコード削除処理の一例を示すフローチャートである。
管理点管理表5100を図1に示すデータベース300内に格納した場合、図14のステップS1407で行われる管理点管理表5100のレコード削除処理でセグメント情報管理テーブル6100を更新する必要がある。
ステップS1801では、管理点管理表処理部3134の管理点レコード削除処理3137により、現在カーソルC1によって選択されている管理点管理表5100のレコードを格納しているセグメント情報管理テーブル6100のレコードを選択する。
ステップS1802では、管理点管理表処理部3134がステップS1801で選択したセグメント情報管理テーブル6100のレコードのセグメントID内で、削除対象の管理点管理表5100のレコード(図中、管理点レコード)を格納している領域を解放する。
ステップS1803では、管理点管理表処理部3134がステップS1801で選択したセグメント情報管理テーブル6100のレコードで、残量REST615に削除した管理点管理表5100のレコードのデータ長を加算して更新する。
ステップS1804では、管理点管理表処理部3134がステップS1801で選択したセグメント情報管理テーブル6100のレコードのセグメントID611に格納されているデータの有無を判定する。格納されているデータがない場合にはステップS1805へ進み、格納されているデータが存在する場合には処理を終了する。
ステップS1805では、管理点管理表処理部3134が、TABLE_NAME711が管理点管理表5100の表情報管理テーブル7100のレコードを選択する。
ステップS1806では、管理点管理表処理部3134が、上記ステップS1801で選択したセグメント情報管理テーブル6100のレコードのセグメントID611を、現在の表情報管理テーブル7100のレコードのSEGMENT713から削除して処理を終了する。
なお、上記実施形態では、管理者やユーザが明示的に削除対象のデータを指定する情報として、表名515とデータ一括挿入の開始日時S_TIME511(または終了日時)を用いる例を示したが、明示的な情報としてはデータ一括挿入の操作の名称を設定するようにしてもよい。
また、上記実施形態では、データベース300を外部記憶装置3200に格納する例を示したが、データベース管理者装置3100の内部の記憶装置にデータベース300を格納してもよい。
以上のように、本発明では、データの一括挿入処理時にデータ格納領域管理用の情報を管理点管理表5100のレコードとして生成し、データベース管理システム3130がデータ一括挿入の日時とデータの格納位置(セグメントID)を管理する。管理点管理表5100は、管理者やユーザが明示的に理解可能な情報(日時等)と一括挿入したデータ格納領域の範囲を1:1で対応づけておく。つまり、管理点管理表5100では、データ一括挿入の開始日時S_TIME511(または終了日時F_TIME512)と、データ一括挿入の開始セグメントS_SEG513と終了セグメントF_SEG514が一意で対応している。したがって、データを一括して削除する際には、管理者やユーザが明示的に分かる情報としてデータ一括挿入の日時の範囲412を削除条件(データ一括削除要求4100)として指定することで、データベース300上のデータの格納位置(またはエリア)を管理者やユーザに意識させることなくデータの削除を容易に行うことが可能となる。