(57)【特許請求の範囲】
【請求項１】
監視モジュールとユーザ空間において動作する受信プロセスとを有し、
前記監視モジュールは、
データベースサーバプロセスの発行するシステムコールが特定形式のデータベースへの操作の内容を書き込むものであるかどうかを判断する判断部と、
前記判断部により前記システムコールが前記特定形式のデータベースに対する操作の内容を書き込むものであると判断された場合には、該データベースに対する操作の内容を前記受信プロセスに送信する送信部とを備え、
前記受信プロセスは、前記送信部より送信される前記特定形式のデータベースに対する操作の内容に基づき、前記特定形式とは異なる形式に適合するように変換することを特徴とするデータベースサーバ。
【請求項２】
前記判断部は、前記システムコールが前記データベースの特定のテーブルに対するデータの追加によるものであるかどうかを判断し、
前記異なるプロセスに送信される操作の内容は、追加されるデータの全てまたは一部である請求項１に記載のデータベースサーバ。
【請求項３】
前記送信部は、前記データベースに対する操作が行われるトランザクションのＩＤを前記異なるプロセスに送信する請求項１または２に記載のデータベースサーバ。
【請求項４】
前記判断部は、前記データベースサーバプロセスの発行するシステムコールが前記データベースへの操作の内容をログファイルへ書き込むものであるかどうかを判断する請求項１から３のいずれかに記載のデータベースサーバ。
【請求項５】
前記監視モジュールは、前記データベースプロセスの発行するシステムコールをフックする請求項１から４のいずれかに記載のデータベースサーバ。
【請求項６】
前記システムコールに基づいて、前記送信部により送信されるデータの処理が選択される請求項１から５のいずれかに記載のデータベースサーバ。
【請求項７】
前記異なるプロセスは、前記送信部より送信されたデータの形式を変更してさらに他のプロセスに送信する請求項１から６のいずれかに記載のデータベースサーバ。
【請求項８】
特定形式のデータベースの管理を行うためのデータベースサーバプロセスを動作させるデータベースサーバに、
前記データベースサーバプロセスの発行するシステムコールが前記データベースへの操作の内容を書き込むものであるかどうかを判断させ、
前記判断により前記システムコールが前記データベースに対する操作の内容を書き込むものであると判断された場合には、前記データベースに対する操作の内容をユーザ空間において動作する受信プロセスに送信させるためのプログラムであり、
前記受信プロセスは、前記特定形式のデータベースとは異なる形式のデータベースに適合するようにデータ変換を行うプログラム。
【請求項９】
前記データベースプロセスの発行するシステムコールを、前記データベースサーバにフックさせるための請求項８に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理システムと他のシステムとを連携させるデータベースサーバ、モジュール、データベースサーバの動作方法などに関する。特に、本発明はデータベース管理システムとデータベース管理システムを用いないシステムとの連携を行うデータベースサーバ、モジュール、データベースサーバの動作方法などとして好適に実施することができる。
【背景技術】
【０００２】
様々なデータがコンピュータシステムにより扱われるようになってきた。多くの場合、コンピュータシステムに入力されるデータは、データベース管理システムが管理するデータベースに一旦格納され、その後に、データを必要とする機器や他のシステムに送信される。データがこのようにデータベースに一旦格納される理由の一つとしては、データベースには強力なリカバリ機能が備わっていることである。これにより、障害が発生してもデータが喪失などしないようにできる。リカバリ機能が備わっているために、データベースを介してデータの配信などを確実に行うことができる。
【０００３】
また、リカバリ機能に加えて、データベースには、アクセスコントロール機能も備わっており、権限の無い者に対するデータアクセスの制限の設定を柔軟に行うことが可能である。これにより、データベースを介することにより、特定の種類のデータを特定の者にだけ提供することが可能となる。また、不正なアクセスがあったかどうかの監査業務も比較的容易に遂行できる（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７，４２６，５１２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一方、証券取引業務や外国為替業務において、株価や外国為替レートなどの情報の蓄積が行われる一方、アルゴリズム取引に代表されるように、株価や外国為替レートなどの変化に応じて速やかに売買注文を行う必要も生じてきている。この場合、データベースを介して株価や外国為替レートなどの情報を配信すると、情報の配信にタイムラグが発生することがある。
【０００６】
そこで、本発明の一実施形態においては、データベースを用いて情報の蓄積を行いつつ、データの配信のタイムラグをより低減するデータベースサーバなどを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一実施形態として、データベースの管理を行うためのデータベースサーバプロセスを動作させるデータベースサーバを提供する。そのデータベースサーバは、監視モジュールを有する。その監視モジュールは、データベースサーバプロセスの発行するシステムコールがデータベースへの操作の内容を書き込むものであるかどうかを判断する判断部と、判断部によりシステムコールがデータベースに対する操作の内容を書き込むものであると判断された場合には、データベースに対する操作の内容をデータベースサーバプロセスとは異なるプロセスに送信する送信部とを備える。
【発明の効果】
【０００８】
本発明の一実施形態によれば、データベースを用いて情報の蓄積を行いつつ、データの配信のタイムラグを低減することが可能となる。また、特定の形式またはモデルを有するデータベースから他の形式またはモデルのデータベースなどとのデータ更新の同期を確保することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態に係るデータベースサーバの機能ブロック図である。
【図２】本発明の一実施形態に係るデータベースサーバの処理のフローチャートである。
【図３】本発明の一実施形態に係るシステムの機能ブロック図である。
【発明を実施するための形態】
【００１０】
本発明を実施するための形態について、以下、いくつかの実施形態として説明を行う。なお、本発明は、以下の実施形態に限定して解釈されることはなく、以下の実施形態を変形して実施することも可能である。
【００１１】
（実施形態１）
図１は、本発明の実施形態１に係るデータベースサーバの機能ブロック図を示す。図１は、特に、本発明の実施形態１に係るデータベースサーバが動作しているときに実現される装置としてのデータベースサーバの機能ブロック図を示す。本実施形態に係るデータベースサーバ１００は、コンピュータを動作させて提供することができる。コンピュータは、ハードウェア１０１とカーネル空間１０２とユーザ空間１０３とを有する。
【００１２】
ハードウェア１０１は、コンピュータの物理的実体である。ハードウェア１０１は、例えば、ＣＰＵ、ＲＯＭ、ＲＡＭ、二次記憶装置、入出力インターフェースなどを備える。ＣＰＵは、プログラムを構成する命令を実行する。ＲＯＭは、読出し専用のメモリであり、コンピュータの起動時に最初に実行されるプログラムなどを格納する。コンピュータが起動すると、最初に実行されるプログラムがＲＯＭより読み出され、そのプログラムを構成する命令がＣＰＵにより実行されることにより、コンピュータがブートする作業が開始する。ＲＡＭは、読み書きが可能なメモリであり、ＣＰＵにより実行される命令により構成されるプログラムを一時的に格納したり、プログラムの実行に必要な一時的なデータを格納したりする。二次記憶装置は、プログラムやデータを永続的に記憶するための装置である。入出力インターフェースは、プログラムなどの入出力を行ったり、プログラムの実行に伴う表示やデータの入力を行ったりなどするための、コンピュータ外部とのインターフェースである。
【００１３】
カーネル空間１０２は、オペレーティングシステムが動作する記憶空間である。オペレーティングシステムは、プログラムの一種であり、ユーザ空間１０３に存在するプロセスにハードウェア１０１を抽象化して提供する機能を有する。また、オペレーティングシステムは、プロセスの管理やコンピュータの有する資源の管理も行う。
【００１４】
カーネル空間１０２にて動作するオペレーティングシステムの提供する機能の一つとして、プロセス間通信の機能がある。プロセス間通信は、複数のプロセスが通信を行い、情報の送受信を行うための機能である。例えば、パイプ、ソケット、共有メモリ、メッセージキューなどがプロセス間通信を実装するために用いられる。
【００１５】
ユーザ空間１０３は、カーネル空間１０２にて動作するオペレーティングシステムのプロセス管理の機能を用いて生成されるプロセスが存在するアドレス空間である。プロセスは、プログラムをユーザモードで実行するための単位である。これに対して、カーネル空間１０２は、ＣＰＵのモードをカーネルモードあるいは特権モードなどにしてプログラムを実行するためのアドレス空間である。
【００１６】
プロセスは、ハードウェア１０１を使用する処理が生じたり、カーネル空間１０２の機能を使用する処理の必要が生じたりした場合には、システムコールを発行し、カーネル空間１０２にて動作するオペレーティングシステムに処理を依頼する。
【００１７】
図１においては、ユーザ空間１０３に、データベースサーバプロセス１０４、クライアントプロセス１０５および受信プロセス１０６が示されている。ただし、ユーザ空間１０３には、これ以外のプロセスが存在していてもよい。受信プロセス１０６は複数存在していてもよい。また、データベースサーバプロセス１０４、クライアントプロセス１０５および受信プロセス１０６が同時にユーザ空間１０３に存在する必要はない。少なくとも、データベースサーバプロセス１０４がデータベース管理システムとして管理するデータベースにクライアントプロセス１０５がアクセスするときには、データベースサーバプロセスが存在している必要がある。また、データベースサーバプロセス１０４が、そのデータベースに変更などの操作を加えるときには、受信プロセス１０６が存在していることが好ましい。
【００１８】
データベースサーバプロセス１０４は、データベース管理システムを実現するためのプログラムを実行するプロセスである。すなわち、データベースに対する操作を行うプログラムを実行し、具体的には、データを所定のスキーマに従ってＲＡＭや二次記憶装置に格納し、読出し、変更あるいは削除を行うプログラムを実行するプロセスである。スキーマとはデータベースの構造である。リレーショナルデータベース管理システムにおいては、スキーマは、テーブルの構造を表わす情報を含む。例えば、このような情報にはテーブルの名前、テーブルを構成するフィールドの名前、データ型、索引の有無などの情報がある。また、このような情報には、テーブルなどに対するアクセス権限の状態などを表わす情報が含まれていてもよい。
【００１９】
なお、本発明の実施形態においては、データベースとしては、リレーショナルデータベースに限らず、ＸＭＬデータベース、オブジェクト指向データベース、ネットワーク型データモデルを用いるデータベース、階層型データモデルを用いるデータベースなど種々のデータベースを使用することができる。
【００２０】
データベースサーバプロセス１０４は、他のプロセス（例えば、図１のクライアントプロセス１０５）から、カーネル空間１０２にて動作するオペレーティングシステムの提供するプロセス間通信１０６の機能を用いて、データベースに対する操作の要求を受信し、その操作を実行した結果を返信する。例えば、他のプロセスからテーブルの作成の要求が受信されれば、データベースサーバプロセス１０４は、テーブルの作成の処理を実行しその実行の結果を返信し、データの追加の要求が受信されれば、データをテーブルに格納する処理を実行しその実行の結果を返信し、検索の要求が受信されれば、テーブルに格納されたデータから検索の条件を満たすデータを検索した結果を返信し、データの変更の要求が受信されれば、テーブルに格納されたデータの変更の処理を実行しその実行の結果を返信し、データの削除の要求が受信されれば、データの削除の処理を実行しその実行の結果を返信する。ここに「実行の結果」とは、処理の実行が成功したかどうかを示す情報を含む。例えば、データの削除の要求が受信された場合、「データの削除の処理の実行の結果」は、例えばデータの削除の処理の実行が成功したかどうか、また、成功した場合には、何個のデータが削除されたかを示す情報が含まれる。
【００２１】
データベースサーバプロセス１０４は、上述したようにデータベース管理システムを実現するためのプログラムを実行するプロセスであるので、データベースに対する操作に先だって起動される。起動の後、必要な初期化を行った後、他のプロセスからの要求を受信するために待ち状態となる。必要な初期化の中には、カーネル空間１０２にて動作するオペレーティングシステムに対して、必要なプロセス間通信１０６を開始可能とする要求を行う。また、初期化後は、プロセス間通信１０６によって他のプロセスからのデータベースに対する操作の要求を受信するシステムコールを発行し、待ち状態に入る。
【００２２】
クライアントプロセス１０５は、データベースサーバプロセス１０４に対して、プロセス間通信１０６の機能を用いて、データベース操作の要求を送信し、その結果を受信するプロセスである。一般的には、データベースサーバプロセス１０４がリレーショナルデータベースを管理するのであれば、クライアントプロセス１０５は、ＳＱＬなどのデータベース言語を用いたデータベース操作の要求、あるいは、データベース言語に対応する関数呼び出しなどを行うことにより、システムコールが発行され、データベースサーバプロセス１０４との間で定められた通信プロトコルに基づいて、プロセス間通信１０６を介して、データベース操作の要求を送信し、その要求の処理の実行結果を受信する。
【００２３】
より具体的には、クライアントプロセス１０５が、プロセス間通信１０６を用いてデータベースに対する操作の要求を、データベースコマンドとして、システムコールを発行して送信する。すると、カーネル空間１０２のプロセス間通信１０６のモジュールが処理を開始し、データベースサーバプロセス１０４がデータベースコマンドを受信可能な状態とし、データベースサーバプロセス１０４を待ち状態から走行可能な状態とする。また、クライアントプロセス１０５は、データベースサーバプロセス１０４からの返信を受信するために待ち状態に入る。データベースサーバプロセス１０４が、データベースコマンドが表わす要求を実行する処理を行うと、その処理の結果を、システムコールを発行して送信する。これにより、カーネル空間１０２のプロセス間通信１０６のモジュールが処理を開始し、クライアントプロセス１０５が結果を受信可能な状態とし、クライアントプロセス１０５を待ち状態から走行可能な状態とする。
【００２４】
データベースサーバプロセス１０４が、クライアントプロセス１０５からデータベースコマンドを受信し、受信されたデータベースコマンドを実行するときには、データベースコマンドの内容を二次記憶装置などのハードウェアに記録するためにシステムコールを発行する。この目的の一つは、ログを取るためである。例えば、トランザクション中においてデータベースサーバプロセス１０４がデータベースに対する操作を行うときに、トランザクションをロールバック可能とするためである。すなわち、トランザクション中にデータベースに対する変更の操作を行った後に、変更を永続するものとするコミットや明示的にロールバックが行われるときに、操作により加えられた変更の逆の変更の操作を行い、変更の操作が無かったことにすることである。また、別の目的としては、障害が発生した時点以降に行われたデータベースに対する操作をデータベースに反映するために用いられる。
【００２５】
このような目的を達するために、ログには、ロールバックやリカバリなどを行うために実行するべきＳＱＬ文が記録される。例えば、ログには、クライアントプロセス１０５から受信したデータベースコマンドがそのまま書き込まれるようになっていてもよい。また、ログには、データベースコマンドそのものではなく、同等の情報が記録されてもよい。さらに時刻やトランザクションＩＤなどの付加的な情報も記録されてもよい。
【００２６】
したがって、データベースサーバプロセス１０４は、データベースに対する変更の操作を行う際に、データベースに対する変更の内容を、二次記憶装置などに保持されるログファイルなどに、書き込むためのシステムコールを発行する。ここに、変更の内容としては、通常、ロールバックのためには、変更前のデータを含む情報が書き込まれ、リカバリのためには、変更後のデータを含む情報が書き込まれる。なお、データの追加の操作については、追加の前のデータは存在しないので、追加の前のデータは、変更の内容に含まれる必要はない。また、データの削除の操作については、削除の後のデータは存在しないので、削除の後のデータは、変更の内容に含まれる必要はない。
【００２７】
なお、ログは、ログの目的別に分かれて複数のファイルとして構成されていてもよいし、あるいは、一つのログファイルとして構成されていてもよい。
【００２８】
図１に示すように、カーネル空間１０２には、監視モジュール１０８が含まれる。監視モジュール１０８は、データベースサーバプロセス１０４が発行するシステムコール１０７を監視する。この監視は、例えば、ファイルや装置などへのデータの書き込みを行うためのシステムコール１０７をフック１０９することにより実現できる。「システムコールをフックする（あるいはシステムコールがフックされる）」とは、システムコールが発行されると、特定のモジュール（例えば監視モジュール１０８）が動作し、システムコールに与えられたパラメータを、その特定のモジュールに取得可能とすることである。したがって、システムコール１０７がフックされていると、データベースサーバプロセス１０４がシステムコール１０７を発行すると、システムコール１０７の実質的な処理が行われる前に監視モジュール１０８が動作し、以降において説明する処理を行うことができる。また、フックの仕方によっては、システムコール１０７の処理が実質的に終了した後に監視モジュール１０８が動作するようにすることもできる。
【００２９】
監視モジュールは、判断部１１１および送信部１１２をサブモジュールとして有する。
【００３０】
判断部１１１は、まず、発行されたシステムコールが、データベースの変更の操作の前後のデータ含む情報を書き込むために発行されたかどうかを判断する。すなわち、システムコールがデータベースサーバプロセス１０４によって発行されたかどうかを判断し、また、システムコールによる書き込み先が、データベースの変更の内容を書き込むためなどのログファイルや装置などであるかどうかを判断する。
【００３１】
さらに判断部１１１は、データベースの変更が、データベースの特定エリアに格納されるデータに関する変更であるかどうかを判断することもできる。ここに、「データベースの特定エリアに格納されるデータ」とは、定められた条件を満たすエリアに格納されるデータである。定められた条件は、後述の受信プロセス１０６や受信プロセス１０６以外のプロセスが、監視モジュール１０８に対して、変更後のデータを、受信プロセス１０６や受信プロセス１０６以外のプロセスに、送信するように要求する場合に設定される条件である。また、定められた条件は、データベースサーバプロセス１０４が、監視モジュール１０８に対して、設定した条件であってもよい。
【００３２】
上述の「定められた条件」としては、リレーショナルデータベースの場合には、特定のテーブルに対して変更の操作が行われること、また、特定の行データの特定のカラムに対して変更の操作が行われること、を挙げることができる。前者としては、特定のテーブルに行データが追加されることや特定のテーブルの行データが削除されること、を挙げることができ、後者としては、特定のテーブルに格納されている行データの一部が変更されること、を挙げることができる。
【００３３】
判断部１１１は、データベースの特定エリアに格納されるデータに対する操作が行われると判断されると、変更後の値を送信部１１２に伝達する。また、変更の操作の種別も、判断部１１１から送信部１１２に伝達されてもよい。これにより、データの削除があったことを受信プロセス１０６に送信することができる。なお、以下では、主に変更後の値が送信部１１２に伝達されるとして説明を行う（したがって、以下の説明では、明示的な記載を行なわないが、変更の操作の種別が、送信部１１２に送信されてもよい）。
【００３４】
送信部１１２は、判断部１１１から渡された変更後のデータを、所定のプロセスである受信プロセス１０６に受信可能とする。受信プロセス１０６は、システムコールを発行することにより、受信可能となったデータを要求し、受信可能となったデータを受信する。
【００３５】
なお、受信プロセス１０６の例としては、クライアントプロセス１０５が外国為替のレート情報を受信したり、株価の情報を受信したりし、データベースサーバプロセス１０４へ受信した情報を送信する場合において、レート情報や株価の情報を用いて取引を行うプロセスにレート情報や株価の情報を配信するプロセスを挙げることができる。また、受信プロセス１０６が、レート情報や株価の情報を用いて取引を行うプロセスそのものであってもよい。
【００３６】
受信プロセス１０６の一般的な例としては、データベースサーバプロセス１０４が管理するデータベースとはデータの格納の形式やデータモデルが異なるシステムに受信したデータを送信するプロセスを挙げることができる。このようなデータの格納の形式やデータモデルが異なるシステムとしては、Ｈａｄｏｏｐ、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅなどを挙げることができる。また、このようなデータの格納の形式やデータモデルが異なるシステムは、データベースサーバ１００にて動作していてもよいし、データベースサーバ１００と異なるサーバにて動作していてもよい。このとき、受信プロセス１０６は、送信部１１２より送信されたデータを、Ｈａｄｏｏｐ、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅなどの送信先のシステムのデータの形式に適合するように変換を行ってから、送信先に送信してもよい。変換のルールが、データベースサーバ１００の記憶装置などに記憶されており、受信プロセス１０６は、そのルールを読み取り、読み取られたルールに従って変換を行ってデータを送信してもよい。
【００３７】
以下では、ＩＮＳＥＲＴ文とＵＰＤＡＴＥ文とがデータベースサーバ１００において実行される場合について説明する。例えば、列としてＣ１、Ｃ２およびＣ３を有するテーブルＲにデータ（Ｖ１，Ｖ２，Ｖ３）が追加される場合に、クライアントプロセス１０５は、
ＩＮＳＥＲＴ  ＩＮＴＯ  Ｒ（Ｃ１，Ｃ２，Ｃ３）  ＶＡＬＵＥＳ  （Ｖ１，Ｖ２，Ｖ３）；
というＳＱＬ文あるいはそれに相当する関数を実行することになる。この場合、プロセス間通信１０６を介して、このＳＱＬ文を表わすデータベースコマンドが、クライアントプロセス１０５からデータベースサーバプロセス１０４へ送信される。
【００３８】
データベースサーバプロセス１０４は、上記のＩＮＳＥＲＴ文を表わすデータベースコマンドを受信すると、テーブルＲにデータ（Ｖ１，Ｖ２，Ｖ３）を追加するとともに、テーブルＲにデータ（Ｖ１，Ｖ２，Ｖ３）が追加されるという変更の内容を書き込むためのシステムコールを発行する。
【００３９】
「データベースの特定エリアに格納されるデータ」が、テーブルＲに追加されたデータとして設定されていると、監視モジュール１０８が動作を行い、テーブルＲに対するデータの追加のためのシステムコールであると判断されるので、判断部１１１は、（Ｖ１，Ｖ２，Ｖ３）というデータを送信部１１２に渡し、送信部１１２は、（Ｖ１，Ｖ２，Ｖ３）というデータを受信プロセス１０６に伝達し受信可能にする。なお、判断部１１１は、（Ｖ１，Ｖ２，Ｖ３）というデータを送信部１１２に伝達する代わりに、Ｖ１、Ｖ２およびＶ３の一部を送信部１１２に伝達し、Ｖ１、Ｖ２およびＶ３の一部を受信プロセス１０６に受信可能としてもよい。なお、ＩＮＳＥＲＴ文により追加されたデータを特定できるようにするために、主キーの値が含まれていることが好ましい。
【００４０】
また、判断部１１１は、判断を行った時刻などの時刻データなどの付加データを上記のように伝達するデータに付加してもよい。さらに、上記のように送信部１１２に伝達されるデータは、システムコールの引数などから得られる情報を所定のアルゴリズムに従って処理したデータであってもよい。また、データベースサーバプロセス１０４が発行したシステムコールに基づいて、処理のアルゴリズムが選択されてもよい。例えば、データベースサーバプロセス１０４が発行し、監視モジュール１０８が動作を開始したときのシステムコールの種類、引数などに応じて、処理のアルゴリズムが選択されるようになっていてもよい。
【００４１】
また、テーブルＲの列Ｃ１が主キーの列であれば、監視モジュール１０８は、主キーの列の値であるＶ１を記憶することもできる。このようにすることにより、テーブルＲのもっとも最近にテーブルに追加されたデータは、Ｃ１の値がＶ１であることにより特定される。このとき、クライアントプロセス１０５が、
ＵＰＤＡＴＥ  Ｒ  ＳＥＴ  Ｃ２＝Ｖ４，Ｃ３＝Ｖ５  ＷＨＥＲＥ  Ｃ１＝Ｖ１；
というＳＱＬ文あるいはそれに相当する関数を実行したとすると、データベースサーバプロセス１０４は、これに対応するＳＱＬコマンドを実行するとともに、データの変更後のデータを表わす（Ｖ１，Ｖ４，Ｖ５）の値を書き込むためにシステムコールを発行する。すると、監視モジュール１０８が動作し、テーブルＲのデータのうち列の値がＶ１である行に対する変更を表わしていることを判断し、変更後のデータである（Ｖ１、Ｖ４、Ｖ５）を取得し、（Ｖ１、Ｖ４、Ｖ５）というデータを送信部１１２に伝達し、送信部１１２は、（Ｖ１，Ｖ４，Ｖ５）というデータを受信プロセス１０６に転送する。
【００４２】
なお、判断部１１１は、（Ｖ１，Ｖ４，Ｖ５）というデータを送信部１１２に伝達する代わりに、Ｖ４およびＶ５の一部またはすべてを送信部１１２に伝達し、Ｖ４およびＶ５の一部またはすべてが受信プロセス１０６に転送し受信可能としてもよい。上述したように、変更されたデータを特定できるようにするために、主キーの値が含まれていることが好ましい。また、判断部１１１は、判断を行った時刻などの時刻データなどの付加データを上記のように伝達するデータに付加してもよい。さらに、上記のように伝達するデータは、システムコールの引数などから得られる情報を所定のアルゴリズムに従って処理したデータであってもよい。
【００４３】
図２は、本実施形態に係る監視モジュール１０８の処理を説明するフローチャートである。
【００４４】
図２を参照すると、ステップＳ２０１の処理として、監視モジュール１０８は、データベースサーバプロセス１０４がデータベースへの操作の内容を書き込むまで待つ。言い換えると、監視モジュール１０８は、データベースサーバプロセス１０４がシステムコールを発行するまで待ち、データベースサーバプロセス１０４がシステムコールを発行すると、システムコールを解析し、ステップＳ２０２の処理として、特定のテーブルに対するデータ操作を表わしているかどうかを判断する。なお、ここでは、「データベースの特定エリアに格納されるデータ」であるかどうかの判断の例として「特定のテーブルに対するデータ操作が行われる」かの判断を記載している。
【００４５】
もし、ステップＳ２０２の判断の結果がＹＥＳ（肯定的）であれば、ステップＳ２０３の処理として、操作後のデータを求める。そして、ステップＳ２０４の処理として、送信部１１２が、受信プロセス１０６へデータの転送を行う。その後、ステップＳ２０５の処理へ移行する。
【００４６】
また、ステップＳ２０２の判断の結果がＮＯ（否定的）であれば、ステップＳ２０５の処理へ移行する。
【００４７】
ステップＳ２０５の処理として、監視モジュール１０８の処理を終了するべきかどうかを判断し、その結果がＮＯ（否定的）であれば、ステップＳ２０１へ戻る。
【００４８】
このように、本実施形態においては、データベースサーバプロセス１０４の発行するシステムコールを解析し、データベースの特定のエリアに格納されるデータが変更されると判断された場合には、変更後のデータを求め、変更後のデータを、受信プロセス１０６に受信可能としている。これにより、受信プロセス１０６は、データベースサーバプロセス１０４がデータをデータベースに格納することを介さずにデータを得ることができ、データの配信のタイムラグを低減することができる。また、配信されるデータを受信プロセス１０６や監視モジュール１０８において変換することも可能となる。
【００４９】
（実施形態２）
本発明の実施形態２として、変更後のデータに加えて、トランザクションＩＤが受信プロセスに受信可能とする形態について説明する。
【００５０】
一般に、データベースサーバプロセス１０４は、複数のクライアントプロセス１０５と通信する。それぞれのクライアントプロセス１０５がトランザクションを同時に実行できるようにするために、データベースサーバプロセス１０４は、複数のトランザクションを同時に処理することができる。この場合、データベースサーバプロセス１０４の内部では、トランザクションを区別するために、トランザクションにＩＤが付される。
【００５１】
また、ログファイルには、どのトランザクションにより変更操作が行われたかが記録されるようになっている場合がある。この場合、監視モジュール１０８は、システムコールをフックなどして監視することにより、トランザクションＩＤを取得することができる。
【００５２】
そこで、本発明の実施形態２においては、判断部１１１によりデータベースの変更の操作の前後のデータを含む情報を書き込むために発行されたかどうかを判断された場合に、変更後のデータとともにトランザクションＩＤも取得され、送信部１１２により送信される。
【００５３】
したがって、受信プロセス１０６は、どのトランザクションにおいて変更されたデータであるかを判断することができ、特定のシステムなどに特定のトランザクションにおいて変更されたデータのみを配信することができる。これにより、例えばデータの配信範囲をトランザクションＩＤにより限定することが可能である。
【００５４】
また、クライアントプロセス１０５がトランザクションを開始するデータベースコマンドをデータベースプロセス１０４に送信した後に、データベースプロセス１０４よりトランザクションＩＤを取得する操作を行ってもよい。そして、取得されたトランザクションＩＤを受信プロセス１０６に送信してもよい。これにより、受信プロセス１０６は、トランザクションＩＤとクライアントプロセス１０５との対応関係を管理することができる。これにより、配信範囲をより精密に限定することが可能となる。
【００５５】
（実施形態２）
実施形態１においては、主に図１を参照して説明したが、本発明は、図１のように１台のコンピュータを用いる場合に限定されて実施されることはない。
【００５６】
例えば、図３に示すように、ハードウェア６０１とカーネル空間６０２とユーザ空間６０３とを有する第１のコンピュータがあり、また、ハードウェア６１１とカーネル空間６１２とユーザ空間６１３とを有する第２のコンピュータを用いて本発明を実施することができる。この場合、第１のコンピュータのユーザ空間６０３においてデータベースサーバプロセス６０６と受信プロセス６０７とが動作し、第２のコンピュータのユーザ空間６１においてクライアントプロセス６１４が動作してもよい。
【００５７】
そして、クライアントプロセス６１４からデータベースサーバプロセス６０６へ送信されるデータベースコマンドは、第２のコンピュータのカーネル空間、ハードウェア６１１、通信網６１０、第１のコンピュータのハードウェア６０１およびカーネル空間６０２を介してデータベースサーバプロセス６０６に送信される。このとき、監視モジュール６０８は、データベースサーバプロセス６０６が変更の内容を書き込むために発行されるシステムコールの発行を監視し、データベースの特定エリアに格納されるデータについての操作を表わしているかどうかを判断し、そうであれば、受信プロセス６０７へデータを転送する。
【００５８】
また、データベースサーバプロセス６０６と受信プロセス６０７とは、異なるコンピュータにて動作するようになっていてもよい。
【符号の説明】
【００５９】
１００  データベースサーバ
１０１  ハードウェア
１０２  カーネル空間
１０３  ユーザ空間
１０４  データベースサーバプロセス
１０５  クライアントプロセス
１０６  受信プロセス
１０８  監視モジュール
１１１  判断部
１１２  送信部
【図１】
0005567069.tif 000002
【図２】
0005567069.tif 000003
【図３】
0005567069.tif 000004