説明

計算機、及びデータベース管理プログラム

【課題】共有ディスク装置を使用しない安価なハードウェア構成を前提として、単純な構成を有する多重化データベース制御システムを構築する。
【解決手段】ノード2は、自己が保有するデータベースの自己更新情報としての自ノード用redoログ120と、自己が保有するデータベース以外の他の更新情報としての他ノード用redoログ130と、を各データベース毎に分けて保有し、ノード2が自ノード用redoログ120を更新する際に、他ノード用redoログ130を参照することで、自己が保有するデータベースの更新と自己が保有する以外のデータベースの更新とで競合が発生しているか否かを判定することを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、多重化されたデータベースのうち少なくとも一つを備える計算機、及びデータベース管理プログラムに関する。
【背景技術】
【0002】
従来の多重化データベースにおいては、各ノードにデータそのものを格納するためのDBファイルと、更新履歴情報を逐次書き込むためのredoログとを持っている。
図11(a)に示すように、多重化データベースは、データベースの可用性を向上するためにノードを2重化する。ノードの2重化を行う方法の一つに、分散トランザクションの機能を用いる方法がある。
【0003】
この方法では、更新を行う際に、クライアントから、両ノードに対して同一の内容の更新要求を行い、2フェーズコミット方式により、両ノード間のDBファイルの内容の整合を保障する。すなわち、この方法は、コミット要求時に、両ノードにコミット準備指示を行い、両ノードから準備完了応答を得られてから、両ノードに対してコミット指示を行う。なお、分散トランザクションの機能を用いる方法の詳細は、例えば、特許文献1に記載がある。
【0004】
また、別の方法として、共有ディスクによる2重化の方法がある。図11(b)に示すように、redoログとDBファイルとを共有ディスクに格納し、両ノードに接続することによって、データベースを2重化する。redoログは、各ノード用に一つずつ用意されるが、DBファイルは、物理的に同じものを共有する。なお、共有ディスクを用いる方法の詳細は、例えば、非特許文献1に記載がある。
【0005】
この方法では、一つのディスク装置を共有してDBを構成しているため、片方のノードで実行された操作は、即時他ノードにも反映されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平6−119227号公報(段落0002〜0006、図2等)
【非特許文献】
【0007】
【非特許文献1】Barb Lundhild,Peter Sechser、“Oracle RAC 10g”、[online]、2005年9月、Oracle Corporation、[平成21年9月16日検索]、インターネット<URL:http://otndnld.oracle.co.jp/products/database/oracle10g/clustering/pdf/TWP_RAC10g.pdf >
【発明の概要】
【発明が解決しようとする課題】
【0008】
このように、分散トランザクションの機能を用いるデータベースの多重化方法は、更新操作に対する競合があれば、その時点で待ちが発生し、また、コミット動作中に障害が発生すると、自動的にロックを解除できなくなり、制御が複雑であるという問題がある。
また、共有ディスク装置を用いるデータベースの多重化方法では、共有ディスク装置が高価であり、両ノードを地理的に分散させた配置とすることができないという欠点がある。
【0009】
本発明は前記問題に鑑みてなされたものであり、データベースを地理的に分散させた状態であっても、データベースの更新における競合を判定することができる、計算機、及びデータベース管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
前記目的を達成するために、本発明に係る計算機は、複数の同じ内容のデータベースに通信可能に接続されて多重化されたデータベースのうち少なくとも1つを備える計算機であって、自己が保有するデータベースの自己更新情報と、自己が保有するデータベース以外のデータベースの他の更新情報とを各データベース毎に分けて保有する記憶部と、前記自己更新情報を更新する際に、前記他の更新情報を参照することで、前記多重化されたデータベースの更新における競合を判定する競合判定部と、を備えることを特徴とする。
【0011】
前記目的を達成するために、本発明に係るデータベース管理プログラムは、複数の同じ内容のデータベースに通信可能に接続されて多重化されたデータベースのうち少なくとも1つを備える計算機の制御装置に実行させるデータベース管理プログラムであって、前記自己の計算機が保有するデータベースの自己更新情報と、前記自己が保有するデータベース以外のデータベースの他の更新情報とを各データベース毎に分けて記憶部に保有させる機能と、前記自己情報を更新する際に、前記他の更新情報を参照することで、前記多重化されたデータベースの更新における競合を判定する機能と、を前記制御装置に実現させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、データベースを地理的に分散させた状態であっても、データベースの更新における競合を判定することができる。このため、共有ディスク装置を使用しない安価なハードウェア構成を前提として、分散トランザクション方式によるデータベース制御システムよりも単純な構成にすることができる。
【図面の簡単な説明】
【0013】
【図1】本発明の第1実施形態に係るデータベース制御システムの構成図である。
【図2】本発明の第1実施形態に係るデータベース制御システムを構成するノードの機能構成図である。
【図3】本発明の第1実施形態に係るノードが備えるredoログの一例を示す図である。
【図4】本発明の第1実施形態に係るノードが相互に送信しあうredoログ情報の一例を示す図である。
【図5】本発明の第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合なし)を説明する動作説明図である。
【図6A】本発明の第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合なし)の各ステップ後のredoログの状態を示す図である。
【図6B】本発明の第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合なし)の各ステップ後のredoログの状態を示す図である。
【図7】本発明の第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)を説明する動作説明図である。
【図8】本発明の第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)の各ステップ後のredoログの状態を示す図である。
【図9】本発明の第2実施形態に係るデータベース制御システムを構成するノードの機能構成図である。
【図10】本発明の第2実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)を説明する動作説明図である。
【図11】(a)従来の構成要素(分散トランザクション)、(b)従来の構成要素(共有ディスク)を示す構成図である。
【発明を実施するための形態】
【0014】
≪第1実施形態に係るデータベース制御システムの構成≫
<概要>
図1は、第1実施形態に係るデータベース制御システムの構成図である。
データベース制御システム1は、ノード2A,2B(以下、まとめてノード2と呼ぶときがある),クライアント8A,8B,・・8X(以下、まとめてクライアント8と呼ぶときがある),及びネットワーク9を備えて構成される。データベース制御システム1は、クライアント8がネットワーク9を介してノード2が備える記憶装置200A,200B(以下、まとめて記憶装置200と呼ぶときがある)内に記憶されているデータベース(DB)220A,220B(以下、まとめてデータベース(DB)220と呼ぶときがある)を更新する。データベース220の更新は、制御装置100に記憶されるredoログ120,130(図2参照)を使って行われる。データベース220の更新処理についての詳細は後述する。
【0015】
ここで、データベース220A,及びデータベース220Bは同じ内容である。データベース制御システム1では、データベース220の更新に際し、クライアント8はノード2A,又はノード2Bのどちらかにアクセスし、一方のデータベース220A,又はデータベース220Bを更新する。更新したデータベース220を備える一方のノード2は、他方のノード2に更新情報を送信し、更新情報を受信した他方のノード2は、受信した更新情報を基に自己のデータベース220を更新する。このように、第1実施形態に係るデータベース制御システム1では、ノード2が相互に自己のデータベース220の更新情報を送信しあうことで、データベース220の内容の同一性を図っている。
【0016】
図1に示すデータベース制御システム1は、データベース220を2重化する構成としているが、より多数のノード2を接続してデータベース220を3重,4重又はそれ以上の多重に構成してもよい。その場合、更新したデータベース220を備えるノード2は、多重化されたデータベース220を備えるすべてのノード2に対して、自己のデータベース220の更新情報を送信することになる。
【0017】
また、データベース制御システム1は、ノード2Aをあるローカルネットワークに接続し、ノード2Bをノード2Aが属するローカルネットワークとは異なるローカルネットワークに接続し、それぞれのローカルネットワークをグローバルネットワークに接続するようにしてもよい。このような構成にすれば、ノード2を地理的に離した場所に設置することが可能となる。
以下、データベース制御システム1の各構成装置について説明する。
【0018】
<ノード>
ノード2は、ネットワークに接続され、データベースを備えるディスク装置である。例えば、3層アーキテクチャのクライアントサーバシステムにおけるデータアクセス層の処理を行うサーバ,集中処理システムにおけるホストコンピュータ等を含む広い概念である。
ノード2の構成は、装置の種類によって異なるが、クライアントサーバシステムにおけるサーバの場合には、例えば、制御装置100,記憶装置200,入力装置3,表示装置4,通信装置5,タイマ6で構成される。
【0019】
(制御装置)
制御装置100は、CPU,メモリ(記憶部),及びこれらの周辺回路等(いずれも図示せず)から構成される。制御装置100は、記憶装置200に記憶されるDBMS(DataBase Management System:データベース管理システム(データベース管理プログラム))210,及びOS(Operating System)230をメモリにロードし実行することで、様々な機能を実現する。制御装置100が備える機能については後記する。
【0020】
(記憶装置)
記憶装置200は、HDD(Hard Disk Drive)等で構成され、DBMS210,DB220,及びOS230を記憶する。DBMS210は、データベースとして蓄えた情報を制御し、活用するためのソフトウェアである。DB220は、DBMS210の管理下で記憶装置200に記憶されているデータである。OS230は、ノード2のコンピュータシステムを管理し、基本的なユーザ操作環境を提供するソフトウェアである。
DB220は、複数のファイルにより構成されている。DB220を構成するファイルについては後記する。
【0021】
(入力装置,表示装置,通信装置,タイマ)
入力装置3は、キーボード,マウス等の操作入力用デバイスを含み、ノード2の操作者の入力操作を受け入れて、制御装置100に対して出力する。
表示装置4は、LCD,CRT等であって、制御装置100から渡される出力画像等を表示する。
通信装置5は、LAN用のアダプタ装置,ISDN通信回線用のTA,又はモデム等であって、制御装置100の指示に従って動作し、ネットワーク9を介してノード2又はクライアント8とデータの送受信を行う。
タイマ6は、ノード2の時計であり、RTC(Real Time Clock)等で構成される。タイマ6は、制御装置100に時刻をデータとして提供する。
【0022】
<クライアント>
クライアント8は、ネットワーク9を介してノード2が備えるDB220の更新を要求する装置である。クライアント8は、PC(Personal Computer),携帯端末等で構成される。
【0023】
<ネットワーク>
ネットワーク9は、LAN(Local Area Network),WAN(Wide Area Network)等であり、有線,無線のどちらか一方,又は両方で構成され、データ通信を実現する。
有線の例としては、光ファイバ,一般電話回線,専用線等が挙げられ、無線の例としては、赤外線等の電波が挙げられる。
【0024】
≪第1実施形態に係るデータベース制御システムを構成するノードの機能及び使用するフォーマット≫
<ノードが備える機能>
(概要)
図2は、第1実施形態に係るデータベース制御システムを構成するノードの機能構成図である。図2では、各機能を「○○部」と記載している。
ノード2は、第1実施形態に係るデータベース制御システム1を実現するために、図2に示す機能を有する。図2に記載される各部110,111,112,113,114は、DBMS210をメモリにロードし、CPUにより実行されることで実現される。通信部140は、OS230をメモリにロードし、CPUにより実行されることで実現される。また、ログ120,130はメモリ上に領域として確保される。
図2には、説明の便宜上、第1実施形態に係るデータベース制御システム1を説明するのに必要な機能以外の機能を図示していない。例えば、入力装置3,表示装置4,及びタイマ6を管理する機能等は図示していない。
【0025】
(データベース(DB))
DB220は、redoログファイル221,制御ファイル222,及びデータファイル223の3つのファイルで構成される。
redoログファイル221は、データファイル223の更新情報を記憶しておくファイルである。制御ファイル222は、redoログファイル221やデータファイル223のファイル名と保存場所を記録しておくファイルである。データファイル223は、実際のデータが入っているファイルである。
【0026】
(redoログ)
更新情報としてのredoログ120,130は、DB220の変更履歴データであり、その構成を図3に示す。redoログ120,130の1エントリは、タイムスタンプ欄121,131、トランザクション番号欄122,132、DB操作コード欄123,133、DB操作アドレス欄124,134、DB操作パラメタ欄125,135で構成される。
redoログ120,130は、DB220についての処理が行われるたびに、エントリが追加されていく。
なお、図2は、ノード2が2重化された場合の構成であり、仮にノード2が3重化,4重化された場合、各ノード2が備えるredoログの数は、ノード2の数分になり、3つ,4つとなる。
【0027】
(redoログ更新部)
図2に示す、redoログ更新部111は、基本的にはredoログ120,130を更新する機能である。
以下、redoログ更新部111の機能を自己のノード2でトランザクションが発生した場合と、他のノード2でトランザクションが発生した場合とに分けて説明する。
(1)自己のノードでトランザクションが発生した場合
redoログ更新部111は、トランザクション(以下、「Tx」と称す場合がある)の開始時,DB220の更新操作(update,delete,insert)実行時,及びcommit(結果確定)実行時に、自ノード用redoログ120にエントリを1行追加する。具体的には、以下の(a)〜(c)の内容を設定したエントリを1行追加する。
【0028】
(a)Tx開始時
redoログ更新部111は、自ノード用redoログ120のタイムスタンプ欄121に「時刻」を設定し、トランザクション番号欄122に「任意のTx番号」を設定する。
(b)DBの更新操作実行時
redoログ更新部111は、自ノード用redoログ120のタイムスタンプ欄121に「時刻」を設定し、トランザクション番号欄122に「Tx開始時に設定したTx番号」を設定し、DB操作コード欄123に「update」,「delete」,「insert」のうちのいずれかを設定し、DB操作アドレス欄124に「更新対象レコードのアドレス」を設定し、DB操作パラメタ欄125に「DBの更新内容」を設定する。
DB操作コード欄123に「update」,「delete」,「insert」のうちのいずれかを設定するかは、更新対象レコードを更新するのか、削除するのか、それとも新たにレコードを追加するのかにより決定される。
【0029】
(c)commit(結果確定)実行時
redoログ更新部111は、自ノード用redoログ120のタイムスタンプ欄121に「時刻」を設定し、トランザクション番号欄122に「Tx開始時に設定したTx番号」を設定し、DB操作コード欄123に「commit」又は「rollback」を設定する。
DB操作コード欄123に「commit」,「rollback」のどちらを設定するかは、後述する更新対象競合判定部112(図2参照)で更新対象レコードに競合がないと判定された場合は「commit」を設定し、更新対象レコードに競合があると判定された場合は「rollback」を設定する。
【0030】
また、redoログ更新部111は、自ノード用redoログ120にエントリを追加するたびに、図4に示すredoログ情報300を作成する。すなわち、redoログ更新部111は、(a)Tx開始時,(b)DBの更新操作実行時,(c)commit実行時のすべてのタイミングでredoログ情報300を作成する。redoログ情報300の構成は、redoログ120,130の1エントリの構成と同じである。redoログ更新部111は、redoログ情報300の各欄に、自ノード用redoログ120の同一欄名に設定した内容と同じ内容を設定する。
redoログ更新部111は、作成したredoログ情報300を、他のノード2に対して送信するように通信部140に指示する。通信部140(図2参照)は、redoログ情報300を、TCP(Transmission Control Protocol),IP(Internet Protocol)等の通信規約に従ってパケット化し、通信装置5(図1参照)を介して他のノード2に送信する。
【0031】
(2)他のノードでトランザクションが発生した場合
redoログ更新部111は、他のノード2から受信したredoログ情報300を基に、他ノード用redoログ130にエントリを追加する。具体的には、redoログ更新部111は、他ノード用redoログ130の各欄に、redoログ情報300の同一欄名に格納されている内容と同じ内容を設定し、エントリを追加する。これにより、一方のノード2の自ノード用redoログ120の内容と、他方のノード2の他ノード用redoログ130の内容は一致される。
【0032】
(更新対象競合判定部)
図2に示す更新対象競合判定部112は、自己のノード2でトランザクションが発生し、かつ、commitを行うときに、自己のノード2と他のノード2とで更新対象レコードが競合したか否かの判定を行う。更新対象競合判定部112は、更新対象レコードの競合の判定を、トランザクションの開始からcommitを行うときまでの時間帯について、他ノード用redoログ130の内容を調べることにより行う。
具体的には、更新対象競合判定部112は、自己のノード2でトランザクションが開始してからcommitを行うときまでの時間帯において、自ノード用redoログ120に追加したエントリのDB操作アドレス欄124に設定したアドレスと、他ノード用redoログ130に追加したエントリのDB操作アドレス欄134に設定したアドレスとが一致し、かつ、他ノード用redoログ130に、DB操作コード欄133に「commit」が設定されたエントリが追加されている場合に更新対象レコードが競合したと判定する。
【0033】
仮に、自ノード用redoログ120のDB操作アドレス欄124と、他ノード用redoログ130のDB操作アドレス欄134とに設定したアドレスが一致しても、他ノード用redoログ130に、DB操作コード欄133に「commit」が設定されたエントリが追加されていなければ更新対象レコードが競合したと判定しない。この場合には、他のノード2の更新対象競合判定部112が、更新対象レコードが競合したと判定することになる。すなわち、更新対象レコードが競合した場合に、先にcommitが行われた更新処理を優先する。
【0034】
(redoログファイル更新部)
図2に示すredoログファイル更新部113は、自ノード用redoログ120に、DB操作コード欄123に「commit」が設定されたエントリが追加されたときに、自ノード用redoログ120の内容をredoログファイル221に書き出す。
また、redoログファイル更新部113は、他ノード用redoログ130に、DB操作コード欄133に「commit」が設定されたエントリが追加さたときに、他ノード用redoログ130の内容をredoログファイル221に書き出す。
【0035】
(データファイル更新部)
図2に示すデータファイル更新部114は、任意のタイミングでredoログファイル221の内容をデータファイル223に更新する。
【0036】
≪第1実施形態に係るデータベース制御システムのデータベース更新動作≫
以下、図5から図9を参照して第1実施形態に係るデータベース制御システムのデータベース更新動作について説明する。
図5は、第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合なし)の説明図である。
図5は、ノード2AでTxAが、ノード2BでTxBがほぼ同時に実行される場合の処理の流れを示している。TxAは、アドレス#0001のレコードを更新し、TxBは、アドレス#0002のレコードを更新するので、TxAとTxBとでは更新対象レコードが競合しない。他ノード用redoログ130上の白抜き矢印は、更新対象競合判定部112が競合判定を行う時間帯を表している。
【0037】
なお、説明に際して、redoログ120,130及びredoログ情報300のデータの設定の記載については、一部省略する。
また、各ステップ後の、ノード2Aの自ノード用redoログ120A,及びノード2Bの他ノード用redoログ130Bの状態、さらに、ノード2Bの自ノード用redoログ120B,及びノード2Aの他ノード用redoログ130Aの状態を図6A(a)〜(c),及び図6B(a)〜(c)に示す。
【0038】
(ステップS001A)
ノード2Aのredoログ更新部111Aは、TxAの開始とともに、トランザクション番号欄122Aに「任意のTx番号」を設定したエントリを自ノード用redoログ120Aに1行追加する。また、redoログ更新部111Aは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Bに送信する。
ノード2Bのredoログ更新部111Bは、受信したredoログ情報300を基に、他ノード用redoログ130Bにエントリを1行追加する。
【0039】
(ステップS001B)
ノード2Bのredoログ更新部111Bは、TxBの開始とともに、トランザクション番号欄122Bに「任意のTx番号」を設定したエントリを自ノード用redoログ120Bに1行追加する。また、redoログ更新部111Bは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Aに送信する。
ノード2Aのredoログ更新部111Aは、受信したredoログ情報300を基に、他ノード用redoログ130Aにエントリを1行追加する。
【0040】
(ステップS002A)
ノード2Aのredoログ更新部111Aは、DB操作コード欄123Aに「update」を設定し、DB操作アドレス欄124Aに「0001」を設定し、DB操作パラメタ欄125Aに「AAAAA」を設定したエントリを、自ノード用redoログ120Aに1行追加する。また、redoログ更新部111Aは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Bに送信する。
ノード2Bのredoログ更新部111Bは、受信したredoログ情報300を基に、他ノード用redoログ130Bにエントリを1行追加する。
【0041】
(ステップS002B)
ノード2Bのredoログ更新部111Bは、DB操作コード欄123Bに「update」を設定し、DB操作アドレス欄124Bに「0002」を設定し、DB操作パラメタ欄125Bに「BBBBB」を設定したエントリを、自ノード用redoログ120Bに1行追加する。また、redoログ更新部111Bは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Aに送信する。
ノード2Aのredoログ更新部111Aは、受信したredoログ情報300を基に、他ノード用redoログ130Aにエントリを1行追加する。
【0042】
(ステップS003A)
ノード2Aの更新対象競合判定部112Aは、commitを行うときに、ノード2Aとノード2Bとで更新対象レコードが競合したか否かの判定を行う。ここで、現時点の時刻は「20090101010101005」とする。
更新対象競合判定部112Aは、自ノード用redoログ120Aのタイムスタンプ欄121Aを参照することで、TxAの開始が「20090101010101001」であることを把握し、他ノード用redoログ130Aのタイムスタンプ欄131Aの日時が「20090101010101001」から「20090101010101005」までの間のエントリで自ノード用redoログ120AのDB操作アドレス欄124Aの値と他ノード用redoログ130AのDB操作アドレス欄134Aの値が一致するエントリがあるか否か調べるが、一致するエントリはないと分かる。その為、更新対象競合判定部112Aは、更新対象レコードの競合はないと判定する。
【0043】
次に、ノード2Aのredoログ更新部111Aは、更新対象レコードの競合はないと判定されたので、DB操作コード欄123Aに「commit」を設定したエントリを、自ノード用redoログ120Aに1行追加する。また、redoログ更新部111Aは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Bに送信する。さらに、redoログファイル更新部113Aは、自ノード用redoログ120Aの内容をredoログファイル221Aに書き出す。
ノード2Bのredoログ更新部111Bは、受信したredoログ情報300を基に、他ノード用redoログ130Bにエントリを1行追加する。さらに、redoログファイル更新部113Bは、他ノード用redoログ130Bの内容をredoログファイル221Bに書き出す。
【0044】
(ステップS003B)
ノード2Bの更新対象競合判定部112Bは、commitを行うときに、ノード2Aとノード2Bとで更新対象レコードが競合したか否かの判定を行う。ここで、現時点の時刻は「20090101010101006」とする。
更新対象競合判定部112Bは、自ノード用redoログ120Bのタイムスタンプ欄121Bを参照することで、TxBの開始が「20090101010101002」であることを把握し、他ノード用redoログ130Bのタイムスタンプ欄131Bの日時が「20090101010101002」から「20090101010101006」までの間のエントリで自ノード用redoログ120BのDB操作アドレス欄124Bの値と他ノード用redoログ130BのDB操作アドレス欄134Bの値が一致するエントリがあるか否か調べるが、一致するエントリはないと分かる。その為、更新対象競合判定部112Bは、更新対象レコードの競合はないと判定する。
【0045】
次に、ノード2Bのredoログ更新部111Bは、更新対象レコードの競合はないと判定されたので、DB操作コード欄123Bに「commit」を設定したエントリを、自ノード用redoログ120Bに1行追加する。また、redoログ更新部111Bは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Aに送信する。さらに、redoログファイル更新部113Bは、自ノード用redoログ120Bの内容をredoログファイル221Bに書き出す。
ノード2Aのredoログ更新部111Aは、受信したredoログ情報300を基に、他ノード用redoログ130Aにエントリを1行追加する。さらに、redoログファイル更新部113Aは、他ノード用redoログ130Aの内容をredoログファイル221Aに書き出す。
以上で、第1実施形態に係るデータベース制御システム1のデータベース更新動作(更新データの競合なし)の説明を終了する。
【0046】
図7は、第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)の説明図である。
図7は、ノード2AでTxAが、ノード2BでTxBがほぼ同時に実行される場合の処理の流れを示している。TxA,TxB共に、アドレス#0001のレコードを更新するので更新対象レコードが競合する。他ノード用redoログ130上の白抜き矢印は、更新対象競合判定部112が競合判定を行う時間帯を表している。
【0047】
なお、説明に際して、redoログ120,130及びredoログ情報300のデータの設定の記載については、一部省略する。
また、各ステップ後の、ノード2Aの自ノード用redoログ120A,及びノード2Bの他ノード用redoログ130Bの状態、さらに、ノード2Bの自ノード用redoログ120B,及びノード2Aの他ノード用redoログ130Aの状態を図6A(a)〜(c)及び図8(a)〜(c)に示す。
【0048】
(ステップS001A,S001B,S002A)
ステップS001A,S001B,S002Aの処理は、前記第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合なし)の説明(図5参照)と同じなので説明を省略する。
【0049】
(ステップS002B)
ノード2Bのredoログ更新部111Bは、DB操作コード欄123Bに「update」を設定し、DB操作アドレス欄124Bに「0001」を設定し、DB操作パラメタ欄125Bに「BBBBB」を設定したエントリを、自ノード用redoログ120Bに1行追加する。また、redoログ更新部111Bは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Aに送信する。
ノード2Aのredoログ更新部111Aは、受信したredoログ情報300を基に、他ノード用redoログ130Aにエントリを1行追加する。
【0050】
(ステップS003A)
ノード2Aの更新対象競合判定部112Aは、commitを行うときに、ノード2Aとノード2Bとで更新対象レコードが競合したか否かの判定を行う。ここで、現時点の時刻は「20090101010101005」とする。
更新対象競合判定部112Aは、自ノード用redoログ120Aのタイムスタンプ欄121Aを参照することで、TxAの開始が「20090101010101001」であることを把握し、他ノード用redoログ130Aのタイムスタンプ欄131Aの日時が「20090101010101001」から「20090101010101005」までの間のエントリで、自ノード用redoログ120AのDB操作アドレス欄124Aの値と他ノード用redoログ130AのDB操作アドレス欄134Aの値とが一致するエントリがあるが、DB操作コード欄133Aに「commit」が設定されたエントリがないと分かる。その為、更新対象競合判定部112Aは、更新対象レコードの競合はないと判定する。
【0051】
次に、ノード2Aのredoログ更新部111Aは、更新対象レコードの競合はないと判定されたので、DB操作コード欄123Aに「commit」を設定したエントリを、自ノード用redoログ120Aに1行追加する。また、redoログ更新部111Aは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Bに送信する。さらに、redoログファイル更新部113Aは、自ノード用redoログ120Aの内容をredoログファイル221Aに書き出す。
ノード2Bのredoログ更新部111Bは、受信したredoログ情報300を基に、他ノード用redoログ130Bにエントリを1行追加する。さらに、redoログファイル更新部113Bは、他ノード用redoログ130Bの内容をredoログファイル221Bに書き出す。
【0052】
(ステップS003B)
ノード2Bの更新対象競合判定部112Bは、commitを行うときに、ノード2Aとノード2Bとで更新対象レコードが競合したか否かの判定を行う。ここで、現時点の時刻は「20090101010101006」とする。
更新対象競合判定部112Bは、自ノード用redoログ120Bのタイムスタンプ欄121Bを参照することで、TxBの開始が「20090101010101002」であることを把握し、他ノード用redoログ130Bのタイムスタンプ欄131Bの日時が「20090101010101002」から「20090101010101006」までの間のエントリで自ノード用redoログ120BのDB操作アドレス欄124Bの値と他ノード用redoログ130BのDB操作アドレス欄134Bの値とが一致するエントリがあり、かつ、DB操作コード欄133Bに「commit」が設定されたエントリもあると分かる。その為、更新対象競合判定部112Bは、更新対象レコードの競合があると判定する。
【0053】
次に、ノード2Bのredoログ更新部111Bは、更新対象レコードの競合があると判定されたので、DB操作コード欄123Bに「rollback」を設定したエントリを、自ノード用redoログ120Bに1行追加する。また、redoログ更新部111Bは、追加したエントリと同じ内容でredoログ情報300を作成し、このredoログ情報300をノード2Aに送信する。そして、ノード2Bは、TxBの実行を中止する。
ノード2Aのredoログ更新部111Aは、受信したredoログ情報300を基に、他ノード用redoログ130Aにエントリを1行追加する。
以上で、第1実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)の説明を終了する。このように、本実施形態に係るデータベース制御システムでは、更新操作において競合があっても、待ちが発生することがない。
【0054】
≪第2実施形態に係るデータベース制御システムを構成するノードの機能及び使用するフォーマット≫
<ノードが備える機能>
(概要)
第1実施形態に係るノード2(図2参照)では、前記した通り、ノード2間で更新対象レコードが競合した場合に、先にcommitした方を優先する。そして、自ノード用redoログ120と他ノード用redoログ130の情報を比較する際には、各ノード2で同期しているタイマ6(図1参照)に基づいてredoログ120,130のタイムスタンプ欄121,131に書き込まれる時刻の情報を利用して、参照するredoログ120,130の範囲を決定する。
【0055】
実際には、ノード2間でのredoログ情報300の送信には、ある程度時間がかかるため、commitを行うときに、即時に更新対象レコードの競合を判定することができない。すなわち、自己のノードでcommitを行うときに、自己のノードが備える他ノード用redoログ130には他のノードのcommitの情報が反映されていないが、実際には、他のノードでcommitが行われており、redoログ情報300の伝送遅延により自己のノードが備える他ノード用redoログ130に他のノードのcommitの情報が反映されていない場合である。この場合、自己のノードは、commitを行う時点では他のノードがcommitを行っているのか否かを判定することができない。
【0056】
そのため、第2実施形態に係るノードは、更新情報がない場合も定期的にタイムスタンプ欄以外はデータを設定しないredoログ情報(以下、空のredoログ情報と称す)を他ノードに送信し、空のredoログ情報を受信したノードは、受信した時刻と空のredoログ情報のタイムスタンプ欄に格納される時刻との差を更新対象レコードが競合したか否かの判定に利用する。
ここで、第2実施形態に係るデータベース制御システムの構成は、図1に示す第1実施形態に係るデータベース制御システム1と同じである。
以下、第2実施形態に係るノードについて説明する。
【0057】
図9は、第2実施形態に係るデータベース制御システムを構成するノードの機能構成図である。図9では、各機能を「○○部」と記載している。
第2実施形態に係るノード2は、第1実施形態に係るノード2(図2参照)の機能に加えてさらに、redoログ情報送信遅延演算部115を備える。また、redoログ更新部111,及び更新対象競合判定部112の機能が異なる。それ以外のデータ構成等は第1実施形態と同様である。以下、説明する。
【0058】
(redoログ更新部)
redoログ更新部111は、第1実施形態に係るredoログ更新部111の機能に加えて、以下の機能を備える。
本実施形態に係るredoログ更新部111は、自ノード用redoログ120の更新をしておらず、本来ならば、他ノードに対してredoログ情報を送信する必要がない場合でも、図4に示すタイムスタンプ欄301に「時刻」を設定し、それ以外の欄にはデータを設定しない空のredoログ情報300を、定期的に他のノード2に送信する機能を備える。
【0059】
(redoログ情報送信遅延演算部)
redoログ情報送信遅延演算部115は、空のredoログ情報300を受信したら、現在の時刻と、空のredoログ情報300のタイムスタンプ欄301に設定される時刻との時間差をメモリ上に保存する。
ここで、メモリ上に保存する時間差は、現在の時刻と直近の空のredoログ情報300に設定される時刻との単純な時間差だけでなく、現在の時刻と受信した複数個のredoログ情報300に設定されている時刻との平均値との差としてもよい。また、メモリ上に保存される時間差には、上記以外にも種々の影響を考慮した値を設定することができる。
【0060】
(更新対象競合判定部)
本実施形態に係る更新対象競合判定部112は、自己のノード2でトランザクションが発生し、かつ、commitを行うときに、redoログ情報送信遅延演算部115によりメモリ上に保存された時間差分だけ待って、自己のノード2(2A)と他のノード2(2B)とで更新対象レコードが競合したか否かの判定を行う。
すなわち、更新対象競合判定部112は、トランザクションの開始からcommitを行ったときからメモリ上に保存される時間差分加えた時間帯までの他ノード用redoログ130の内容を調べることで更新対象レコードの競合を判定する。
【0061】
≪第2実施形態に係るデータベース制御システムのデータベース更新動作≫
以下、図10を参照して第2実施形態に係るデータベース制御システムのデータベース更新動作について説明する。
図10は、第2実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)の説明図である。
図10は、ノード2AでTxAが、ノード2BでTxBがほぼ同時に実行される場合の処理の流れを示している。TxA,TxB共に、アドレス#0001のレコードを更新するので更新対象レコードが競合する。以下、ステップS003Bを使って本実施形態の動作を説明する。
【0062】
なお、説明に際して、redoログ120,130及びredoログ情報300のデータの設定の記載については、一部省略する。
また、ステップ後の、ノード2Aの自ノード用redoログ120A,及びノード2Bの他ノード用redoログ130Bの状態、さらに、ノード2Bの自ノード用redoログ120B,及びノード2Aの他ノード用redoログ130Aの状態は図8(a)〜(c)と同じである。
【0063】
(ステップS003B)
ノード2Bの更新対象競合判定部112Bは、commitを行う前に、自ノードと他ノードとで更新対象レコードが競合したか否かの判定を行う。ここで、現時点の日時は「20090101010101006」だとする。また、ノード2Bのredoログ情報送信遅延演算部115は、空のredoログ情報を受信して一定の時間差があることを把握し、この時間差をメモリ上に保存している。
【0064】
更新対象競合判定部112Bは、現時点からメモリ上に保存した時間差後に更新対象レコードが競合したか否かの判定を行う。更新対象競合判定部112Bは、自ノード用redoログ120Bのタイムスタンプ欄121Bを参照することで、TxBの開始が「20090101010101002」であることを把握し、他ノード用redoログ130Bのタイムスタンプ欄131Bの日時が「20090101010101002」から「20090101010101006」までの間のエントリで自ノード用redoログ120BのDB操作アドレス欄124Bの値と他ノード用redoログ130BのDB操作アドレス欄134Bの値とが一致するエントリがあり、かつ、DB操作コード欄133Bに「commit」が設定されたエントリもあると分かる。その為、更新対象競合判定部112Bは、更新対象レコードの競合があると判定する。
【0065】
仮に、更新対象競合判定部112Bが、現時点「20090101010101006」で競合を判定した場合を想定する。現時点では、ノード2Aのcommit情報がノード2Bに届いていないので、更新対象競合判定部112Bは、実際は競合があるのに、競合なしと判定してしまう。
以上で、第2実施形態に係るデータベース制御システムのデータベース更新動作(更新データの競合あり)の説明を終了する。
【0066】
なお、本実施形態に係るデータベース制御システムは、自己のノードでcommitを行うときに、自己のノードが備える他ノード用redoログ130には他のノードのcommitの情報が反映されていないが、他のノードでcommitが行われており、redoログ情報300の伝送遅延により自己のノードが備える他ノード用redoログ130に他のノードのcommitの情報が反映されていない場合に有効である。
【0067】
(第2実施形態に係るデータベース制御システムの効果)
ノード間の伝送に遅延が生じても、更新対象レコードの競合の判定を行うことが可能になる。
【符号の説明】
【0068】
1 データベース制御システム
2(2A,2B) ノード(計算機)
6(6A,6B) タイマ
100(100A,100B) 制御装置
110(110A,110B) データベース管理部
111(111A,111B) redoログ更新部
112(112A,112B) 更新対象競合判定部
115(115A,115B) redoログ情報送信遅延演算部
120(120A,120B) 自ノード用redoログ(自己更新情報)
130(130A,130B) 他ノード用redoログ(他の更新情報)
200(200A,200B) 記憶装置
210(210A,210B) DBMS(データベース管理プログラム)
220(220A,220B) DB(データベース)
300 redoログ情報(更新データ)

【特許請求の範囲】
【請求項1】
複数の同じ内容のデータベースに通信可能に接続されて多重化されたデータベースのうち少なくとも1つを備える計算機であって、
自己が保有するデータベースの自己更新情報と、自己が保有するデータベース以外のデータベースの他の更新情報とを各データベース毎に分けて保有する記憶部と、
前記自己更新情報を更新する際に、前記他の更新情報を参照することで、前記多重化されたデータベースの更新における競合を判定する競合判定部と、
を備えることを特徴とする計算機。
【請求項2】
前記他の更新情報は、自己以外の計算機が各々備えるデータベースの更新データを受信したときに前記記憶部に記憶される、
ことを特徴とする請求項1に記載の計算機。
【請求項3】
前記競合判定部は、前記自己更新情報の更新の開始から結果確定までの時間帯で、前記自己更新情報の更新対象レコードのアドレスと前記他の更新情報の更新対象レコードのアドレスとが一致し、かつ、他の更新情報の更新処理が結果確定している場合に前記多重化されたデータベースの更新が競合したと判定する、
ことを特徴とする請求項2に記載の計算機。
【請求項4】
自己以外の計算機が発信する発信時刻を記載したデータを受信する時刻と、この発信時刻との時間差を計算する遅延演算部をさらに備え、
前記競合判定部は、前記時間差だけ待って前記多重化されたデータベースの更新が競合したか否かの判定を行う、
ことを特徴とする請求項2又は請求項3に記載の計算機。
【請求項5】
前記発信する発信時刻を記載したデータは、前記更新データである、
ことを特徴とする請求項4に記載の計算機。
【請求項6】
複数の同じ内容のデータベースに通信可能に接続されて多重化されたデータベースのうち少なくとも1つを備える計算機の制御装置に実行させるデータベース管理プログラムであって、
前記自己の計算機が保有するデータベースの自己更新情報と、前記自己が保有するデータベース以外のデータベースの他の更新情報とを各データベース毎に分けて記憶部に保有させる機能と、
前記自己情報を更新する際に、前記他の更新情報を参照することで、前記多重化されたデータベースの更新における競合を判定する機能と、
を前記制御装置に実現させることを特徴とするデータベース管理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6A】
image rotate

【図6B】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate