(57)【特許請求の範囲】
【請求項１】
指定した時点における記録媒体上のデータベースのレコードを抽出して他の領域へ保存することを要求するスナップショット要求を受けて、抽出するデータの前記記録媒体における抽出範囲を示す情報をメモリに記録する設定処理と、
前記抽出範囲におけるレコードを順次抽出して前記他の領域へ記録する抽出処理と、
前記抽出範囲において前記抽出処理によるレコード抽出が完了した抽出済み領域と、前記抽出範囲においてレコード抽出をまだしていない未抽出領域とを示す情報を前記メモリに随時記録する監視処理と、
前記指定された時点より後に開始された他の後続トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出処理中に受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、
前記更新対象レコードが前記抽出済み領域にある場合は、当該抽出済み領域の更新対象レコードを更新し、
前記更新対象レコードが未抽出領域にある場合は、当該未抽出領域の更新対象レコードの写像を前記抽出範囲外に記録し、当該写像を更新する後続更新処理と、
前記抽出処理による前記抽出範囲内の前記更新対象レコードの抽出が終了した後に、前記抽出範囲外に記録され更新された前記写像と同様に、前記抽出範囲内の前記更新対象レコードを更新する引き戻し処理とをコンピュータに実行させるデータベース管理プログラム。
【請求項２】
前記指定された時点より前に開始された他の先行トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出処理中に受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、
前記更新対象レコードが前記未抽出領域のレコードである場合には当該更新対象レコードを更新し、
前記更新対象レコードが抽出済み領域にある場合は、当該更新対象レコードを更新してさらに前記更新されたレコードを含む領域を示す情報をリトライ領域情報として前記メモリに記録する先行更新処理と、
前記先行更新処理において前記リトライ領域情報が前記メモリに記録された場合、前記リトライ領域情報の示す領域から再度レコードを抽出して前記他の領域へ記録する再抽出処理とをコンピュータにさらに実行させる請求項１に記載のデータベース管理プログラム。
【請求項３】
前記指定された時点より前に開始された他の先行トランザクションによる前記抽出範囲内のレコードの更新指示を受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、
前記更新対象レコードが前記未抽出領域のレコードである場合には当該更新対象レコードを更新し、
前記更新対象レコードが前記抽出済み領域にある場合は、当該更新指示にかかる更新処理をキャンセルする先行更新処理を、コンピュータにさらに実行させる請求項１に記載のデータベース管理プログラム。
【請求項４】
前記先行更新処理において、前記更新対象レコードが前記未抽出領域のレコードである場合には前記抽出処理による当該更新対象レコードの抽出を禁止した上で、前記更新対象レコードを更新する、請求項２または３に記載のデータベース管理プログラム。
【請求項５】
前記抽出処理は、前記指定された時点より前に開始された他の先行トランザクションによる前記抽出範囲内へのレコードの更新処理が行われている場合は、前記先行トランザクション終了を待って実行される、請求項１に記載のデータベース管理プログラム。
【請求項６】
前記設定処理は、前記抽出範囲を示す情報に加えて、前記抽出処理中に前記抽出範囲に対してレコードを挿入するための予約領域を示す情報をさらに記録し、
前記指定された時点より前に開始された他の先行トランザクションによるレコードの挿入指示を受けた場合に、当該挿入指示にかかる挿入レコードを前記予約領域に記録する先行挿入処理をさらにコンピュータに実行させ、
前記抽出処理は、前記予約領域に記録された前記挿入レコードも抽出する、請求項１〜５のいずれか１項に記載の、データベース管理プログラム。
【請求項７】
前記指定された時点より後に開始された他の後続トランザクションにより、レコードの挿入指示を受けた場合に、前記抽出範囲の外へ当該挿入指示にかかるレコードを記録する、後続挿入処理をさらにコンピュータに実行させる、請求項１〜６のいずれか１項に記載のデータベース管理プログラム。
【請求項８】
前記抽出範囲内の前記更新対象レコードを前記写像と同様に更新した後、前記抽出範囲外の前記写像が記録されていた領域を解放する処理をさらに、コンピュータに実行させる、請求項１〜７のいずれか１項に記載のデータベース管理プログラム。
【請求項９】
指定した時点における記録媒体上のデータベースのレコードを抽出して他の領域へ保存することを要求するスナップショット要求を受けて、抽出するデータの前記記録媒体における抽出範囲を示す情報をメモリに記録する設定処理と、
前記抽出範囲におけるレコードを順次抽出して前記他の領域へ記録する抽出処理と、
前記抽出範囲において前記抽出処理によるレコード抽出が完了した抽出済み領域と、前記抽出範囲においてレコード抽出をまだしていない未抽出領域とを示す情報を前記メモリに随時記録する監視処理と、
前記指定された時点より後に開始された他の後続トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出処理中に受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、
前記更新対象レコードが前記抽出済み領域にある場合は、当該抽出済み領域の更新対象レコードを更新し、
前記更新対象レコードが未抽出領域にある場合は、当該未抽出領域の更新対象レコードの写像を前記抽出範囲外に記録し、当該写像を更新する後続更新処理と、
前記抽出処理による前記抽出範囲内の前記更新対象レコードの抽出が終了した後に、前記抽出範囲外に記録され更新された前記写像と同様に、前記抽出範囲内の前記更新対象レコードを更新する引き戻し処理とを含む、コンピュータが実行するデータベース管理方法。
【請求項１０】
指定した時点における記録媒体上のデータベースのレコードを抽出して他の領域へ保存することを要求するスナップショット要求を受けて、抽出するデータの前記記録媒体における抽出範囲を示す情報をメモリに記録する設定部と、
前記抽出範囲におけるレコードを順次抽出して前記他の領域へ記録する抽出部と、
前記抽出範囲において前記抽出部によるレコード抽出が完了した抽出済み領域と、前記抽出範囲においてレコード抽出をまだしていない未抽出領域とを示す情報を前記メモリに随時記録する監視部と、
前記指定された時点より後に開始された他の後続トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出部の抽出処理中に受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、
前記更新対象レコードが前記抽出済み領域にある場合は、当該抽出済み領域の更新対象レコードを更新し、
前記更新対象レコードが未抽出領域にある場合は、当該未抽出領域の更新対象レコードの写像を前記抽出範囲外に記録し、当該写像を更新する後続更新部と、
前記抽出部による前記抽出範囲内の前記更新対象レコードの抽出が終了した後に、前記抽出範囲外に記録され更新された前記写像と同様に、前記抽出範囲内の前記更新対象レコードを更新する引き戻し部とを備えたデータベース管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理装置に関する。
【背景技術】
【０００２】
データベースマネージメントシステムにおいて、データの更新途中のある時点でのスナップショットを取得することが要求される。スナップショットは、例えば、データ保全（バックアップ）、あるいは任意時点でのデータ内容参照のために使われる。スナップショット取得に用いられる技術としては、例えば、ログまたは写像を用いて読取一貫性を保つ技術、およびミラーリング等が挙げられる。
【０００３】
ログを用いる技術では、データベースに対する操作をログデータ（またはジャーナルデータ）として記録しておき、ログデータの時点まで遡ってスナップショットを取得することができる（ログＵＮＤＯ方式）。
【０００４】
写像を用いた技術では、例えば、データベースのテーブルデータが追記型構造となっており、挿入（ＩＮＳＥＲＴ）の場合も更新（ＵＰＤＡＴＥ）の場合も新しいレコードが追加される。これにより、同じデータベースへのアクセス処理を含む複数のトランザクションは、データベースの現在のレコードだけでなく、現在から遡ったある時点のレコードを参照することができる（ＭＶＣＣ方式）。
【０００５】
また、ミラーリングでは、主となる(マスタ)データベースと全く同じ内容の（レプリカ・複製）データベースが作成される。このように、データベース二重化しておき、ある時点で一方を切り離して、切り離したデータベースを参照することで、その時点のスナップショットを取得することができる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】“第１３章  Oracleアーキテクチャ（捕捉）”、[online]、[平成２１年５月２２日検索]、<http://www.shoeisha.com/mag/windev/pdf/870603/windev0603_144_SQLServer.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記ログＵＮＤＯ方式では、ログデータのためのメモリ領域が必要である。また、ユーザは、トランザクション量を考慮したログデータ領域のサイズのチューニングをする必要がある。上記ＭＶＣＣ方式では、例え参照処理やスナップショット取得処理が行われなくても、データベースに更新が発生する度にデータ領域を消費してしまう。その結果、データ領域が圧迫される。また、定期的に不要なデータ領域を回収する必要があり、回収にＣＰＵおよびＩ／Ｏ資源が使われる。上記の二重化データベースの切り離しによるスナップショットの取得では、ボリュームディスクの調達、設定および管理が必要となる。このように、上記従来の方式はいずれも、スナップショットの取得を要件とした場合には、複雑な処理が必要となり、コンピュータ資源の調達、利用およびユーザの運用管理に無駄が多い方式となっている。
【０００８】
ゆえに、本発明は、データベースのスナップショット取得において、利用するコンピュータ資源又はユーザの運用管理を低減することを目的とする。
【課題を解決するための手段】
【０００９】
本願開示のスナップショット装置は、指定した時点における記録媒体上のデータベースのレコードを抽出して他の領域へ保存することを要求するスナップショット要求を受けて、抽出するデータの前記記録媒体における抽出範囲を示す情報をメモリに記録する設定部と、前記抽出範囲におけるレコードを順次抽出して前記他の領域へ記録する抽出部と、前記抽出範囲において前記抽出部によるレコード抽出が完了した抽出済み領域と、前記抽出範囲においてレコード抽出をまだしていない未抽出領域とを示す情報を前記メモリに随時記録する監視部と、前記指定された時点より後に開始された後続トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出部の抽出処理中に受けた場合に、前記メモリを参照して、前記更新指示の更新対象レコードが前記抽出済み領域にあるか、前記未抽出領域にあるか判断し、前記更新対象レコードが前記抽出済み領域にある場合は、当該抽出済み領域の更新対象レコードを更新し、前記更新対象レコードが未抽出領域にある場合は、当該未抽出領域の更新対象レコードの写像を前記抽出範囲外に記録し、当該写像を更新する後続更新部と、前記抽出部による前記抽出範囲内の前記更新対象レコードの抽出が終了した後に、前記抽出範囲外に記録され更新された前記写像と同様に、前記抽出範囲内の前記更新対象レコードを更新する引き戻し部とを備える。
【発明の効果】
【００１０】
本願明細書の開示によれば、データベースのスナップショット取得において、利用するコンピュータ資源又はユーザの運用管理を低減することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態にかかるデータベースサーバの構成例を示す図である。
【図２Ａ】データベースのレコードの管理方法の例を説明するための図である。
【図２Ｂ】レコード間のリンク管理方法とリンク情報の例を説明するための図である。
【図３】データベース管理装置がスナップショット要求を受けたときの動作例を示すフローチャートである。
【図４】データベース管理装置が更新指示を受けた場合の動作例を示すフローチャートである。
【図５Ａ】引き戻し処理の具体例を説明するための図である。
【図５Ｂ】引き戻し処理の具体例を説明するための図である。
【図６】第２の実施形態にかかるデータベースサーバの構成例を示す図である。
【図７】抽出リトライの動作例を説明するための図である。
【図８】先行トランザクションキャンセルの動作例を説明するための図である。
【図９】更新指示を受けた更新部８ａの動作例を示すフローチャートである。
【図１０】データベース管理装置３がスナップショットを取得する際の動作例を示すフローチャートである。
【図１１】仮レコードマークが設定されたレコードのリンク先が、抽出範囲である場合と抽出範囲外である場合の例を示す図である
【図１２】引き戻し処理の一例を示すフローチャートである。
【図１３】第１および第２の実施形態におけるデータベースサーバのハードウエア構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
（第１の実施形態）
［システム構成例］
図１は、第１の実施形態にかかるデータベースサーバの構成例を示す図である。図１に示す例では、データベースサーバ１は、スナップショット取得部２、データベース管理装置３、更新アプリケーション部１１およびデータベースのデータが記録される記録媒体１０を含む。データベース管理装置３は、スナップショット取得部２から、スナップショット要求を受けて、記録媒体１０のデータベースから指定された時点における指定された範囲のデータをスナップショットとして抽出し他の領域へ保存する。また、アプリケーション部１１は、データベースへアクセスする処理を含むトランザクションを実行する。アプリケーション部１１は、トランザクションにおけるデータベースへのアクセス処理の際、データベース管理装置３に対して、データベースへの操作指示を送信する。データベース管理装置３は、アプリケーション部１１からの操作指示に基づいて記録媒体１０のデータベースへアクセスする。データベース管理装置３は、例えば、データベース管理システム（ＤＢＭＳ）の少なくとも一部の機能を実現する装置として、データベースサーバ１に組み込まれてもよい。
【００１３】
データベース管理装置３は、設定部４、抽出部５、監視部６、メモリ７ａ、バッファ７ｂ、更新部８を備える。設定部４は、指定された時点における記録媒体１０上のデータベースのレコードを抽出して他の領域へ保存することを要求するスナップショット要求を受けて、抽出するレコードの記録媒体１０における抽出範囲を示す情報をメモリ７ａに記録する。抽出部５は、この抽出範囲におけるレコードを順次抽出して前記他の領域（図示せず）へ記録する。
【００１４】
監視部６は、抽出部５の抽出処理を監視し、前記抽出範囲においてレコード抽出が完了した抽出済み領域と、前記抽出範囲においてレコード抽出をまだしていない未抽出領域とを示す情報をメモリ７ａに随時記録する。
【００１５】
更新部８は、アプリケーション部１１から、データベースへのレコードの更新指示を受付ける。なお、ここで更新指示は、更新（ＵＰＤＡＴＥ）命令の他、挿入（ＩＮＳＥＲＴ）命令および削除（ＤＥＬＥＴＥ）命令を含むものとする。更新部８は、指定された時点より後に開始された他の後続トランザクションによる前記抽出範囲内のレコードの更新指示を、前記抽出処理中に受けた場合に、メモリ７を参照して、前記更新指示の更新対象レコードが抽出済み領域にあるか、未抽出領域にあるか判断する。更新部８は、前記更新対象レコードが抽出済み領域にある場合は、当該抽出済み領域の更新対象レコードを更新し、前記更新対象レコードが未抽出領域にある場合は、当該未抽出領域の更新対象レコードの写像を前記抽出範囲外に記録して、この写像を更新する。引き戻し部９は、抽出部５の抽出処理による前記抽出範囲のレコードの抽出が完了した後に、前記抽出範囲外に記録され更新された前記写像と同様に、前記抽出範囲内の前記更新対象レコードを更新する。
【００１６】
このように、図１に示す構成によれば、データベース管理装置３は、スナップショット取得指示を受けると、データの抽出範囲、抽出済み領域、未抽出領域をメモリに記録する。これにより、後続トランザクションによる抽出範囲のレコードへの更新指示を受けた場合、更新対象データが抽出済み領域にあるか未抽出領域にあるかを判定でき、判定の結果に基づいて更新操作を制御することができる。図１に示す例では、更新部８は、後続トランザクションによる更新が抽出済み領域のレコードに対する更新であれば（例えば、ＡＰＬ１の場合）、そのまま抽出範囲内のレコードを更新する。後続トランザクションによる更新が未抽出領域のレコードに対する更新であれば（例えば、ＡＰＬ３の場合）、更新部８は、更新部更新対象レコードの写像を抽出範囲外に作成して、この写像に対して更新をし、スナップショットの抽出完了後に、引き戻し部９が、更新した写像を更新対象レコードへ引き戻すことができる。その結果、簡単な処理で、スナップショット取得におけるデータ一貫性を確保することができる。すなわち、データベースのスナップショット取得において、利用するコンピュータ資源およびユーザの運用管理を低減することができる。
【００１７】
例えば、データベースへの操作履歴を示すログを記録する処理や、データベースが更新される度に写像を記録する処理等が不要になる。図１に示す構成では、スナップショット取得における未抽出領域のレコードを後続トランザクションが更新をする場合に写像を作成するので、適切なタイミングで効率よく、複数のレコード（写像）を管理することになる。その結果、ディスク容量やメモリ領域の圧迫を回避することができる。
【００１８】
［スナップショットの説明］
本実施形態におけるスナップショット取得は、指定されたある時点における記録媒体（例えば、ディスクまたはメモリ等）に記録されたデータを抽出して他の記録領域へ保存する処理である。スナップショット取得は、例えば、データベース管理システムにおいて、データのバックアップや、任意の時点でのデータ参照（例えば、バッチ等）のために実行される。
【００１９】
スナップショットの取得において、抽出するデータの範囲（抽出範囲）は、目的に応じて適宜設定されることが好ましく、特に限定されない。例えば、抽出範囲は、ＤＢＭＳにおいて関連するテーブル群（一例として、ＤＳＩ（Ｄａｔａ  Ｓｔｒｕｃｔｕｒｅ  Ｉｎｓｔａｎｃｅ））であってもよいし、テーブル単体でもよい。また、スナップショットの対象となるデータベースは、記録媒体に体系的に記録されたデータ（情報）の集合であって、その形式は、特に限定されない。本実施形態では、一例として、表形式のデータを管理するＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ）について説明する。
【００２０】
本実施形態では、データベースのスナップショット取得中に、別のトランザクション（アプリケーション）によりデータベースへの更新処理が指示される場合のデータ一貫性の確保を実現している。なお、トランザクションによるデータベースへの更新処理の実施中に、別のアプリケーションによりスナップショットの要求がされる場合のデータ一貫性の確保を実現する仕組みは、後述の第２の実施形態である。トランザクション（アプリケーション）の例として、データベース資源のバックアップを、ジョブのスケジュール管理により特定時間に実施するアプリケーションが挙げられる。
【００２１】
［レコードの管理方法の例］
ここで、本実施形態におけるレコードの管理方法を説明する。なお、下記のデータ管理方法は一例であり、データ管理方法は、これに限られない。図２Ａは、データベースのレコードの管理方法の例を説明するための図である。図２Ａ上段に示す例では、データベースのデータは、各レコード単位で管理されている。記録媒体における領域は、ページごとに区切られている。レコードは、データベースにおいて取り扱う情報の単位であり、可変長であっても固定長であってもよい。例えば、論理的なテーブル（表）における一つの行（論理行）に相当するデータを１つのレコードとすることができる。ページは、記録媒体における領域を区切るブロック（Ｉ／Ｏブロック）であり、本実施形態では、一例として、記録媒体における領域をページ単位で管理している。レコードを挿入、更新または削除するタイミングでは、レコードイメージに対して排他を獲得することによって途中状態のイメージを保護することができる。すなわち、同一レコードに対する他者の同時参照ができないように排他制御することができる。
【００２２】
図２Ａに示す例では、効率的なデータ検索できるようにＩＮＤＥＸから実レコードへポイントされている。すなわち、実レコードのアドレスを指すポインタがＩＮＤＥＸに記録されている。また、図２Ａの下段に示すように、可変長のレコードを更新することによって長さが大きくなり、ページに入りきらない場合は、新たなページにレコードを格納することができる。この場合、更新前のレコードはステッピングストーン（図中SSと表記）とし、更新後のレコードへポイントする。これにより、ＩＮＤＥＸにあるレコードへのポインタを書き換えることなく更新後のレコードを検索できる。
【００２３】
図２Ｂは、レコード間のリンク管理方法とリンク情報の例を説明するための図である。図２Ｂに示す例では、レコードは、リンク情報とレコード内実データを含む。リンク情報は、リンク先のレコードが配置されるページ番号、リンク先のレコードのページ内レコード位置情報、および仮レコードマークを含む。本実施形態において、仮レコードマークは、スナップショット取得における抽出処理においてのみ参照可能なマーク種別とする。すなわち、通常アクセス（スナップショット取得以外のアクセス）ではこの仮マークは参照できない（レコードの存在が無視される）。仮レコードマークを用いた処理例は後述する。
【００２４】
［動作例］
図３は、スナップショット要求を受けたときのデータベース管理装置３の動作例を示すフローチャートである。図４は、アプリケーション部１１から更新指示を受けた場合のデータベース管理装置３の動作例を示すフローチャートである。
【００２５】
図３に示す例では、データベース管理装置３がスナップショット取得部２から、スナップショット要求を受けると（Ｏｐ１）、設定部４は、メモリ７ａに、スナップショット情報を設定する（Ｏｐ２）。スナップショット情報には、例えば、いつの時点のスナップショットを取得するかを示す情報と、取得するデータの範囲、すなわち抽出範囲を示す情報が含まれる。図１に示すメモリ７ａの「開始ページ１」「終了ページ４」は、抽出範囲を示す情報の一例であり、ページ１からページ４までが抽出範囲であることを示している。なお、本実施形態において、抽出範囲は、スナップショットが要求された時点でスナップショットの対象となるデータが格納されているページの範囲である。
【００２６】
抽出部５は、抽出範囲におけるレコードを順次抽出して前記他の領域へ記録する（Ｏｐ３）。一例として、抽出部５は、抽出範囲の開始ページ１から、１ページごとに読み込みバッファ７ｂに読み込み、ページに含まれる各レコードのイメージを抽出し、他の領域へ記録することができる。１ページ分のレコードイメージの抽出が終わると、そのページの写像が抽出範囲外に存在するか否かを判断する（Ｏｐ４）。写像が存在する場合（Ｏｐ４で真）、引き戻し部９は、前記抽出範囲外の写像を、抽出範囲内に引き戻す（Ｏｐ５）。すなわち、前記抽出範囲外の更新された写像と同様に、抽出範囲内の更新対象レコードを更新する。
【００２７】
なお、リトライの可能性がある場合にＯｐ５の引き戻し処理を実行しないように動作することもできる。リトライは、スナップショット抽出処理より先に開始された先行トランザクションにおいて、スナップショット抽出済みのデータが更新された場合に、抽出処理をその更新されたデータまで遡ってやり直す処理である。リトライの可能性の有無は、例えば、リトライ動作が有効であるか否か、および、先行トランザクションの有無によって判断することができる。
【００２８】
例えば、図１に示す例では、ページ３のｒｅｃｏｒｄＣ、ｒｅｃｏｒｄＤは、抽出範囲外のページ６の写像（ｒｅｃｏｒｄＣ´、ｒｅｃｏｒｄＤ´）にリンクされている。そのため、引き戻し部９は、抽出部５がページ３の抽出を完了した後に、ページ３のｒｅｃｏｒｄＣ、ｒｅｃｏｒｄＤを、ｒｅｃｏｒｄＣ´、ｒｅｃｏｒｄＤ´に更新する。
【００２９】
１ページ分の処理（Ｏｐ３〜Ｏｐ５）が終わると、監視部６は、抽出範囲においてレコード抽出が完了した抽出済み領域と、レコード抽出をまだしていない未抽出領域とを示す情報をメモリ７ａに記録する（Ｏｐ６）。例えば、メモリ７ａの「抽出完了ページ２」は、抽出済み領域と、未抽出領域を示す情報の一例であり、ページ１、２が抽出済み、ページ３、４が未抽出（ページ３は抽出中）であることを示している。例えば、ページ３についてＯｐ３〜Ｏｐ５の処理が終わると、監視部６は、メモリ７ａ中の「抽出完了ページ２」を「抽出完了ページ３」に更新する。
【００３０】
抽出範囲について（Ｏｐ７で真となるまで）、上記のＯｐ３〜Ｏｐ６の処理が繰り返される。抽出範囲のページ全てが抽出完了すると、データベース管理装置３は、メモリ７ａのスナップショット情報を削除し（Ｏｐ８）、抽出したページのレコードを、スナップショットとして出力する（Ｏｐ９）。なお、リトライの可能性がある場は、Ｏｐ８およびＯｐ９の処理を省略するよう動作してもよい。これにより、リトライの可能性がある間（例えば、リトライ処理有効かつ先行トランザクション実行中の間）は、Ｏｐ８およびＯｐ９の処理を保留することができる。
【００３１】
なお、図３に示した処理は一例であり、データベース管理装置３の動作は、これに限られない。例えば、引き戻し処理（Ｏｐ５）は、抽出範囲すべてのデータ抽出が完了してから実行されてもよい。
【００３２】
次に、図４に示す例では、データベース管理装置３がアプリケーション部１１から、データベースの更新指示を受ける（Ｏｐ１１）。ここでは、一例として、更新部８は、スナップショット取得を指定された時点より後に開始された他の後続トランザクションによる抽出範囲内のレコードの更新指示を受けた場合について説明する。更新部８は、メモリ７ａのスナップショット情報を参照して（Ｏｐ１２）、更新指示の更新対象レコードが抽出済み領域にあるか、未抽出領域にあるか判断する（Ｏｐ１３）。更新部８は、更新対象レコードが抽出済み領域にある場合は（Ｏｐ１３で真）、当該抽出済み領域の更新対象レコードを更新する。更新対象レコードが未抽出領域にある場合は（Ｏｐ１３で偽）、当該未抽出領域の更新対象レコードの写像を抽出範囲外に記録し、当該写像を更新する。
【００３３】
例えば、図１に示す例では、ページ１、２が抽出済みなので、更新対象レコードがページ１の場合（ＡＰＬ１の場合）、更新部８は、そのまま、ページ１のレコードを更新する。更新対象レコードがページ４、すなわち未抽出ページの場合（ＡＰＬ３の場合）、更新部８は、抽出範囲外のページ７にページ４のレコードＧの写像を記録し、写像をレコードＧ´に更新する。例えば、更新部８は、抽出範囲外のページに対して、更新対象のレコード（以降、元レコードと称する）を複写し、この複写されたレコード（以降、先レコードと称する）に対するリンク情報を元レコードへ設定することができる。さらに、元レコードのイメージには、抽出処理中のみ有効とする仮レコードマークを設定する。これにより、抽出部５が元レコードを抽出した後、元レコードのイメージは、引き戻し部９により先レコードのイメージへへ引き戻される。
【００３４】
図１において、抽出完了ページ（ページ１、２）は、既に抽出処理が完了しているため、この抽出完了ページに対する後続トランザクションによるレコード更新は、データベースのスナップショット内容に対してトランザクション整合になんら影響を与えない。そのため、更新部８は、抽出完了ページのレコードを更新することができる。
【００３５】
一方、抽出ページ（図１の例では、ページ３）は、抽出処理がレコードの抽出を実施中のページである。また、未抽出ページ（ページ４）は、まだ抽出処理がされていないページである。これらのページに対して更新することは、スナップショット取得における抽出処理のトランザクション整合に影響を与える。そのため、更新部８は、範囲外写像を記録してこちらを更新する。
【００３６】
図１において、ページ７は、引き戻し中写像ページであり、このページは、抽出範囲内でかつ未抽出のページが更新部８により一度更新されたレコードを記録するページである。抽出範囲内かつ未抽出のページ（元ページ４）の抽出処理が完了した後、当該引き戻し中写像ページ（先ページ７）からを元ページ４に引き戻している。このように、抽出完了後に、元ページへ先ページの更新内容を反映させることで、データ一貫性を確保することができる。
【００３７】
［引き戻し処理の具体例］
図５Ａ、図５Ｂは、引き戻し処理（Ｏｐ５）の具体例を説明するための図である。図５Ａは、先ページから元ページへレコードを複写可能な場合の引き戻し処理を表す図であり、図５Ｂは、先ページから元ページへレコードを複写不可能な場合の引き戻し処理を表す図である。
【００３８】
上記のとおり、引き戻し処理は、例えば、抽出部５により元ページ（例えば、図１のページ２）の抽出処理が完了したことを契機として実行することができる。当該引き戻し処理は抽出部５と引き戻し部９によって、データベース管理装置３（ＤＢＭＳ内）のトランザクションとして実行することができる。
【００３９】
また、当該引き戻し処理と更なる更新処理との排他によるレスポンス悪化を発生させないために、引き戻し処理をレコード単位の排他で実行することが好ましい。あるいは、引き戻し処理をレコード単位の排他で実行し、かつ、適切な間隔（例：ｎレコード毎）にトランザクションを分断して実行することも好ましい。
【００４０】
以下に、図５Ａおよび図５Ｂを参照しながら、引き戻し部９による引き戻し処理の具体例を説明する。
１）処理が完了したページ（元ページ：図５Ａ，５Ｂにおけるページ２）に対して、更新対象となったレコード（ｒｅｃｏｒｄＢ）を特定する。例えば、仮レコードマークが有効となっているレコードを更新対象となったレコードと特定することができる。
２）特定したレコードのリンク情報より、新規に切り出されたページ（以降、先ページ）を特定（図５Ａ、５Ｂに示す例では、ページ６を特定）。
３）先ページから、対象レコードイメージを元ページに複写を試みる。
３−Ａ）複写可能な場合には、元ページに先ページのレコードのレコードイメージを複写する（図５Ａの場合）。具体的には、先ページのレコードイメージを削除し、先ページの領域を再利用可能とするとともに、元ページ上の仮レコードマークを有効から無効に更新する。これにより、抽出処理以外でも元ページのレコードが認識されるようになる。また、元ページのリンク情報は削除される。
３−Ｂ）複写不可能（例えば、先ページ上のレコードイメージが長くなっている場合等）には、複写しない（図５Ｂの場合）。この場合、元ページのレコードイメージを削除して、元ページの領域を空けるとともに、インデックスが設定されている場合には、インデックスポインタを更新する。これにより、元ページおよび先ページ上のレコードが全て削除された場合には、当該ページを新規ページとしてページごと再利用することが可能となる。
【００４１】
引き戻し部９は、上記の１）〜３）の処理を、元ページのレコード全てに対して実施する。本実施形態では、更新部８による更新処理（例えば、ＵＰＤＡＴＥ命令）により、新規に抽出範囲外に切り出された先ページ上のレコードが存在する状況が発生しうる。すなわち、この先ページと元ページにおいてレコードイメージを二重に管理している状態が起こりうる。このように、レコードイメージを二重に管理すると、データベースとして管理するディスク容量を圧迫する。そのため、これらを単一のレコードイメージに戻すことで、ディスク容量を有効に利用することができる。すなわち、抽出範囲内の更新対象レコードを写像と同様に更新した後、この抽出範囲外の写像が記録されていた領域を解放することが、リソースの効率利用の観点から好ましい。
【００４２】
（第２の実施形態）
図６は、第２に実施形態にかかるデータベースサーバの構成例を示す図である。図６において、図１と同じ箇所には、同じ番号を付している。本実施形態にかかるデータベース管理装置３ａは、スナップショット取得中に、後続のトランザクションによりデータベースへの更新処理が実行される場合のみならず、先行のトランザクションによる更新処理中に、スナップショット取得処理が開始される場合についても、データ一貫性の確保をするための仕組みを備えている。そのため、図６に示すデータベース管理装置３ａにおいて、更新部８ａは、先行更新部８１、先行挿入部８２、後続更新部８３、後続挿入部８４を含んでいる。
【００４３】
本実施形態において、先行トランザクションは、スナップショットを取得する時点より前に実行されるべきトランザクションである。取得されるスナップショット（抽出されるレコード）は、先行トランザクションによる更新内容を反映したものであるべきである。一方、後続トランザクションは、スナップショットを取得する時点より後に実行されるべきトランザクションであり、取得されるスナップショットは、後続トランザクションによる更新前の状態のデータであるべきである。なお、先行トランザクションは、仕掛り中トランザクション、または仕掛りトランザクションと呼ばれることもある。また、後続トランザクションは、新規トランザクションと称してもよい。
【００４４】
例えば、スナップショット取得処理の状態を示す情報および実行中のトランザクションの状態を示す情報をメモリ７ａに記録しておくことにより、あるスナップショット取得処理に対して、別のトランザクションが先行か後続かを判断することができる。この判断の具体例については後述する。
【００４５】
［先行トランザクションによる更新処理例］
先行更新部８１は、先行トランザクションによる抽出範囲内のレコードの更新指示を、スナップショット取得処理中（例えば、抽出部５による抽出処理中）に受けた場合、メモリ７ａを参照して、更新指示の更新対象レコードが抽出済み領域にあるか、未抽出領域にあるか判断する。
【００４６】
先行トランザクションの更新対象レコードが未抽出領域のレコードである場合、先行更新部８１は、この未抽出領域の当該更新対象レコードを更新する。未抽出領域のレコードであれば、先行更新部８１が更新しても、スナップショット取得処理におけるデータ一貫性は保たれる。
【００４７】
先行トランザクションの更新対象レコードが抽出済み領域にある場合は、先行更新部８１は、例えば、下記（１）または（２）いずれかの処理を実行することができる。
【００４８】
（１）抽出リトライ
更新対象レコードが抽出済み領域にある場合は、先行更新部８１は、当該更新対象レコードを更新してさらに前記更新されたレコードを含む領域を示す情報をリトライ領域情報としてメモリ７ａに記録することができる。これにより、抽出部５に対して、抽出済みのレコードに対して更新したことを通知することができる。先行更新部８１によってリトライ領域情報がメモリ７ａに記録された場合、抽出部５は、リトライ領域情報の示す領域から再度レコードを抽出して前記他の領域へ記録する。これにより、スナップショット取得処理におけるデータ一貫性を確保する。
【００４９】
図７は、抽出リトライの動作例を説明するための図である。図７に示す例では、ページ１、２が抽出部５による抽出済みページであり、ページ３、４が未抽出ページである。先行更新部８１が、ページ２に対して、先行トランザクションのＵＰＤＡＴＥまたはＤＥＬＥＴＥを実行する場合、メモリ７ａのスナップショット情報に「リトライページ番号２」を記録する。抽出部５は、ページ２のレコードを抽出した後、スナップショット情報に「リトライページ番号２」が記録されたことを検知すると、再度、ページ２のレコードを抽出する。これにより、例えば、抽出結果に矛盾が発生しないポイント（ここでは、ページ２）から再度抽出処理を開始することができる。
【００５０】
なお、図７に示す例では、先行挿入部８２は、先行トランザクションのＩＮＳＥＲＴを実行する場合、予約域であるページ５にレコードを挿入する。予約域の情報は、スナップショット情報に、例えば、「予約開始ページ番号５」として記録されている。このように、先行トランザクションで、ＩＮＳＥＲＴ処理が発生しても、スナップ取得処理における抽出処理は継続することができる。
【００５１】
上記の抽出リトライ処理は、例えば、更新処理業を優先する場合、トランザクションがＩＮＳＥＲＴ処理中心である場合、スナップショット取得に時間を要してもよい場合等に、特に有効となる。
【００５２】
（２）先行トランザクションキャンセル
先行更新部８１は、先行トランザクションの更新対象レコードが抽出済み領域にある場合は、当該先行トランザクションの更新処理をキャンセルすることもできる。例えば、抽出済ページ上のレコードに対するＵＰＤＡＴＥまたはＤＥＬＥＴＥ処理が要求された場合、先行更新部８１は、デットロック発生として自処理をキャンセルすることができる。
【００５３】
図８は、先行トランザクションキャンセルの動作例を説明するための図である。図８に示す例では、ページ１、２が抽出部５による抽出済みページであり、ページ３、４が未抽出ページである。先行更新部８１が、ページ２に対して、先行トランザクションのＵＰＤＡＴＥまたはＤＥＬＥＴＥを実行する場合は、トランザクションがデッドロックキャンセルされる。なお、図８に示す例でも、先行挿入部８２は、先行トランザクションのＩＮＳＥＲＴを実行する場合、予約域であるページ５にレコードを挿入する。すなわち、ＩＮＳＥＲＴ処理の場合にはトランザクションを継続することができる。
【００５４】
上記先行トランザクションキャンセルは、例えば、スナップ取得処理を優先させる場合、ＩＮＳＥＲＴ処理中心のトランザクションの場合、および仕掛の先行中トランザクションをキャンセルさせても良い場合等に、特に有効となる。
【００５５】
（３）抽出処理待ち合わせ
抽出部５は、スナップショット取得時点において、すでに、先行トランザクションによる前記抽出範囲内へのレコードの更新処理が行われている場合は、前記先行トランザクション終了を待って抽出処理を実行することができる。すなわち、抽出処理は、スナップショットの抽出範囲に対する先行トランザクションの終了を待ち合わせることができる。この待ち合わせ中、後続トランザクションザクションにおける抽出範囲のレコードへのＵＰＤＡＴＥおよびＤＥＬＥＴＥは抽出処理を待って実行することが好ましい。なお、後述するように、後続トランザクションのＩＮＳＥＲＴ処理は、抽出範囲外へのレコード挿入処理であれば、抽出処理を待つ必要はない。
【００５６】
このように、先行トランザクションを待って抽出処理を開始することで、先行トランザクション完了後の状態のスナップショットを確実に得ることができる。すなわち、先行トランザクションとの整合がとれたイメージを取得することができる。この先行トランザクションを待って抽出処理を実行する方法は、例えば、確実なスナップショット取得処理を優先させる場合や、ＩＮＳＥＲＴ処理中心の業務において有効である。
【００５７】
（４）先行トランザクションによる挿入処理
先行挿入部８２は、先行トランザクションによるレコードの挿入（新規追加）指示を受けた場合に、当該挿入指示にかかる挿入レコードを抽出範囲の中の予約領域に記録することができる。このように、挿入操作によるデータを格納するための領域を管理することで、挿入操作に関しては、スナップショット取得処理への緩衝をなくすことができる。先行トランザクションの挿入処理は、スナップショット取得処理におけるデータ一貫性に影響を与えることなく実行される。その結果、データ一貫性確保のための処理、コンピュータ資源、ユーザの作業量をさらに軽減することができる。
【００５８】
なお、この先行トランザクションの予約域への挿入処理は、上記（１）〜（３）いずれの場合でも同様に実行可能である。
【００５９】
（５）先行トランザクションレコード更新に対する抽出処理の待ち合わせ
更新対象レコードが未抽出領域のレコードである場合、先行更新部８１は、抽出部５による当該更新対象レコードの抽出を禁止した上で、抽出範囲の更新対象レコードを更新することができる。例えば、抽出部５が抽出範囲のレコードを参照する場合、そのレコードに対する先行トランザクションによる更新処理が実行されている可能性がある。この場合、抽出部５は、先行トランザクションによる前記レコードの更新処理が完了するまで待つことが好ましい。
【００６０】
これにより、抽出部５は、先行トランザクションによる更新完了後のレコードのイメージをスナップショットとして抽出することができる。その結果、データ一貫性を確保することがさらに容易となる。また、先行トランザクションを先行させることができ、更新処理の性能を確保できる。さらに、ロールバック用のログ量を抑えることができる。例えば、上記の先行トランザクションの更新処理と抽出処理と緩衝させることなく実施でき、ログを破棄することが可能となる。
【００６１】
上記の抽出処理の待ち合わせは、次のような場合に有効である。例えば、図６に示すＡＰＬ２のように、抽出部５がページ２のレコードを参照する場合、そのページ２のレコードに対する先行トランザクションによる更新が行なわれている可能性がある。この場合に、抽出部５のページ３のレコード抽出を禁止した上で、先行トランザクションの更新処理を実行することが好ましい。また、スナップショットの指示時点より前に発生していた先行トランザクションを、スナップショット処理が待ち合わせないパタン（例えば、上記（１）抽出リトライ、（２）先行トランザクションの場合）において、この（５）の処理は特に有効である。例えば、図７に示すように、抽出部５がページ１および２まで抽出処理を終了した時点で、先行トランザクションによりページ３が更新排他されていると、抽出部５は、ページ３に対する参照を待ち合わせる。
【００６２】
［後続トランザクションによる更新処理例］
後続トランザクションによる更新処理は、上記第１の実施形態と同様に実行することができる。以下、後続トランザクションによる更新処理の詳細な例を説明する。
【００６３】
後続トランザクションにおいて、抽出済みの領域のレコードを更新（ここでは、一例としてＵＰＤＡＴＥまたはＤＥＬＥＴＥ操作）する場合、後続更新部８３は、第１の実施形態における更新部８と同様に、そのレコードを更新または削除する。この場合抽出部５の抽出処理との間に緩衝はない。後続更新部８３は、更新操作の結果、レコード長が伸長し、同一ページ内に格納できない場合には、抽出範囲外のページ（例えば、図６におけるページ６）に更新結果を格納することができる。
【００６４】
後続トランザクションにおいて、未抽出の領域のレコードを更新（ここでは、一例として、ＵＰＤＡＴＥまたはＤＥＬＥＴＥ操作）する場合も、後続更新部８３は、第１の実施形態と同様に、抽出範囲外のページに対して、更新対象のレコード（以降、元レコード）を複写する。この時、複写されたレコード（以降、先レコード）に対するリンク情報が元レコードへ設定される。さらに、元レコードのイメージには、抽出処理中のみ有効とする仮レコードマークが設定される。例えば、更新種別がＵＰＤＡＴＥの場合、後続更新部８３は、先レコードのレコードイメージに対して更新を行う。例えば、図６に示す例において、後続更新部８３が、未抽出のページ４のｒｅｃｏｒｄＧに対して更新する場合、ｒｅｃｏｒｄＧの写像をページ７へ複写し、ページ４のｒｅｃｏｒｄＧのリンク情報が、ページ７の写像ｒｅｃｏｒｄＧを指すようにポインタを設定する。後続更新部８３は、ページ４のｒｅｃｏｒｄＧの仮レコードマークを有効に更新し、ページ７のｒｅｃｏｒｄＧをｒｅｃｏｒｄＧ´に更新する。
【００６５】
更新種別がＤＥＬＥＴＥの場合、後続更新部８３は、先レコードを削除する。インデックスか設定されている場合は、後続更新部８３は、インデックス情報を無効化する。
【００６６】
後続トランザクションにより、レコードの挿入指示を受けた場合に、後続挿入部８４は、抽出範囲の外へ当該挿入指示にかかるレコードを記録することが好ましい。例えば、更新種別が挿入指示（ＩＮＳＥＲＴ命令）の場合、後続挿入部８４は、抽出範囲の外へレコードをＩＮＳＥＲＴする。
【００６７】
このように挿入操作により挿入されるデータを格納するための領域を特別に管理することで、挿入操作に関しては、スナップショット取得処理への緩衝をなくすことができる。ここでは、抽出範囲の外へ後続トランザクションのレコードを挿入するので、スナップショット取得時の抽出処理と、後続トランザクションによる挿入処理との間に緩衝をなくすることができる。なお、後続トランザクションにおける挿入操作のデータを格納するための抽出範囲外の領域を示す情報は、予め、スナップショット情報等に記録しておくことが好ましい。
【００６８】
［動作例］
以下、本実施形態におけるデータベース管理装置３ａの詳細な動作例を説明する。
【００６９】
〔設定処理例〕
設定部４は、スナップショット取得部２から受けたスナップショット要求に基づいて、例えば、下記表１に示すスナップショット情報をメモリ７ａに記録する。
【００７０】
【表１】
0005464003.tif 000002
【００７１】
スナップショット要求には、スナップショットとして抽出する対象を特定する情報が含まれる。例えば、データベースにおいて、ＤＳＩ識別子またはテーブルＩＤなど、関連するデータの集合を識別するための情報がスナップショット要求に含まれていてもよい。設定部４は、スナップショットの作成が指示された場合、そのタイミングでのデータの抽出範囲（例えば、ＤＳＩまたはテーブル等）を特定し、メモリ７ａに記録する。メモリ７ａは、更新処理（ＳＱＬアプリケーション）において参照可能なメモリであることが好ましい。これにより、データの抽出範囲に対する他のトランザクションによる更新処理（ＳＱＬアプリケーション）の振る舞いを制御することが可能になる。
【００７２】
上記表１に示す例では、設定部４は、スナップショット取得対象のデータ群を示す対象資源ＩＤ、スナップショット取得を実行状態であるか否かを示すフラグ（例えば、真＝抽出中、偽＝抽出中でない）を記録する。設定部４は、スナップショット取得中を「真」に設定し、開始ページ番号および最終ページ番号を記録する。これらは、抽出範囲を示す情報の一例である。抽出部５は、開始ページ番号から順に、レコードを抽出する。
【００７３】
監視部６は、抽出部５による処理状況に応じて、先行トランザクション向け抽出済ページ番号および後続トランザクション向け抽出済ページ番号を更新する。これらは、抽出済み領域を示す情報を一例である。このように、先行トランザクションおよび後続トランザクションそれぞれについて、抽出済み領域を表す情報を設定することより、先行トランザクションおよび後続トランザクションぞれぞれの、抽出範囲のデータに対するアクセスを制御することができる。例えば、具体的には、先行トランザクションと抽出処理の間でトランザクション不整合が発生した際にあるレコードの抽出処理をリトライする場合には、抽出のリトライが完了するまで、後続トランザクションによる前記レコードの更新をさせないようにするため、後続トランザクション向け抽出済ページ番号を更新しないようにすることができる。
【００７４】
監視部６は、例えば、スナップショット取得中フラグが真（抽出中）の場合には、抽出が完了した範囲（ページの範囲）を示す情報（抽出済み領域と未抽出領域を示す情報の一例）、および有効データが格納されている最終ページの情報を記録する。
【００７５】
要求シリアル番号はスナップショット要求を識別する番号であり、例えば、スナップショット要求がなされるたびにカウントアップされてもよい。この要求シリアル番号は、スナップショット処理と並行して実行されるトランザクションにて参照されることにより、トランザクションが、スナップショット処理と比較して先行するか（先行トランザクションであるか）、あるいは、後続するのか（後続トランザクションであるか）を判断するために使用される。
【００７６】
先行トランザクション向け抽出済ページ番号、および後続トランザクション向け抽出済ページ番号は、例えば、スナップショットの抽出処理と並行して実行されるトランザクションが、スナップショットの抽出処理の状態を認識するために使用される。
【００７７】
また、設定部４は、先行トランザクションがレコード（例えば、ＩＮＳＥＲＴ、データおよびＵＰＤＡＴＥによるレコード伸長後のデータ）を格納するための予約領域を特定する情報をメモリ７ａに記録する。上記表１における、予約開始ページ番号および予約最終ページ番号がこの情報の一例である。なお、この他に、例えば、後続トランザクションによる更新処理時に更新対象レコードの写像を格納するための抽出範囲外の領域を決める情報も、スナップショット情報に含めてもよい。このように、先行または後続トランザクションによる挿入処理のレコードのための領域や、後続トランザクションによる更新処理時の写像のための領域等をスナップショット情報に含めることで、予約領域が管理でき、リソースの効率的な利用が可能になる。
【００７８】
表１におけるリトライページ番号は、上述したように、抽出済み領域のレコードに対して先行トランザクションにおける更新処理が行われた場合に、そのレコードを抽出部５が再抽出するために記録される。
【００７９】
以上、スナップショット情報の設定例について説明したが、スナップショット情報は上記例に限られない。
【００８０】
〔トランザクションが先行か後続かの判断例〕
本実施形態では、設定部４は、スナップショットを取得する時点と、要求シリアル番号とを対応付けて、トランザクション管理情報としてメモリ７ａに記録する。トランザクション管理情報として、さらに、データベース管理装置３が処理するトランザクションに関する情報も記録される。例えば、実行中のトランザクションのＩＤ、開始時点、実行状態などがトランザクション管理情報に記録される。例えば、実行中のトランザクションの開始時点とスナップショットを取得する時点とを比較することにより、そのトランザクションがスナップショット取得処理に対して先行なのか後続なのかを判断することができる。なお、トランザクションの先行および後続の判断方法はこれに限られない。例えば、スナップショットの要求シリアル番号をトランザクションＩＤと対応付けて記録することでも判断可能である。
【００８１】
〔更新処理〕
図９は、アプリケーション部１１から更新指示を受けた更新部８ａの動作例を示すフローチャートである。図９に示す例では、更新部８ａは、更新指示を受けると（Ｏｐ５１）、メモリ７ａのスナップショット情報およびトランザクション管理情報を参照する（Ｏｐ５２）。ここでは、一例として、スナップショット情報として、上記表１に示す内容の情報がメモリ７ａに記録されているものとする。トランザクション管理情報には、例えば、データベース装置３ａに要求されたトランザクションの識別子（ＩＤ）、開始時間および状態が記録される。トランザクションの状態として、例えば、待機中、実行中、完了等が含まれる。トランザクション管理情報は、例えば、データベース管理装置３が、トランザクションの要求を受けた時点でメモリ７ａに格納し、その後、更新部８ａがトランザクションの処理に応じて更新していくことができる。
【００８２】
更新部８ａは、スナップショット情報およびトランザクション管理情報を基に、受けた更新指示が、先行トランザクションにおける更新指示か、後続トランザクションにおける更新指示かを判断する（Ｏｐ５３）。
【００８３】
更新指示が先行トランザクションのものである場合、更新部８ａは、更新指示がＩＮＳＥＲＴか否かを判断する（Ｏｐ５４）。更新指示がＩＮＳＥＲＴである場合（Ｏｐ５４で真）、先行挿入部８２は、抽出範囲の予約域へレコードをＩＮＳＥＲＴする。先行挿入部８２は、例えば、上記表１のスナップショット情報に含まれる、予約開始ページ番号および予約最終ページ番号を参照して、記録媒体１０における予約域の位置を知ることができる。
【００８４】
先行トランザクションの更新指示が、ＩＮＳＥＲＴでない場合（Ｏｐ５４で偽）、更新部８ａは、その更新指示は、抽出済み領域に対するＵＰＤＡＴＥまたはＤＥＬＥＴＥであるか否かを判断する（Ｏｐ５６）。
【００８５】
抽出済み領域へのＵＰＤＡＴＥまたはＤＥＬＥＴＥの場合（Ｏｐ５６で真）、先行更新部８１は、抽出リトライ処理か、トランザクションキャンセル処理のいずれかを実行する（Ｏｐ５７）。抽出リトライ処理は、上述したように、当該抽出済み領域のレコードを更新または削除して、そのレコードがあるページの番号を、リトライページ番号としてメモリ７ａに記録する処理である。トランザクションキャンセル処理は、更新指示のあった先行トランザクションをキャンセルする処理である。どちらを実行するかは、システムの利用方法により使い分けることができる。更新指示が、未抽出領域へのＵＰＤＡＴＥまたはＤＥＬＥＴＥの場合（Ｏｐ５６で偽）、先行更新部８１は、未抽出領域へのＵＰＤＡＴＥまたはＤＥＬＥＴＥを実行する。
【００８６】
Ｏｐ５３での判断の結果、更新指示が後続トランザクションのものである場合、更新部８ａは、更新指示がＩＮＳＥＲＴか否かを判断する（Ｏｐ５９）。更新指示がＩＮＳＥＲＴである場合（Ｏｐ５９で真）、後続挿入部８２は、抽出範囲外の予約域へレコードをＩＮＳＥＲＴする。予約域の位置は、予めスナップショット情報としてメモリ７ａに記録されていてもよい。これにより、後続挿入部８２は、記録媒体１０における予約域の位置を知ることができる。
【００８７】
後続トランザクションの更新指示が、ＩＮＳＥＲＴでない場合（Ｏｐ５９で偽）、更新部８ａは、その更新指示が、抽出済み領域に対するＵＰＤＡＴＥまたはＤＥＬＥＴＥであるか否かを判断する（Ｏｐ６１）。Ｏｐ６１で真の場合、後続更新部８３は、抽出済み領域に対してＵＰＤＡＴＥまたはＤＥＬＥＴＥを実行し（Ｏｐ６２）、偽の場合は、後続更新部８３は、抽出範囲外の予約域に写像を記録し、当該写像に対してＵＰＤＡＴＥまたはＤＥＬＥＴＥを実行する（Ｏｐ６３）。なお、Ｏｐ６１〜Ｏｐ６３は、図４に示したＯｐ１３〜Ｏｐ１５と同様にすることができる。
【００８８】
更新部８ａの動作は、上記例に限られない。例えば、Ｏｐ５３において、トランザクションが先行か後続かの判断に加えて、後続トランザクションの更新処理を抑止する必要があるか否か、すなわち、後続トランザクションの更新処理を待たせるか否かを判断してもよい。これにより、後続トランザクションと先行トランザクションとの間で整合性を保つための制御が可能になる。
【００８９】
〔スナップショット取得処理〕
図１０は、データベース管理装置３がスナップショットを取得する際の動作例を示すフローチャートである。図１０に示す例において、データベース管理装置３がスナップショット要求を受けると（Ｏｐ１）、設定部４がスナップショット情報をメモリ７ａに初期する（Ｏｐ２２）。ここでは、一例として、スナップショット情報として、上記表１に示す内容の情報をメモリ７ａに記録する場合について説明する。Ｏｐ２２において、設定部４は、スナップショット要求に含まれる対象資源ＩＤをメモリ７ａに記録し、スナップショット取得中フラグを真に更新する。また、設定部４は、要求シリアル番号を生成してメモリ７ａに記録する。
【００９０】
【表１】
0005464003.tif 000003
【００９１】
対象資源ＩＤは、ここでは、データ抽出対象のデータベースを特定するものとする。設定部４は、対象資源ＩＤで特定されるデータベースのレコードが格納されている記録媒体１０の領域を特定し、当該領域を抽出範囲としてメモリ７ａに記録する。表１に示す例では、開始ページと最終ページにより抽出範囲が示される。設定部４は、先行トランザクション向け抽出済ページ番号および後続トランザクション向け抽出済ページ番号には初期値を設定し、予約開始ページ番号および予約最終ページ番号には、先行トランザクションの挿入処理で挿入するレコードを格納するための予約域となるページの最初と終わりの番号を設定する。例えば、抽出範囲の開始ページから最終ページまでの一部を予約域のページとすることができる。リトライページ番号には、初期値として抽出リトライは不要であることを示す値が記録される。
【００９２】
Ｏｐ２３において、抽出部５は、トランザクション管理情報を参照し、待機中の後続トランザクションがあり、かつ、実行中の先行トランザクションがあるかを判断する。これらがある場合（Ｏｐ２３で真の場合）、抽出部５は、先行トランザクションが終了するまで、後続トランザクションによる更新処理を抑止し、先行トランザクション終了後に抑止を解除することができる（Ｏｐ２４）。これにより、例えば、先行トランザクションの更新処理および後続トランザクションの更新処理によるデータの不整合が発生するのを抑制することができる。
【００９３】
抽出部５は、メモリ７ａのスナップショット情報における抽出中ページを更新する（Ｏｐ２５）。例えば、抽出処置を開始するときは、最初のページのページ番号「１」を抽出中ページ番号としてメモリ７ａに記録する。すなわち、現在の参照対象となっているページの番号が抽出中ページ番号として設定される。
【００９４】
抽出部５は、メモリ７ａのスナップショット情報におけるリトライページ番号に初期値以外の値が設定されているか判断する（Ｏｐ２６）。リトライページ番号は、例えば、図９のＯｐ５７においてリトライ抽出処理が実行された場合に更新される。リトライページ番号が設定されている場合は、そのリトライページ番号から、抽出処理をやり直す（Ｏｐ２７）。
【００９５】
抽出部５は、現在の参照対象のページをバッファ７ｂへ読み込み（Ｏｐ２８）、そのページのレコードに、仮レコードマークがあり、かつリンク先が抽出範囲内であるか否かを判断する（Ｏｐ２９）。Ｏｐ２９で偽の場合、読み込んだページのレコードイメージを抽出し、他の領域へ記録する（Ｏｐ３０）。当該他の領域は、例えば、メモリ７ａの領域であってもよいし、記録媒体１０の領域であってもよい。
【００９６】
なお、Ｏｐ２９において、仮レコードマークが設定されたレコードのリンク先が、抽出範囲内であるか否かを判断することにより、仮レコードマークが設定されたレコードのイメージが、現在のスナップショット取得中に作成されたものかを判断することが可能になる。例えば、データベース管理装置３では、処理中のシステムダウンに備えて、一連の処理を復元できるリカバリログを取得することができる。この状態でのダウンした後、再度スナップショットの取得が要求された場合には、更新後のレコードイメージを参照することが好ましい。そのため、抽出処理において仮レコードマークが設定されているレコードイメージを参照するのは、そのレコードのリンク情報により指し示されるレコードイメージが、現在の抽出範囲外である場合とする。これにより、仮レコードマークが設定されたレコードイメージが、現在のスナップショット取得中に作成されたものかを判断可能となる。
【００９７】
図１１は、仮レコードマークが設定されたレコードのリンク先が、抽出範囲である場合と抽出範囲外である場合の例を示す図である。図１１に示す例では、ページ２のｒｅｃｏｒｄＢおよびページ３のｒｅｃｏｒｄＣが仮レコードマークが設定されたレコードである。ｒｅｃｏｒｄＢのリンク先は抽出範囲内であり、ｒｅｃｏｒｄＣのリンク先は、抽出範囲外である。この場合、抽出処理においては、ページ２のｒｅｃｏｒｄＢのリンク先は抽出範囲内なので、リンク先のページ４のｒｅｃｏｒｄＢ´（先レコード）が抽出され、元レコードであるｒｅｃｏｒｄＢは抽出されない。一方、ページ３のｒｅｃｏｒｄＣのリンク先は抽出範囲外なので、元レコードであるｒｅｃｏｒｄＣが抽出される。
【００９８】
現在の参照対象のページについて上記抽出処理が終わると、引き戻し部９は、現在の参照対象のページについて引き戻し処理を実行する（Ｏｐ３１）。このＯｐ３１における処理の詳細は、図１２に示し、後述する。
【００９９】
上記のＯｐ２５〜Ｏｐ３１の処理は、抽出範囲における全てのページについて（Ｏｐ３２で真となるまで）繰り返される。次ページの抽出処理へ進む際、監視部４は、メモリ７ａの先行トランザクション向け抽出済ページ番号および後続トランザクション向け抽出済ページ番号を更新することができる（Ｏｐ３３）。
【０１００】
なお、次のページの抽出処理への移行時に、スナップショット情報上の後続トランザクション向け抽出済ページ数を増加しない処理としてもよい。これにより、再抽出をするかもしれないデータ領域範囲を、後続トランザクションのデータ更新から保護することができる。例えば、リトライ処理による再抽出処理が必要となる可能性がある場合、開始時点での抽出範囲におけるデータイメージは保護されることが好ましい。この場合に、後続トランザクション向け抽出済ページ数を初期値（例えば、０）のままにしておくと、後続トランザクションは、常に、更新対象レコードをスナップショット抽出範囲外に複写した写像に対して更新操作をすることになる。
【０１０１】
抽出範囲全てについて抽出処理が完了すると、設定部４は、スナップショット情報を削除する（Ｏｐ３３）。抽出したレコードまたはそのレコードの位置を示す情報をスナップショットの要求元（ここでは、スナップショット取得部２）に出力される（Ｏｐ３４）。
【０１０２】
〔引き戻し処理〕
図１２は、図１０のＯｐ３１における引き戻し処理の一例を示すフローチャートである。図１２に示す例では、引き戻し部９は、対象とするページ内の１つのレコードに対して仮レコードマークがあるか（有効か）判断する（Ｏｐ４１）。仮レコードマークがない場合は、次のレコードを処理する。仮レコードマークがある場合でかつ、そのレコードのリンク先がスナップショットの抽出範囲内の場合（Ｏｐ４２で真）、そのレコード（すなわち、元レコード）を削除する（Ｏｐ４３）。そのレコードのリンク先がスナップショットの抽出範囲内でない場合（Ｏｐ４２で偽）、リンク先のレコードのページ（引き戻し先ページ）が更新排他中か否かを判断する（Ｏｐ４４）。更新排他中の場合は、排他解除を待って（Ｏｐ４５）、引き戻しを実行する（Ｏｐ４６）。Ｏｐ４６の処理は、第１の実施形態と同様にすることができる。
【０１０３】
［ハードウエア構成］
上記第１および第２の実施形態におけるデータベース管理装置３、３ａの各機能部（設定部４、抽出部５、監視部６、更新部８，８ａ、引き戻し部９）の機能は、コンピュータのプロセッサが所定のプログラムを実行することによって実現することができる。そのため、コンピュータを、データベース管理装置３、３ａとして機能させるためのデータベース管理プログラムおよびそれを記録した記録媒体は、本発明の実施形態に含まれる。
【０１０４】
図１３は、第１および第２の実施形態におけるデータベースサーバのハードウエア構成の一例を示す図である。図１３に示す例では、データベースサーバは、バスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、およびインタフェース装置１０５を備える。データベースサーバに係る処理をＣＰＵ１０４に実行させるプログラムは、例えば、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。補助記憶装置１０２は、インストールされたプログラムを格納する。メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってデータベースサーバに係る処理を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。なお、上記第１および第２の実施形態におけるデータベースを格納する記録媒体１０は、補助記憶装置１０２またはメモリ装置１０３により実現することができる。
【０１０５】
［効果、その他］
上記実施形態によれば、スナップショットの対象となるデータが格納されている領域の範囲を予め定め、その範囲内のデータに着目してトランザクションを整合させることができる。特に、スナップショット処理と競合するトランザクション（更新業務）が、ＩＮＳＥＲＴ処理を中心とした場合に、コンピュータ資源の使用、システム管理者の業務負荷をさらに軽減できる。加えて、スナップショットの取得が要求されているタイミングにおいてのみ、複数のレコードの管理をすることで、ディスク容量の圧迫を回避させることも可能になっている。その結果、上記実施形態によるスナップショット作成技術を用いることにより、スナップショットの取得機能が、従来に比べて単純に搭載可能となる。
【０１０６】
例えば、ログＵＮＤＯ方式だと、記録媒体上にログのための領域を確保することが必要であったが、本実施形態では、ログのための領域は不要かまたは少なくてすむ。また、時系列に沿ってレコードが更新される度に写像を蓄積するＭＶＣＣ方式やデータベースの二重化方式だと、写像や二重化のためのデータ領域が必要となるが、本実施形態では、そのような領域は不要か、または少なくてすむ。さらに、上記ログＵＮＤＯ方式およびＭＶＣＣ方式いずれの場合も、システム管理者による設計・保守業務が必要となるが、本実施形態では、スナップショット取得に向けた特別な考慮は不要かまたは少なくてもすむ。
【図１】
0005464003.tif 000004
【図２Ａ】
0005464003.tif 000005
【図２Ｂ】
0005464003.tif 000006
【図３】
0005464003.tif 000007
【図４】
0005464003.tif 000008
【図５Ａ】
0005464003.tif 000009
【図５Ｂ】
0005464003.tif 000010
【図６】
0005464003.tif 000011
【図７】
0005464003.tif 000012
【図８】
0005464003.tif 000013
【図９】
0005464003.tif 000014
【図１０】
0005464003.tif 000015
【図１１】
0005464003.tif 000016
【図１２】
0005464003.tif 000017
【図１３】
0005464003.tif 000018