JP6398786B2 - データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム - Google Patents

データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム Download PDF

Info

Publication number
JP6398786B2
JP6398786B2 JP2015037257A JP2015037257A JP6398786B2 JP 6398786 B2 JP6398786 B2 JP 6398786B2 JP 2015037257 A JP2015037257 A JP 2015037257A JP 2015037257 A JP2015037257 A JP 2015037257A JP 6398786 B2 JP6398786 B2 JP 6398786B2
Authority
JP
Japan
Prior art keywords
sequence number
database
data
server
client
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015037257A
Other languages
English (en)
Other versions
JP2016161980A (ja
Inventor
阿部 哲也
哲也 阿部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP2015037257A priority Critical patent/JP6398786B2/ja
Publication of JP2016161980A publication Critical patent/JP2016161980A/ja
Application granted granted Critical
Publication of JP6398786B2 publication Critical patent/JP6398786B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムに関し、例えば、連続したシーケンス番号に基づくデータ管理を行うシステムに適用し得る。
一般に、データベースサーバ(以下、「DBサーバ」とも呼ぶ)において、順序性を持つデータを管理する際、データ(レコード)登録時、各データに対して、登録順序番号となる、シーケンス番号を付与する。
このシーケンス番号は、例えば、データベースクライアント(以下、「DBクライアント」とも呼ぶ)上のアプリケーション(以下、「クライアントAPL」とも呼ぶ)がその順序性を管理することで、連続したシーケンス番号の取得が可能となる。
この方式の場合、DBクライアントが1台の場合はDBサーバ上で、シーケンス番号によるデータの順序性が確保できる。しかしながら、DBクライアントが複数台となった場合には、各クライアントAPLが独自にシーケンス番号を管理しているため、各DBクライアント単位では、連続したシーケンス番号が付与されている。しかし、DBサーバ上のデータにおいて、一元的なシーケンス番号とならない場合がある。
例えば、この問題を解決する従来の方式として、ORACLE(登録商標)データベースが具備するシーケンス管理機能(CREATE SEQUENCE句)がある(非特許文献1参照)。この機能の利用によって、DBサーバ側でシーケンス番号を払い出すため、DBクライアントが複数台ある場合でも、上記の課題は解決できる。
Oracle,Oracle(R) Database SQL言語リファレンス11gリリース2 (11.2)"CREATE SEQUENCE",[Online],INTERNET,[2015年2月13日検索],<URL:http://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_6015.htm>
しかし、従来のDBサーバ(例えば、ORACLEのDBサーバ)のシーケンス番号の払い出しにおいては、一意となる番号を払い出すことは保証しているが、条件により連続した番号の払い出しが保証されているわけではない。
つまり、従来のDBサーバでは、通常の運用において、例えば、データ登録要求が4つしか発生していない場合でも、払いだされるシーケンス番号が、連続しない可能性がある。具体的には、例えば、DBサーバから払い出されるシーケンス番号が000001、000002、000004、000007のように不連続となる可能性がある。これは、従来のDBサーバにおいて、シーケンス番号の取得を要求するDBクライアントの競合した場合等(例えば、競合等によりコミットが失敗した場合等)に発生する。
また、従来のDBサーバにおいて、登録データがロールバックされた場合も払い出された番号は欠番となる。
従って、従来のDBサーバでは、上述のようなシーケンス番号の制御機能により、データを管理する場合、欠番となっているシーケンス番号(例えば、上述の例では000003、000005、000006)のデータは、元々存在しないデータなのか、存在していたが削除されたデータなのかを判別することは難しい。このような場合、従来のDBサーバでは、別途、削除履歴データの生成や、削除フラグによる管理等、アプリケーションプログラムによりカバーしなければならない条件が必要となる。
また、従来のORACLEのDBサーバのシーケンス管理機能では、CREATE SEQUENCE句を発行したDBサーバ(=DBサーバ上で起動されているインスタンス)上でのみ、シーケンス番号の管理が有効となる。したがって、従来のORACLEのDBサーバを採用したシステムでは、DBサーバが冗長化されたシステム構成で利用が難しいという問題があった。
以上のような問題に鑑みて、複数のデータベースクライアント等が存在する場合でも、連続したシーケンス番号を用いてデータベースのデータ更新を行うことができるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムが望まれている。
第1の本発明は、複数のデータベースクライアントと、上記データベースクライアントに接続するデータベースサーバとを有するデータベースシステムにおいて、(1)上記データベースサーバは、(1−1)複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、(1−2)上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、(1−3)上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、(1−4)上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、(1−5)上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行い、(2)それぞれの上記データベースクライアントは、(2−1)上記データベースサーバに、上記データベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、(2−2)上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、(2−3)上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、(2−4)上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有することを特徴とする。
第2の本発明は、複数のデータベースクライアントに接続するデータベースサーバにおいて、(1)複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、(2)上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、(3)上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、(4)上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、(5)上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行うことを特徴とする。
第3の本発明のデータベースサーバプログラムは、複数のデータベースクライアントに接続するデータベースサーバに搭載されたコンピュータを、(1)複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、(2)上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、(3)上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、(4)上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段として機能させ、(5)上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行うことを特徴とする。
第4の本発明は、データベースサーバに接続するデータベースクライアントにおいて、(1)上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、(2)上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、(3)上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、(4)上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有することを特徴とする。
第5の本発明のデータベースクライアントプログラムは、データベースサーバに接続するデータベースクライアントに搭載されたコンピュータを、(1)上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、(2)上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、(3)上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、(4)上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段として機能させることを特徴とする。
本発明によれば、複数のデータベースクライアント等が存在する場合でも、連続したシーケンス番号を用いてデータベースのデータ更新を行うことができる。
第1の実施形態に係るデータベースシステム(DBシステム)の全体構成について示したブロック図である。 第1の実施形態に係るデータベースクライアントの機能的構成のについて示したブロック図である。 第1の実施形態に係るデータベースを構成する表(データ)の構成例について示した説明図である。 第1の実施形態に係るデータベースクライアントの動作について示したフローチャートである。 第1の実施形態に係るデータベースシステムの動作について示したシーケンス図である。 第1の実施形態に係るデータベースを構成する表(データ)の遷移について示した説明図である。 第2の実施形態に係るデータベースシステム(DBシステム)の全体構成について示したブロック図である。 第2の実施形態に係るデータベースを構成するシーケンス番号管理表の構成例について示した説明図である。 第2の実施形態に係るデータベースを構成する表(データ)の構成例について示した説明図である。 第2の実施形態に係るデータベースクライアントの動作について示したフローチャートである。 第2の実施形態に係るデータベースクライアントからデータベースサーバに送信されるSQL文の例について示した説明図である。 第2の実施形態に係るデータベースシステムの動作について示したシーケンス図(その1)である。 第2の実施形態に係るデータベースシステムの動作について示したシーケンス図(その2)である。 第2の実施形態に係るデータベースを構成するシーケンス番号管理表の遷移について示した説明図(その1)である。 第2の実施形態に係るデータベースを構成する表(データ)の遷移について示した説明図(その1)である。 第2の実施形態に係るデータベースシステムの動作について示したシーケンス図(その3)である。 第2の実施形態に係るデータベースを構成するシーケンス番号管理表の遷移について示した説明図(その2)である。 第2の実施形態に係るデータベースを構成する表(データ)の遷移について示した説明図(その2)である。
(A)第1の実施形態
以下、本発明によるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムの第1の実施形態を、図面を参照しながら詳述する。
(A−1)第1の実施形態の構成
図1は、この実施形態のDBシステム1の全体構成を示すブロック図である。
DBシステム1は、DBサーバ10と、2つのDBクライアント20(20−1、20−2)を有している。なお、DBシステム1において配置されるDBサーバ10及びDBクライアント20の数は限定されないものである。DBシステム1において、各装置はネットワークNに接続し、相互に通信可能であるものとする。
DBサーバ10は、例えば、CPUやメモリ等を有するコンピュータに、データベースサーバプログラムを含むプログラムをインストールすることにより構築することができる。また、各DBクライアント20についても同様にコンピュータにデータベースクライアントプログラムを含むプログラムをインストールすることにより構築することができる。
DBサーバ10は、データベースのデータを記憶するためのDBファイルシステム12と、各DBクライアント20にDBファイルシステム12に記憶されたデータベースを利用したサービスを提供(トランザクションの処理を実行)するサーバプロセス11とを有している。サーバプロセス11は、例えば、RDBMS(Relational Database Management System)等のデータベースのミドルウェアを用いて構築することができる。
この実施形態では、DBファイルシステム12に、表Aが格納されているものとして説明する。そして、この実施形態では、サーバプロセス11は、DBクライアント20(クライアントAPL21)の要求に応じて、表Aのデータ(レコード)を更新する。
図3は表Aの構成例について示した説明図である。
図3では、1行で1つのデータ(レコード)を図示している。なお、この実施形態では、DBサーバ10はテーブル形式の表Aを処理するものとして説明するが、DBサーバ10で処理する具体的なデータベースの構造については限定されないものである。図3に示すように表Aの各データには、当該データの更新に係るシーケンス番号のカラムを含む複数の項目のカラムが含まれている。
次に、DBサーバ10(サーバプロセス11)における表Aの処理について説明する。
まず、DBサーバ10(サーバプロセス11)では、シーケンス番号のカラム(以下、「シーケンス番号カラム」とも呼ぶ)を含む表(例えば、表A)の定義において、「シーケンス番号カラムに一意性を持たせる」必要がある。表Aに対して、上述の条件が付与されていれば、例えば、2台のDBクライアント20−1、20−2から、同一のシーケンス番号でデータを登録しようとした際に、後発の要求については、サーバプロセス11でシーケンス番号の二重登録エラーを検出することが可能となる。このとき、サーバプロセス11は、後発の要求に係るDBクライアント20に対して二重登録エラーを通知することができる。
DBサーバ10上でシーケンス番号を持つ表の定義の一意性とは、例えば、RDBMSがORACLEデータベースの場合は、シーケンス番号カラムに対して一意性制約である「ユニークキー制約」を付与することを意味する。しかし、この場合、DBサーバ10上でシーケンス番号カラムが未設定のデータは存在してはいけない理由から、シーケンス番号カラムをプライマリキーにすることが望ましい。プライマリキーとは、一意性制約、且つ、カラムNULL設定を非許容(NOT NULL 制約)とするカラム(キー)のことである。なお、シーケンス番号カラムに、ユニークキー制約と「NOT NULL 制約」を同時に付与した場合も、プライマリキーと同等の意味も持つことになる。したがって、DBサーバ10では、シーケンス番号カラムにプライマリキーを設定する代わりに、ユニークキー制約と「NOT NULL 制約」を同時に付与する設定としてもよい。
以上の通り、DBサーバ10では、表Aのシーケンス番号カラムに対して、ORACLEデータベースが持つ制約の機能を利用して、「プライマリキーの制約付与」、若しくは、「ユニークキー制約及びNOT NULL制約の制約付与」のいずれかが行われているものとする。なお、この実施形態では、表Aを例として説明しているが、その他のシーケンス番号カラムを備える表(データベース)についても、同様の制約付与を行うようにしてもよい。
次に、各DBクライアント20の内部構成について図2を用いて説明する。
DBクライアント20は、DBサーバ10のデータベースへのアクセスを伴う処理(アプリケーションの処理)を行うクライアントAPL21と、DBクライアント20にDBサーバ10へのアクセスするための(インタフェース)を提供するデータベースアクセスライブラリ22とを有している。
データベースアクセスライブラリ22としては、例えば、ORACLEデータベースのクライアントライブラリを適用することができる。データベースアクセスライブラリ22により、クライアントAPL21は、DBサーバ10上の任意の表(データベース)に対してSQLを発行し、表のデータの登録、更新、削除、参照等が可能となる。
データベースクライアントプログラムとしてのクライアントAPL21は、シーケンス番号取得部211、シーケンス番号生成部212、データ更新部213、及びエラー分析部214を有している。
シーケンス番号取得部211は、DBサーバ10に最新のシーケンス番号を要求して取得する処理を行う。シーケンス番号取得部211は、DBサーバ10上の更新対象の表(例えば、表A等のシーケンス番号カラムを含む表)から、最新のシーケンス番号(シーケンス番号が昇順であれば、最大の値)を取得する。
シーケンス番号生成部212は、シーケンス番号取得部211が取得したシーケンス番号に基づいて、新たなシーケンス番号(次のデータ処理要求に用いるシーケンス番号)を生成する処理を行う。例えば昇順のシーケンス番号の場合、シーケンス番号生成部212は、取得したシーケンス番号が「1」ならば、取得したシーケンス番号をインクリメント(+1)した「2」を新たなシーケンス番号として生成する。
データ更新部213は、シーケンス番号生成部212で生成されたシーケンス番号を用いて、DBサーバ10へのデータ更新の要求(この実施形態では、表Aのレコード処理の要求)を行う。
エラー分析部214は、データ更新部213がDBサーバ10にアクセスした際の結果を分析する処理を行う。エラー分析部214は、データ更新部213が要求したデータ更新の要求に対してDBサーバ10からエラーが通知された場合、当該エラーの内容を分析し、その分析結果に応じた処理を行うように、クライアントAPL21を制御する処理を行う。エラー分析部214は、例えば、DBサーバ10から、シーケンス番号の二重登録エラーを受信した場合、リトライ処理(シーケンス番号の再取得、シーケンス番号の再生成、及びデータ更新の再要求)の実施を決定する。
DBクライアント20のクライアントAPL21では、表A(シーケンス番号カラムを備える表)へのデータ更新時に、シーケンス番号の二重登録エラーが通知された場合、シーケンス番号取得部211及びシーケンス番号生成部212により再度シーケンス番号の取得・生成が行われる。そして、データ更新部213は、再度取得・生成したシーケンス番号を用いて、表Aへのデータ更新をリトライする。
以上のように、DBクライアント20のクライアントAPL21では、表Aへのデータ更新時に、エラー分析部214で二重登録エラーが発生すると、シーケンス番号を再度取得・生成し、データ登録するリトライ機能を実装している。これにより、DBクライアント20では、シーケンス番号の二重登録エラーをプログラム内(クライアントAPL21内)に閉じて、処理することが可能となる。
(A−2)第1の実施形態の動作
次に、以上のような構成を有する第1の実施形態のDBシステム1の動作を説明する。
まず、DBクライアント20におけるクライアントAPL21の動作について図4のフローチャートを用いて説明する。
図4では、クライアントAPL21において、表Aに対するデータ更新(新規のデータ登録)が発生し、当該データ更新が完了するまでの動作について示している。
クライアントAPL21において、表Aに対するデータ更新が発生すると、まず、シーケンス番号取得部211が、DBサーバ10(サーバプロセス11)に対して、表Aに係るシーケンス番号(最新のシーケンス番号)の読み出しを要求して取得する(S101)。
シーケンス番号取得部211は、例えば「SELECT MAX(シーケンス番号) FROM 表A;」というイメージのSQL文を用いて、表Aに係るシーケンス番号(最新のシーケンス番号)を要求することができる。上述のSQL文は、表A内のレコードから、シーケンス番号の最大値を取得することを示す内容となっている。
次に、シーケンス番号生成部212が、取得したシーケンス番号を用いて、新たなシーケンス番号(取得したシーケンス番号に「1」を加算したシーケンス番号)を生成する。そして、生成したシーケンス番号を用いて、データ更新部213が、DBサーバ10(サーバプロセス11)に、表Aのデータ更新(新規のデータ登録)を要求する(S102)。なお、表Aのレコード件数が0件の場合(シーケンス番号取得部211でシーケンス番号が取得できない場合)、シーケンス番号生成部212は、初期値としてシーケンス番号「000001」を生成するようにしてもよい。
その後、クライアントAPL21は、DBサーバ10(サーバプロセス11)からの、処理結果の通知(例えば、エラーや正常終了)を受信し通知内容に応じた処理を判断する(S103)。このとき、クライアントAPL21は、シーケンス番号の2重登録が通知された場合は上述のステップS101から動作してデータ更新のリトライ処理(エラー分析部214の決定に基づくリトライ処理)を行い、正常終了が通知された場合には後述するステップS104から動作する。
DBサーバ10(サーバプロセス11)から、データ更新の正常終了を受信した場合、クライアントAPL21のデータ更新部213は、DBサーバ10(サーバプロセス11)に対して、最新のデータ更新で用いたシーケンス番号(最新にシーケンス番号生成部212で生成したシーケンス番号)を用いて、データコミットの要求を行い(S104)、処理を終了する。
次に、2つのDBクライアント20−1、20−2が、同じタイミングでDBサーバ10に対して表Aのデータ更新(新規レコード登録)を要求した場合の動作について、図5のシーケンス図を用いて説明する。また、図6は、DBシステム1の各装置が図5のシーケンス図に従って動作した場合の表Aの遷移について示した説明図である。図5のシーケンス図では、表Aの初期状態は、図6(a)の状態であるものとしている。図6(a)に示すように、表Aは初期状態において、シーケンス番号「000001」のデータ(項目1:「aaa」、…)のみが登録されている。
なお、図5のシーケンス図では、説明を簡易とするため、DBクライアント20によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、DBクライアント20による登録要求後のコミットは全て成功したものとして図示している。
そして、ここでは、2つのDBクライアント20−1、20−2で、同じタイミングでDBサーバ10の表Aへのデータ登録のデータ更新が発生し、シーケンス番号の読出し要求が同時にDBサーバ10に到達したものとする(S201、S202)。
この場合、DBサーバ10のサーバプロセス11は、DBクライアント20−1、20−2の要求のそれぞれに対して、表Aから最新のシーケンス番号「000001」を読み出して返答する(S203、S204、S205)。
DBクライアント20−1、20−2では、それぞれ最新のシーケンス番号として「000001」を取得することになるため、それぞれ新しいシーケンス番号として「000002」を生成することになる(S206、S207)。
次に、DBクライアント20−2が先に、DBサーバ10に対して表Aに新規データを登録する要求(データ更新要求)を送信したものとする(S208)。このとき、DBクライアント20−2が要求したデータはシーケンス番号が「00002」、データの内容が「項目1:ccc、…」であったものとする。そして、DBサーバ10は、DBクライアント20−2の登録要求に応じて、表Aにシーケンス番号が「00002」のデータ(項目1:ccc、…)を登録し(S209)、DBクライアント20−2にデータ登録OKを返答する(S212)。この時点で、表Aの内容は、図6(b)の状態となる。
DBクライアント20−2では、DBサーバ10からのデータ登録OKの返答を受けて、今回のデータ登録の処理を終了する(S215)。
一方上述のステップS208よりも後のタイミングで、DBクライアント20−1から、DBサーバ10に対して表Aに新規データを登録する要求(データ更新要求)が送信されたものとする(S210)。このとき、DBクライアント20−1が要求したデータはシーケンス番号が「00002」、データの内容が「項目1:bbb、…」であったものとする。そして、DBサーバ10は、DBクライアント20−2の登録要求を受信するが、表Aにシーケンス番号が「00002」のデータが既に登録されているため、シーケンス番号の二重登録エラーを検出し(S211)、DBクライアント20−2にデータ登録NG(シーケンス番号の二重登録エラーを原因とするNG)を返答する(S213)。
DBクライアント20−1では、DBサーバ10からのデータ登録NG(シーケンス番号の二重登録エラーを原因とするNG)を受けて、データ登録のリトライを決定することになる(S214)。
データ登録のリトライを開始すると、まず、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号の読出し要求を送信する(S216)。
そして、DBサーバ10は、DBクライアント20−1からのシーケンス番号の読出し要求に応じて、表Aの最新のシーケンス番号「000002」を読み出して(S217)、DBクライアント20−1に返答する(S218)。
次に、DBクライアント20−1は、取得した最新のシーケンス番号「000002」に基づいて、新しいシーケンス番号「000003」を生成する(S219)。
次に、DBクライアント20−1は、生成したシーケンス番号「000003」を用いて、DBサーバ10に対して表Aに新規データを登録する要求(データ更新要求)を送信する(S220)。このとき、DBクライアント20−1が要求したデータはシーケンス番号が「00003」であり、その他の内容が「項目1:bbb、…」(最初に行ったデータ登録要求と同じ内容)であったものとする。
そして、DBサーバ10は、DBクライアント20−1の登録要求に応じて、表Aにシーケンス番号が「00003」のデータ(項目1:bbb、…)を登録し(S221)、DBクライアント20−2にデータ登録OKを返答する(S222)。この時点で、表Aの内容は、図6(c)の状態となる。
次に、DBクライアント20−1は、DBサーバ10からのデータ登録OKの返答を受けて、今回のデータ登録の処理を終了する(S223)。
(A−3)第1の実施形態の効果
第1の実施形態によれば、以下のような効果を奏することができる。
第1の実施形態のDBサーバ10では、複数DBクライアント20からのデータ登録要求に対して、登録データ毎にシーケンス番号を付与し、付与したシーケンス番号を用いたデータ登録を受付ける。また、DBサーバ10では、既に登録されているデータのシーケンス番号と、新たに登録要求を受付けたデータのシーケンス番号とを比較して、二重登録となる場合にはDBクライアント20にエラーを送信する。そして、DBクライアント20はエラーを受付けると、DBサーバ10に対して、シーケンス番号の発行及びデータ登録要求のリトライを行う。このようなシーケンスの動作により、DBサーバ10では、複数DBクライアント20から同時にデータ登録の要求があった場合でも、データベースにおけるシーケンス番号の連続性を保つことができる。したがって、例えば、第1の実施形態のDBサーバ10では、シーケンス番号が不連続となったデータがあった場合、抜けているシーケンス番号に係るデータは削除されたと判断できる。
(B)第2の実施形態
次に、本発明によるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムの第2の実施形態を、図面を参照しながら詳述する。
(B−1)第2の実施形態の構成
図7は、第2の実施形態のDBシステム1Aの全体構成について示したブロック図であり、同一部分又は対応する部分には、同一符号又は対応する符号を付している。また、第2の実施形態のDBクライアント20−1、20−2の内部構成については、上述の図2を用いて示すことができる。
以下では、第2の実施形態について、第1の実施形態との差異を説明する。
第1の実施形態では、シーケンス番号を完全に一意(ユニーク)とする方式について説明した。すなわち、第1の実施形態では、シーケンス番号の取得を無限に増やす方式について説明したが、第2の実施形態では、シーケンス番号に上限を設け、循環的に再利用する方式(以下、「循環方式」とも呼ぶ)を適用する。
DBサーバ10において、シーケンス番号を循環利用する場合は、第1の実施形態で説明した、「シーケンス番号カラムに一意性を持たせる」という条件をそのまま適用することはできない。例えば、シーケンス番号の循環条件(払い出すシーケンス番号の範囲)が、000001から000100であるとき、101件目のデータが登録された際に生成されるシーケンス番号は000001となる。この場合、第1の実施形態では、シーケンス番号の二重登録エラーとなってしまうことになる。
そこで、第2の実施形態のDBサーバ10では、上述の二重登録エラーを回避するために、DBファイルシステム12にシーケンス番号を管理するための管理表Cを作成して保持している。そして、第2の実施形態のDBサーバ10は、シーケンス番号管理表Cにより管理されたシーケンス番号でデータ(レコード)を管理する表Bを有している。
図8は、シーケンス番号管理表Cの構成例について示している。また、図9は、表Bの構成例について示している。
表Bの各データ(レコード)は、シーケンス番号管理表Cで管理されたシーケンス番号と、その他の項目の内容(項目1、…)で構成されている。そして、シーケンス番号管理表Cでは、表Bにおける最新に登録されたデータのシーケンス番号と、その登録日時が管理されている。
図9に示す表Bでは、101件のデータが登録されている。そして、図9に示す表Bでは、シーケンス番号が000001〜000100まで1回転し、000001に循環して再利用された状態となっている。すなわち、図9に示す表Bでは、シーケンス番号000001のデータが2件登録されている。そして、図9に示す表Bでは、最新のシーケンス番号は000001となる。そして、図8は、表Bが図9の状態におけるシーケンス番号管理表Cの内容を示している。図8に示すシーケンス番号管理表Cでは、表Bの最新のシーケンス番号として000001が登録された状態となっている。
以上のように、第2の実施形態では、表Bとは別にシーケンス番号管理表Cを設けているため、表B(循環シーケンス番号を含めたデータを登録する表)において、「シーケンス番号カラムに一意性を持たせる」という条件を除外することができる。
また、第2の実施形態では、表Bとシーケンス番号管理表Cに分かれた構成となっているため、DBクライアント20(クライアントAPL21)で、表Bのデータ更新を行う際の動作も、第1の実施形態と異なる部分がある。
第2の実施形態のシーケンス番号取得部211は、シーケンス番号管理表Cから、最新のシーケンス番号を読み出す処理を行うことになる。
シーケンス番号管理表C(シーケンス番号循環方式を採用した表)に対するシーケンス番号読み出し要求は、例えば、図11(a)のようなイメージのSQL文で行うことができる。図11(a)のSQL文は、シーケンス番号管理表内にあるデータ(レコード)で、一番最後に登録されたデータ(最も最近登録されたデータ)から、シーケンス番号を取得する内容となっている。これにより、シーケンス番号取得部211は、現在の最新のシーケンス番号の値を取得することができる。
第2の実施形態のシーケンス番号生成部212は、シーケンス番号取得部211が取得したシーケンス番号に基づいて新しいシーケンス番号を循環的に生成する。すなわち、シーケンス番号生成部212は、シーケンス番号の循環条件における最大値(以下、「循環最大値」とも呼ぶ)が取得された場合、シーケンス番号を最小値に初期化する機能に対応している。例えば、シーケンス番号の循環条件が、000001〜000100であり、シーケンス番号管理表Cから取得したシーケンス番号が、000100であった場合、シーケンス番号生成部212は、次に使用するシーケンス番号を000001とする。
そして、第2の実施形態のデータ更新部213は、シーケンス番号管理表Cに対して、シーケンス番号生成部212が生成したシーケンス番号の登録が成功した後に、表Bに対するデータ更新要求を行うことになる。このとき、第2の実施形態のデータ更新部213は、シーケンス番号管理表Cに登録が成功したシーケンス番号を用いてデータ更新の要求を行うことになる。
また、シーケンス番号管理表C内のデータ(レコード)は、循環条件より少ないデータ数とする必要がある。この実施形態では、クライアントAPL21で、シーケンス番号管理表Cで、最新のシーケンス番号よりも過去のデータ(最新のシーケンス番号以外のデータ)を削除する処理に対応しているものとして説明する。
第2の実施形態の例では、データ更新部213が、シーケンス番号管理表Cに対して新しいシーケンス番号(新しいデータ)を登録する際に、図11(b)のようなイメージのSQL文を用いて、「最も最近登録されたシーケンス番号より過去のシーケンス番号のデータ(レコード)を、全て削除する処理」の要求を行うようにしてもよい。このように、シーケンス番号管理表Cから最新のシーケンス番号より過去のデータ削除することにより、シーケンス番号管理表Cでは、最新データ1件のみが残ることになる。なお、シーケンス番号管理表Cに対して、最新のシーケンス番号より過去のデータ削除を要求する主体はDBクライアント20に限定されずDBサーバ10側で行うようにしてもよい。また、シーケンス番号管理表Cに対して、最新のシーケンス番号より過去のデータ削除を行うタイミングは、新しいシーケンス番号を登録する毎ではなく、所定番号のシーケンス番号を登録するタイミングに限定するようにしてもよい。
(B−2)第2の実施形態の動作
次に、以上のような構成を有する第2の実施形態のDBシステム1Aの動作を説明する。
まず、第2の実施形態のDBクライアント20におけるクライアントAPL21の動作について図10のフローチャートを用いて説明する。
図10では、クライアントAPL21において、表Bに対するデータ更新(新規のデータ登録)が発生し、当該データ更新が完了するまでの動作について示している。
クライアントAPL21において、表Bに対するデータ更新が発生すると、まず、シーケンス番号取得部211が、DBサーバ10(サーバプロセス11)に対して、シーケンス番号管理表Cに係るシーケンス番号(最新のシーケンス番号)の読み出しを要求して取得する(S301)。
次に、シーケンス番号生成部212が、取得したシーケンス番号を用いて、新たなシーケンス番号(取得したシーケンス番号に「1」を加算したシーケンス番号)を循環的生成する。そして、データ更新部213が、生成したシーケンス番号を用いて、DBサーバ10(サーバプロセス11)に、シーケンス番号管理表Cのデータ更新(新規のデータ登録)を要求する(S302)。なお、シーケンス番号管理表Cのデータ件数が0件の場合(シーケンス番号取得部211でシーケンス番号が取得できない場合)、シーケンス番号生成部212は、初期値としてシーケンス番号「000001」を生成するようにしてもよい。
その後、クライアントAPL21は、DBサーバ10(サーバプロセス11)からの、処理結果の通知(例えば、エラーや正常終了)を受信し通知内容に応じた処理を判断する(S303)。このとき、クライアントAPL21は、シーケンス番号の2重登録が通知された場合は上述のステップS301から動作してデータ更新のリトライ処理(エラー分析部214の決定に基づくリトライ処理)に移行し、正常終了が通知された場合には後述するステップS304から動作する。
DBサーバ10(サーバプロセス11)から、データ更新の正常終了を受信した場合、クライアントAPL21のデータ更新部213は、DBサーバ10(サーバプロセス11)に対して、最新のデータ更新で用いたシーケンス番号(最新にシーケンス番号生成部212で生成したシーケンス番号)を用いて、シーケンス番号管理表Cのデータコミットの要求を行う(S304)。
次に、クライアントAPL21のデータ更新部213は、DBサーバ10(サーバプロセス11)に対して、シーケンス番号管理表Cから最新のシーケンス番号より過去のデータ削除を要求(最新のシーケンス番号よりも過去のデータを削除する処理を要求)する(S305)。
次に、クライアントAPL21のデータ更新部213は、DBサーバ10(サーバプロセス11)に対して、シーケンス番号管理表Cのデータ削除に係るコミットを要求する(S306)。
次に、データ更新部213は、最新にシーケンス番号管理表Cに登録したシーケンス番号を用いて、表Bに対するデータ更新処理(データ登録処理)を要求する(S307)。
次に、データ更新部213は、DBサーバ10(サーバプロセス11)に対して、最新のデータ更新で用いたシーケンス番号を用いて、表Bのデータコミットの要求を行い(S308)、処理を終了する。
次に、2つのDBクライアント20−1、20−2が、同じタイミングでDBサーバ10に対してシーケンス番号管理表Cのデータ更新(シーケンス番号の読出し)を要求した場合の動作について、図12、図13のシーケンス図を用いて説明する。
図14は、DBシステム1Aの各装置が図12のシーケンス図に従って動作した場合のシーケンス番号管理表Cの遷移について示した説明図である。また、図15は、DBシステム1Aの各装置が図12、図13のシーケンス図に従って動作した場合の表Bの遷移について示した説明図である。
図12、図13のシーケンス図では、シーケンス番号管理表Cの初期状態は、図14(a)の状態であるものとしている。図14(a)に示すように、シーケンス番号管理表Cは初期状態において、シーケンス番号「000001」(登録日時:2013/12/1 13:11:01)のデータのみが登録されている。
また、図12、図13のシーケンス図では、表Bの初期状態は、図15(a)の状態であるものとする。図15(a)に示すように、表Bは初期状態において、シーケンス番号「000001」のデータ(項目1:「aaa」、…)のみが登録されている。
なお、図12、図13のシーケンス図では、説明を簡易とするため、DBクライアント20によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、DBクライアント20による登録要求後のコミットは全て成功したものとして図示している。
まず、2つのDBクライアント20−1、20−2から、シーケンス番号管理表Cのシーケンス番号の読出し要求が、同じタイミングでDBサーバ10に到達したものとする(S401、S402)。
この場合、DBサーバ10のサーバプロセス11は、DBクライアント20−1、20−2の要求のそれぞれに対して、シーケンス番号管理表Cから最新のシーケンス番号「000001」を読み出して返答する(S403、S404、S405)。
DBクライアント20−1、20−2では、それぞれ最新のシーケンス番号として「000001」を取得することになるため、それぞれ新しいシーケンス番号として「000002」を生成することになる(S406、S407)。
次に、DBクライアント20−2が先に、DBサーバ10に対してシーケンス番号管理表Cに、新規データ(シーケンス番号が「00002」のデータ)を登録する要求(データ更新要求)を送信したものとする(S408)。
そして、DBサーバ10は、DBクライアント20−2の登録要求に応じて、シーケンス番号管理表Cにシーケンス番号が「00002」のデータを登録し(S409)、DBクライアント20−2にデータ登録OKを返答する(S412)。この時点で、シーケンス番号管理表Cの内容は、図14(b)の状態となる。
DBサーバ10からのデータ登録OKの返答を受けると、DBクライアント20−2は、DBサーバ10に対して、シーケンス番号管理表Cから、最新のシーケンス番号より過去のデータを削除する要求を行う(S415)。
DBクライアント20−2からシーケンス番号管理表Cのデータ削除要求を受付けると、DBサーバ10は、当該要求(SQL文)に従って、シーケンス番号管理表Cのデータ削除を実行する(S416)。このとき、シーケンス番号管理表Cにおいて、最新のシーケンス番号である000002よりも過去(登録日時が過去)のシーケンス番号000001のデータが削除されることになる。この時点で、シーケンス番号管理表Cの内容は、図14(c)の状態となる。
次に、DBクライアント20−2は、DBサーバ10に対して、シーケンス番号管理表Cに登録したシーケンス番号000002を用いて、表Bへのデータ登録を要求する(S421、S422)。
DBクライアント20−2から表Bへのデータ登録を受付けると、DBサーバ10は、当該要求に基づいて表Bに、シーケンス番号000002のデータ登録を行い(S423)、DBクライアント20−2にデータ登録OKを返答する(S424)。この時点で、表Bの内容は、図15(b)の状態となる。
データ登録OKを受信すると、DBクライアント20−2は、今回のデータ登録の処理を終了する(S425)。
一方上述のステップS408よりも後のタイミングで、DBクライアント20−1から、DBサーバ10に対してシーケンス番号管理表Cに、新規データ(シーケンス番号が「00002」のデータ)を登録する要求(データ更新要求)が送信されたものとする(S410)。そして、DBサーバ10は、DBクライアント20−2の登録要求を受信するが、シーケンス番号管理表Cにシーケンス番号が「00002」のデータが既に登録されているため、シーケンス番号の二重登録エラーを検出し(S411)、DBクライアント20−2にデータ登録NG(シーケンス番号の二重登録エラーを原因とするNG)を返答する(S413)。
DBクライアント20−1では、DBサーバ10からのデータ登録NG(シーケンス番号の二重登録エラーを原因とするNG)を受けて、データ登録のリトライを決定することになる(S414)。
DBクライアント20−1は、データ登録のリトライを開始すると、まず、DBサーバ10に対して、シーケンス番号の読出し要求を送信する(S417)。
そして、DBサーバ10は、DBクライアント20−1からのシーケンス番号の読出し要求に応じて、シーケンス番号管理表Cの最新のシーケンス番号「000002」を読み出して(S418)、DBクライアント20−1に返答する(S419)。
次に、DBクライアント20−1は、取得した最新のシーケンス番号「000002」に基づいて、新しいシーケンス番号「000003」を生成する(S420)。
次に、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号管理表Cに新規データ(シーケンス番号が「00003」のデータ)を登録する要求(データ更新要求)を送信する(S426)。
そして、DBサーバ10は、DBクライアント20−1の登録要求に応じて、シーケンス番号管理表Cにシーケンス番号が「00003」のデータを登録し(S427)、DBクライアント20−1にデータ登録OKを返答する(S428)。この時点で、シーケンス番号管理表Cの内容は、図14(d)の状態となる。
DBサーバ10からのデータ登録OKの返答を受けると、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号管理表Cから、最新のシーケンス番号より過去のデータを削除する要求を行う(S429)。
DBクライアント20−2からシーケンス番号管理表Cのデータ削除要求を受付けると、DBサーバ10は、当該要求(SQL文)に従って、シーケンス番号管理表Cのデータ削除を実行する(S430)。このとき、シーケンス番号管理表Cにおいて、最新のシーケンス番号である000003よりも過去(登録日時が過去)のシーケンス番号000002のデータが削除されることになる。この時点で、シーケンス番号管理表Cの内容は、図14(e)の状態となる。
次に、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号管理表Cに登録したシーケンス番号000003を用いて、表Bへのデータ登録を要求する(S431、S432)。
DBクライアント20−2から表Bへのデータ登録を受付けると、DBサーバ10は、当該要求に基づいて表Bに、シーケンス番号000003のデータ登録を行い(S433)、DBクライアント20−1にデータ登録OKを返答する(S434)。この時点で、表Bの内容は、図15(c)の状態となる。
データ登録OKを受信すると、DBクライアント20−2は、今回のデータ登録の処理を終了する(S435)。
次に、第2の実施形態のDBシステム1Aにおいて、シーケンス番号管理表C及び表Bに係るシーケンス番号が循環する際の動作について、図16のシーケンス図を用いて説明する。
図17は、DBシステム1Aの各装置が図16のシーケンス図に従って動作した場合のシーケンス番号管理表Cの遷移について示した説明図である。また、図18は、DBシステム1Aの各装置が図16のシーケンス図に従って動作した場合の表Bの遷移について示した説明図である。
なお、以下では、DBシステム1Aにおいて、シーケンス番号管理表Cに係るシーケンス番号の循環最大値が100に設定されているものとして説明する。
図16のシーケンス図では、シーケンス番号管理表Cの初期状態は、図17(a)の状態であるものとしている。図17(a)に示すように、シーケンス番号管理表Cは初期状態において、シーケンス番号「000100」(登録日時:2013/12/11 9:00:00)のデータのみが登録されている。
また、図16のシーケンス図では、表Bの初期状態は、図18(a)の状態であるものとする。図18(a)に示すように、表Bでは、初期状態において、シーケンス番号000001〜000100の100件のデータが登録されているものとする。
なお、図16のシーケンス図では、説明を簡易とするため、DBクライアント20によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、DBクライアント20による登録要求後のコミットは全て成功したものとして図示している。
上述のような状態で、DBクライアント20−1からDBサーバ10に、シーケンス番号の読出し要求が送信されたものとする(S501)。
この場合、DBサーバ10は、DBクライアント20−1の要求に応じて、シーケンス番号管理表Cから最新のシーケンス番号「000100」を読み出して返答する(S502、S503)。
DBクライアント20−1は、最新のシーケンス番号として循環最大値である「000100」を取得することになるため、新しいシーケンス番号として「000001」を生成することになる(S504)。
次に、DBクライアント20−1は、DBサーバ10に対してシーケンス番号管理表Cに、新規データ(シーケンス番号が「00001」のデータ)を登録する要求(データ更新要求)を送信する(S505)。
そして、DBサーバ10は、DBクライアント20−1の登録要求に応じて、シーケンス番号管理表Cにシーケンス番号が「00001」のデータを登録し(S506)、DBクライアント20−1にデータ登録OKを返答する(S507)。この時点で、シーケンス番号管理表Cの内容は、図17(b)の状態となる。
DBサーバ10からのデータ登録OKの返答を受けると、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号管理表Cから、最新のシーケンス番号より過去のデータを削除する要求を行う(S508)。
DBクライアント20−1からシーケンス番号管理表Cのデータ削除の要求を受付けると、DBサーバ10は、当該要求(SQL文)に従って、シーケンス番号管理表Cのデータ削除を実行する(S509)。このとき、シーケンス番号管理表Cにおいて、最新のシーケンス番号である000001よりも過去(登録日時が過去)のシーケンス番号000100のデータが削除されることになる。この時点で、シーケンス番号管理表Cの内容は、図17(c)の状態となる。
次に、DBクライアント20−1は、DBサーバ10に対して、シーケンス番号管理表Cに登録したシーケンス番号000001を用いて、表Bへのデータ登録を要求する(S510、S511)。
DBクライアント20−1から表Bへのデータ登録を受付けると、DBサーバ10は、当該要求に基づいて表Bに、シーケンス番号000001のデータ登録を行い(S512)、DBクライアント20−1にデータ登録OKを返答する(S513)。この時点で、表Bの内容は、図18(b)の状態となる。
データ登録OKを受信すると、DBクライアント20−1は、今回のデータ登録の処理を終了する(S514)。
(B−3)第2の実施形態の効果
第2の実施形態によれば、以下のような効果を奏することができる。
第2の実施形態では、シーケンス番号を循環する方式でも、第1の実施形態と同様に、DBサーバ10におけるシーケンス番号の連続性を保つことができる。第2の実施形態では、シーケンス番号は循環して再利用されるため、シーケンス番号として利用可能な数値の上限を考慮せずに連続して動作させることが可能となる。
(C)他の実施形態
本発明は、上記の各実施形態に限定されるものではなく、以下に例示するような変形実施形態も挙げることができる。
(C−1)第2の実施形態では、シーケンス番号管理表Cにおいて、シーケンス番号と登録日時を登録しているが、登録日時については省略するようにしてもよい。ただし、登録日時を省略した場合には、シーケンス番号管理表Cのデータ数を常に循環最大値以下にしておく必要がある。
1…DBシステム、10…DBサーバ、11…サーバプロセス、12…DBファイルシステム、20、20−1、20−2…DBクライアント、21…クライアントAPL、211…シーケンス番号取得部、212…シーケンス番号生成部、213…データ更新部、214…エラー分析部、22…データベースアクセスライブラリ。

Claims (10)

  1. 複数のデータベースクライアントと、上記データベースクライアントに接続するデータベースサーバとを有するデータベースシステムにおいて、
    上記データベースサーバは、
    複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
    上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
    上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
    上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、
    上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行い、
    それぞれの上記データベースクライアントは、
    上記データベースサーバに、上記データベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
    上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
    上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
    上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有する
    ことを特徴とするデータベースシステム。
  2. 上記データベースを構成する各データには、シーケンス番号が登録されたシーケンス番号カラムが含まれていることを特徴とする請求項1に記載のデータベースシステム。
  3. 上記データベースにおいて、上記シーケンス番号カラムには一意性が保証されていることを特徴とする請求項2に記載のデータベースシステム。
  4. 上記データベースには、シーケンス番号を含むデータが登録されたシーケンス番号管理表と、上記シーケンス番号管理表に従って付与されたシーケンス番号が登録されたシーケンス番号カラムを含むデータで構成されたデータ表とが含まれていることを特徴とする請求項1に記載のデータベースシステム。
  5. 上記シーケンス番号要求手段は、上記データベースサーバに、上記シーケンス番号管理表の最新のシーケンス番号の読出し要求を行い、
    上記データ更新要求手段は、上記データベースサーバに、上記シーケンス番号生成手段が生成したシーケンス番号を上記シーケンス番号管理表に登録するデータ更新要求を行い、さらに、上記データベースサーバに、上記シーケンス番号管理表に登録したシーケンス番号を用いて上記データ表のデータ更新を要求し、
    上記再実行手段は、上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号の登録要求及びデータ更新要求を再実行させる
    ことを特徴とする請求項4に記載のデータベースシステム。
  6. 上記シーケンス番号生成手段は、循環的にシーケンス番号を生成することを特徴とする請求項5に記載のデータベースシステム。
  7. 複数のデータベースクライアントに接続するデータベースサーバにおいて、
    複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
    上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
    上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
    上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、
    上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行う
    ことを特徴とするデータベースサーバ。
  8. 複数のデータベースクライアントに接続するデータベースサーバに搭載されたコンピュータを、
    複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
    上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
    上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
    上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段として機能させ、
    上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行う
    ことを特徴とするデータベースサーバプログラム。
  9. データベースサーバに接続するデータベースクライアントにおいて、
    上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
    上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
    上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
    上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有する
    ことを特徴とするデータベースクライアント。
  10. データベースサーバに接続するデータベースクライアントに搭載されたコンピュータを、
    上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
    上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
    上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
    上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段として機能させる
    ことを特徴とするデータベースクライアントプログラム。
JP2015037257A 2015-02-26 2015-02-26 データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム Active JP6398786B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015037257A JP6398786B2 (ja) 2015-02-26 2015-02-26 データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015037257A JP6398786B2 (ja) 2015-02-26 2015-02-26 データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム

Publications (2)

Publication Number Publication Date
JP2016161980A JP2016161980A (ja) 2016-09-05
JP6398786B2 true JP6398786B2 (ja) 2018-10-03

Family

ID=56845717

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015037257A Active JP6398786B2 (ja) 2015-02-26 2015-02-26 データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム

Country Status (1)

Country Link
JP (1) JP6398786B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117520460B (zh) * 2024-01-05 2024-04-02 成都安世赛斯特软件技术有限公司 一种自定义编号生成管理方法及***

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06250830A (ja) * 1993-02-23 1994-09-09 Nippon Telegr & Teleph Corp <Ntt> サービス無中断プログラム入替装置
JPH11232294A (ja) * 1998-02-16 1999-08-27 Ntt Communication Ware Kk Wwwシステムおよびwwwシステムにおけるセッション管理方法
US6816873B2 (en) * 2001-05-15 2004-11-09 International Business Machines Corporation Method for managing distributed savepoints across multiple DBMS's within a distributed transaction
US7587435B2 (en) * 2006-11-10 2009-09-08 Sybase, Inc. Replication system with methodology for replicating database sequences
JP5105922B2 (ja) * 2007-03-22 2012-12-26 日本電気株式会社 情報更新システム、情報記憶サーバ、情報更新方法、及び、プログラム
JP2013134522A (ja) * 2011-12-26 2013-07-08 Nec Corp データ管理システム、データ管理方法及びデータ管理プログラム

Also Published As

Publication number Publication date
JP2016161980A (ja) 2016-09-05

Similar Documents

Publication Publication Date Title
US11327958B2 (en) Table replication in a database environment
US9646045B2 (en) Transaction processing system, method and program
US8364634B2 (en) System and method for processing fault tolerant transaction
EP2653986B1 (en) Client-side caching of a database transaction token.
JP5652228B2 (ja) データベースサーバ装置、データベース更新方法及びデータベース更新プログラム
EP2738698A2 (en) Locking protocol for partitioned and distributed tables
AU2018203739A1 (en) Processing mutations for a remote database
CN108121755B (zh) 使用基于提示的路由在数据库***中的工作负载切换
US8756196B2 (en) Propagating tables while preserving cyclic foreign key relationships
US20150347250A1 (en) Database management system for providing partial re-synchronization and partial re-synchronization method of using the same
WO2015111152A1 (ja) データベース管理システム及び方法
JP5077430B2 (ja) 管理装置および管理装置のプログラム
US11222007B2 (en) Database snapshot checking
CN111797092A (zh) 在数据库***内提供次级索引的方法和***
US9998544B2 (en) Synchronization testing of active clustered servers
JP5772458B2 (ja) データ管理プログラム、ノード、および分散データベースシステム
US20160266924A1 (en) Apparatus and method for identifying a virtual machine having changeable settings
CN105574026B (zh) 非关系型数据库支持事务的方法及装置
CN113056734B (zh) 管理共享数据库的***和方法
JP6036470B2 (ja) 情報処理システム、情報処理装置、情報処理方法、及び情報処理プログラム
CN110555317A (zh) 一种应用文件更改处理方法、装置及***
JP6398786B2 (ja) データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム
US11210272B2 (en) Low latency cache synchronization in distributed databases
JP5967628B2 (ja) クエリを処理する装置及び方法
Strickland Cassandra 3. x High Availability

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171120

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180720

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180807

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180820

R150 Certificate of patent or registration of utility model

Ref document number: 6398786

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150