(57)【特許請求の範囲】
【請求項１】
複数のデータベースクライアントと、上記データベースクライアントに接続するデータベースサーバとを有するデータベースシステムにおいて、
上記データベースサーバは、
複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、
上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行い、
それぞれの上記データベースクライアントは、
上記データベースサーバに、上記データベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有する
ことを特徴とするデータベースシステム。
【請求項２】
上記データベースを構成する各データには、シーケンス番号が登録されたシーケンス番号カラムが含まれていることを特徴とする請求項１に記載のデータベースシステム。
【請求項３】
上記データベースにおいて、上記シーケンス番号カラムには一意性が保証されていることを特徴とする請求項２に記載のデータベースシステム。
【請求項４】
上記データベースには、シーケンス番号を含むデータが登録されたシーケンス番号管理表と、上記シーケンス番号管理表に従って付与されたシーケンス番号が登録されたシーケンス番号カラムを含むデータで構成されたデータ表とが含まれていることを特徴とする請求項１に記載のデータベースシステム。
【請求項５】
上記シーケンス番号要求手段は、上記データベースサーバに、上記シーケンス番号管理表の最新のシーケンス番号の読出し要求を行い、
上記データ更新要求手段は、上記データベースサーバに、上記シーケンス番号生成手段が生成したシーケンス番号を上記シーケンス番号管理表に登録するデータ更新要求を行い、さらに、上記データベースサーバに、上記シーケンス番号管理表に登録したシーケンス番号を用いて上記データ表のデータ更新を要求し、
上記再実行手段は、上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号の登録要求及びデータ更新要求を再実行させる
ことを特徴とする請求項４に記載のデータベースシステム。
【請求項６】
上記シーケンス番号生成手段は、循環的にシーケンス番号を生成することを特徴とする請求項５に記載のデータベースシステム。
【請求項７】
複数のデータベースクライアントに接続するデータベースサーバにおいて、
複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、
上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行う
ことを特徴とするデータベースサーバ。
【請求項８】
複数のデータベースクライアントに接続するデータベースサーバに搭載されたコンピュータを、
複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、
上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、
上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、
上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段として機能させ、
上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行う
ことを特徴とするデータベースサーバプログラム。
【請求項９】
データベースサーバに接続するデータベースクライアントにおいて、
上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有する
ことを特徴とするデータベースクライアント。
【請求項１０】
データベースサーバに接続するデータベースクライアントに搭載されたコンピュータを、
上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、
上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、
上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、
上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段として機能させる
ことを特徴とするデータベースクライアントプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムに関し、例えば、連続したシーケンス番号に基づくデータ管理を行うシステムに適用し得る。
【背景技術】
【０００２】
一般に、データベースサーバ（以下、「ＤＢサーバ」とも呼ぶ）において、順序性を持つデータを管理する際、データ（レコード）登録時、各データに対して、登録順序番号となる、シーケンス番号を付与する。
【０００３】
このシーケンス番号は、例えば、データベースクライアント（以下、「ＤＢクライアント」とも呼ぶ）上のアプリケーション（以下、「クライアントＡＰＬ」とも呼ぶ）がその順序性を管理することで、連続したシーケンス番号の取得が可能となる。
【０００４】
この方式の場合、ＤＢクライアントが１台の場合はＤＢサーバ上で、シーケンス番号によるデータの順序性が確保できる。しかしながら、ＤＢクライアントが複数台となった場合には、各クライアントＡＰＬが独自にシーケンス番号を管理しているため、各ＤＢクライアント単位では、連続したシーケンス番号が付与されている。しかし、ＤＢサーバ上のデータにおいて、一元的なシーケンス番号とならない場合がある。
【０００５】
例えば、この問題を解決する従来の方式として、ＯＲＡＣＬＥ（登録商標）データベースが具備するシーケンス管理機能（ＣＲＥＡＴＥ  ＳＥＱＵＥＮＣＥ句）がある（非特許文献１参照）。この機能の利用によって、ＤＢサーバ側でシーケンス番号を払い出すため、ＤＢクライアントが複数台ある場合でも、上記の課題は解決できる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｏｒａｃｌｅ，Oracle(R) Database SQL言語リファレンス11gリリース2 (11.2)“CREATE SEQUENCE”，[Online]，INTERNET，[２０１５年２月１３日検索]，＜ＵＲＬ：http://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_6015.htm＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来のＤＢサーバ（例えば、ＯＲＡＣＬＥのＤＢサーバ）のシーケンス番号の払い出しにおいては、一意となる番号を払い出すことは保証しているが、条件により連続した番号の払い出しが保証されているわけではない。
【０００８】
つまり、従来のＤＢサーバでは、通常の運用において、例えば、データ登録要求が４つしか発生していない場合でも、払いだされるシーケンス番号が、連続しない可能性がある。具体的には、例えば、ＤＢサーバから払い出されるシーケンス番号が０００００１、０００００２、０００００４、０００００７のように不連続となる可能性がある。これは、従来のＤＢサーバにおいて、シーケンス番号の取得を要求するＤＢクライアントの競合した場合等（例えば、競合等によりコミットが失敗した場合等）に発生する。
【０００９】
また、従来のＤＢサーバにおいて、登録データがロールバックされた場合も払い出された番号は欠番となる。
【００１０】
従って、従来のＤＢサーバでは、上述のようなシーケンス番号の制御機能により、データを管理する場合、欠番となっているシーケンス番号（例えば、上述の例では０００００３、０００００５、０００００６）のデータは、元々存在しないデータなのか、存在していたが削除されたデータなのかを判別することは難しい。このような場合、従来のＤＢサーバでは、別途、削除履歴データの生成や、削除フラグによる管理等、アプリケーションプログラムによりカバーしなければならない条件が必要となる。
【００１１】
また、従来のＯＲＡＣＬＥのＤＢサーバのシーケンス管理機能では、ＣＲＥＡＴＥ  ＳＥＱＵＥＮＣＥ句を発行したＤＢサーバ（＝ＤＢサーバ上で起動されているインスタンス）上でのみ、シーケンス番号の管理が有効となる。したがって、従来のＯＲＡＣＬＥのＤＢサーバを採用したシステムでは、ＤＢサーバが冗長化されたシステム構成で利用が難しいという問題があった。
【００１２】
以上のような問題に鑑みて、複数のデータベースクライアント等が存在する場合でも、連続したシーケンス番号を用いてデータベースのデータ更新を行うことができるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムが望まれている。
【課題を解決するための手段】
【００１３】
第１の本発明は、複数のデータベースクライアントと、上記データベースクライアントに接続するデータベースサーバとを有するデータベースシステムにおいて、（１）上記データベースサーバは、（１−１）複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、（１−２）上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、（１−３）上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、（１−４）上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、（１−５）上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行い、（２）それぞれの上記データベースクライアントは、（２−１）上記データベースサーバに、上記データベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、（２−２）上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、（２−３）上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、（２−４）上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有することを特徴とする。
【００１４】
第２の本発明は、複数のデータベースクライアントに接続するデータベースサーバにおいて、（１）複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、（２）上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、（３）上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、（４）上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段とを備え、（５）上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行うことを特徴とする。
【００１５】
第３の本発明のデータベースサーバプログラムは、複数のデータベースクライアントに接続するデータベースサーバに搭載されたコンピュータを、（１）複数のデータとシーケンス番号とが対応付けられたデータベースを管理するデータベース管理手段と、（２）上記データベースクライアントから上記データベースのシーケンス番号の読出し要求を受信すると、上記データベース管理手段で管理する最新のシーケンス番号を返答するシーケンス番号送信手段と、（３）上記データベースクライアントから、シーケンス番号を用いた上記データベースに対するデータ更新要求を受信すると、上記データベースで、当該シーケンス番号に基づいたデータが登録済であるか未登録であるかを判別する処理を行う判別手段と、（４）上記判別手段により登録済と判別された場合に、上記データ更新要求の送信元の上記データベースクライアントに、データ更新失敗のエラー情報を送信するエラー情報送信手段として機能させ、（５）上記データベース管理手段は、上記判別手段により未登録と判別された場合、上記データ更新要求に基づいて上記データベースのデータ更新を行うことを特徴とする。
【００１６】
第４の本発明は、データベースサーバに接続するデータベースクライアントにおいて、（１）上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、（２）上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、（３）上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、（４）上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段とを有することを特徴とする。
【００１７】
第５の本発明のデータベースクライアントプログラムは、データベースサーバに接続するデータベースクライアントに搭載されたコンピュータを、（１）上記データベースサーバに、上記データベースサーバが備えるデータベースの最新のシーケンス番号の読出し要求を行うシーケンス番号要求手段と、（２）上記シーケンス番号要求手段が取得したシーケンス番号に基づいて新たなシーケンス番号を生成するシーケンス番号生成手段と、（３）上記シーケンス番号生成手段が生成したシーケンス番号を用いて、上記データベースサーバに上記データベースのデータ更新を要求するデータ更新要求手段と、（４）上記データベースサーバから、データ更新失敗のエラー情報が通知された場合に、上記シーケンス番号要求手段にシーケンス番号の読出し要求を再実行させ、上記シーケンス番号生成手段に再度取得されたシーケンス番号に基づいてシーケンス番号を再生成させ、上記データ更新要求手段に再生成されたシーケンス番号に基づいてデータ更新要求を再実行させる再実行手段として機能させることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、複数のデータベースクライアント等が存在する場合でも、連続したシーケンス番号を用いてデータベースのデータ更新を行うことができる。
【図面の簡単な説明】
【００１９】
【図１】第１の実施形態に係るデータベースシステム（ＤＢシステム）の全体構成について示したブロック図である。
【図２】第１の実施形態に係るデータベースクライアントの機能的構成のについて示したブロック図である。
【図３】第１の実施形態に係るデータベースを構成する表（データ）の構成例について示した説明図である。
【図４】第１の実施形態に係るデータベースクライアントの動作について示したフローチャートである。
【図５】第１の実施形態に係るデータベースシステムの動作について示したシーケンス図である。
【図６】第１の実施形態に係るデータベースを構成する表（データ）の遷移について示した説明図である。
【図７】第２の実施形態に係るデータベースシステム（ＤＢシステム）の全体構成について示したブロック図である。
【図８】第２の実施形態に係るデータベースを構成するシーケンス番号管理表の構成例について示した説明図である。
【図９】第２の実施形態に係るデータベースを構成する表（データ）の構成例について示した説明図である。
【図１０】第２の実施形態に係るデータベースクライアントの動作について示したフローチャートである。
【図１１】第２の実施形態に係るデータベースクライアントからデータベースサーバに送信されるＳＱＬ文の例について示した説明図である。
【図１２】第２の実施形態に係るデータベースシステムの動作について示したシーケンス図（その１）である。
【図１３】第２の実施形態に係るデータベースシステムの動作について示したシーケンス図（その２）である。
【図１４】第２の実施形態に係るデータベースを構成するシーケンス番号管理表の遷移について示した説明図（その１）である。
【図１５】第２の実施形態に係るデータベースを構成する表（データ）の遷移について示した説明図（その１）である。
【図１６】第２の実施形態に係るデータベースシステムの動作について示したシーケンス図（その３）である。
【図１７】第２の実施形態に係るデータベースを構成するシーケンス番号管理表の遷移について示した説明図（その２）である。
【図１８】第２の実施形態に係るデータベースを構成する表（データ）の遷移について示した説明図（その２）である。
【発明を実施するための形態】
【００２０】
（Ａ）第１の実施形態
以下、本発明によるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムの第１の実施形態を、図面を参照しながら詳述する。
【００２１】
（Ａ−１）第１の実施形態の構成
図１は、この実施形態のＤＢシステム１の全体構成を示すブロック図である。
【００２２】
ＤＢシステム１は、ＤＢサーバ１０と、２つのＤＢクライアント２０（２０−１、２０−２）を有している。なお、ＤＢシステム１において配置されるＤＢサーバ１０及びＤＢクライアント２０の数は限定されないものである。ＤＢシステム１において、各装置はネットワークＮに接続し、相互に通信可能であるものとする。
【００２３】
ＤＢサーバ１０は、例えば、ＣＰＵやメモリ等を有するコンピュータに、データベースサーバプログラムを含むプログラムをインストールすることにより構築することができる。また、各ＤＢクライアント２０についても同様にコンピュータにデータベースクライアントプログラムを含むプログラムをインストールすることにより構築することができる。
【００２４】
ＤＢサーバ１０は、データベースのデータを記憶するためのＤＢファイルシステム１２と、各ＤＢクライアント２０にＤＢファイルシステム１２に記憶されたデータベースを利用したサービスを提供（トランザクションの処理を実行）するサーバプロセス１１とを有している。サーバプロセス１１は、例えば、ＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）等のデータベースのミドルウェアを用いて構築することができる。
【００２５】
この実施形態では、ＤＢファイルシステム１２に、表Ａが格納されているものとして説明する。そして、この実施形態では、サーバプロセス１１は、ＤＢクライアント２０（クライアントＡＰＬ２１）の要求に応じて、表Ａのデータ（レコード）を更新する。
【００２６】
図３は表Ａの構成例について示した説明図である。
【００２７】
図３では、１行で１つのデータ（レコード）を図示している。なお、この実施形態では、ＤＢサーバ１０はテーブル形式の表Ａを処理するものとして説明するが、ＤＢサーバ１０で処理する具体的なデータベースの構造については限定されないものである。図３に示すように表Ａの各データには、当該データの更新に係るシーケンス番号のカラムを含む複数の項目のカラムが含まれている。
【００２８】
次に、ＤＢサーバ１０（サーバプロセス１１）における表Ａの処理について説明する。
【００２９】
まず、ＤＢサーバ１０（サーバプロセス１１）では、シーケンス番号のカラム（以下、「シーケンス番号カラム」とも呼ぶ）を含む表（例えば、表Ａ）の定義において、「シーケンス番号カラムに一意性を持たせる」必要がある。表Ａに対して、上述の条件が付与されていれば、例えば、２台のＤＢクライアント２０−１、２０−２から、同一のシーケンス番号でデータを登録しようとした際に、後発の要求については、サーバプロセス１１でシーケンス番号の二重登録エラーを検出することが可能となる。このとき、サーバプロセス１１は、後発の要求に係るＤＢクライアント２０に対して二重登録エラーを通知することができる。
【００３０】
ＤＢサーバ１０上でシーケンス番号を持つ表の定義の一意性とは、例えば、ＲＤＢＭＳがＯＲＡＣＬＥデータベースの場合は、シーケンス番号カラムに対して一意性制約である「ユニークキー制約」を付与することを意味する。しかし、この場合、ＤＢサーバ１０上でシーケンス番号カラムが未設定のデータは存在してはいけない理由から、シーケンス番号カラムをプライマリキーにすることが望ましい。プライマリキーとは、一意性制約、且つ、カラムＮＵＬＬ設定を非許容（ＮＯＴ  ＮＵＬＬ  制約）とするカラム（キー）のことである。なお、シーケンス番号カラムに、ユニークキー制約と「ＮＯＴ  ＮＵＬＬ  制約」を同時に付与した場合も、プライマリキーと同等の意味も持つことになる。したがって、ＤＢサーバ１０では、シーケンス番号カラムにプライマリキーを設定する代わりに、ユニークキー制約と「ＮＯＴ  ＮＵＬＬ  制約」を同時に付与する設定としてもよい。
【００３１】
以上の通り、ＤＢサーバ１０では、表Ａのシーケンス番号カラムに対して、ＯＲＡＣＬＥデータベースが持つ制約の機能を利用して、「プライマリキーの制約付与」、若しくは、「ユニークキー制約及びＮＯＴ  ＮＵＬＬ制約の制約付与」のいずれかが行われているものとする。なお、この実施形態では、表Ａを例として説明しているが、その他のシーケンス番号カラムを備える表（データベース）についても、同様の制約付与を行うようにしてもよい。
【００３２】
次に、各ＤＢクライアント２０の内部構成について図２を用いて説明する。
【００３３】
ＤＢクライアント２０は、ＤＢサーバ１０のデータベースへのアクセスを伴う処理（アプリケーションの処理）を行うクライアントＡＰＬ２１と、ＤＢクライアント２０にＤＢサーバ１０へのアクセスするための（インタフェース）を提供するデータベースアクセスライブラリ２２とを有している。
【００３４】
データベースアクセスライブラリ２２としては、例えば、ＯＲＡＣＬＥデータベースのクライアントライブラリを適用することができる。データベースアクセスライブラリ２２により、クライアントＡＰＬ２１は、ＤＢサーバ１０上の任意の表（データベース）に対してＳＱＬを発行し、表のデータの登録、更新、削除、参照等が可能となる。
【００３５】
データベースクライアントプログラムとしてのクライアントＡＰＬ２１は、シーケンス番号取得部２１１、シーケンス番号生成部２１２、データ更新部２１３、及びエラー分析部２１４を有している。
【００３６】
シーケンス番号取得部２１１は、ＤＢサーバ１０に最新のシーケンス番号を要求して取得する処理を行う。シーケンス番号取得部２１１は、ＤＢサーバ１０上の更新対象の表（例えば、表Ａ等のシーケンス番号カラムを含む表）から、最新のシーケンス番号（シーケンス番号が昇順であれば、最大の値）を取得する。
【００３７】
シーケンス番号生成部２１２は、シーケンス番号取得部２１１が取得したシーケンス番号に基づいて、新たなシーケンス番号（次のデータ処理要求に用いるシーケンス番号）を生成する処理を行う。例えば昇順のシーケンス番号の場合、シーケンス番号生成部２１２は、取得したシーケンス番号が「１」ならば、取得したシーケンス番号をインクリメント（＋１）した「２」を新たなシーケンス番号として生成する。
【００３８】
データ更新部２１３は、シーケンス番号生成部２１２で生成されたシーケンス番号を用いて、ＤＢサーバ１０へのデータ更新の要求（この実施形態では、表Ａのレコード処理の要求）を行う。
【００３９】
エラー分析部２１４は、データ更新部２１３がＤＢサーバ１０にアクセスした際の結果を分析する処理を行う。エラー分析部２１４は、データ更新部２１３が要求したデータ更新の要求に対してＤＢサーバ１０からエラーが通知された場合、当該エラーの内容を分析し、その分析結果に応じた処理を行うように、クライアントＡＰＬ２１を制御する処理を行う。エラー分析部２１４は、例えば、ＤＢサーバ１０から、シーケンス番号の二重登録エラーを受信した場合、リトライ処理（シーケンス番号の再取得、シーケンス番号の再生成、及びデータ更新の再要求）の実施を決定する。
【００４０】
ＤＢクライアント２０のクライアントＡＰＬ２１では、表Ａ（シーケンス番号カラムを備える表）へのデータ更新時に、シーケンス番号の二重登録エラーが通知された場合、シーケンス番号取得部２１１及びシーケンス番号生成部２１２により再度シーケンス番号の取得・生成が行われる。そして、データ更新部２１３は、再度取得・生成したシーケンス番号を用いて、表Ａへのデータ更新をリトライする。
【００４１】
以上のように、ＤＢクライアント２０のクライアントＡＰＬ２１では、表Ａへのデータ更新時に、エラー分析部２１４で二重登録エラーが発生すると、シーケンス番号を再度取得・生成し、データ登録するリトライ機能を実装している。これにより、ＤＢクライアント２０では、シーケンス番号の二重登録エラーをプログラム内（クライアントＡＰＬ２１内）に閉じて、処理することが可能となる。
【００４２】
（Ａ−２）第１の実施形態の動作
次に、以上のような構成を有する第１の実施形態のＤＢシステム１の動作を説明する。
【００４３】
まず、ＤＢクライアント２０におけるクライアントＡＰＬ２１の動作について図４のフローチャートを用いて説明する。
【００４４】
図４では、クライアントＡＰＬ２１において、表Ａに対するデータ更新（新規のデータ登録）が発生し、当該データ更新が完了するまでの動作について示している。
【００４５】
クライアントＡＰＬ２１において、表Ａに対するデータ更新が発生すると、まず、シーケンス番号取得部２１１が、ＤＢサーバ１０（サーバプロセス１１）に対して、表Ａに係るシーケンス番号（最新のシーケンス番号）の読み出しを要求して取得する（Ｓ１０１）。
【００４６】
シーケンス番号取得部２１１は、例えば「SELECT MAX(シーケンス番号) FROM 表A；」というイメージのＳＱＬ文を用いて、表Ａに係るシーケンス番号（最新のシーケンス番号）を要求することができる。上述のＳＱＬ文は、表Ａ内のレコードから、シーケンス番号の最大値を取得することを示す内容となっている。
【００４７】
次に、シーケンス番号生成部２１２が、取得したシーケンス番号を用いて、新たなシーケンス番号（取得したシーケンス番号に「１」を加算したシーケンス番号）を生成する。そして、生成したシーケンス番号を用いて、データ更新部２１３が、ＤＢサーバ１０（サーバプロセス１１）に、表Ａのデータ更新（新規のデータ登録）を要求する（Ｓ１０２）。なお、表Ａのレコード件数が０件の場合（シーケンス番号取得部２１１でシーケンス番号が取得できない場合）、シーケンス番号生成部２１２は、初期値としてシーケンス番号「０００００１」を生成するようにしてもよい。
【００４８】
その後、クライアントＡＰＬ２１は、ＤＢサーバ１０（サーバプロセス１１）からの、処理結果の通知（例えば、エラーや正常終了）を受信し通知内容に応じた処理を判断する（Ｓ１０３）。このとき、クライアントＡＰＬ２１は、シーケンス番号の２重登録が通知された場合は上述のステップＳ１０１から動作してデータ更新のリトライ処理（エラー分析部２１４の決定に基づくリトライ処理）を行い、正常終了が通知された場合には後述するステップＳ１０４から動作する。
【００４９】
ＤＢサーバ１０（サーバプロセス１１）から、データ更新の正常終了を受信した場合、クライアントＡＰＬ２１のデータ更新部２１３は、ＤＢサーバ１０（サーバプロセス１１）に対して、最新のデータ更新で用いたシーケンス番号（最新にシーケンス番号生成部２１２で生成したシーケンス番号）を用いて、データコミットの要求を行い（Ｓ１０４）、処理を終了する。
【００５０】
次に、２つのＤＢクライアント２０−１、２０−２が、同じタイミングでＤＢサーバ１０に対して表Ａのデータ更新（新規レコード登録）を要求した場合の動作について、図５のシーケンス図を用いて説明する。また、図６は、ＤＢシステム１の各装置が図５のシーケンス図に従って動作した場合の表Ａの遷移について示した説明図である。図５のシーケンス図では、表Ａの初期状態は、図６（ａ）の状態であるものとしている。図６（ａ）に示すように、表Ａは初期状態において、シーケンス番号「０００００１」のデータ（項目１：「ａａａ」、…）のみが登録されている。
【００５１】
なお、図５のシーケンス図では、説明を簡易とするため、ＤＢクライアント２０によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、ＤＢクライアント２０による登録要求後のコミットは全て成功したものとして図示している。
【００５２】
そして、ここでは、２つのＤＢクライアント２０−１、２０−２で、同じタイミングでＤＢサーバ１０の表Ａへのデータ登録のデータ更新が発生し、シーケンス番号の読出し要求が同時にＤＢサーバ１０に到達したものとする（Ｓ２０１、Ｓ２０２）。
【００５３】
この場合、ＤＢサーバ１０のサーバプロセス１１は、ＤＢクライアント２０−１、２０−２の要求のそれぞれに対して、表Ａから最新のシーケンス番号「０００００１」を読み出して返答する（Ｓ２０３、Ｓ２０４、Ｓ２０５）。
【００５４】
ＤＢクライアント２０−１、２０−２では、それぞれ最新のシーケンス番号として「０００００１」を取得することになるため、それぞれ新しいシーケンス番号として「０００００２」を生成することになる（Ｓ２０６、Ｓ２０７）。
【００５５】
次に、ＤＢクライアント２０−２が先に、ＤＢサーバ１０に対して表Ａに新規データを登録する要求（データ更新要求）を送信したものとする（Ｓ２０８）。このとき、ＤＢクライアント２０−２が要求したデータはシーケンス番号が「００００２」、データの内容が「項目１：ｃｃｃ、…」であったものとする。そして、ＤＢサーバ１０は、ＤＢクライアント２０−２の登録要求に応じて、表Ａにシーケンス番号が「００００２」のデータ（項目１：ｃｃｃ、…）を登録し（Ｓ２０９）、ＤＢクライアント２０−２にデータ登録ＯＫを返答する（Ｓ２１２）。この時点で、表Ａの内容は、図６（ｂ）の状態となる。
【００５６】
ＤＢクライアント２０−２では、ＤＢサーバ１０からのデータ登録ＯＫの返答を受けて、今回のデータ登録の処理を終了する（Ｓ２１５）。
【００５７】
一方上述のステップＳ２０８よりも後のタイミングで、ＤＢクライアント２０−１から、ＤＢサーバ１０に対して表Ａに新規データを登録する要求（データ更新要求）が送信されたものとする（Ｓ２１０）。このとき、ＤＢクライアント２０−１が要求したデータはシーケンス番号が「００００２」、データの内容が「項目１：ｂｂｂ、…」であったものとする。そして、ＤＢサーバ１０は、ＤＢクライアント２０−２の登録要求を受信するが、表Ａにシーケンス番号が「００００２」のデータが既に登録されているため、シーケンス番号の二重登録エラーを検出し（Ｓ２１１）、ＤＢクライアント２０−２にデータ登録ＮＧ（シーケンス番号の二重登録エラーを原因とするＮＧ）を返答する（Ｓ２１３）。
【００５８】
ＤＢクライアント２０−１では、ＤＢサーバ１０からのデータ登録ＮＧ（シーケンス番号の二重登録エラーを原因とするＮＧ）を受けて、データ登録のリトライを決定することになる（Ｓ２１４）。
【００５９】
データ登録のリトライを開始すると、まず、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号の読出し要求を送信する（Ｓ２１６）。
【００６０】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−１からのシーケンス番号の読出し要求に応じて、表Ａの最新のシーケンス番号「０００００２」を読み出して（Ｓ２１７）、ＤＢクライアント２０−１に返答する（Ｓ２１８）。
【００６１】
次に、ＤＢクライアント２０−１は、取得した最新のシーケンス番号「０００００２」に基づいて、新しいシーケンス番号「０００００３」を生成する（Ｓ２１９）。
【００６２】
次に、ＤＢクライアント２０−１は、生成したシーケンス番号「０００００３」を用いて、ＤＢサーバ１０に対して表Ａに新規データを登録する要求（データ更新要求）を送信する（Ｓ２２０）。このとき、ＤＢクライアント２０−１が要求したデータはシーケンス番号が「００００３」であり、その他の内容が「項目１：ｂｂｂ、…」（最初に行ったデータ登録要求と同じ内容）であったものとする。
【００６３】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−１の登録要求に応じて、表Ａにシーケンス番号が「００００３」のデータ（項目１：ｂｂｂ、…）を登録し（Ｓ２２１）、ＤＢクライアント２０−２にデータ登録ＯＫを返答する（Ｓ２２２）。この時点で、表Ａの内容は、図６（ｃ）の状態となる。
【００６４】
次に、ＤＢクライアント２０−１は、ＤＢサーバ１０からのデータ登録ＯＫの返答を受けて、今回のデータ登録の処理を終了する（Ｓ２２３）。
【００６５】
（Ａ−３）第１の実施形態の効果
第１の実施形態によれば、以下のような効果を奏することができる。
【００６６】
第１の実施形態のＤＢサーバ１０では、複数ＤＢクライアント２０からのデータ登録要求に対して、登録データ毎にシーケンス番号を付与し、付与したシーケンス番号を用いたデータ登録を受付ける。また、ＤＢサーバ１０では、既に登録されているデータのシーケンス番号と、新たに登録要求を受付けたデータのシーケンス番号とを比較して、二重登録となる場合にはＤＢクライアント２０にエラーを送信する。そして、ＤＢクライアント２０はエラーを受付けると、ＤＢサーバ１０に対して、シーケンス番号の発行及びデータ登録要求のリトライを行う。このようなシーケンスの動作により、ＤＢサーバ１０では、複数ＤＢクライアント２０から同時にデータ登録の要求があった場合でも、データベースにおけるシーケンス番号の連続性を保つことができる。したがって、例えば、第１の実施形態のＤＢサーバ１０では、シーケンス番号が不連続となったデータがあった場合、抜けているシーケンス番号に係るデータは削除されたと判断できる。
【００６７】
（Ｂ）第２の実施形態
次に、本発明によるデータベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラムの第２の実施形態を、図面を参照しながら詳述する。
【００６８】
（Ｂ−１）第２の実施形態の構成
図７は、第２の実施形態のＤＢシステム１Ａの全体構成について示したブロック図であり、同一部分又は対応する部分には、同一符号又は対応する符号を付している。また、第２の実施形態のＤＢクライアント２０−１、２０−２の内部構成については、上述の図２を用いて示すことができる。
【００６９】
以下では、第２の実施形態について、第１の実施形態との差異を説明する。
【００７０】
第１の実施形態では、シーケンス番号を完全に一意（ユニーク）とする方式について説明した。すなわち、第１の実施形態では、シーケンス番号の取得を無限に増やす方式について説明したが、第２の実施形態では、シーケンス番号に上限を設け、循環的に再利用する方式（以下、「循環方式」とも呼ぶ）を適用する。
【００７１】
ＤＢサーバ１０において、シーケンス番号を循環利用する場合は、第１の実施形態で説明した、「シーケンス番号カラムに一意性を持たせる」という条件をそのまま適用することはできない。例えば、シーケンス番号の循環条件（払い出すシーケンス番号の範囲）が、０００００１から０００１００であるとき、１０１件目のデータが登録された際に生成されるシーケンス番号は０００００１となる。この場合、第１の実施形態では、シーケンス番号の二重登録エラーとなってしまうことになる。
【００７２】
そこで、第２の実施形態のＤＢサーバ１０では、上述の二重登録エラーを回避するために、ＤＢファイルシステム１２にシーケンス番号を管理するための管理表Ｃを作成して保持している。そして、第２の実施形態のＤＢサーバ１０は、シーケンス番号管理表Ｃにより管理されたシーケンス番号でデータ（レコード）を管理する表Ｂを有している。
【００７３】
図８は、シーケンス番号管理表Ｃの構成例について示している。また、図９は、表Ｂの構成例について示している。
【００７４】
表Ｂの各データ（レコード）は、シーケンス番号管理表Ｃで管理されたシーケンス番号と、その他の項目の内容（項目１、…）で構成されている。そして、シーケンス番号管理表Ｃでは、表Ｂにおける最新に登録されたデータのシーケンス番号と、その登録日時が管理されている。
【００７５】
図９に示す表Ｂでは、１０１件のデータが登録されている。そして、図９に示す表Ｂでは、シーケンス番号が０００００１〜０００１００まで１回転し、０００００１に循環して再利用された状態となっている。すなわち、図９に示す表Ｂでは、シーケンス番号０００００１のデータが２件登録されている。そして、図９に示す表Ｂでは、最新のシーケンス番号は０００００１となる。そして、図８は、表Ｂが図９の状態におけるシーケンス番号管理表Ｃの内容を示している。図８に示すシーケンス番号管理表Ｃでは、表Ｂの最新のシーケンス番号として０００００１が登録された状態となっている。
【００７６】
以上のように、第２の実施形態では、表Ｂとは別にシーケンス番号管理表Ｃを設けているため、表Ｂ（循環シーケンス番号を含めたデータを登録する表）において、「シーケンス番号カラムに一意性を持たせる」という条件を除外することができる。
【００７７】
また、第２の実施形態では、表Ｂとシーケンス番号管理表Ｃに分かれた構成となっているため、ＤＢクライアント２０（クライアントＡＰＬ２１）で、表Ｂのデータ更新を行う際の動作も、第１の実施形態と異なる部分がある。
【００７８】
第２の実施形態のシーケンス番号取得部２１１は、シーケンス番号管理表Ｃから、最新のシーケンス番号を読み出す処理を行うことになる。
【００７９】
シーケンス番号管理表Ｃ（シーケンス番号循環方式を採用した表）に対するシーケンス番号読み出し要求は、例えば、図１１（ａ）のようなイメージのＳＱＬ文で行うことができる。図１１（ａ）のＳＱＬ文は、シーケンス番号管理表内にあるデータ（レコード）で、一番最後に登録されたデータ（最も最近登録されたデータ）から、シーケンス番号を取得する内容となっている。これにより、シーケンス番号取得部２１１は、現在の最新のシーケンス番号の値を取得することができる。
【００８０】
第２の実施形態のシーケンス番号生成部２１２は、シーケンス番号取得部２１１が取得したシーケンス番号に基づいて新しいシーケンス番号を循環的に生成する。すなわち、シーケンス番号生成部２１２は、シーケンス番号の循環条件における最大値（以下、「循環最大値」とも呼ぶ）が取得された場合、シーケンス番号を最小値に初期化する機能に対応している。例えば、シーケンス番号の循環条件が、０００００１〜０００１００であり、シーケンス番号管理表Ｃから取得したシーケンス番号が、０００１００であった場合、シーケンス番号生成部２１２は、次に使用するシーケンス番号を０００００１とする。
【００８１】
そして、第２の実施形態のデータ更新部２１３は、シーケンス番号管理表Ｃに対して、シーケンス番号生成部２１２が生成したシーケンス番号の登録が成功した後に、表Ｂに対するデータ更新要求を行うことになる。このとき、第２の実施形態のデータ更新部２１３は、シーケンス番号管理表Ｃに登録が成功したシーケンス番号を用いてデータ更新の要求を行うことになる。
【００８２】
また、シーケンス番号管理表Ｃ内のデータ（レコード）は、循環条件より少ないデータ数とする必要がある。この実施形態では、クライアントＡＰＬ２１で、シーケンス番号管理表Ｃで、最新のシーケンス番号よりも過去のデータ（最新のシーケンス番号以外のデータ）を削除する処理に対応しているものとして説明する。
【００８３】
第２の実施形態の例では、データ更新部２１３が、シーケンス番号管理表Ｃに対して新しいシーケンス番号（新しいデータ）を登録する際に、図１１（ｂ）のようなイメージのＳＱＬ文を用いて、「最も最近登録されたシーケンス番号より過去のシーケンス番号のデータ（レコード）を、全て削除する処理」の要求を行うようにしてもよい。このように、シーケンス番号管理表Ｃから最新のシーケンス番号より過去のデータ削除することにより、シーケンス番号管理表Ｃでは、最新データ１件のみが残ることになる。なお、シーケンス番号管理表Ｃに対して、最新のシーケンス番号より過去のデータ削除を要求する主体はＤＢクライアント２０に限定されずＤＢサーバ１０側で行うようにしてもよい。また、シーケンス番号管理表Ｃに対して、最新のシーケンス番号より過去のデータ削除を行うタイミングは、新しいシーケンス番号を登録する毎ではなく、所定番号のシーケンス番号を登録するタイミングに限定するようにしてもよい。
【００８４】
（Ｂ−２）第２の実施形態の動作
次に、以上のような構成を有する第２の実施形態のＤＢシステム１Ａの動作を説明する。
【００８５】
まず、第２の実施形態のＤＢクライアント２０におけるクライアントＡＰＬ２１の動作について図１０のフローチャートを用いて説明する。
【００８６】
図１０では、クライアントＡＰＬ２１において、表Ｂに対するデータ更新（新規のデータ登録）が発生し、当該データ更新が完了するまでの動作について示している。
【００８７】
クライアントＡＰＬ２１において、表Ｂに対するデータ更新が発生すると、まず、シーケンス番号取得部２１１が、ＤＢサーバ１０（サーバプロセス１１）に対して、シーケンス番号管理表Ｃに係るシーケンス番号（最新のシーケンス番号）の読み出しを要求して取得する（Ｓ３０１）。
【００８８】
次に、シーケンス番号生成部２１２が、取得したシーケンス番号を用いて、新たなシーケンス番号（取得したシーケンス番号に「１」を加算したシーケンス番号）を循環的生成する。そして、データ更新部２１３が、生成したシーケンス番号を用いて、ＤＢサーバ１０（サーバプロセス１１）に、シーケンス番号管理表Ｃのデータ更新（新規のデータ登録）を要求する（Ｓ３０２）。なお、シーケンス番号管理表Ｃのデータ件数が０件の場合（シーケンス番号取得部２１１でシーケンス番号が取得できない場合）、シーケンス番号生成部２１２は、初期値としてシーケンス番号「０００００１」を生成するようにしてもよい。
【００８９】
その後、クライアントＡＰＬ２１は、ＤＢサーバ１０（サーバプロセス１１）からの、処理結果の通知（例えば、エラーや正常終了）を受信し通知内容に応じた処理を判断する（Ｓ３０３）。このとき、クライアントＡＰＬ２１は、シーケンス番号の２重登録が通知された場合は上述のステップＳ３０１から動作してデータ更新のリトライ処理（エラー分析部２１４の決定に基づくリトライ処理）に移行し、正常終了が通知された場合には後述するステップＳ３０４から動作する。
【００９０】
ＤＢサーバ１０（サーバプロセス１１）から、データ更新の正常終了を受信した場合、クライアントＡＰＬ２１のデータ更新部２１３は、ＤＢサーバ１０（サーバプロセス１１）に対して、最新のデータ更新で用いたシーケンス番号（最新にシーケンス番号生成部２１２で生成したシーケンス番号）を用いて、シーケンス番号管理表Ｃのデータコミットの要求を行う（Ｓ３０４）。
【００９１】
次に、クライアントＡＰＬ２１のデータ更新部２１３は、ＤＢサーバ１０（サーバプロセス１１）に対して、シーケンス番号管理表Ｃから最新のシーケンス番号より過去のデータ削除を要求（最新のシーケンス番号よりも過去のデータを削除する処理を要求）する（Ｓ３０５）。
【００９２】
次に、クライアントＡＰＬ２１のデータ更新部２１３は、ＤＢサーバ１０（サーバプロセス１１）に対して、シーケンス番号管理表Ｃのデータ削除に係るコミットを要求する（Ｓ３０６）。
【００９３】
次に、データ更新部２１３は、最新にシーケンス番号管理表Ｃに登録したシーケンス番号を用いて、表Ｂに対するデータ更新処理（データ登録処理）を要求する（Ｓ３０７）。
【００９４】
次に、データ更新部２１３は、ＤＢサーバ１０（サーバプロセス１１）に対して、最新のデータ更新で用いたシーケンス番号を用いて、表Ｂのデータコミットの要求を行い（Ｓ３０８）、処理を終了する。
【００９５】
次に、２つのＤＢクライアント２０−１、２０−２が、同じタイミングでＤＢサーバ１０に対してシーケンス番号管理表Ｃのデータ更新（シーケンス番号の読出し）を要求した場合の動作について、図１２、図１３のシーケンス図を用いて説明する。
【００９６】
図１４は、ＤＢシステム１Ａの各装置が図１２のシーケンス図に従って動作した場合のシーケンス番号管理表Ｃの遷移について示した説明図である。また、図１５は、ＤＢシステム１Ａの各装置が図１２、図１３のシーケンス図に従って動作した場合の表Ｂの遷移について示した説明図である。
【００９７】
図１２、図１３のシーケンス図では、シーケンス番号管理表Ｃの初期状態は、図１４（ａ）の状態であるものとしている。図１４（ａ）に示すように、シーケンス番号管理表Ｃは初期状態において、シーケンス番号「０００００１」（登録日時：2013/12/1 13:11:01）のデータのみが登録されている。
【００９８】
また、図１２、図１３のシーケンス図では、表Ｂの初期状態は、図１５（ａ）の状態であるものとする。図１５（ａ）に示すように、表Ｂは初期状態において、シーケンス番号「０００００１」のデータ（項目１：「ａａａ」、…）のみが登録されている。
【００９９】
なお、図１２、図１３のシーケンス図では、説明を簡易とするため、ＤＢクライアント２０によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、ＤＢクライアント２０による登録要求後のコミットは全て成功したものとして図示している。
【０１００】
まず、２つのＤＢクライアント２０−１、２０−２から、シーケンス番号管理表Ｃのシーケンス番号の読出し要求が、同じタイミングでＤＢサーバ１０に到達したものとする（Ｓ４０１、Ｓ４０２）。
【０１０１】
この場合、ＤＢサーバ１０のサーバプロセス１１は、ＤＢクライアント２０−１、２０−２の要求のそれぞれに対して、シーケンス番号管理表Ｃから最新のシーケンス番号「０００００１」を読み出して返答する（Ｓ４０３、Ｓ４０４、Ｓ４０５）。
【０１０２】
ＤＢクライアント２０−１、２０−２では、それぞれ最新のシーケンス番号として「０００００１」を取得することになるため、それぞれ新しいシーケンス番号として「０００００２」を生成することになる（Ｓ４０６、Ｓ４０７）。
【０１０３】
次に、ＤＢクライアント２０−２が先に、ＤＢサーバ１０に対してシーケンス番号管理表Ｃに、新規データ（シーケンス番号が「００００２」のデータ）を登録する要求（データ更新要求）を送信したものとする（Ｓ４０８）。
【０１０４】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−２の登録要求に応じて、シーケンス番号管理表Ｃにシーケンス番号が「００００２」のデータを登録し（Ｓ４０９）、ＤＢクライアント２０−２にデータ登録ＯＫを返答する（Ｓ４１２）。この時点で、シーケンス番号管理表Ｃの内容は、図１４（ｂ）の状態となる。
【０１０５】
ＤＢサーバ１０からのデータ登録ＯＫの返答を受けると、ＤＢクライアント２０−２は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃから、最新のシーケンス番号より過去のデータを削除する要求を行う（Ｓ４１５）。
【０１０６】
ＤＢクライアント２０−２からシーケンス番号管理表Ｃのデータ削除要求を受付けると、ＤＢサーバ１０は、当該要求（ＳＱＬ文）に従って、シーケンス番号管理表Ｃのデータ削除を実行する（Ｓ４１６）。このとき、シーケンス番号管理表Ｃにおいて、最新のシーケンス番号である０００００２よりも過去（登録日時が過去）のシーケンス番号０００００１のデータが削除されることになる。この時点で、シーケンス番号管理表Ｃの内容は、図１４（ｃ）の状態となる。
【０１０７】
次に、ＤＢクライアント２０−２は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃに登録したシーケンス番号０００００２を用いて、表Ｂへのデータ登録を要求する（Ｓ４２１、Ｓ４２２）。
【０１０８】
ＤＢクライアント２０−２から表Ｂへのデータ登録を受付けると、ＤＢサーバ１０は、当該要求に基づいて表Ｂに、シーケンス番号０００００２のデータ登録を行い（Ｓ４２３）、ＤＢクライアント２０−２にデータ登録ＯＫを返答する（Ｓ４２４）。この時点で、表Ｂの内容は、図１５（ｂ）の状態となる。
【０１０９】
データ登録ＯＫを受信すると、ＤＢクライアント２０−２は、今回のデータ登録の処理を終了する（Ｓ４２５）。
【０１１０】
一方上述のステップＳ４０８よりも後のタイミングで、ＤＢクライアント２０−１から、ＤＢサーバ１０に対してシーケンス番号管理表Ｃに、新規データ（シーケンス番号が「００００２」のデータ）を登録する要求（データ更新要求）が送信されたものとする（Ｓ４１０）。そして、ＤＢサーバ１０は、ＤＢクライアント２０−２の登録要求を受信するが、シーケンス番号管理表Ｃにシーケンス番号が「００００２」のデータが既に登録されているため、シーケンス番号の二重登録エラーを検出し（Ｓ４１１）、ＤＢクライアント２０−２にデータ登録ＮＧ（シーケンス番号の二重登録エラーを原因とするＮＧ）を返答する（Ｓ４１３）。
【０１１１】
ＤＢクライアント２０−１では、ＤＢサーバ１０からのデータ登録ＮＧ（シーケンス番号の二重登録エラーを原因とするＮＧ）を受けて、データ登録のリトライを決定することになる（Ｓ４１４）。
【０１１２】
ＤＢクライアント２０−１は、データ登録のリトライを開始すると、まず、ＤＢサーバ１０に対して、シーケンス番号の読出し要求を送信する（Ｓ４１７）。
【０１１３】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−１からのシーケンス番号の読出し要求に応じて、シーケンス番号管理表Ｃの最新のシーケンス番号「０００００２」を読み出して（Ｓ４１８）、ＤＢクライアント２０−１に返答する（Ｓ４１９）。
【０１１４】
次に、ＤＢクライアント２０−１は、取得した最新のシーケンス番号「０００００２」に基づいて、新しいシーケンス番号「０００００３」を生成する（Ｓ４２０）。
【０１１５】
次に、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃに新規データ（シーケンス番号が「００００３」のデータ）を登録する要求（データ更新要求）を送信する（Ｓ４２６）。
【０１１６】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−１の登録要求に応じて、シーケンス番号管理表Ｃにシーケンス番号が「００００３」のデータを登録し（Ｓ４２７）、ＤＢクライアント２０−１にデータ登録ＯＫを返答する（Ｓ４２８）。この時点で、シーケンス番号管理表Ｃの内容は、図１４（ｄ）の状態となる。
【０１１７】
ＤＢサーバ１０からのデータ登録ＯＫの返答を受けると、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃから、最新のシーケンス番号より過去のデータを削除する要求を行う（Ｓ４２９）。
【０１１８】
ＤＢクライアント２０−２からシーケンス番号管理表Ｃのデータ削除要求を受付けると、ＤＢサーバ１０は、当該要求（ＳＱＬ文）に従って、シーケンス番号管理表Ｃのデータ削除を実行する（Ｓ４３０）。このとき、シーケンス番号管理表Ｃにおいて、最新のシーケンス番号である０００００３よりも過去（登録日時が過去）のシーケンス番号０００００２のデータが削除されることになる。この時点で、シーケンス番号管理表Ｃの内容は、図１４（ｅ）の状態となる。
【０１１９】
次に、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃに登録したシーケンス番号０００００３を用いて、表Ｂへのデータ登録を要求する（Ｓ４３１、Ｓ４３２）。
【０１２０】
ＤＢクライアント２０−２から表Ｂへのデータ登録を受付けると、ＤＢサーバ１０は、当該要求に基づいて表Ｂに、シーケンス番号０００００３のデータ登録を行い（Ｓ４３３）、ＤＢクライアント２０−１にデータ登録ＯＫを返答する（Ｓ４３４）。この時点で、表Ｂの内容は、図１５（ｃ）の状態となる。
【０１２１】
データ登録ＯＫを受信すると、ＤＢクライアント２０−２は、今回のデータ登録の処理を終了する（Ｓ４３５）。
【０１２２】
次に、第２の実施形態のＤＢシステム１Ａにおいて、シーケンス番号管理表Ｃ及び表Ｂに係るシーケンス番号が循環する際の動作について、図１６のシーケンス図を用いて説明する。
【０１２３】
図１７は、ＤＢシステム１Ａの各装置が図１６のシーケンス図に従って動作した場合のシーケンス番号管理表Ｃの遷移について示した説明図である。また、図１８は、ＤＢシステム１Ａの各装置が図１６のシーケンス図に従って動作した場合の表Ｂの遷移について示した説明図である。
【０１２４】
なお、以下では、ＤＢシステム１Ａにおいて、シーケンス番号管理表Ｃに係るシーケンス番号の循環最大値が１００に設定されているものとして説明する。
【０１２５】
図１６のシーケンス図では、シーケンス番号管理表Ｃの初期状態は、図１７（ａ）の状態であるものとしている。図１７（ａ）に示すように、シーケンス番号管理表Ｃは初期状態において、シーケンス番号「０００１００」（登録日時：2013/12/11 9:00:00）のデータのみが登録されている。
【０１２６】
また、図１６のシーケンス図では、表Ｂの初期状態は、図１８（ａ）の状態であるものとする。図１８（ａ）に示すように、表Ｂでは、初期状態において、シーケンス番号０００００１〜０００１００の１００件のデータが登録されているものとする。
【０１２７】
なお、図１６のシーケンス図では、説明を簡易とするため、ＤＢクライアント２０によるデータ登録要求に対応するコミット要求のシーケンスの図示を省略しているが、ＤＢクライアント２０による登録要求後のコミットは全て成功したものとして図示している。
【０１２８】
上述のような状態で、ＤＢクライアント２０−１からＤＢサーバ１０に、シーケンス番号の読出し要求が送信されたものとする（Ｓ５０１）。
【０１２９】
この場合、ＤＢサーバ１０は、ＤＢクライアント２０−１の要求に応じて、シーケンス番号管理表Ｃから最新のシーケンス番号「０００１００」を読み出して返答する（Ｓ５０２、Ｓ５０３）。
【０１３０】
ＤＢクライアント２０−１は、最新のシーケンス番号として循環最大値である「０００１００」を取得することになるため、新しいシーケンス番号として「０００００１」を生成することになる（Ｓ５０４）。
【０１３１】
次に、ＤＢクライアント２０−１は、ＤＢサーバ１０に対してシーケンス番号管理表Ｃに、新規データ（シーケンス番号が「００００１」のデータ）を登録する要求（データ更新要求）を送信する（Ｓ５０５）。
【０１３２】
そして、ＤＢサーバ１０は、ＤＢクライアント２０−１の登録要求に応じて、シーケンス番号管理表Ｃにシーケンス番号が「００００１」のデータを登録し（Ｓ５０６）、ＤＢクライアント２０−１にデータ登録ＯＫを返答する（Ｓ５０７）。この時点で、シーケンス番号管理表Ｃの内容は、図１７（ｂ）の状態となる。
【０１３３】
ＤＢサーバ１０からのデータ登録ＯＫの返答を受けると、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃから、最新のシーケンス番号より過去のデータを削除する要求を行う（Ｓ５０８）。
【０１３４】
ＤＢクライアント２０−１からシーケンス番号管理表Ｃのデータ削除の要求を受付けると、ＤＢサーバ１０は、当該要求（ＳＱＬ文）に従って、シーケンス番号管理表Ｃのデータ削除を実行する（Ｓ５０９）。このとき、シーケンス番号管理表Ｃにおいて、最新のシーケンス番号である０００００１よりも過去（登録日時が過去）のシーケンス番号０００１００のデータが削除されることになる。この時点で、シーケンス番号管理表Ｃの内容は、図１７（ｃ）の状態となる。
【０１３５】
次に、ＤＢクライアント２０−１は、ＤＢサーバ１０に対して、シーケンス番号管理表Ｃに登録したシーケンス番号０００００１を用いて、表Ｂへのデータ登録を要求する（Ｓ５１０、Ｓ５１１）。
【０１３６】
ＤＢクライアント２０−１から表Ｂへのデータ登録を受付けると、ＤＢサーバ１０は、当該要求に基づいて表Ｂに、シーケンス番号０００００１のデータ登録を行い（Ｓ５１２）、ＤＢクライアント２０−１にデータ登録ＯＫを返答する（Ｓ５１３）。この時点で、表Ｂの内容は、図１８（ｂ）の状態となる。
【０１３７】
データ登録ＯＫを受信すると、ＤＢクライアント２０−１は、今回のデータ登録の処理を終了する（Ｓ５１４）。
【０１３８】
（Ｂ−３）第２の実施形態の効果
第２の実施形態によれば、以下のような効果を奏することができる。
【０１３９】
第２の実施形態では、シーケンス番号を循環する方式でも、第１の実施形態と同様に、ＤＢサーバ１０におけるシーケンス番号の連続性を保つことができる。第２の実施形態では、シーケンス番号は循環して再利用されるため、シーケンス番号として利用可能な数値の上限を考慮せずに連続して動作させることが可能となる。
【０１４０】
（Ｃ）他の実施形態
本発明は、上記の各実施形態に限定されるものではなく、以下に例示するような変形実施形態も挙げることができる。
【０１４１】
（Ｃ−１）第２の実施形態では、シーケンス番号管理表Ｃにおいて、シーケンス番号と登録日時を登録しているが、登録日時については省略するようにしてもよい。ただし、登録日時を省略した場合には、シーケンス番号管理表Ｃのデータ数を常に循環最大値以下にしておく必要がある。
【符号の説明】
【０１４２】
１…ＤＢシステム、１０…ＤＢサーバ、１１…サーバプロセス、１２…ＤＢファイルシステム、２０、２０−１、２０−２…ＤＢクライアント、２１…クライアントＡＰＬ、２１１…シーケンス番号取得部、２１２…シーケンス番号生成部、２１３…データ更新部、２１４…エラー分析部、２２…データベースアクセスライブラリ。
【図１】
0006398786.tif 000002
【図２】
0006398786.tif 000003
【図３】
0006398786.tif 000004
【図４】
0006398786.tif 000005
【図５】
0006398786.tif 000006
【図６】
0006398786.tif 000007
【図７】
0006398786.tif 000008
【図８】
0006398786.tif 000009
【図９】
0006398786.tif 000010
【図１０】
0006398786.tif 000011
【図１１】
0006398786.tif 000012
【図１２】
0006398786.tif 000013
【図１３】
0006398786.tif 000014
【図１４】
0006398786.tif 000015
【図１５】
0006398786.tif 000016
【図１６】
0006398786.tif 000017
【図１７】
0006398786.tif 000018
【図１８】
0006398786.tif 000019