(57)【特許請求の範囲】
【請求項１】
第１のボリュームに格納された元データベースのデータをページごとにコピーして第２のボリュームにコピーデータベースを作成し、前記元データベースおよび前記コピーデータベースのいずれかを再編成するデータベース装置であって、
アプリケーションプログラムにより前記元データベースのデータが更新されるごとに、更新されたデータが含まれるページの番号を順次記憶するページ番号記憶部と、
前記元データベースをページごとにコピーするとともにコピーしたページの番号が前記ページ番号記憶部に記憶されているとこの番号を前記ページ番号記憶部から削除する処理を繰り返すことにより、前記元データベースを構成する全てのページをそれぞれ一度ずつコピーして前記コピーデータベースを作成する仮コピー部と、
前記仮コピー部による前記コピーデータベースの作成が終わり、かつ前記ページ番号記憶部に記憶されたページの番号の数が閾値より多いと、前記元データベースの排他ロックを取得せず、前記アプリケーションによる前記元データベースのデータの更新が許可され更新に応じた前記ページの番号の追記が継続されたまま、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを前記元データベースから前記コピーデータベースへ再度コピーするとともに再度コピーしたページの番号を前記ページ番号記憶部から削除し、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得する際には、前記ページ番号記憶部に記憶された番号のページの再度のコピー全体にかかる時間を短縮するように更新される頻度が高いページほど後に取得する処理を前記ページ番号記憶部に記憶されたページの番号の数が閾値以下となるまで繰り返す初期再コピー部と、
前記仮コピー部による前記コピーデータベースの作成が終わり、かつ前記ページ番号記憶部に記憶されたページの番号の数が閾値以下であると、前記元データベースの排他ロックを取得して前記元データベースのデータに対する更新および参照を禁止し、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを前記元データベースから前記コピーデータベースへ再度コピーするとともに再度コピーしたページの番号を前記ページ番号記憶部から削除し、前記ページ番号記憶部に記憶されたページの番号の数がゼロになると、前記元データベースの前記排他ロックを開放することにより、前記元データベースと前記仮コピー部により作成された前記コピーデータベースとを同期する最終再コピー部と、
前記最終再コピー部による同期が終わると、前記元データベースおよび前記コピーデータベースのいずれかを再編成する再編成部と、
を備えたデータベース装置。
【請求項２】
前記初期再コピー部は、
前記ページ番号記憶部に記憶されたページの番号を１つずつ取得する際に、前記ページ番号記憶部に記憶された番号のページの再度のコピー全体にかかる時間を短縮するように、直近の所定期間に更新された回数が多いページの番号ほど後に取得する、
請求項１記載のデータベース装置。
【請求項３】
前記初期再コピー部は、
前記ページ番号記憶部に記憶されたページの番号を１つずつ取得する際に、前記ページ番号記憶部に記憶された番号のページの再度のコピー全体にかかる時間を短縮するように、前記アプリケーションによる前記元データベースのデータの更新処理のためにロックされているページの番号の取得をスキップして後に取得する、
請求項１または２に記載のデータベース装置。
【請求項４】
前記再編成部は、
前記最終再コピー部による同期が終わると、前記コピーデータベースを再編成し、
さらに、
前記最終再コピー部による同期が終わった後に前記アプリケーションプログラムにより前記元データベースのデータが更新されるごとに、更新後の値の情報および更新されたデータを識別するための情報を含む更新ログを順次記憶する更新ログ記憶部と、
前記再編成部による前記コピーデータベースの再編成が終わり、かつ前記更新ログ記憶部に記憶された前記更新ログの数が閾値より多いと、前記元データベースの排他ロックを取得せずに前記更新ログ記憶部に記憶された前記更新ログを１つずつ前記コピーデータベースに適用するとともに適用後の前記更新ログを前記更新ログ記憶部から削除する処理を前記更新ログ記憶部に記憶された前記更新ログの数が閾値以下となるまで繰り返す初期同期部と、
前記再編成部による前記コピーデータベースの再編成が終わり、かつ前記更新ログ記憶部に記憶された前記更新ログの数が閾値以下であると、前記元データベースの排他ロックを取得して前記更新ログ記憶部に記憶された前記更新ログを１つずつ前記コピーデータベースに適用するとともに適用後の前記更新ログを前記更新ログ記憶部から削除し、前記更新ログ記憶部に記憶された前記更新ログの数がゼロになると、前記元データベースの前記排他ロックを開放することにより、前記元データベースと前記再編成部により再編成された前記コピーデータベースとを同期する最終同期部と、
前記元データベースと前記再編成部により再編成された前記コピーデータベースとが前記最終同期部により同期される前は前記元データベースをアプリケーションプログラムのアクセス先とする一方、前記元データベースと前記再編成部により再編成された前記コピーデータベースとが前記最終同期部により同期された後は、前記コピーデータベースをアプリケーションプログラムのアクセス先とするアクセス先決定部と、
備えた請求項１ないし３のいずれか１項に記載のデータベース装置。
【請求項５】
前記再編成部は、
前記最終再コピー部による同期が終わると、前記元データベースを再編成し、
さらに、
前記最終再コピー部による同期が終わった後に前記アプリケーションプログラムにより前記コピーデータベースのデータが更新されるごとに、更新後の値の情報および更新されたデータを識別するための情報を含む更新ログを順次記憶する更新ログ記憶部と、
前記再編成部による前記元データベースの再編成が終わり、かつ前記更新ログ記憶部に記憶された前記更新ログの数が閾値より多いと、前記コピーデータベースの排他ロックを取得せず前記更新ログ記憶部に記憶された前記更新ログを１つずつ前記元データベースに適用するとともに適用後の前記更新ログを前記更新ログ記憶部から削除する処理を前記更新ログ記憶部に記憶された前記更新ログの数が閾値以下となるまで繰り返す初期同期部と、
前記再編成部による前記元データベースの再編成が終わり、かつ前記更新ログ記憶部に記憶された前記更新ログの数が閾値以下であると、前記コピーデータベースの排他ロックを取得して前記更新ログ記憶部に記憶された前記更新ログを１つずつ前記元データベースに適用するとともに適用後の前記更新ログを前記更新ログ記憶部から削除し、前記更新ログ記憶部に記憶された前記更新ログの数がゼロになると、前記コピーデータベースの前記排他ロックを開放することにより、前記コピーデータベースと前記再編成部により再編成された前記元データベースとを同期する最終同期部と、
前記最終再コピー部による同期が終わる前は前記元データベースをアプリケーションプログラムのアクセス先とし、前記最終再コピー部による同期が終わった後は前記コピーデータベースをアプリケーションプログラムのアクセス先とし、前記コピーデータベースと前記再編成部により再編成された前記元データベースとが前記最終同期部により同期された後は再度前記元データベースをアプリケーションプログラムのアクセス先とするアクセス先決定部と、
を備えた請求項１ないし３のいずれか１項に記載のデータベース装置。
【請求項６】
前記閾値はゼロである、
請求項１ないし５のいずれか１項に記載のデータベース装置。
【請求項７】
前記ページ番号記憶部は、
前記アプリケーションプログラムにより前記元データベースのデータが更新されるごとに、更新されたデータが含まれるページの番号を記憶する一方、この更新されたデータが含まれるページの番号をすでに記憶している場合にはこの番号を再度記憶することはしない、
請求項１ないし６のいずれか１項に記載のデータベース装置。
【請求項８】
第１のボリュームに格納された元データベースのデータをページごとにコピーして第２のボリュームにコピーデータベースを作成し、前記元データベースおよび前記コピーデータベースのいずれかを再編成するデータベース再編成方法であって、
アプリケーションプログラムにより前記元データベースのデータが更新されるごとに、更新されたデータが含まれるページの番号をページ番号記憶部に記憶させるステップと、
前記元データベースをページごとにコピーするとともにコピーしたページの番号が前記ページ番号記憶部に記憶されているとこの番号をページ番号記憶部から削除する処理を繰り返すことにより、前記元データベースを構成する全てのページをそれぞれ一度ずつコピーして前記コピーデータベースを作成するステップと、
前記コピーデータベースの作成が終わり、かつ前記ページ番号記憶部に記憶されたページの番号の数が閾値より多いと、前記元データベースの排他ロックを取得せず、前記アプリケーションによる前記元データベースのデータの更新が許可され更新に応じた前記ページの番号の追記が継続されたまま、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを前記元データベースから前記コピーデータベースへ再度コピーするとともに再度コピーしたページの番号を前記ページ番号記憶部から削除し、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得する際には、前記ページ番号記憶部に記憶された番号のページの再度のコピー全体にかかる時間を短縮するように更新される頻度が高いページほど後に取得する処理を、前記ページ番号記憶部に記憶されたページの番号の数が閾値以下となるまで繰り返すステップと、
前記コピーデータベースの作成が終わり、かつ前記ページ番号記憶部に記憶されたページの番号の数が閾値以下であると、前記元データベースの排他ロックを取得して前記元データベースのデータに対する更新および参照を禁止し、前記ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを前記元データベースから前記コピーデータベースへ再度コピーするとともに再度コピーしたページの番号を前記ページ番号記憶部から削除する処理を前記ページ番号記憶部に記憶されたページの番号の数がゼロになるまで繰り返すステップと、
前記ページ番号記憶部に記憶されたページの番号の数がゼロになると、前記元データベースの前記排他ロックを開放するステップと、
前記元データベースおよび前記コピーデータベースのいずれかを再編成するステップと、
を有するデータベース再編成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース装置およびデータベース再編成方法に関する。
【背景技術】
【０００２】
記憶装置により構成されるデータベース（ＤＢ）は、データの更新と削除が繰り返されることにより、断片化した未使用領域が生まれ処理効率が低下してしまう場合がある。この場合、レコードと未使用領域の順番、配置を変更する（再編成する）ことにより、データベースの処理効率を回復させることができる。また、再編成は、断片化したデータベース（オリジナルＤＢ）の内容を他のボリュームにコピーしてコピーＤＢを作成し、このコピーＤＢを利用して行ってもよい。
【０００３】
コピーＤＢを利用する場合、オリジナルＤＢとコピーＤＢとの内容を一致させることが重要である。オリジナルＤＢとコピーＤＢとの内容を一致させるためには、たとえばオリジナルＤＢからコピーＤＢへデータをコピーし、コピーＤＢの再編成が終了した後、コピー開始からオリジナルＤＢに対する更新禁止までの期間にオリジナルＤＢに対して行われた更新処理を更新ログファイルに記録された更新ログをもとにコピーＤＢに再現する（同期する）方法が考えられる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２２５２５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、オリジナルＤＢとコピーＤＢとの内容を一致させるためには、コピー、再編成および同期からなる一連の処理（以下、再編成処理という）の全ての期間または一部の期間において、オリジナルＤＢに対する更新を禁止してオリジナルＤＢのデータ内容を凍結させ、この更新禁止期間内に内容の一致を図ることが多い。この場合、更新禁止期間が長いと、各種アプリケーションプログラムは、データの更新や参照などのデータベースアクセスを妨害される期間が長くなってしまい、利便性が悪くなってしまう。
【０００６】
また、オリジナルＤＢとコピーＤＢとの内容を一致させるためにコピー中にアプリケーションプログラムによるコピーＤＢへの更新要求を許可すると、コピー処理と更新処理とでコピーＤＢ内データのＷＲＩＴＥロックを取り合ってしまう場合があり、この場合も各種アプリケーションプログラムはデータベースアクセスを妨害されてしまい、利便性が悪くなってしまう。
【課題を解決するための手段】
【０００７】
本発明の一実施形態に係るデータベース装置は、上述した課題を解決するために、第１のボリュームに格納された元データベースのデータをページごとにコピーして第２のボリュームにコピーデータベースを作成し、元データベースおよびコピーデータベースのいずれかを再編成するデータベース装置であって、ページ番号記憶部と、仮コピー部と、初期再コピー部と、最終再コピー部と、再編成部と、を備える。ページ番号記憶部は、アプリケーションプログラムにより元データベースのデータが更新されるごとに、更新されたデータが含まれるページの番号を順次記憶する。仮コピー部は、元データベースをページごとにコピーするとともにコピーしたページの番号がページ番号記憶部に記憶されているとこの番号をページ番号記憶部から削除する処理を繰り返すことにより、元データベースを構成する全てのページをそれぞれ一度ずつコピーしてコピーデータベースを作成する。初期再コピー部は、仮コピー部によるコピーデータベースの作成が終わり、かつページ番号記憶部に記憶されたページの番号の数が閾値より多いと、元データベースの排他ロックを取得せず、アプリケーションによる元データベースのデータの更新が許可され更新に応じたページの番号の追記が継続されたまま、ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを元データベースからコピーデータベースへ再度コピーするとともに再度コピーしたページの番号をページ番号記憶部から削除する処理をページ番号記憶部に記憶されたページの番号の数が閾値以下となるまで繰り返す。また、初期再コピー部は、ページ番号記憶部に記憶されたページの番号を１つずつ取得する際に、更新される頻度が高いページの番号ほど後に取得することにより、ページ番号記憶部に記憶された番号のページの再度のコピー全体にかかる時間を短縮する。最終再コピー部は、仮コピー部によるコピーデータベースの作成が終わり、かつページ番号記憶部に記憶されたページの番号の数が閾値以下であると、元データベースの排他ロックを取得して元データベースのデータに対する更新および参照を禁止し、ページ番号記憶部に記憶されたページの番号を１つずつ取得しこの取得した番号のページを元データベースからコピーデータベースへ再度コピーするとともに再度コピーしたページの番号をページ番号記憶部から削除し、ページ番号記憶部に記憶されたページの番号の数がゼロになると、元データベースの排他ロックを開放することにより、元データベースと仮コピー部により作成されたコピーデータベースとを同期する。再編成部は、最終再コピー部による同期が終わると、元データベースおよびコピーデータベースのいずれかを再編成する。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１実施形態に係るデータベース装置の一例を示す全体構成図。
【図２】本発明の第１実施形態に係るデータベース装置により実行される再編成処理全体における各構成要件間の関係を簡単に示す説明図。
【図３】第１実施形態に係る再編成処理を進捗に応じて複数の処理フェーズに分類する一例を示す説明図。
【図４】第１実施形態に係る再編成処理における処理フェーズ、状態フラグ、アクセス先決定部の動作および再編成制御部の動作の関係を示す説明図。
【図５】図１に示すデータベース装置の主制御部により、コピーＤＢを再編成する場合においてアプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行う際の手順を示すフローチャート。
【図６】図５のステップＳ３で主制御部により実行されるコピーの手順を示すサブルーチンフローチャート。
【図７】図６のステップＳ３１〜Ｓ３６で仮コピー部により実行されるコピーの様子を説明するための簡略的なブロック図。
【図８】図６のステップＳ３７〜Ｓ４７で初期再コピー部および最終再コピー部により実行される再コピーの様子を説明するための簡略的なブロック図。
【図９】図５のステップＳ４で実行される再編成の様子を説明するための簡略的なブロック図。
【図１０】図５のステップＳ５で主制御部により実行される再編成後の同期の手順を示すサブルーチンフローチャート。
【図１１】図１０の手順で実行される再編成後の同期の様子を説明するための簡略的なブロック図。
【図１２】図５のステップＳ５で再編成後の同期が行われた後、アクセス部のアクセス先がオリジナルＤＢからコピーＤＢに変更される様子を説明するための簡略的なブロック図。
【図１３】第１実施形態におけるアクセス部から更新要求を受けたアクセス先決定部の処理手順を示すフローチャート。
【図１４】第１実施形態におけるアクセス部から参照要求を受けたアクセス先決定部の処理手順を示すフローチャート。
【図１５】本発明の第２実施形態に係るデータベース装置により実行される再編成処理全体における各構成要件間の関係を簡単に示す説明図。
【図１６】第２実施形態に係る再編成処理を進捗に応じて複数の処理フェーズに分類する一例を示す説明図。
【図１７】第２実施形態に係る再編成処理における処理フェーズ、状態フラグ、アクセス先決定部の動作および再編成制御部の動作の関係を示す説明図。
【図１８】第２実施形態に係るデータベース装置の主制御部により、オリジナルＤＢを再編成する場合においてアプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行う際の手順を示すフローチャート。
【図１９】図１８のステップＳ２０３で主制御部により実行される再編成後の同期の手順を示すサブルーチンフローチャート。
【図２０】第２実施形態におけるアクセス部から更新要求を受けたアクセス先決定部の処理手順を示すフローチャート。
【図２１】第２実施形態におけるアクセス部から参照要求を受けたアクセス先決定部の処理手順を示すフローチャート。
【発明を実施するための形態】
【０００９】
本発明に係るデータベース装置およびデータベース再編成方法の実施の形態について、添付図面を参照して説明する。
【００１０】
（第１の実施形態）
図１は、本発明の第１実施形態に係るデータベース装置１０の一例を示す全体構成図である。また、図２は、本発明の第１実施形態に係るデータベース装置１０により実行される再編成処理全体における各構成要件間の関係を簡単に示す説明図である。
【００１１】
本実施形態では、オリジナルデータベース（以下、オリジナルＤＢという）がコピーデータベース（以下、コピーＤＢという）にコピーされ、コピー開始後にオリジナルＤＢになされた更新内容をコピーＤＢに適用して互いを同期した後、コピーＤＢが再編成される場合の例について説明する。
【００１２】
データベース装置１０は、図１に示すように、第１のボリュームに格納されたオリジナルＤＢ１１、第２のボリュームに格納されたコピーＤＢ１２、再編成処理を制御する主制御部１３、ページ番号記憶部を含む進捗情報記憶部１４、および更新ログ記憶部１５を有する。
【００１３】
主制御部１３のＣＰＵは、ＲＯＭをはじめとする記憶媒体に記憶された再編成処理プログラムおよびこのプログラムの実行のために必要なデータをＲＡＭへロードし、このプログラムに従って、アプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行う処理を実行する。
【００１４】
主制御部１３のＲＡＭは、ＣＰＵが実行するプログラムおよびデータを一時的に格納するワークエリアを提供する。
【００１５】
主制御部１３のＲＯＭをはじめとする記憶媒体は、再編成処理プログラムや、これらのプログラムを実行するために必要な各種データを記憶する。
【００１６】
なお、ＲＯＭをはじめとする記憶媒体は、磁気的もしくは光学的記録媒体または半導体メモリなどの、ＣＰＵにより読み取り可能な記録媒体を含んだ構成を有し、これら記憶媒体内のプログラムおよびデータの一部または全部は電子ネットワークを介してダウンロードされるように構成してもよい。また、ページ番号記憶部を含む進捗情報記憶部１４、および更新ログ記憶部１５は、主制御部１３のＲＡＭやＲＯＭの一部領域に設けられてもよい。
【００１７】
図１に示すように、主制御部１３のＣＰＵは、再編成処理プログラムによって、少なくともアクセス先決定部２１、再編成制御部２２、コピー部２３、再編成部２４および同期部２５として機能する。この各部２１〜２５は、ＲＡＭの所要のワークエリアをデータの一時的な格納場所として利用する。
【００１８】
アクセス先決定部２１は、各種アプリケーションプログラムのデータベースアクセス要求を行う機能実現部としてのアクセス部１００からデータの更新要求および参照要求を受けると、進捗情報記憶部１４に記憶された状態フラグの情報を取得し、この状態フラグに応じてアクセス部１００のアクセス先をオリジナルＤＢ１１およびコピーＤＢ１２のいずれか一方に決定する。また、アクセス先決定部２１は、再編成処理の最後にアクセス先を切り替える際に、状態フラグを変更する。
【００１９】
また、アクセス先決定部２１は、コピー後の再編成までは、アプリケーションプログラムによりオリジナルＤＢ１１のデータが更新されるごとに、更新されたデータが含まれるページの番号（以下、再コピーページ番号という）を進捗情報記憶部１４に記憶させる。このとき、アクセス先決定部２１は、再コピーページ番号がすでに進捗情報記憶部１４に記憶されている場合には、この番号を再度進捗情報記憶部１４に記憶させることはしない。再コピーページ番号は、コピー部２３の仮コピー部３１がコピーを行ったページが、その後更新されたか否かを示す情報にすぎない。このため、同一の番号が進捗情報記憶部１４に重複して記憶されている必要はない。
【００２０】
また、アクセス先決定部２１は、コピー後の再編成の後は、オリジナルＤＢ１１のデータが更新されるごとに、更新後の値の情報および更新されたデータを識別するための情報を含む更新ログを更新ログ記憶部１５に記憶させる。更新ログとしては、更新後の値と更新されたデータを識別するための情報が内容とされればよく、これらを直接に示す情報やＳＱＬ文などを用いることができる。
【００２１】
なお、ＳＱＬ文を用いる場合は、ＳＱＬ文に第３のデータベースの情報が含まれていないことが好ましい。たとえば第３のデータベースのデータの値を参照するようになっているＳＱＬ文など、ＳＱＬ文に第３のデータベースの情報が含まれている場合、オリジナルＤＢ１１の更新時点とコピーＤＢ１２への更新ログ適用時点とで第３のデータベースが変化してしまっている可能性があるため、オリジナルＤＢ１１で行われた更新をコピーＤＢ１２で再現することが難しくなってしまう。
【００２２】
また、データを識別するための情報は、データを特定できる情報であって、テーブル内の位置情報などの物理的な位置情報に限られず、論理アドレスを用いてもよいし、各データにＩＤが付与されている場合はこのＩＤを用いてもよい。
【００２３】
再編成制御部２２は、アクセス先決定部２１、コピー部２３、再編成部２４および同期部２５を制御することにより再編成処理を制御し、進捗情報記憶部１４に記憶された状態フラグを更新および取得する。
【００２４】
コピー部２３は、仮コピー部３１、初期再コピー部３２および最終再コピー部３３を有する。
【００２５】
仮コピー部３１は、再編成制御部２２により制御され、オリジナルＤＢ１１をページごとにコピーし、オリジナルＤＢを構成する全てのページをそれぞれ一度ずつコピーしてコピーＤＢ１２を作成する。また、仮コピー部３１は、各ページをコピーする際に、コピー対象ページの番号が進捗情報記憶部１４に再コピーページ番号として記憶されていると、この番号を進捗情報記憶部１４から削除する。
【００２６】
初期再コピー部３２は、再編成制御部２２により制御され、仮コピー部３１によるコピーＤＢ１２の作成が終わり、かつ進捗情報記憶部１４に記憶された再コピーページ番号の数が閾値より多いと、オリジナルＤＢ１１の排他ロックを取得せず、進捗情報記憶部１４に記憶されたページの番号を１つずつ取得しこの取得した番号のページをオリジナルＤＢ１１からコピーＤＢ１２へ再度コピーするとともに、再度コピーしたページの番号を進捗情報記憶部１４から削除する。この処理は、進捗情報記憶部１４に記憶された再コピーページ番号の数が閾値以下となるまで繰り返される。ここで、排他ロックとは、更新アクセスおよび参照アクセスを禁止するロックである。
【００２７】
最終再コピー部３３は、再編成制御部２２により制御され、仮コピー部３１によるコピーＤＢ１２の作成が終わり、かつ進捗情報記憶部１４に記憶された再コピーページ番号の数が閾値以下であると、オリジナルＤＢ１１の排他ロックを取得してオリジナルＤＢ１１のデータに対する更新および参照を禁止し、進捗情報記憶部１４に記憶された再コピーページ番号を１つずつ取得しこの取得した番号のページをオリジナルＤＢ１１からコピーＤＢ１２へ再度コピーするとともに、再度コピーした再コピーページ番号を進捗情報記憶部１４から削除する。そして、進捗情報記憶部１４に記憶された再コピーページ番号の数がゼロになると、最終再コピー部３３は、オリジナルＤＢ１１の排他ロックを開放する。この結果、オリジナルＤＢ１１と仮コピー部により作成されたコピーＤＢ１２との同期が終了する。
【００２８】
なお、初期再コピー部３２が用いる閾値は、ゼロであってもよい。この場合、最終再コピー部３３は、進捗情報記憶部１４に記憶された再コピーページ番号の数がゼロになるまで初期再コピー部３２が再コピーページ番号による再コピーを実行した後、最終再コピー部３３がオリジナルＤＢ１１の排他ロックを取得するまでの間に、新たに進捗情報記憶部１４に追記された再コピーページ番号のみを用いることになる。なお、以下の説明では、再コピーとは、仮コピー部３１によりコピーＤＢ１２へ一度コピーされたページを、初期再コピー部３２または最終再コピー部３３が再コピーページ番号にもとづいてコピーＤＢ１２へ再度コピーすることをいうものとする。
【００２９】
再編成部２４は、再編成制御部２２により制御され、オリジナルＤＢ１１とコピーＤＢ１２とがコピー部２３の最終再コピー部３３により同期されると、オリジナルＤＢ１１とコピーＤＢ１２とのいずれかを再編成する。本実施形態では、再編成部２４がコピーＤＢ１２を再編成する場合の例について説明する。
【００３０】
同期部２５は、初期同期部３４および最終同期部３５を有する。
【００３１】
初期同期部３４は、再編成制御部２２により制御され、再編成部２４によるコピーＤＢ１２の再編成が終わり、かつ更新ログ記憶部１５に記憶された更新ログの数が閾値より多いと、オリジナルＤＢ１１の排他ロックを取得せず、更新ログ記憶部１５に記憶された更新ログを１つずつコピーＤＢ１２に適用するとともに、適用した更新ログを更新ログ記憶部１５から削除する。この処理は、更新ログ記憶部１５に記憶された更新ログの数が閾値以下となるまで繰り返される。排他ロックが取得されていないため、初期同期部３４の処理中は、アクセス部１００によるオリジナルＤＢのデータの更新が許可され、更新に応じたアクセス先決定部２１による更新ログの生成は継続される。すなわち、最終同期部３５が排他ロックを取得するまでは、初期同期部３４の処理中を含め、更新ログ記憶部１５に新たな更新ログが追記され続ける。
【００３２】
最終同期部３５は、再編成制御部２２により制御され、再編成部２４によるコピーＤＢ１２の再編成が終わり、かつ更新ログ記憶部１５に記憶された更新ログの数が閾値以下であると、オリジナルＤＢ１１の排他ロックを取得してオリジナルＤＢ１１のデータに対する更新および参照を禁止し、更新ログ記憶部１５に記憶された更新ログを１つずつコピーＤＢ１２に適用するとともに、適用した更新ログを更新ログ記憶部１５から削除する。そして、更新ログ記憶部１５に記憶された更新ログの数がゼロになると、最終同期部３５は、オリジナルＤＢ１１の排他ロックを開放する。この結果、オリジナルＤＢ１１とコピーＤＢ１２との再編成後の同期が終了する。
【００３３】
なお、初期同期部３４が用いる閾値は、ゼロであってもよい。この場合、最終同期部３５は、更新ログ記憶部１５に記憶された更新ログがゼロになるまで初期同期部３４が更新ログを適用した後、最終同期部３５がオリジナルＤＢ１１の排他ロックを取得するまでの間に、新たに更新ログ記憶部１５に追記された更新ログのみを適用することになる。
【００３４】
次に、本実施形態に係るデータベース装置１０の動作の一例について説明する。
【００３５】
図３は、第１実施形態に係る再編成処理を進捗に応じて複数の処理フェーズに分類する一例を示す説明図である。また、図４は、第１実施形態に係る再編成処理における処理フェーズ、状態フラグ、アクセス先決定部２１の動作および再編成制御部２２の動作の関係を示す説明図である。
【００３６】
図３および図４に示すように、本実施形態に係る再編成処理は６つのフェーズに分類される。フェーズ０は、再編成処理中ではなく、通常の起動状態である。オリジナルＤＢ１１からコピーＤＢ１２へページごとのコピーがコピー部２３により実行されている期間はフェーズ１に分類される。全ページのコピーが一通り完了した後、コピー部２３によりコピーＤＢ１２に対して進捗情報記憶部１４に記憶された再コピーページ番号のページが再コピーされている期間はフェーズ２に分類される。コピーＤＢ１２に再コピーページ番号のページが再コピーされた後、再編成部２４によりコピーＤＢ１２が再編成されている期間はフェーズ３に分類される。コピーＤＢ１２が再編成された後、同期部２５によりコピーＤＢ１２に対してフェーズ３開始以降に生成された更新ログが適用されている期間はフェーズ４に分類される。コピーＤＢ１２に更新ログが適用された後、アクセス先決定部２１によりアクセス先がコピーＤＢ１２へ切り替えられる期間はフェーズ５に分類される。
【００３７】
図５は、図１に示すデータベース装置１０の主制御部１３により、コピーＤＢ１２を再編成する場合においてアプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行う際の手順を示すフローチャートである。図５において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。
【００３８】
この手順は、再編成処理の開始指示があった時点でスタートとなる。なお、再編成処理の開始指示は、データベースユーザによって図示しない入力部を介して与えられてもよいし、あらかじめ設定された所定の時間や所定の周期で自動的に与えられてもよい。
【００３９】
まず、ステップＳ１において、コピー部２３は、コピーＤＢ１２を初期化する。
【００４０】
次に、ステップＳ２において、再編成制御部２２は、進捗情報記憶部１４に記憶された状態フラグを０から１に更新する。すなわち、処理フェーズは０から１に移行する。
【００４１】
次に、ステップＳ３において、コピー部２３は、オリジナルＤＢ１１からコピーＤＢ１２にページごとにデータをコピーした後、進捗情報記憶部１４に記憶された再コピーページ番号のページを再コピーして、オリジナルＤＢ１１とコピーＤＢ１２との同期を行う。また、コピー部２３は、再コピーの間に更新が行われたページについても再コピーを行い、オリジナルＤＢ１１とコピーＤＢ１２との同期を行う。最終再コピー部３３の処理の間を除き、コピー中および再コピー中においてオリジナルＤＢ１１に対する更新アクセスは禁止されず、再コピーページ番号が進捗情報記憶部１４に追記されていく。
【００４２】
次に、ステップＳ４において、再編成部２４は、コピーＤＢ１２を再編成する。この再編成の間にも、オリジナルＤＢ１１に対する更新アクセスは禁止されない。この間に更新が行われると、更新ログが更新ログ記憶部１５に追記されていく（図４参照）。
【００４３】
次に、ステップＳ５において、同期部２５は、ステップＳ４の間にオリジナルＤＢ１１に対して行われた更新をコピーＤＢ１２に適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行う。また、同期部２５は、この同期処理の間に行われた更新についてもコピーＤＢ１２に適用し、オリジナルＤＢ１１とコピーＤＢ１２との同期を行う。そして、アクセス先決定部２１は、アクセス部１００のアクセス先をオリジナルＤＢ１１からコピーＤＢ１２に変更する。
【００４４】
次に、ステップＳ６において、再編成制御部２２は、コピー部２３を介してオリジナルＤＢ１１を削除する。この結果、これ以降はコピーＤＢ１２がオリジナルのデータベースとして機能する。
【００４５】
以上の手順により、コピーＤＢ１２を再編成する場合においてアプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行うことができる。
【００４６】
図６は、図５のステップＳ３で主制御部１３により実行されるコピーの手順を示すサブルーチンフローチャートである。図６において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。また、図７は、図６のステップＳ３１〜Ｓ３６で仮コピー部３１により実行されるコピーの様子を説明するための簡略的なブロック図である。また、図８は、図６のステップＳ３７〜Ｓ４７で初期再コピー部３２および最終再コピー部３３により実行される再コピーの様子を説明するための簡略的なブロック図である。
【００４７】
この手順は、図５のステップＳ２で処理フェーズが０から１に移行した時点でスタートとなる。
【００４８】
まず、ステップＳ３１において、仮コピー部３１は、これからコピーしようとしているページが属するテーブル（コピー対象テーブル）の共有ロックを獲得する。共有ロックは、更新アクセスを禁止する一方、参照アクセスを許可するロックである。
【００４９】
次に、仮コピー部３１は、オリジナルＤＢ１１から単位ページ量のデータを取得し（ステップＳ３２）、取得したデータをコピーＤＢ１２にコピーし（ステップＳ３３）、進捗情報記憶部１４の再コピーページ番号からコピーしたページの番号を削除し（ステップＳ３４）、コピー対象テーブルの共有ロックを開放する（ステップＳ３５）。
【００５０】
次に、仮コピー部３１は、オリジナルＤＢ１１の全てのページがコピーされたか否かを判定する（ステップＳ３６）。全てのページがコピーされた場合、処理フェーズは１から２に移行し、ステップＳ３７に進む。なお、このとき状態フラグは１のままである（図４参照）。一方、未コピーのページがある場合、ステップＳ３１に戻り、引き続き未コピーページのコピーを行う。
【００５１】
以上のステップＳ３１〜Ｓ３６の手順により、仮コピー部３１によってオリジナルＤＢを構成する全てのページをそれぞれ一度ずつコピーしたコピーＤＢ１２を作成することができる。
【００５２】
次に、ステップＳ３７において、初期再コピー部３２は、進捗情報記憶部１４に記憶された再コピーページ番号の数が閾値以下であるか否かを判定する。たとえば、閾値がゼロである場合は、初期再コピー部３２は、進捗情報記憶部１４に記憶された再コピーページ番号の数がゼロ以下か、すなわちゼロであるか否かを判定する。閾値より多い場合、ステップＳ３８に進む。一方、閾値以下である場合、ステップＳ４４に進む。
【００５３】
次に、ステップＳ３８において、初期再コピー部３２は、進捗情報記憶部１４から再コピーページ番号を１つ取得し、この番号のページが含まれるテーブルの共有ロックを取得してから（ステップＳ３９）、この番号のページのデータをオリジナルＤＢ１１から取得し（ステップＳ４０）、取得したデータをコピーＤＢ１２にコピーする（ステップＳ４１）。そして、初期再コピー部３２は、この番号を進捗情報記憶部１４の再コピーページ番号から削除し（ステップＳ４２）、テーブルの共有ロックを開放して（ステップＳ４３）、ステップＳ３７に戻る。
【００５４】
以上のステップＳ３８〜Ｓ４３の手順により、初期再コピー部３２によって進捗情報記憶部１４の再コピーページ番号の数が閾値以下となるまで、再コピーが実行される。
【００５５】
一方、ステップＳ３７で進捗情報記憶部１４に記憶された再コピーページ番号の数が閾値以下であると判定されると、最終再コピー部３３は、オリジナルＤＢ１１の排他ロックを獲得し（ステップＳ４４）、進捗情報記憶部１４に記憶された再コピーページ番号の数がゼロであるか否かを判定する（ステップＳ４５）。なお、ステップＳ３７において閾値がゼロである場合でも、ステップＳ３７で再コピーページ番号数がゼロであると判定された後にステップＳ４４で最終再コピー部３３がオリジナルＤＢ１１の排他ロックを取得するまでの間に新たな再コピーページ番号が追記される場合があることに注意する。
【００５６】
再コピーページ番号の数がゼロでない場合は（ステップＳ４５のＮＯ）、最終再コピー部３３は、ステップＳ３８〜ステップＳ４３で初期再コピー部３２が行ったのと同様の手順により、進捗情報記憶部１４に記憶された再コピーページ番号の１つを再コピーして（ステップＳ３８−２〜Ｓ４２−２）、ステップＳ４５に戻る。なお、ステップＳ４４以降の処理において、コピー対象テーブルの共有ロックに係る処理（ステップＳ３９およびＳ４２に相当するステップ）を実行する必要は無い。ステップＳ４４ですでにオリジナルＤＢ１１の排他ロックを取得しているためである。
【００５７】
一方、再コピーページ番号の数がゼロである場合は（ステップＳ４５のＹＥＳ）、最終再コピー部３３は、進捗情報記憶部１４に記憶された状態フラグを１から２に更新する（ステップＳ４６）。このとき、処理フェーズは２から３に移行する。そして、最終再コピー部３３は、オリジナルＤＢ１１の排他ロックを開放する（ステップＳ４７）。
【００５８】
以上のステップＳ４４〜Ｓ４７およびＳ３８−２〜Ｓ４２−２の手順により、最終再コピー部３３によって進捗情報記憶部１４の再コピーページ番号の数がゼロになるまで、再コピーが実行される。
【００５９】
なお、初期再コピー部３２は、ステップＳ３８において、再コピー全体の処理時間が短くなるような順番で再コピーページ番号を１つずつ取得してもよい。データベースに記憶されている複数のページには、一般に、データが記録されているページのほか、複数のページを管理するためのページ（以下、管理ページという）が含まれていることが多い。管理ページが管理しているページが更新されると、更新されたページのみならず、この管理ページも更新される場合がある。したがって、この種の更新される頻度が高いページは、できるだけ最後に再コピーすることが好ましい。
【００６０】
このため、たとえば各ページに対して更新される頻度を示す情報（たとえば直近の所定期間に更新された回数や、管理ページであるか否かの情報など）が関連付けられた更新頻度情報をあらかじめ記憶媒体に記憶させておくとよい。この場合、初期再コピー部３２は、進捗情報記憶部１４に記憶されたページの番号を１つずつ取得する際に、この更新頻度情報にもとづいて、更新される頻度が高いページほど後に取得することにより、進捗情報記憶部１４に記憶された再コピーページ番号の再コピー全体にかかる時間を短縮することができる。
【００６１】
図９は、図５のステップＳ４で実行される再編成の様子を説明するための簡略的なブロック図である。図５のステップＳ４は、図５のステップＳ３（図６のステップＳ４６）で状態フラグが１から２に更新される（処理フェーズが２から３に移行する）と実行される。再編成部２４は、再編成制御部２２に制御されて、再コピーによりオリジナルＤＢ１１と同期されたコピーＤＢ１２を再編成する。コピーＤＢ１２が再編成されると、処理フェーズは３から４に移行する。
【００６２】
続いて、再編成後にコピーＤＢ１２に更新ログを適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行う際の手順を説明する。
【００６３】
図１０は、図５のステップＳ５で主制御部１３により実行される再編成後の同期の手順を示すサブルーチンフローチャートである。図１０において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。また、図１１は、図１０の手順で実行される再編成後の同期の様子を説明するための簡略的なブロック図である。
【００６４】
この手順は、図５のステップＳ４で処理フェーズが３から４に移行した時点でスタートとなる。
【００６５】
ステップＳ５１において、同期部２５の初期同期部３４は、更新ログ記憶部１５を検索し、更新ログ記憶部１５に記憶された更新ログの数が閾値以下であるか否かを判定する。たとえば、閾値がゼロである場合は、初期同期部３４は、更新ログ記憶部１５に記憶された更新ログの数がゼロ以下か、すなわちゼロであるか否かを判定する。
【００６６】
閾値より多いである場合は（ステップＳ５１のＮＯ）、初期同期部３４は、更新ログ記憶部１５から更新ログを１つ取得し（ステップＳ５２）、取得した更新ログをコピーＤＢ１２に適用して（ステップＳ５３）、ステップＳ５１に戻る。
【００６７】
一方、閾値以下である場合は（ステップＳ５１のＹＥＳ）、最終同期部３５は、まず、オリジナルＤＢ１１の排他ロックを取得してから（ステップＳ５４）、更新ログ記憶部１５を検索し、更新ログ記憶部１５に記憶された更新ログの数がゼロであるか否かを判定する（ステップＳ５５）。なお、ステップＳ５１において閾値がゼロである場合でも、ステップＳ５１で更新ログ数がゼロであると判定した後にステップＳ５４で最終同期部３５がオリジナルＤＢ１１の排他ロックを取得するまでの間に新たな更新ログが追記される場合があることに注意する。
【００６８】
更新ログ数がゼロでない場合は（ステップＳ５５のＮＯ）、最終同期部３５は、更新ログ記憶部１５から更新ログを１つ取得し（ステップＳ５６）、取得した更新ログをコピーＤＢ１２に適用して（ステップＳ５７）、ステップＳ５５に戻る。
【００６９】
一方、更新ログ数がゼロである場合は（ステップＳ５５のＹＥＳ）、最終同期部３５は、進捗情報記憶部１４に記憶された状態フラグを２から３に更新する（ステップＳ５８）。すなわち、処理フェーズは４から５に移行する。そして、最終同期部３５は、オリジナルＤＢ１１の排他ロックを開放する（ステップＳ５９）。
【００７０】
以上の手順により、アプリケーションプログラムのデータベースアクセスの妨害を低減しつつ再編成後にコピーＤＢ１２に更新ログを適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行うことができる。
【００７１】
図１２は、図５のステップＳ５で再編成後の同期が行われた後、アクセス部１００のアクセス先がオリジナルＤＢ１１からコピーＤＢ１２に変更される様子を説明するための簡略的なブロック図である。図５のステップＳ５（図１０に示す手順）を実行することにより、コピーＤＢ１２は、オリジナルＤＢ１１と同一のデータを格納しつつこれらのデータが再編成された状態となっている。したがって、再編成後の同期後は、コピーＤＢ１２をアクセス部１００のアクセス先とするとよい。そこで、アクセス先決定部２１は、図５のステップＳ５（図１０のステップＳ５８）で状態フラグが２から３に更新されたことを受け、アクセス部１００のアクセス先をコピーＤＢ１２に切り替える（図４、図１２参照）。
【００７２】
図１３は、第１実施形態におけるアクセス部１００から更新要求を受けたアクセス先決定部２１の処理手順を示すフローチャートである。図１３において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。
【００７３】
この手順は、アクセス先決定部２１がアクセス部１００からデータの更新要求を受けた時点でスタートとなる。なお、この手順はゼロを含む全ての状態フラグ値に対応するものである。
【００７４】
まず、アクセス先決定部２１は、状態フラグを取得し（ステップＳ８１）、状態フラグが３であるか否かを判定する（ステップＳ８２）。状態フラグが３である場合は、アクセス先決定部２１は、ステップＳ８３でアクセス部１００のアクセス先をコピーＤＢ１２に切り替えて（図４、図１０参照）、進捗情報記憶部１４に記憶された状態フラグを３から０に更新して（ステップＳ８４）、ステップＳ８５に進む。この結果、処理フェーズは０となり、再編成処理中ではなく、通常の起動状態となる。
【００７５】
他方、ステップＳ８１で状態フラグが３でないと判定した場合もステップＳ８５に進み、アクセス先決定部２１は、更新先テーブルの排他ロックを獲得し（ステップＳ８６）、アクセス先ＤＢのデータを更新する（ステップＳ８６）。
【００７６】
次に、ステップＳ８７において、アクセス先決定部２１は、状態フラグが１であるか否かを判定する。
【００７７】
状態フラグが１（再編成処理のコピー中または再コピー中）である場合は、アクセス先決定部２１は、更新対象ページの番号が進捗情報記憶部１４に再コピーページ番号として記憶されていないか否かを判定する（ステップＳ８８）。再コピーページ番号として記憶されていない場合は（ステップＳ８８のＹＥＳ）、更新対象ページの番号を進捗情報記憶部１４に再コピーページ番号として記憶させて（ステップＳ８９）、更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。一方、更新対象ページの番号が進捗情報記憶部１４に再コピーページ番号としてすでに記憶されている場合は（ステップＳ８８のＮＯ）、更新対象ページの番号を記憶させることなく更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。
【００７８】
他方、状態フラグが１（再編成処理のコピー中または再コピー中）でない場合は（ステップＳ８７のＮＯ）、ステップＳ９１において、アクセス先決定部２１は、状態フラグが２であるか否かを判定する。状態フラグが２（再編成処理の再編成中または再編成後の同期中）である場合は、更新ログ記憶部１５に更新ログを記憶させて（ステップＳ９２）、更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。一方、状態フラグが２でない場合、すなわち状態フラグが０である場合は、更新ログを生成することなく更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。
【００７９】
図１４は、第１実施形態におけるアクセス部１００から参照要求を受けたアクセス先決定部２１の処理手順を示すフローチャートである。図１４において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。図１３と同等のステップには同一符号を付し、重複する説明を省略する。
【００８０】
この手順は、アクセス先決定部２１がアクセス部１００からデータの参照要求を受けた時点でスタートとなる。なお、この手順はゼロを含む全ての状態フラグ値に対応するものである。
【００８１】
ステップＳ１０１において、アクセス先決定部２１は、参照先テーブルの共有ロックを取得する。そして、アクセス部１００に対してアクセス先ＤＢのデータを参照させ（ステップＳ１０２）、参照先テーブルの共有ロックを開放する（ステップＳ１０３）。
【００８２】
本実施形態に係るデータベース装置１０のコピー部は、仮コピー部３１によるコピーＤＢ１２の作成が終わるまで、再コピーを行わない。コピー中における更新内容は、コピーＤＢ１２に対しては同時には反映されず更新ページの番号が再コピーページ番号として一旦記憶され、仮コピー部３１のコピーを待って初期再コピー部３２および最終再コピー部３３によって利用される。
【００８３】
このため、コピー処理と同期処理とでコピーＤＢ１２のデータの排他ロック（ＷＲＩＴＥロック）を取り合ってしまうことがない。したがって、ロックの粒度によらず、排他ロック（ＷＲＩＴＥロック）取得待ちによる更新処理の速度低下を防ぐことができる。
【００８４】
また、仮コピー部３１のコピー中においては、アクセス部１００の更新アクセスを禁止しない。また、再コピー中および再編成後の同期中においては、アクセス部１００の更新アクセスは、最終再コピー部３３の動作中および最終同期部３５の動作中を除き許可される。したがって、各種アプリケーションプログラムがデータベースアクセスを妨害される期間を非常に短くすることができる。
【００８５】
また、本実施形態に係るデータベース装置１０は、コピー部２３のコピー中にアクセス部１００がデータの更新を行った場合、更新されたデータを含むページ番号を再コピーページ番号として記憶しておき、更新ログは利用しない。この再コピーページ番号は、同一の番号が２重に記憶されることが無い（図１３のステップＳ８８〜Ｓ９０参照）。このため、たとえばコピー部２３のコピー中にアクセス部１００が同一のページに対する更新を複数回行った場合、本実施形態に係るデータベース装置１０によれば再コピーページ番号が１つ記憶されるにすぎないが、更新ログを利用する場合には更新回数分の更新ログが記憶されてしまう。このため、コピー部２３のコピー中に行われた更新をコピーＤＢ１２に反映する場合、再コピーページ番号を利用するほうが更新ログを利用する場合に比べ処理回数を少なくすることができ、再編成処理全体にかかる時間を短縮することができる。
【００８６】
（第２の実施形態）
次に、本発明に係るデータベース装置及びデータベース再編成方法の第２実施形態について説明する。
【００８７】
この第２実施形態に示すデータベース装置１０Ａは、オリジナルＤＢ１１が再編成される点で第１実施形態に示すデータベース装置１０と異なる。他の構成および作用については図１に示すデータベース装置１０と実質的に異ならないため、同じ構成には同一符号を付して説明を省略する。
【００８８】
図１５は、本発明の第２実施形態に係るデータベース装置１０Ａにより実行される再編成処理全体における各構成要件間の関係を簡単に示す説明図である。図１５に示すように、本実施形態では、再編成部２４は、コピーＤＢ１２ではなくオリジナルＤＢ１１を再編成する。
【００８９】
次に、本実施形態に係るデータベース装置１０Ａの動作の一例について説明する。
【００９０】
図１６は、第２実施形態に係る再編成処理を進捗に応じて複数の処理フェーズに分類する一例を示す説明図である。また、図１７は、第２実施形態に係る再編成処理における処理フェーズ、状態フラグ、アクセス先決定部２１の動作および再編成制御部２２の動作の関係を示す説明図である。
【００９１】
図１６および図１７に示すように、本実施形態に係る再編成処理は７つのフェーズに分類される。第１実施形態におけるフェーズ２とフェーズ３の間に新たなフェーズおよび状態フラグが設けられた点が第１実施形態に係る再編成処理と異なる。フェーズ０、１および２は第１実施形態に係る再編成処理と同一であるため、説明を省略する。
【００９２】
コピーＤＢ１２に再コピーページ番号のページが再コピーされた後、アクセス先決定部２１によりアクセス先がコピーＤＢ１２へ切り替えられる期間はフェーズ３に分類される。コピーＤＢ１２にアクセス先が切り替えられた後、再編成部２４によりオリジナルＤＢ１１が再編成されている期間はフェーズ４に分類される。オリジナルＤＢ１１が再編成された後、同期部２５によりオリジナルＤＢ１１に対してフェーズ４開始以降に生成された更新ログが適用されている期間はフェーズ５に分類される。オリジナルＤＢ１１に更新ログが適用された後、アクセス先決定部２１によりアクセス先がオリジナルＤＢ１１へ切り替えられる期間はフェーズ６に分類される。
【００９３】
図１８は、第２実施形態に係るデータベース装置１０Ａの主制御部１３により、オリジナルＤＢを再編成する場合においてアプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行う際の手順を示すフローチャートである。図１８において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。図５と同等のステップには同一符号を付し、重複する説明を省略する。
【００９４】
この手順は、再編成処理の開始指示があった時点でスタートとなる。なお、再編成処理の開始指示は、データベースユーザによって図示しない入力部を介して与えられてもよいし、あらかじめ設定された所定の時間や所定の周期で自動的に与えられてもよい。
【００９５】
ステップＳ２０１において、コピー部２３は、オリジナルＤＢ１１からコピーＤＢ１２にページごとにデータをコピーした後、進捗情報記憶部１４に記憶された再コピーページ番号のページを再コピーして、オリジナルＤＢ１１とコピーＤＢ１２との同期を行う。
【００９６】
なお、ステップＳ２０１の処理は図５のステップＳ３とほぼ同一であり、詳細な手順も図６に示す手順とほぼ同一であるが、図６のステップＳ４６で移行する状態フラグ２（処理フェーズ３）が意味するところのみが異なる。ステップＳ２０１が実行されると、アクセス先決定部２１は、アクセス部１００のアクセス先をオリジナルＤＢ１１からコピーＤＢ１２に変更する（図１７参照）。なお、状態フラグは、アクセス先の切り替えが終わった時点でアクセス先決定部２１により２から３に更新されても（処理フェーズが３から４に移行しても）よいし、アクセス部１００による更新アクセスまたは参照アクセスがあるとアクセス先決定部２１により２から３に更新されても（処理フェーズが３から４に移行しても）よい。
【００９７】
次に、ステップＳ２０２において、再編成部２４は、オリジナルＤＢ１１を再編成する。この再編成の間、コピーＤＢ１２に対する更新アクセスは禁止されず、更新ログが更新ログ記憶部１５に追記されていく。再編成されると、処理フェーズは４から５に移行する。
【００９８】
次に、ステップＳ２０３において、同期部２５は、ステップＳ２０２の間にコピーＤＢ１２に対して行われた更新をオリジナルＤＢ１１に適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行う。また、同期部２５は、この同期処理の間にコピーＤＢ１２に対して行われた更新についてもオリジナルＤＢ１１に適用し、オリジナルＤＢ１１とコピーＤＢ１２との同期を行う。同期されると、最終同期部３５により状態フラグが３から４に更新される（処理フェーズが５から６に移行する）。そして、アクセス先決定部２１は、アクセス部１００のアクセス先をコピーＤＢ１２からオリジナルＤＢ１１に変更する。
【００９９】
次に、ステップＳ２０４において、再編成制御部２２は、コピー部２３を介してコピーＤＢ１２を削除する。
【０１００】
以上の手順により、オリジナルＤＢ１１を再編成する場合においても、アプリケーションプログラムによるデータベースアクセスに対する妨害を低減しつつ確実にデータベースの再編成処理を行うことができる。
【０１０１】
続いて、オリジナルＤＢ１１の再編成後にオリジナルＤＢ１１に更新ログを適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行う際の手順を説明する。
【０１０２】
図１９は、図１８のステップＳ２０３で主制御部１３により実行される再編成後の同期の手順を示すサブルーチンフローチャートである。図１９において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。なお、図１０と同等のステップには同一符号を付し、重複する説明を省略する。
【０１０３】
この手順は、図１８のステップＳ２０２で処理フェーズが４から５に移行した時点でスタートとなる。
【０１０４】
更新ログ記憶部１５に記憶された更新ログの数が閾値以下であると（ステップＳ５１のＹＥＳ）、初期同期部３４は、更新ログ記憶部１５から更新ログを１つ取得し（ステップＳ５２）、取得した更新ログをオリジナルＤＢ１１に適用して（ステップＳ２２１）、ステップＳ４１に戻る。
【０１０５】
一方、閾値以下である場合は（ステップＳ５１のＹＥＳ）、最終同期部３５は、コピーＤＢ１２の排他ロックを取得する（ステップＳ２２２）。
【０１０６】
そして、更新ログ数がゼロでない場合は（ステップＳ５５のＮＯ）、最終同期部３５は、更新ログ記憶部１５から更新ログを１つ取得し（ステップＳ５６）、取得した更新ログをオリジナルＤＢ１１に適用して（ステップＳ２２３）、ステップＳ５５に戻る。
【０１０７】
一方、更新ログ数がゼロである場合は（ステップＳ５５のＹＥＳ）、最終同期部３５は、進捗情報記憶部１４に記憶された状態フラグを３から４に更新する（ステップＳ２２４）。すなわち、処理フェーズは５から６に移行する。そして、最終同期部３５は、コピーＤＢ１２の排他ロックを開放する（ステップＳ２２５）。
【０１０８】
以上の手順により、アプリケーションプログラムのデータベースアクセスの妨害を低減しつつ、オリジナルＤＢ１１の再編成後にオリジナルＤＢ１１に更新ログを適用してオリジナルＤＢ１１とコピーＤＢ１２との同期を行うことができる。
【０１０９】
図２０は、第２実施形態におけるアクセス部１００から更新要求を受けたアクセス先決定部２１の処理手順を示すフローチャートである。図２０において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。なお、図１３と同等のステップには同一符号を付し、重複する説明を省略する。
【０１１０】
この手順は、アクセス先決定部２１がアクセス部１００からデータの更新要求を受けた時点でスタートとなる。なお、この手順はゼロを含む全ての状態フラグ値に対応するものである。
【０１１１】
まず、アクセス先決定部２１は、状態フラグを取得し（ステップＳ８１）、状態フラグが３であるか否かを判定する（ステップＳ２８１）。状態フラグが３であればアクセス先決定部２１はアクセス先をコピーＤＢ１２とする（ステップＳ２８２）。
【０１１２】
一方、状態フラグが３でない場合（ステップＳ２８１のＮＯ）は、アクセス先決定部２１は、状態フラグが２であるか否かを判定する（ステップＳ２８３）。状態フラグが２である場合は、アクセス先決定部２１は、進捗情報記憶部１４に記憶された状態フラグを２から３に更新して（ステップＳ２８４）アクセス先をコピーＤＢ１２とする（ステップＳ２８２）。
【０１１３】
状態フラグが２でも３でもない場合（ステップＳ２８３のＮＯ）、アクセス先決定部２１は、アクセス先をオリジナルＤＢ１１とし（ステップＳ２８５）、状態フラグが４であるか否かを判定し（ステップＳ２８６）、状態フラグが４である場合は、進捗情報記憶部１４に記憶された状態フラグを４から０に更新する（ステップＳ２８７）。
【０１１４】
また、ステップＳ８６でアクセス先のＤＢが更新され、ステップＳ８７で状態フラグが１ではないと判定されると、アクセス先決定部２１は、状態フラグが３であるか否かを判定する（ステップＳ９１）。状態フラグが３である場合は、アクセス先決定部２１は、更新ログ記憶部１５に更新ログを記憶させて（ステップＳ９２）、更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。一方、状態フラグが３でない場合は、アクセス先決定部２１は、更新ログを生成することなく更新先テーブルの排他ロックを開放し（ステップＳ９０）、一連の手順は終了となる。
【０１１５】
図２１は、第２実施形態におけるアクセス部１００から参照要求を受けたアクセス先決定部２１の処理手順を示すフローチャートである。図２１において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。図２１に示す手順は、図１４と図２０に示したステップと同等のステップにより構成されるため、説明を省略する。
【０１１６】
本実施形態に係るデータベース装置１０Ａによっても、第１実施形態に係るデータベース装置１０と同様の作用効果を奏する。また、本実施形態に係るデータベース装置１０Ａによれば、オリジナルＤＢ１１を再編成することができるため、一連の再編成処理の前後でオリジナルＤＢ１１をアクセス先とすることができる。
【０１１７】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１１８】
たとえば、本実施形態では、再編成処理の対象をデータベース単位としたが、テーブル単位など他の単位としてもよい。
【０１１９】
また、本発明の実施形態では、フローチャートの各ステップは、記載された順序に沿って時系列的に行われる処理の例を示したが、必ずしも時系列的に処理されなくとも、並列的あるいは個別実行される処理をも含むものである。
【符号の説明】
【０１２０】
１０  データベース装置
１１  オリジナルＤＢ
１２  コピーＤＢ
１３  主制御部
１４  進捗情報記憶部
１５  更新ログ記憶部
２１  アクセス先決定部
２２  再編成制御部
２３  コピー部
２４  再編成部
２５  同期部
３１  仮コピー部
３２  初期再コピー部
３３  最終再コピー部
３４  初期同期部
３５  最終同期部
【図１】
0005740196.tif 000002
【図２】
0005740196.tif 000003
【図３】
0005740196.tif 000004
【図４】
0005740196.tif 000005
【図５】
0005740196.tif 000006
【図６】
0005740196.tif 000007
【図７】
0005740196.tif 000008
【図８】
0005740196.tif 000009
【図９】
0005740196.tif 000010
【図１０】
0005740196.tif 000011
【図１１】
0005740196.tif 000012
【図１２】
0005740196.tif 000013
【図１３】
0005740196.tif 000014
【図１４】
0005740196.tif 000015
【図１５】
0005740196.tif 000016
【図１６】
0005740196.tif 000017
【図１７】
0005740196.tif 000018
【図１８】
0005740196.tif 000019
【図１９】
0005740196.tif 000020
【図２０】
0005740196.tif 000021
【図２１】
0005740196.tif 000022