(57)【特許請求の範囲】
【請求項１】
クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報であって、変更されたページ数を含む変更ページ情報を記憶する記憶手段と、
クライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる第１処理手段と、
クライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる第２処理手段と、
前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させレプリカデータベースをマスターデータベースに同期させる第１実行手段と、
前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる第２実行手段と、
前記変更されたページ数と所定の値との比較結果に基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する判定手段と
を有するレプリケーション実行装置。
【請求項２】
クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を記憶する記憶手段と、
クライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる第１処理手段と、
クライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる第２処理手段と、
前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させてレプリカデータベースをマスターデータベースに同期させる第１実行手段と、
前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる第２実行手段と、
クライアントから受信した前記クエリの種類に基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する判定手段と
を有するレプリケーション実行装置。
【請求項３】
クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を記憶する記憶手段と、
クライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる第１処理手段と、
クライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる第２処理手段と、
前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させてレプリカデータベースをマスターデータベースに同期させる第１実行手段と、
前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる第２実行手段と、
クライアントから受信した前記クエリによるレコードの変更が連続的であるか否かに基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する判定手段と
を有するレプリケーション実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の実施の形態は、レプリケーション実行装置に関する。
【背景技術】
【０００２】
近年、災害時などでハードディスクの故障によるデータ損失を防ぐために、遠隔地にリアルタイムにバックアップをとりたいという要求が高まっており、
データベースを高速に同期することが求められるようになった。データベースの高速同期を実現するためには、サーバ間の通信内容が重要である。
【０００３】
従来のデータベースの高速同期実現技術では、物理コピーにおいて、データを圧縮して送信するとともに、０（ゼロ）クリアして圧縮率を高める方式などが提案されていた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２３３５４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、従来の技術では変更ページが多いと、圧縮計算する範囲が大きくなる、またDELETEは０クリアする処理も必要となり、同期の高速化に問題があった。
【０００６】
本発明は、変更ページ数、クエリの種類等に応じて、２つのレプリケーション実現方法から適した実現方法を選択し実行することによって、変更ページの量やクエリの種類にかかわらず、データベースの高速同期を実現することを目的とする。
【課題を解決するための手段】
【０００７】
一の実施の形態によれば、レプリケーション実行装置が提案される。レプリケーション実行装置は、記憶手段と、第１処理手段と、第２処理手段と、第１実行手段と、第２実行手段と、判定手段を有する。
【０００８】
記憶手段は、クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報であって、変更されたページ数を含む変更ページ情報を記憶する。
【０００９】
第１処理手段はクライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる。
第２処理手段はクライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる。
【００１０】
第１実行手段は、前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させレプリカデータベースをマスターデータベースに同期させる。
【００１１】
第２実行手段は、前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる。
【００１２】
判定手段は、前記変更されたページ数と所定の値との比較結果に基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する。
【００１３】
別の実施の形態によれば、レプリケーション実行装置が提案される。レプリケーション実行装置は、記憶手段と、第１処理手段と、第２処理手段と、第１実行手段と、第２実行手段と、判定手段を有する。
【００１４】
記憶手段は、クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を記憶する。
【００１５】
第１処理手段は、クライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる。
【００１６】
第２処理手段は、クライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる。
【００１７】
第１実行手段は、前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させてレプリカデータベースをマスターデータベースに同期させる。
【００１８】
第２実行手段は、前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる。
【００１９】
判定手段は、クライアントから受信した前記クエリの種類に基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する。
【００２０】
さらに別の実施の形態によれば、レプリケーション実行装置が提案される。レプリケーション実行装置は、記憶手段と、第１処理手段と、第２処理手段と、第１実行手段と、第２実行手段と、判定手段を有する。
【００２１】
記憶手段は、クライアントから受信したクエリ、及びクエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を記憶する。
【００２２】
第１処理手段は、クライアントから受信したクエリについて、コンパイラ層におけるクエリの処理を行うとともに、当該クエリを前記記憶手段に記憶させる。
【００２３】
第２処理手段は、クライアントから受信したクエリについて、ページャー層におけるクエリの処理を行うとともに、当該クエリを処理することによりマスターデータベースの変更されたページに関する情報である変更ページ情報を前記記憶手段に記憶させる。
【００２４】
第１実行手段は、前記記憶手段に記憶されたクエリに基づいて、マスターデータベースの変更をレプリカデータベースに反映させるクエリを複製データベース装置に送信し、前記クエリを複製データベース装置に実行させてレプリカデータベースをマスターデータベースに同期させる。
【００２５】
第２実行手段は、前記記憶手段に記憶された変更ページ情報に基づいて、マスターデータベースの変更されたページのデータを複製データベース装置に送信し、複製データベース装置に変更されたページのデータをレプリカデータベースに反映させることにより、レプリカデータベースをマスターデータベースに同期させる。
【００２６】
判定手段は、クライアントから受信した前記クエリによるレコードの変更が連続的であるか否かに基づいて、前記第１実行手段及び第２実行手段のどちらにレプリカデータベースをマスターデータベースに同期させるのかを判定する。
【図面の簡単な説明】
【００２７】
【図１】本装置を含むデータベースシステムの例を示した図
【図２】本装置の構成例を示すブロック図
【図３】装置の主たる動作であるレプリケーション処理を示すフローチャート
【図４】第１の実施の形態における方法選択及びタイミング判定処理の例を示すフローチャート
【図５】一つの同期処理となる一連のクエリの例を示す図
【図６】図５に示した一連のクエリの例とは別の例を示す図
【図７】クエリ処理時のコンパイラ層処理部の動作例を示したフローチャート
【図８】レプリケーション実行時のコンパイラ層処理部の動作例を示したフローチャート
【図９】レプリケーション実行時の本装置レプリカＤＢ装置とのデータ送受信の例を示すシーケンス図
【図１０】クエリ処理時のページャー層処理部の動作例を示したフローチャート
【図１１】レプリケーション実行時のページャー層処理部の動作例を示したフローチャート
【図１２】ページャー層処理部によるレプリケーション実行時の本装置とレプリカＤＢ装置とのデータ送受信の例を示すシーケンス図
【図１３】第２の実施の形態にかかる本装置の動作例を示すフローチャート
【図１４】第２の実施の形態における方法選択及びタイミング判定処理の例を示すフローチャート
【図１５】一連のクエリの例を示す図
【図１６】クライアントから本装置に送信される一連のクエリの例を示す図
【発明を実施するための形態】
【００２８】
以下、図面を参照して本発明の実施の形態に係るレプリケーション実行装置を説明する。
【００２９】
[０．用語の定義]
（１）レプリケーション
「レプリケーション」とは、あるデータベースとまったく同じ内容の複製（レプリカデータベース（以下、ＤＢと略す）装置）を別のコンピュータ上に作成し、内容を同期させる機能をいう。
【００３０】
（２）ページ
「ページ」とは、ファイルからデータを読み書きする単位をいう。あるデータにアクセスするとき、そのデータを含むページを取得して、ページ内の任意のデータにアクセスする。
【００３１】
（３）ＳＱＬパーサの結果
「ＳＱＬパーサの結果」とは、クエリをコンパイルして生成されるものをいい、ＳＱＬ実行エンジンで実行されるプログラムである。
【００３２】
（４）非決定的なクエリ
「非決定的なクエリ」とは、実行時に定まる関数を含んだクエリをいう。例えば、SYSDATE()システム日付、RAND()ランダム関数、UUID()汎用一意識別子、などである。
（例）INSERT  INTO  ttt  VALUES（SYSDATE（）)
[Ａ．第１の実施の形態]
【００３３】
[Ａ．１．装置の構成例]
[Ａ．１．１．データベースシステムの構成例]
まず、第１の実施の形態にかかるレプリケーション実行装置（以下、「本装置」と呼ぶ）を含むデータベースシステムの例を説明する。図１は本装置を含むデータベースシステムの例を示した図である。データベースシステム１は、１又は複数のクライアント３０と、クライアント３０とネットワーク４０を経由して接続される本装置１０と、本装置１０と通信可能に接続されている１又は複数の複製データベース装置（「レプリカＤＢ装置」とも呼ぶ）２０とを有するシステムである。
【００３４】
クライアント３０は、データベースシステム１のデータベース機能を利用する端末装置である。クライアント３０からのデータベースの変更は、マスターである本装置１０にのみ可能である。本装置１０（マスター）と複製データベース装置２０（スレーブ）とは、マスタースレーブ型の関係になっている。
【００３５】
本装置１０はマスターデータベースを有している。複製データベース装置２０はそれぞれレプリカデータベースを有している。マスターデータベースの更新に応じて、本装置１０は複製データベース装置２０にレプリカデータベースをマスターデータベースに同期させる。
【００３６】
クライアント３０は、本装置１０と通信可能な情報処理装置であって、例えばコンピュータ、移動体通信端末、携帯電話機、タブレット型ＰＣ、ネットワーク家電などの情報処理装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００３７】
複製データベース装置２０は本装置１０と通信可能な情報処理装置であって、例えばコンピュータ、ワークステーション、サーバなどの情報処理装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００３８】
ネットワーク４０は２以上の情報処理装置間でのデータ送受信を可能とする通信網などである。複数の通信網がゲートウエイ等によって接続されて構成される通信網もここでいう「ネットワーク」に含む。なお、図１に示した例は、クライアント３０と本装置１０がネットワーク４０によって接続され、本装置１０と複製データベース装置２０とはネットワーク４０とは別の通信回線により接続される態様を図示しているが、このような接続形態に限定される趣旨ではなく、本装置１０と複製データベース装置２０の接続はどのようなネットワーク（ネットワーク４０とは別でも可）、通信回線によって接続されても本実施の形態は成立する。
【００３９】
データベースシステム１において、本装置１０がクライアント３０からトランザクションの開始を示すBEGINコマンドを受信したときが同期処理の開始であり、本装置１０がこのトランザクションの終了を示すCOMMITコマンドをクライアント３０から受信し、このCOMMITコマンドに応じてマスターデータベースおよびレプリカデータベースの両方のＤＢファイルの更新が完了したとき、同期処理の終了となる。
【００４０】
[Ａ．１．２．レプリケーション実行装置の構成例]
次に、本装置１０の構成例について説明する。本装置１０は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００４１】
本装置１０は、レプリケーションを実行する装置である。より詳しくは本装置１０は主たるデータベースとまったく同じ内容の複製(レプリカＤＢ装置)のデータベースを別のコンピュータ上に作成させ、複製のデータベースの内容を主たるデータベースの内容に同期させる機能を有する装置である。
【００４２】
図２に本装置１０の構成例を示すブロック図を掲げる。本装置１０は、クエリ受信部１００と、コンパイラ層処理部１１０と、ページャー層処理部１２０と、レプリケーションデータ管理部１３０と、データベース部１５０と、データ送受信部１４０とを有する。
【００４３】
クエリ受信部１００は、ネットワーク４０を経由してクライアント３０に接続される。また、クエリ受信部１００はコンパイラ層処理部１１０に接続している。
【００４４】
コンパイラ層処理部１１０はページャー層処理部１２０に接続されており、ページャー層処理部１２０はデータベース部１５０に接続されている。また、コンパイラ層処理部１１０及びページャー層処理部１２０はともにレプリケーションデータ管理部１３０及びデータ送受信部１４０に接続されている。データ送受信部１４０は各複製データベース装置２０に直接又はネットワークを経由して各複製データベース装置２０に接続されている。
【００４５】
コンパイラ層処理部１１０は、レプリケーション方法選択部１６０とコンパイラ層レプリケーション実行部１７０を有している。
ページャー層処理部１２０はページャー層レプリケーション実行部１８０を有している。
【００４６】
なお、レプリケーションデータ管理部１３０は各実施の形態の記憶手段に相当し、コンパイラ層処理部１１０は各実施の形態の第１処理手段に相当し、ページャー層処理部１２０は各実施の形態の第２処理手段に相当し、コンパイラ層レプリケーション実行部１７０は各実施の形態の第１実行手段に相当し、ページャー層レプリケーション実行部１８０は各実施の形態の第２実行手段に相当し、レプリケーション方法選択部１６０は各実施の形態の判定手段に相当する。
【００４７】
なお、これら構成要素は本装置１０の機能を機能ごとにまとめてブロックとして捉えたものであり、本装置１０が各構成要素に対応するモジュール、装置、回路、部品などの物理的構成要素を備えていることを意味するわけではない。
【００４８】
ここで「接続されている」とは、データ、情報、命令などの送受信、授受が可能な状態になっていることをいい、配線で連結されているような物理的な接続に限られる意味ではない。
【００４９】
[Ａ．１．３．構成要素の説明]
次に、図２に示した本装置１０の構成要素について説明する。
クエリ受信部１００は、クライアント３０からネットワーク４０を経由して送信されたクエリを受信する機能を有する。クエリ受信部１００は、受信したクエリをコンパイラ層処理部１１０に送る。
【００５０】
コンパイラ層処理部１１０は、コンパイラ層におけるクエリの処理を行う機能と、論理コピーによるレプリケーション実現方法（以下、「コンパイラ層レプリケーション処理」という）を行う機能を有する。コンパイラ層におけるデータベースの更新は、クエリをパースしてSQL実行エンジンで実行するプログラムを作成し、そのSQLパーサの結果（プログラム）を実行するものである。コンパイラ層処理部１１０は、クライアント３０から受信したＳＱＬ文をレプリカＤＢ装置２０に送信し、レプリカＤＢ装置２０にこのＳＱＬ文を実行させることにより、データベースの同期を実現する。コンパイラ層レプリケーション処理の利点は、もう一方のページャー層レプリケーション処理（後述）に比べて、本装置１０とレプリカＤＢ装置２０間で送受信するデータ量が小さいという点にある。一方、コンパイラ層レプリケーション処理では、非決定的なクエリに対応するための処理が別途必要となり、他の手法に比べてレプリカＤＢ装置２０での計算量が多く、コンパイル・実行は、マスターとレプリカＤＢ装置２０で二度やるというデメリットがある。
【００５１】
コンパイラ層処理部１１０は、レプリケーション方法選択部１６０とコンパイラ層レプリケーション実行部１７０とを有する。
レプリケーション方法選択部１６０は、クエリ受信部１００から取得したクエリに基づいて、２種類のレプリケーション処理からいずれか一方を選択し、その選択に応じてコンパイラ層レプリケーション実行部１７０又はページャー層レプリケーション実行部１８０のいずれかにレプリケーションの実行を命令する機能を有する。
【００５２】
コンパイラ層レプリケーション実行部１７０は、レプリケーション方法選択部１６０がコンパイラ層レプリケーション処理を選択した場合、コンパイラ層におけるデータベースの更新を実行する機能を有する。
【００５３】
ページャー層処理部１２０は物理コピーによるレプリケーション実現方法（以下、「ページャー層レプリケーション処理」という）を行う機能を有する。ページャー層におけるデータベースの更新は、ＤＢファイルにページ単位でアクセスして更新する。ページャー層処理部１２０はマスターデータベースのＤＢファイルで、変更されたページのデータをレプリカＤＢ装置２０に送信し、レプリカＤＢ装置２０はレプリカデータベースのＤＢファイルにおいて変更されたページを書き換える。ページャー層レプリケーション処理では、レプリカＤＢ装置２０はコンパイルおよび実行を省略できるため、処理時間を短縮することが可能であるが、対象となるページ全体のデータがレプリカＤＢ装置２０に送信されるため、当該ページに含まれる、変更のないデータも送信することになるため、ページ内の変更箇所が少ないほど不要なデータの送信が発生するというデメリットがある。そのため、多くのページを書き換えるＵＰＤＡＴＥ，ＤＥＬＥＴＥのようなクエリを処理するには適さない場合がある。  
ページャー層処理部１２０は、ページャー層でのクエリの処理を行う機能を有する。ページャー層処理部１２０はページャー層レプリケーション実行部１８０を有する。
【００５４】
ページャー層レプリケーション実行部１８０は、レプリケーション方法選択部１６０がページャー層レプリケーション処理を選択した場合、ページャー層におけるデータベースの更新を実行する機能を有する。
【００５５】
レプリケーションデータ管理部１３０は、レプリケーション方法選択部１６０によるレプリケーション方法選択の際に必要なデータを管理する機能を有する。なお、本実施の形態における「レプリケーション方法選択の際に必要なデータ」とは、マスターデータベースのＤＢファイルの変更されたページに関する情報である変更ページ情報である。変更ページ情報には変更されたページの数が含まれる。
【００５６】
データベース部１５０は、データを一定のルールで蓄積し、必要に応じて取り出し提供する機能を有する。データベース部１５０はマスターデータベースとなるＤＢファイル（マスターＤＢファイル）を記憶している。なお、データベース部１５０は必ずしも本装置１０内に設けられている必要はなく、本装置１０とネットワーク等で接続された別の装置内に設けられていても、もちろんかまわない。
【００５７】
データ送受信部１４０は、各部から取得したデータを所定の通信手順に従って複製データベース装置２０に送信するための信号を生成し送信するとともに、複製データベース装置２０から受信した信号をデータに変換して各部に渡す機能を有する。
【００５８】
[Ａ．２．本装置の動作例]
次に、第１の実施の形態にかかる本装置１０の動作例について図３を参照しながら説明する。図３は本装置１０の主たる動作であるレプリケーション処理を示すフローチャートである。
【００５９】
本装置１０、より詳しくはクエリ受信部１００がクライアント３０からクエリを受信すると、クエリ受信部１００は受信したクエリをコンパイラ層処理部１１０に渡す。
【００６０】
クエリを取得したコンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、方法選択及びタイミング判定処理を行う（Ｓ１０１）。「方法選択及びタイミング判定処理」は、コンパイラ層レプリケーション処理とページャー層レプリケーション処理のいずれを選択するか、及びレプリケーションを実行するタイミングが到来しているか、について判定を行い判定結果を出力する処理である。第１の実施の形態における方法選択及びタイミング判定処理の内容については後述する。
【００６１】
次に、レプリケーション方法選択部１６０は、ステップＳ１０１の処理でコンパイラ層レプリケーション処理を実行すると決定した場合（Ｓ１０２、Ｙｅｓ）、レプリケーション方法選択部１６０はコンパイラ層レプリケーション実行部１７０にコンパイラ層レプリケーション処理の実行を命令し、コンパイラ層レプリケーション実行部１７０はデータ送受信部１４０を経由してレプリカＤＢ装置２０にクエリを送信する（Ｓ１０３）。クエリを受信したレプリカＤＢ装置２０は、マスターデータベースであるデータベース部１５０のマスターＤＢファイルとの同期を実現するように、そのレプリカＤＢ装置２０が有するレプリカデータベースのＤＢファイルをクエリの内容に応じて更新する（図略）。更新を完了したレプリカＤＢ装置２０は、本装置１０に適用完了メッセージを送信する（図略）。
【００６２】
ステップＳ１０３の後、コンパイラ層処理部１１０は前記クエリに基づく実行計画を実行（Engine層、Pager層での処理）し、データベース部１５０のマスターＤＢファイルをクエリの内容に応じて更新する（Ｓ１０５）。
【００６３】
その後本装置１０、より詳しくはコンパイラ層処理部１１０はレプリカＤＢ装置２０からの適用完了メッセージの受信を待ち受け、適用完了メッセージ受信を確認する（Ｓ１０６）と、前述のステップＳ１０１に戻り、クライアント３０からの新たなクエリの受信に備える。
【００６４】
一方、ステップＳ１０２において、レプリケーション方法選択アルゴリズムの実行の結果ページャー層レプリケーション処理を実行すると決定された場合（Ｓ１０２、Ｎｏ）、レプリケーション方法選択部１６０はページャー層処理部１２０、より詳しくはページャー層レプリケーション実行部１８０にページャー層レプリケーション処理の実行を命令し、ページャー層レプリケーション実行部１８０はデータ送受信部１４０を経由してレプリカＤＢ装置２０にマスターデータベースにおいて更新されたページである更新ページを送信する（Ｓ１０４）。更新ページを受信したレプリカＤＢ装置２０は、マスターデータベースとの同期を実現するように、そのレプリカＤＢ装置２０が有するレプリカデータベースのＤＢファイルに更新ページの内容を書き込み（図略）、データベースの更新を行う。更新を完了したレプリカＤＢ装置２０は、本装置１０に適用完了メッセージを送信する（図略）。その後前述のステップＳ１０５に進み、実行計画を実行する（Ｓ１０５）。
以上で、本装置１０の主たる動作例であるレプリケーション処理の説明を終了する。
【００６５】
[Ａ．２．２．方法選択及びタイミング判定処理の例]
前述の方法選択及びタイミング判定処理（Ｓ１０１）の内容について図４を参照しながら述べる。図４は第１の実施の形態における方法選択及びタイミング判定処理の例を示すフローチャートである。
【００６６】
方法選択及びタイミング判定処理において、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は初期化処理を実行する（Ｓ２０１）。初期化処理では、変更ページ数を格納する変数ｍ、変更ページ番号を格納する配列ｐ[]、変更されたレコード番号を格納する配列ｒをクリアする。
【００６７】
次に、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０はクエリ受信部１００からクエリを受け付ける（Ｓ２０２）。
【００６８】
次にコンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は直近のステップＳ２０２において受け付けたクエリがトランザクションの終了を示すＣＯＭＭＩＴか否かを判定する（Ｓ２０３）。クエリがＣＯＭＭＩＴでないと判定した場合（Ｓ２０３、Ｎｏ）、コンパイラ層処理部１１０は当該クエリを実行するとともにクエリの実行結果に合わせて各変数ｒ、ｐ、ｍの値を更新する（Ｓ２０４）。その後ステップＳ２０２に戻り新たなクエリの受付を待つ。
【００６９】
一方、ステップＳ２０３において、クエリがＣＯＭＭＩＴであると判定した場合（Ｓ２０３、Ｙｅｓ）、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、変更ページ数を格納する変数ｍが値Ｍを超えているか否かを判定する（Ｓ２０５）。値Ｍはコンパイラ層レプリケーション処理がページャー層レプリケーション処理より有利となる変更ページ数であって、あらかじめユーザや設計者によって設定されたり、プログラム等によって自動的、半自動的に設定される値である。例えば、値Ｍは、クエリの処理時間やデータの通信時間をもとに設定されてもよい。
【００７０】
値Ｍを決定する手法の一例を述べる。
【数１】
0006000608.tif 000002
上記式１において、左辺はページャー層レプリケーション処理に要する時間であり、右辺はコンパイラ層レプリケーション処理に要する時間である。
但し、
tpage:１ページあたりの送受信時間
tsend：クエリ送信時間
tselect：SELECT処理時間
tupdate：更新系クエリ処理時間
tdata：クエリ送信時間
n：クエリ数
m:ページ数
式１を変形して以下の式２を得る。
【数２】
0006000608.tif 000003
上記式２の左辺の各要素に値を入れて得られるｍの値をＭとする。
【００７１】
図４に戻り、方法選択及びタイミング判定処理の説明を続ける。  
ステップＳ２０５において変更ページ数を格納する変数ｍが値Ｍを超えていないと判定した場合（Ｓ２０５、Ｎｏ）、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、ページャー層レプリケーション処理を選択し、これを実行することを示す情報（例えば、ページャー層レプリケーション処理実行フラグ）を記憶する。その後方法選択及びタイミング判定処理を終了する。
【００７２】
一方、ステップＳ２０５において変更ページ数を格納する変数ｍが値Ｍを超えていると判定した場合（Ｓ２０５、Ｙｅｓ）、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、コンパイラ層レプリケーション処理を選択し、これを実行することを示す情報（例えば、コンパイラ層レプリケーション処理実行フラグ）を記憶する。その後方法選択及びタイミング判定処理を終了する。
【００７３】
[Ａ．２．２．１．レプリケーションのために追加で必要となる時間]
次に、本実施の形態におけるレプリケーションのために追加で必要となる時間について説明する。更新ページが少ない場合の例として、図５に一つの同期処理となる一連のクエリの例を示す。この同期処理では変更されるページは１ページである。
【００７４】
従来の同期手法ではページャー層を使用して同期処理を行い、同じく本実施の形態でもページャー層レプリケーション処理により同期処理を行う。  
ページャー層レプリケーション処理の場合の追加必要時間をt_P_needとすると
t_P_need = tpage× m + tsend × 2
である
但し、上記式において
tpage：１ページ当たりの送受信時間
m：変更されたページ数
tsend：クエリ（COMMIT）の送信時間
である。
【００７５】
なお、図５に示す一連のクエリをコンパイラ層レプリケーション処理により同期処理する場合の追加必要時間をt_c_needとすると、
t_c_need= tsend× 5 + tdata + (tselect + tupdate) × n
但し、上記式において
tsend：クエリの送信時間
tselect：SELECT処理時間
tupdate：更新系クエリ処理時間
tdata：クエリ送信時間
n：クエリ数 
である。
【００７６】
次に、更新ページが多数である場合の例として、図５に示した一連のクエリの例とは別の例を図６に示す。このクエリによる同期処理における変更ページ数は１００ページである。
【００７７】
従来手法ではこのクエリをページャー層レプリケーション処理により処理することになる。その場合のページャー層レプリケーション処理の場合の追加必要時間をt_P_needとすると
t_P_need = tpage× m + tsend × 2 =200.40
である
但し、上記式において
tpage：１ページ当たりの送受信時間=2.00
m：変更されたページ数=100
tsend：クエリ（COMMIT）の送信時間=0.20
とした。
【００７８】
一方、第１の実施の形態では、この一連のクエリをコンパイラ層レプリケーション処理により同期処理する。この場合の追加必要時間をt_c_needは
t_c_need= tsend× 5 + tdata + (tselect + tupdate) × n=47.20
但し、上記式において
tsend：クエリの送信時間=0.20
tselect：SELECT処理時間=0.10
tupdate：更新系クエリ処理時間=0.36
tdata：クエリ送信時間＝0.20
n：クエリ数=100
である。
【００７９】
上述の例に示すように、従来手法に比べて第１の実施の形態は追加必要時間を大きく短縮することができる。
【００８０】
[Ａ．２．３．コンパイラ層処理部の動作例]
本装置１０のコンパイラ層処理部１１０の動作例（コンパイラ層レプリケーション処理）について説明する。
【００８１】
[Ａ．２．３．１．クエリ処理時の動作例]
図７にクエリ処理時のコンパイラ層処理部１１０の動作例を示したフローチャートを掲げる。クエリ処理は、コンパイラ層処理部１１０は受け付けたクエリを処理し（Ｓ３０１）、その後クエリ処理を終了する。
【００８２】
[Ａ．２．３．２．レプリケーション実行時の動作例]
次に、レプリケーション実行時のコンパイラ層処理部１１０、より詳しくはコンパイラ層レプリケーション実行部１７０の動作例を示したフローチャートを図８に掲げる。レプリケーション実行時において、コンパイラ層処理部１１０より詳しくはコンパイラ層レプリケーション実行部１７０はまず、記憶されたクエリ情報から送信用データを生成する（Ｓ４０１）。コンパイラ層処理部１１０より詳しくはコンパイラ層レプリケーション実行部１７０は、コンパイラ層レプリケーション処理の実行においてクエリをレプリカＤＢ装置２０に送信し、そのレプリカＤＢ装置２０にこのクエリを実行させるのであるが、クエリが非決定的なクエリである場合には、マスターである本装置１０がクエリを受け取った時点では値が決定していないため、そのままレプリカＤＢ装置２０にクエリを送信できない。そのため、マスターである本装置１０がクエリを実行し、またクエリをレプリケーションデータ管理部１３０に記憶させる。本装置１０はCOMMIT処理時にレプリケーションデータ管理部１３０に記憶された変更されたレコードをSELECTし、決定した値を取得し、その結果をもとにINSERT（あるいはUPDATE）クエリを作成して、レプリカＤＢ装置２０に伝送する（Ｓ４０２）。
【００８３】
また、コンパイラ層処理部１１０は受け付けたクエリを処理する（Ｓ４０３）。
次にコンパイラ層処理部１１０、より詳しくはコンパイラ層レプリケーション実行部１７０はステップＳ４０２において送信したデータをレプリカＤＢ装置２０が適用完了したことを示す適用完了通知を待ち、適用完了通知を受信する（Ｓ４０４）とレプリケーション時の処理を終了する。
【００８４】
[Ａ．２．３．３．レプリケーション実行時の具体例]
コンパイラ層処理部１１０のレプリケーション実行時の、マスターである本装置とレプリカＤＢ装置２０とのデータ送受信の例を図９に示す。
【００８５】
クライアント３０からBEGINが本装置１０に送信される（Ｓ５０１）。すると本装置１０、より詳しくはコンパイラ層処理部１１０はレプリカＤＢ装置にBEGINを送信する（Ｓ５０２）。この送信に要する時間はtsendである。BEGINを受信したレプリカＤＢ装置２０はBEGINを処理し（Ｓ５０３）、トランザクションを開始する。本装置１０、より詳しくはコンパイラ層処理部１１０もBEGINを処理し、トランザクションを開始する（Ｓ５０４）。
【００８６】
BEGINを処理したレプリカＤＢ装置２０は本装置１０にBEGINを処理したことを通知する（Ｓ５０５）。この送信に要する時間はtsendである。
次に、クライアント３０からINSERTが本装置１０に送信される（Ｓ５０６）。本装置１０、より詳しくはコンパイラ層処理部１１０はINSERTを処理する（Ｓ５０７）。ここではINSERTが非決定的クエリであるものとする。そのため、本装置１０、より詳しくはコンパイラ層処理部１１０はこのクエリINSERTを実行して（Ｓ５０７）、変更されたレコードをレプリケーションデータ管理部１３０に記憶させる。
【００８７】
次にさらに新たなINSERTがクライアント３０から本装置１０に送信されたものとする（Ｓ５０８）。本装置１０、より詳しくはコンパイラ層処理部１１０はこのクエリINSERTを実行して、変更されたレコードをレプリケーションデータ管理部１３０に記憶させる（Ｓ５０９）。
【００８８】
次にCOMMITがクライアント３０から本装置１０に送信されたものとする（Ｓ５１０）。本装置１０、より詳しくはコンパイラ層処理部１１０はレプリケーションデータ管理部１３０に記憶された変更されたレコードのそれぞれについてSELECTの処理を行い（Ｓ５１１）決定した値を取得する。このSELECT処理に要する時間をtselectとすると、ステップＳ５１１に要する時間はtselect×nである（nはSELECT処理で処理されたクエリ数）。次にその結果をもとにINSERT（あるいはUPDATE）クエリを作成してレプリカＤＢ装置２０に送信する（Ｓ５１２）。このデータ送信に要する時間はtdataである。
【００８９】
ステップＳ５１２で送信されたクエリを受信すると、レプリカＤＢ装置２０はそれぞれのクエリ（この例ではINSERT）を処理する（Ｓ５１３）。この例ではステップＳ５０６、Ｓ５０８に対応する２つのINSERTがレプリカＤＢ装置２０でも処理されることになる。そのため、ステップＳ５１３で要する時間はtupdate×nである。但し、tupdateは更新系クエリ処理時間、nは処理されたクエリ数である。
【００９０】
ステップＳ５１３を終了すると、レプリカＤＢ装置２０は本装置１０に処理終了を通知する（Ｓ５１４）。この通知送信に要する時間はtsendである。
この通知を受信した本装置１０、より詳しくはコンパイラ層処理部１１０はステップＳ５１０で受信したCOMMITに応じて、レプリカＤＢ装置２０にCOMMITを送信する（Ｓ５１５）。このCOMMIT送信に要する時間はtsendである。
【００９１】
次に本装置１０、より詳しくはコンパイラ層処理部１１０はCOMMITの処理を行う（Ｓ５１７）。これでクライアント３０と本装置１０間でのトランザクションは終了する。
【００９２】
一方、レプリカＤＢ装置２０もCOMMITの処理を行う（Ｓ５１６）。これで本装置１０とレプリカＤＢ装置２０間でのトランザクションも終了する。次にレプリカＤＢ装置２０は本装置１０、より詳しくはコンパイラ層処理部１１０に適用完了の通知を送信する（Ｓ５１８）。この通知送信に要する時間はtsendである。以上でコンパイラ層レプリケーション処理におけるレプリケーション処理は終了する。
【００９３】
このレプリケーション処理において、レプリケーションのために追加で必要となる時間は
tsend×5+ tdata+(tselect+ tupdate)×n
となる。
【００９４】
[Ａ．２．４．ページャー層処理部の動作例]
次に、本装置１０のページャー層処理部１２０の動作例（ページャー層レプリケーション処理）について説明する。
【００９５】
[Ａ．２．４．１．クエリ処理時の動作例]
図１０にクエリ処理時のページャー層処理部１２０の動作例を示したフローチャートを掲げる。クエリ処理において、ページャー層処理部１２０は受け付けたクエリに基づいて該当ページを変更する（Ｓ６０１）。次に、ページャー層処理部１２０はページャー層で処理するクエリか否かを判定する（Ｓ６０２）。ページャー層で処理するクエリでないと判定した場合（Ｓ６０２，Ｎｏ）、ページャー層処理部１２０はクエリ処理をそのまま終了する。一方、ページャー層で処理するクエリであると判定した場合（Ｓ６０２，Ｙｅｓ）、ページャー層処理部１２０は変更ページ情報をレプリケーションデータ管理部１３０に記憶させ（Ｓ６０３）、クエリ処理を終了する。
【００９６】
[Ａ．２．４．２．レプリケーション実行時の動作例]
次に、レプリケーション実行時のページャー層処理部１２０の動作例を示したフローチャートを図１１に掲げる。ページャー層レプリケーション処理では、本装置１０は変更されたページをレプリカＤＢ装置２０に送信し、レプリカＤＢ装置２０が変更されたページにより直接ＤＢファイルを上書きする。非決定的なクエリについては、本装置１０がページを変更する時点で値が決定しているため、非決定的なクエリについて対応方法を採る必要はない。コミット時、マスターである本装置１０がページ単位で書き込みする際に、そのページ内容をレプリカＤＢ装置２０に伝送する。
【００９７】
レプリケーション実行時において、本装置１０、より詳しくはページャー層処理部１２０はレプリケーションデータ管理部１３０に記憶された変更ページ情報から送信用データを生成する（Ｓ７０１）。本装置１０、より詳しくはページャー層処理部１２０は送信用データをレプリカＤＢ装置２０に送信する（Ｓ７０２）。
また、ページャー層処理部１２０は受け付けたクエリを処理する（Ｓ７０３）。
【００９８】
次にページャー層処理部１２０は、レプリカＤＢ装置２０が適用完了したことを示す適用完了通知を待ち、適用完了通知を受信する（Ｓ７０４）。適用完了通知を受信すると、本装置１０、より詳しくはページャー層処理部１２０はレプリケーション時の処理を終了する。
【００９９】
[Ａ．２．４．３．レプリケーション実行時の具体例]
ページャー層処理部１２０によるレプリケーション実行時の、マスターである本装置１０とレプリカＤＢ装置２０とのデータ送受信の例を図１２に示す。
【０１００】
まずクライアント３０からBEGINが本装置１０に送信される（Ｓ８０１）。すると本装置１０、より詳しくはページャー層処理部１２０はBEGINを処理し、トランザクションを開始する（Ｓ８０２）。
【０１０１】
次に、クライアント３０からINSERTが本装置１０に送信される（Ｓ８０３）。本装置１０、より詳しくはページャー層処理部１２０はINSERTを処理し、このクエリINSERTを実行して変更されたページを示す情報（変更レコード情報）をレプリケーションデータ管理部１３０に記憶させる（Ｓ８０４）。
【０１０２】
次にさらに新たなINSERTがクライアント３０から本装置１０に送信されたものとする（Ｓ８０５）。本装置１０、より詳しくはページャー層処理部１２０はこのクエリINSERTを実行して、変更ページ情報をレプリケーションデータ管理部１３０に記憶させる（Ｓ８０６）。
【０１０３】
次にCOMMITがクライアント３０から本装置１０に送信されたものとする（Ｓ８０７）。  本装置１０、より詳しくはページャー層処理部１２０はレプリケーションデータ管理部１３０に記憶された変更ページ情報に基づいて、変更されたページのデータをレプリカＤＢ装置２０に送信する（Ｓ８０８）。１ページ当たりデータ送信に要する時間はtpageとすると、ステップＳ０８に要する時間はtpage×ｍ（但し、ｍは送信されるページ数）である。
【０１０４】
ステップＳ８１３で送信された変更されたページのデータを受信すると、レプリカＤＢ装置２０は受信確認通知を本装置１０に送信する（Ｓ８０９）。
この受信確認通知を受信した本装置１０、より詳しくはページャー層処理部１２０はステップＳ８０７で受信したCOMMITに応じて、レプリカＤＢ装置２０にCOMMITを送信する（Ｓ８１０）。このCOMMIT送信に要する時間はtsendである。
【０１０５】
次に本装置１０、より詳しくはページャー層処理部１２０はCOMMITの処理を行う（Ｓ８１１）。これでクライアント３０と本装置１０間でのトランザクションは終了する。
一方、レプリカＤＢ装置２０もCOMMITの処理を行う（Ｓ８１２）。これで本装置１０とレプリカＤＢ装置２０間でのトランザクションも終了する。次にレプリカＤＢ装置２０は本装置１０、より詳しくはページャー層処理部１２０に適用完了の通知を送信する（Ｓ８１３）。この通知送信に要する時間はtsendである。以上でページャー層レプリケーション処理におけるレプリケーション処理は終了する。
【０１０６】
この例に示すページャー層レプリケーション処理において、レプリケーションのために追加で必要となる時間は
tpage×m + tsend×2
となる。
【０１０７】
[Ｂ．第２の実施の形態]
次に第２の実施の形態について説明する。第１の実施の形態が変更されたページ数ｍに基づいて、レプリケーション方法選択を行うのに対して、第２の実施の形態はクエリの種類によってレプリケーション方法選択を行う点で異なる。
【０１０８】
[Ｂ．１．装置の構成例]
第２の実施の形態にかかる本装置１０、本装置１０を含むデータベースシステム１の構成、構成要素の機能については、第１の実施の形態と同様であるのでそれらの説明は省略する。
【０１０９】
[Ｂ．２．装置の動作例]
次に、第２の実施の形態にかかる本装置１０の主たる動作であるレプリケーション処理の例について図１３を参照しながら説明する。図１３は第２の実施の形態にかかる本装置１０の動作例を示すフローチャートである。
【０１１０】
本装置１０、より詳しくはクエリ受信部１００がクライアント３０からクエリを受信すると、クエリ受信部１００は受信したクエリをコンパイラ層処理部１１０に渡す（Ｓ９０１）。
【０１１１】
クエリを取得したコンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、方法選択及びタイミング判定処理を行う（Ｓ９０２）。「方法選択及びタイミング判定処理」は、コンパイラ層レプリケーション処理とページャー層レプリケーション処理のいずれを選択するか、及びレプリケーションを実行するタイミングが到来しているか、について判定を行い判定結果を出力する処理である。第２の実施の形態における方法選択及びタイミング判定処理の内容については後述する。
【０１１２】
次に、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、前述のステップＳ９０１で受け付けたクエリが更新系クエリか否かを判定する（Ｓ９０３）。当該クエリが更新系クエリではないと判定した場合（Ｓ９０３、Ｎｏ）、コンパイラ層処理部１１０が当該クエリに応じて生成された実行計画を実行する（Ｓ９１０）。その後前述のステップＳ９０１に戻り、新たなクエリの受信に備える。
【０１１３】
一方、ステップＳ９０３において当該クエリが更新系クエリであると判定した場合（Ｓ９０３、Ｙｅｓ）、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０はレプリケーション実行タイミングが成立しているか否かを判定する（Ｓ９０４）。レプリケーション実行タイミングが成立していないと判定した場合（Ｓ９０４、Ｎｏ）、コンパイラ層処理部１１０が当該クエリに応じて生成された実行計画を実行する（Ｓ９１０）。その後前述のステップＳ９０１に戻り、新たなクエリの受信に備える。
【０１１４】
一方、ステップＳ９０４においてレプリケーション実行タイミングが成立していると判定した場合（Ｓ９０４、Ｙｅｓ）であって、ステップＳ９０１の処理においてコンパイラ層レプリケーション処理を実行すると決定されている場合（Ｓ９０５、Ｙｅｓ）、コンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０はコンパイラ層レプリケーション実行部１７０に同期の実行を命令し、コンパイラ層レプリケーション実行部１７０はデータ送受信部１４０を経由してレプリカＤＢ装置２０にレプリケーションデータ管理部１３０に記憶されているクエリを送信する（Ｓ９０６）。クエリを受信したレプリカＤＢ装置２０は、マスターデータベースである本装置１０データベース部１５０のＤＢファイルとの同期を実現するように、そのレプリカＤＢ装置２０が有しているレプリカデータベースのＤＢファイルをクエリの内容に応じて更新する（図略）。更新を完了したレプリカＤＢ装置２０は、本装置１０に適用完了メッセージを送信する（図略）。
【０１１５】
次に、コンパイラ層処理部１１０は実行計画を実行（Engine層、Pager層での処理）し、データベース部１５０のＤＢファイルをクエリの内容に応じて更新する（Ｓ９０８）。その後レプリカＤＢ装置２０からの適用完了メッセージの受信を待ち受け、適用完了メッセージ受信を確認する（Ｓ９０９）と、前述のステップＳ９０１に戻り、クライアント３０からの新たなクエリの受信に備える。
【０１１６】
一方、ステップＳ９０５において、コンパイラ層レプリケーション処理ではない、すなわちページャー層レプリケーション処理を実行すると決定されている場合（Ｓ９０５、Ｎｏ）、レプリケーション方法選択部１６０はページャー層レプリケーション実行部１８０にページャー層レプリケーション処理の実行を命令し、ページャー層レプリケーション実行部１８０はデータ送受信部１４０を経由してレプリカＤＢ装置２０に更新ページのデータを送信する（Ｓ９０７）。更新ページのデータはレプリケーションデータ管理部１３０に記憶されている情報に基づいて選択される。更新ページのデータを受信したレプリカＤＢ装置２０は、マスターデータベースとの同期を実現するように、そのレプリカＤＢ装置２０が有するレプリカデータベースのＤＢファイルに更新ページの内容を書き込み（図略）、データベースの更新を行う。更新を完了したレプリカＤＢ装置２０は、本装置１０に適用完了メッセージを送信する（図略）。その後前述のステップＳ９０８に進む。
以上で、第２の実施の形態にかかる本装置１０の動作例であるレプリケーション処理の説明を終了する。
【０１１７】
[Ｂ．２．２．方法選択及びタイミング判定処理の例]
第２の実施の形態における方法選択及びタイミング判定処理（図１３、Ｓ９０２参照）の内容について図１４を参照しながら述べる。図１４は第２の実施の形態における方法選択及びタイミング判定処理の例を示すフローチャートである。
【０１１８】
方法選択及びタイミング判定処理において、まずコンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、ステップＳ９０１（図１３参照）で受け付けたクエリの種類を判定する（Ｓ１００１）。具体例をあげると、クエリの種類に応じた値を変数ｔ’に格納する。例えば以下のような対応関係で変数ｔ’に値を格納する：
INSERT:1
UPDATE or DELETE:2
COMMIT:3
SELECT:4
【０１１９】
次に、レプリケーション方法選択部１６０は当該クエリがCOMMITであるか、又は従前のクエリと同じ種類であるか否かを判定する（Ｓ１００２）。当該クエリがSELECTであるか、又は従前のクエリと同じ種類であると判定した場合（Ｓ１００２、Ｙｅｓ）、レプリケーション方法選択部１６０はそのまま方法選択及びタイミング判定処理を終了する。レプリケーション実行タイミングでないからである。
【０１２０】
一方、ステップＳ１００２において当該クエリがSELECTでなく、且つ従前のクエリと同じ種類でないと判定した場合（Ｓ１００２、Ｎｏ）、レプリケーション方法選択部１６０は、当該クエリの直前に受信したクエリの種類を判定する（Ｓ１００３）。
【０１２１】
当該クエリの直前に受信したクエリの種類がINSERTであると判定した場合（Ｓ１００３，”１”）、レプリケーション方法選択部１６０は、ページャー層レプリケーション処理を選択する（Ｓ１００４）。その後、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。レプリケーション実行タイミングであるからである。
【０１２２】
当該クエリの直前に受信したクエリの種類がUPDATE又はDELETEであると判定した場合（Ｓ１００３，”２”）、レプリケーション方法選択部１６０は、コンパイラ層レプリケーション処理を選択する（Ｓ１００５）。その後、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。レプリケーション実行タイミングであるからである。
【０１２３】
当該クエリの直前に受信したクエリの種類がCOMMIT又はSELECTであると判定した場合（Ｓ１００３，”３”、”４”）、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。レプリケーション実行タイミングであるからである。
【０１２４】
[レプリケーションのために追加で必要となる時間]
次に、本実施の形態におけるレプリケーションのために追加で必要となる時間について説明する。更新ページが多数である場合の例として、一連のクエリの例を図１５に示す。このクエリに応じた同期処理における変更ページ数は１００＋１ページである。
【０１２５】
従来手法ではこのクエリをページャー層レプリケーション処理により処理することになる。その場合のページャー層同期処理の場合の追加必要時間をt_P_needとすると
t_P_need = tpage× m + tsend × 2 =202.40
である
但し、上記式において
tpage：１ページ当たりの送受信時間=2.00
m：変更されたページ数=100+1
tsend：クエリ（COMMIT）の送信時間=0.20
とした。
【０１２６】
一方、第２の実施の形態では、この一連のクエリのINSERT部分はページャー層レプリケーション処理により、UPDATE部分はコンパイラ層レプリケーション処理により同期処理する。この場合の追加必要時間をt_#2_needは
t_#2_need= t_p_need+ t_c_need=2.20+47.20=49.40
t_p_need= tpage× m + tsend × 2 =2.20
但し、上記式において
tpage：１ページ当たりの送受信時間=2.00
m：変更されたページ数=0
tsend：クエリ（COMMIT）の送信時間=0.20
t_c_need= tsend× 5 + tdata + (tselect + tupdate) × n=47,20
但し、上記式において
tsend：クエリの送信時間=0.20
tselect：SELECT処理時間=0.10
tupdate：更新系クエリ処理時間=0.36
tdata：クエリ送信時間＝0.20
n：クエリ数=100
である。
上述の例に示すように、第２の実施の形態は従来手法に比べて追加必要時間を大きく短縮することができる。
【０１２７】
［Ｂ．３．具体例］
図１６に、クライアント３０から本装置１０に送信される一連のクエリの例を示す。クエリはBEGINからCOMMITまでの９つのクエリからなり、図に示す１から９の順に送信されるものとする。
【０１２８】
本装置１０は４のINSERTから５のDELETEにクエリの種類が変わるタイミングで、２から４までの３つのINSERTについてページャー層レプリケーション処理を実行する。
【０１２９】
次に、５のDELETEから８のUPDATEについて、９のCOMMITを受け付けたタイミングでコンパイラ層レプリケーション処理を実行する。
【０１３０】
[Ｃ．第３の実施の形態]
次に第３の実施の形態を説明する。第２の実施の形態がクエリの種類に基づいて、コンパイラ層レプリケーション処理とページャー層レプリケーション処理のいずれかを選択してレプリケーションを実行するのに対して、第３の実施の形態はレコードの変更が連続的か離散的（非連続的）かによりコンパイラ層レプリケーション方法とページャー層レプリケーション処理のいずれかを選択してレプリケーションを実行する点で異なっている。
【０１３１】
[Ｃ．１．装置の構成]
第３の実施の形態にかかる本装置１０の構成は、第１の実施の形態、第２の実施の形態と同様なので、詳細な説明は省略する。
【０１３２】
[Ｃ．２．装置の動作]
第３の実施の形態にかかる本装置１０の動作は、基本的に第２の実施の形態のそれと同様であるが、方法選択及びタイミング判定処理において、レコードの変更が連続的か離散的かによりコンパイラ層レプリケーション処理とページャー層レプリケーション処理のいずれかを選択する処理を行う。その他の処理については第２の実施の形態と同様であるので、それらの説明は省略する。
【０１３３】
[Ｃ．１．１．方法選択及びタイミング判定処理の例]
以下、第３の実施の形態における方法選択及びタイミング判定処理の例を説明する。第３の実施の形態における方法選択及びタイミング判定処理（Ｓ３０２）の内容について図１４を参照しながら述べる。図１４は第２の実施の形態における方法選択及びタイミング判定処理の例を示すフローチャートであるが、第３の実施の形態においても同様の処理の流れであるので図１４を参照しながら説明する。
【０１３４】
方法選択及びタイミング判定処理において、まずコンパイラ層処理部１１０、より詳しくはレプリケーション方法選択部１６０は、ステップＳ９０１（図１３参照）で受け付けたクエリの種類を判定する（Ｓ１００１）。具体例をあげると、クエリの種類に応じた値を変数ｔ’に格納する。例えば以下のような対応関係で変数ｔ’に値を格納する：
レコードの変更（アクセス）が連続的なクエリ:1
レコードの変更（アクセス）が非連続なクエリ:2
COMMIT:3
SELECT:4
【０１３５】
ここでレコードの変更（アクセス）が連続的なクエリか、レコードの変更（アクセス）が非連続的なクエリであるかは、以下の基準で判定する。
【０１３６】
１．そのクエリが全件更新、全件削除を行う場合、或いはそのクエリがrowidに対してのみ条件があってそれがrowidの範囲を指定する条件(例えば、演算子「<」,「>」を用いる場合)である場合は、レコードの変更（アクセス）が連続的なクエリと判定する。例えば
INSERT INTO ...
UPDATE ... WHERE rowid <100
のような場合、レコードの変更（アクセス）が連続的なクエリと判定する。
【０１３７】
２．上記１以外のクエリ（COMMIT,SELECTを除く）はレコードの変更（アクセス）が非連続的なクエリであると判定する。例えば
DELETE ...
UPDATE ... WHERE name='aiueo'
という連続するクエリの場合、「UPDATE ... WHERE name='aiueo'」は非連続的なクエリであると判定する（「Delete ...」は連続的なクエリと判定する）。
【０１３８】
なお、連続的か非連続的かを判定する基準は、以下のものとしてもよい。
（１）ページに対する変更量が一定以上だと、連続であると判定する。
（２）さらに、変更されたかどうかを記憶させておいて、その分布を参照して連続的か、非連続的かを判断するようにしても本実施の形態は成立する。
【０１３９】
次に、レプリケーション方法選択部１６０は当該クエリがSELECTであるか、又は従前のクエリと同じ種類であるか否かを判定する（Ｓ１００２）。当該クエリがSELECTであるか、又は従前のクエリと同じ種類であると判定した場合（Ｓ１００２、Ｙｅｓ）、レプリケーション方法選択部１６０はそのまま方法選択及びタイミング判定処理を終了する。
【０１４０】
一方、ステップＳ１００２において当該クエリがSELECTでなく、且つ従前のクエリと同じ種類でないと判定した場合（Ｓ１００２、Ｎｏ）、レプリケーション方法選択部１６０は、当該クエリの直前に受信したクエリの種類を判定する（Ｓ１００３）。
【０１４１】
ステップＳ１００３において当該クエリの直前に受信したクエリの種類がレコードの変更（アクセス）が連続的なクエリであると判定した場合（Ｓ１００３，”１”）、レプリケーション方法選択部１６０は、ページャー層レプリケーション処理を選択する（Ｓ１００４）。その後、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。
【０１４２】
ステップＳ１００３において当該クエリの直前に受信したクエリの種類がレコードの変更（アクセス）が非連続なクエリであると判定した場合（Ｓ１００３，”２”）、レプリケーション方法選択部１６０は、コンパイラ層レプリケーション処理を選択する（Ｓ１００５）。その後、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。
【０１４３】
ステップＳ１００３において当該クエリの直前に受信したクエリの種類がCOMMIT又はSELECTであると判定した場合（Ｓ１００３，”３”、”４”）、直前のクエリの種類を示す変数ｔに当該クエリ（Ｓ１００１で判定したもの）の種類を示す変数ｔ’の値を代入し（Ｓ１００６）、その後方法選択及びタイミング判定処理を終了する。
以上で第３の実施の形態における方法選択及びタイミング判定処理の例の説明を終了する。
【０１４４】
[Ｄ．変形例]
第２の実施の形態、第３の実施の形態では、レプリケーション方法が切り替わったタイミングで本装置１０からレプリカＤＢ装置２０にデータを送信し、レプリケーションを実行する構成としたが、レプリケーション方法の切り替りを待たずにクエリ受信ごとに、選択したレプリケーション方法でレプリケーションを実行する構成としても、第２の実施の形態、第３の実施の形態は成立する。
【０１４５】
［Ｅ．まとめ、その他］
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
【符号の説明】
【０１４６】
１・・・データベースシステム；    １０・・・レプリケーション実行装置（本装置）；    ２０・・・レプリカデータベース装置；    ３０・・・クライアント；    １００・・・クエリ受信部；    １１０・・・コンパイラ層処理部；    １２０・・・ページャー層処理部；    １３０・・・レプリケーションデータ管理部；    １６０・・・レプリケーション方法選択部；    １７０・・・コンパイラ層レプリケーション実行部；    １８０・・・ページャー層レプリケーション実行部
【図１】
0006000608.tif 000004
【図２】
0006000608.tif 000005
【図３】
0006000608.tif 000006
【図４】
0006000608.tif 000007
【図５】
0006000608.tif 000008
【図６】
0006000608.tif 000009
【図７】
0006000608.tif 000010
【図８】
0006000608.tif 000011
【図９】
0006000608.tif 000012
【図１０】
0006000608.tif 000013
【図１１】
0006000608.tif 000014
【図１２】
0006000608.tif 000015
【図１３】
0006000608.tif 000016
【図１４】
0006000608.tif 000017
【図１５】
0006000608.tif 000018
【図１６】
0006000608.tif 000019