以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、情報処理装置1,2,3および記憶装置4,5,6を含む。情報処理装置1,2,3は、ネットワークを介して接続されている。情報処理装置1は、記憶装置4,6と接続されている。情報処理装置1は記憶装置4を内蔵してもよい。情報処理装置1はネットワークを介して記憶装置4,6と接続されてもよい。情報処理装置2は、記憶装置5,6と接続されている。情報処理装置2は記憶装置5を内蔵してもよい。情報処理装置2はネットワークを介して記憶装置5,6と接続されてもよい。記憶装置4,5,6は、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。
ここで、記憶装置4はデータ群4aを記憶する。記憶装置5はデータ群5aを記憶する。データ群4a,5aはデータベースでもよい。第1の実施の形態の情報処理システムでは、情報処理装置1,2を用いてデータ群4a,5aの内容を同期させることで、耐障害性を高めている。すなわち、通常時はデータを冗長化して運用する。情報処理装置1および記憶装置4を正系(現用系)とする。情報処理装置2および記憶装置5を副系(待機系)とする。情報処理装置3は、データ群4aを用いた処理を行う。例えば、情報処理装置3は、データ群4aに含まれるデータを参照したり、更新したりする。データ群4aに対する更新には、データ群4aにデータを追加すること、データ群4aに含まれるデータを変更すること、データ群4aに含まれるデータを削除することを含む。通常の運用時は、データ群4aに対する更新はデータ群5aにも反映され、両データ群は同期される。
情報処理装置1は、演算部1aを有する。演算部1aは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。演算部1aは、プログラムを実行するプロセッサであってもよい。プロセッサには、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る(以下、同様)。情報処理装置1は、演算部1aの処理に用いられるデータを格納するRAM(Random Access Memory)などのメモリを有する(図示を省略)。
演算部1aは、記憶装置4に記憶されたデータ群4aを更新可能である。演算部1aは、データ群4aを更新し、更新の履歴を示す履歴情報(ログ)を生成して記憶装置6に格納する。履歴情報は、情報処理装置1が有するメモリに蓄積された更新ログを記憶装置6の記憶領域に出力したものでもよい。
情報処理装置2は、演算部2aを有する。演算部2aは、CPU、DSP、ASIC、FPGAなどを含み得る。演算部2aは、プログラムを実行するプロセッサであってもよい。情報処理装置2は、演算部2aの処理に用いられるデータを格納するRAMなどのメモリを有する(図示を省略)。演算部2aは、記憶装置5で障害が発生すると、記憶装置6に記憶された履歴情報を用いて記憶装置5内のデータ群5aを復旧させる。
図1(A)は、演算部2aが第1の履歴情報6aを用いてデータ群5aを第1の時点まで復旧させる際の演算部1aの処理を例示している。演算部1aは、情報処理装置3からの更新要求を継続して受け付け、データ群4aの更新を継続する。演算部1aは、更新に伴って第2の履歴情報6bを生成し、記憶装置6に格納する。演算部2aは、第1の履歴情報6aを用いてデータ群5aを第1の時点まで復旧させると、第2の履歴情報6bを用いてデータ群5aを第1の時点よりも後の第2の時点まで復旧させることになる。
図1(B)は、演算部2aが第2の履歴情報6bを用いてデータ群5aを第2の時点まで復旧させる際の演算部1aの処理を示している。演算部1aは、第2の履歴情報6bの情報量により第2の履歴情報6bを用いた復旧が完了するまでの時間を予測する。例えば、演算部1aは、第1の履歴情報6aを用いた復旧処理の実績から履歴情報を適用するための速度(単位時間当たりに適用可能な情報量)を計測しておくことが考えられる。そうすれば、当該速度と第2の履歴情報6bとの情報量により、第2の履歴情報6bを用いた復旧が完了するまでの時間を予測し得る。
演算部1aは、予測された時間を閾値と比較し、比較結果に基づいて第2の履歴情報6bを用いた復旧が行われている間のデータ群4aに対する更新の少なくとも一部を制限する。例えば、演算部1aは、予測された時間が情報処理装置1に予め与えられた閾値を超える場合に当該更新の制限を行う。閾値は、データ群4aに対する更新が、所定の確率で発生しないと期待される時間に基づいて定められてもよい。
演算部1aは、情報処理装置3で実行されるソフトウェアやソフトウェアの種別により、制限対象とする更新を決定し得る。例えば、優先度の相対的に低いソフトウェアによる更新を制限し、優先度の相対的に高いソフトウェアによる更新を制限しないようにしてもよい。この場合、演算部1aは、更新の制限対象のソフトウェアから更新要求を受け付けたとしても、更新を行わないようにする。
こうして、演算部2aが第2の履歴情報6bを用いてデータ群5aを第2の時点まで復旧させている間にも、演算部1aは情報処理装置3からの更新要求を受け付ける。そして、演算部1aは、第3の履歴情報6cを生成し、記憶装置6に格納する。演算部2aは、第2の履歴情報6bを用いた復旧が完了すると、続いて第3の履歴情報6cを用いた復旧を行うことになる。
第1の実施の形態の情報処理システムによれば、第1の履歴情報6aを用いた復旧が行われている間に、情報処理装置1により、データ群4aに対する更新の要求が受け付けられ、更新の履歴を示す第2の履歴情報6bが生成される。情報処理装置1により、第2の履歴情報6bの情報量により、第2の履歴情報6bを用いた復旧が完了するまでの時間が予測される。情報処理装置1により、予測された時間が閾値と比較され、比較結果に基づいて第2の履歴情報6bを用いた復旧が行われている間のデータ群4aに対する更新の少なくとも一部が制限される。
これにより、データ復旧の長期化を抑制できる。例えば、第2の履歴情報6bに記録された更新の量が多い場合、第2の履歴情報6bを用いた復旧に時間がかかる可能性がある。この場合、当該復旧の時間中の全ての更新を受け付けていると、第2の履歴情報6bの次の履歴情報に記録される更新の量も増大し、当該履歴情報を用いた復旧にも時間がかかる可能性がある。このように、ある履歴情報を用いた復旧が行われている間に、大量の更新が記録された別の履歴情報が生成され得る。そして、これが繰り返されると、データ復旧が長期化するおそれがある。この場合、データ群4a,5aの同期を再開させるまでに時間がかかることになり、データ群4aのみでの運用が長期化し得る。
そこで、情報処理装置1は、第2の履歴情報6bを用いた復旧に比較的時間がかかると予測される場合、第2の履歴情報6bを用いた復旧が行われている間のデータ群4aに対する更新の少なくとも一部を制限する。すると、第3の履歴情報6cに記録される更新の量を低減でき、全ての更新を記録する場合よりも第3の履歴情報6cを用いた復旧時間を低減できる。よって、第3の履歴情報6cを用いた復旧が行われている間に記録される更新の量も低減できることになる。すると、その次の履歴情報を用いた復旧時間が増大することを抑えられ、当該復旧が行われている間に記録される更新の量の増大も抑えられる。このようにすれば、順次生成される履歴情報をデータ群5aに適用するための時間が長くなることを抑制でき、データ復旧の長期化を抑制できる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、DB(DataBase)サーバ100,100a、共有ストレージ200およびAP(Application)サーバ300を含む。DBサーバ100,100aおよびAPサーバ300は、ネットワーク10を介して接続されている。ネットワーク10は、LAN(Local Area Network)でもよい。ネットワーク10は、WAN(Wide Area Network)やインターネットなどの広域ネットワークでもよい。
DBサーバ100,100aは、共有ストレージ200に接続されている。DBサーバ100,100aおよび共有ストレージ200は、直接接続されてもよい。DBサーバ100,100aおよび共有ストレージ200は、LANやSAN(Storage Area Network)を介して接続されてもよい。DBサーバ100,100aおよび共有ストレージ200は、地理的に離れた拠点に設置されるものでもよい。
DBサーバ100,100aは、DBを格納するサーバコンピュータである。DBサーバ100,100aに格納されたDBの内容は同期される。DBサーバ100,100aのうちの一方が正系となり、他方が副系となる。正系のDBサーバは、APサーバ300から受け付けるアクセス要求に応じて、自装置のDBにアクセスし、アクセス結果をAPサーバ300に応答する。アクセス要求には、DBに対する参照要求や更新要求が含まれる。例えば、正系のDBサーバは、APサーバ300からレコードの参照要求を受け付けると、DB内の対象のレコードを読み出して、当該レコードの内容をAPサーバ300に応答する。ここで、DBの更新には、DBにデータを追加すること、DBに含まれるレコードの設定値を変更すること、DBに含まれるレコードを削除することを含む。
例えば、正系のDBサーバは、APサーバ300からレコードの更新要求を受け付けると、DB内の対象のレコードを更新して、当該レコードの更新結果をAPサーバ300に応答する。正系のDBでレコードが更新されると、当該更新内容が副系にも通知されて、副系のDBのレコードも更新される。このようなDBの同期方法は、例えば、ログシップ(Log Ship)あるいはログシッピング(Log Shipping)などと呼ばれる機能を用いて実現される。
副系のDBサーバは、正系のDBサーバでのレコード更新を自装置のDBにも反映させる。副系のDBサーバは、正系の故障時に正系の役割を引き継ぐ。すなわち、第2の実施の形態の情報処理システムでは、DBサーバ100,100aの何れか一方が故障しても、他方で業務処理を継続できる。これにより、耐障害性を高めている。ただし、何れかのDBサーバのみで運用を継続していると、当該DBサーバが故障した場合に処理を継続することができなくなってしまう。そこで、故障したDBサーバを復旧して、正系・副系での運用を回復する。
共有ストレージ200は、DBのリカバリ用のデータを記憶する。例えば、正系のDBサーバは、定期的にDB全体のデータを共有ストレージ200に格納する。定期的に取得されたDB全体のデータをバックアップデータと称する。バックアップデータの取得周期は、例えば、日次、週次などである。
バックアップデータには、直近のDBの内容が反映されていないことがある。このため、正系のDBサーバは、バックアップデータを取得した時点からのDBに対する更新の内容を示す履歴情報(ログ)を取得する。当該ログは、DBに対するトランザクションの内容を記録した情報ということもできる。当該ログは、DBに対して行った操作を再実行するために用いられる。例えば、復旧対象のDBにバックアップデータを適用させた後、ログの操作を再実行させることで、当該DBを前方回復できる。
例えば、正系のDBサーバはDBの更新を受け付けると、DBを更新するとともに、正系のDBサーバのRAMに更新内容を記録したログを格納する。なお、正系のDBサーバは、DB内(データの実体)の操作を実際に行う前に、RAMに当該ログを書き出してもよい。このような手法は、ログ先行書き込み(WAL:Write Ahead Log)と呼ばれることがある。例えば、正系のDBサーバは、RAM上に複数のログファイルを配置し、ラウンドロビンで各ログファイルにログの内容を書き込む。RAM上に配置されたログをオンラインログということがある。上記のログシップは、オンラインログを副系と共有して、DBを同期する手法といえる。
正系のDBサーバは、所定のタイミングで、オンラインログの内容を共有ストレージ200に格納する。例えば、所定のタイミングは、上記のラウンドロビンによりオンラインログの書き込み対象のログファイルを切り換えるとき、オンラインログのサイズが所定のサイズに達したとき、ユーザによる指定を受け付けたときなどである。共有ストレージ200に格納されたログをアーカイブログということがある。アーカイブログは、共有ストレージ200に複数格納され得る。
アーカイブログおよびオンラインログは、バックアップデータが取得された時点から現時点までのDBの差分を記録した情報といえる。すなわち、故障したDBサーバのDBを直近の状態に復旧したいときは、まず、最近のバックアップデータを用いて当該バックアップデータが取得された時点にDBを復旧する。次に、アーカイブログを用いて当該バックアップデータが取得された時点から直近のアーカイブログが取得された時点までのDBに対する操作を再実行する。これにより、アーカイブログが取得された時点までDBを復旧する。ここまでの手順を以下の説明では、リカバリと称する。すなわち、リカバリには、バックアップデータを用いた復旧とアーカイブログを用いた復旧とが含まれる。リカバリが完了すると、DBサーバ100,100aはログシップによるオンラインログの同期を再開して、正系・副系での運用を再開する。
APサーバ300は、正系のDBサーバに対してDBのアクセス要求を送信する。APサーバ300では、複数のアプリケーションソフトウェア(以下、単にアプリケーションまたはAPと略記することがある)が実行されている。複数のアプリケーションそれぞれが正系のDBサーバに対してアクセス要求を送信する。APサーバ300は複数台設けられてもよい。すなわち、正系のDBサーバは、複数のAPサーバからDBのアクセス要求を受信することもできる。
なお、APサーバ300により送信されたアクセス要求を受信し、正系のDBサーバに転送するサーバ装置を別途設けてもよい。この場合、APサーバ300は、当該サーバ装置を介して、正系のDBサーバと通信する。
図3は、DBサーバのハードウェア例を示す図である。DBサーバ100は、プロセッサ101、RAM102、HDD103、通信部104,104a、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を有する。各ユニットがDBサーバ100のバスに接続されている。DBサーバ100aおよびAPサーバ300もDBサーバ100と同様のユニットを用いて実現できる。
プロセッサ101は、DBサーバ100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASIC、FPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどの2以上の要素の組み合わせであってもよい。
RAM102は、DBサーバ100の主記憶装置である。RAM102は、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、DBサーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションのプログラム、および各種データが格納される。DBサーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
通信部104は、ネットワーク10を介して他のコンピュータと通信を行えるインタフェースである。通信部104は、有線インタフェースでもよいし、無線インタフェースでもよい。
通信部104aは、共有ストレージ200と通信を行えるインタフェースである。当該インタフェースとして、FC(Fibre Channel)やSCSI(Small Computer System Interface)などを用いることができる。通信部104aは、プロセッサ101からの命令に従って、共有ストレージ200にデータを書き込んだり、共有ストレージ200からデータを読み出したりする。ここで、共有ストレージ200は、HDDやSSDなどの記憶装置を有している。共有ストレージ200は当該記憶装置にデータを格納する。共有ストレージ200に格納されたデータはDBサーバ100,100aからアクセス可能である。
画像信号処理部105は、プロセッサ101からの命令に従って、DBサーバ100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部106は、DBサーバ100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
ディスクドライブ107は、レーザ光などを利用して、光ディスク13に記録されたプログラムやデータを読み取る駆動装置である。光ディスク13として、例えば、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などを使用できる。ディスクドライブ107は、例えば、プロセッサ101からの命令に従って、光ディスク13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
機器接続部108は、DBサーバ100に周辺機器を接続するための通信インタフェースである。例えば、機器接続部108にはメモリ装置14やリーダライタ装置15を接続できる。メモリ装置14は、機器接続部108との通信機能を搭載した記録媒体である。リーダライタ装置15は、メモリカード16へのデータの書き込み、またはメモリカード16からのデータの読み出しを行う装置である。メモリカード16は、カード型の記録媒体である。機器接続部108は、例えば、プロセッサ101からの命令に従って、メモリ装置14またはメモリカード16から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
図4は、情報処理システムの機能例を示す図である。DBサーバ100は、DB110、オンラインログ記憶部120、制御情報記憶部130およびDB管理部140を有する。DB110および制御情報記憶部130は、RAM102またはHDD103に確保した記憶領域として実現できる。オンラインログ記憶部120は、RAM102に確保した記憶領域として実現できる。DB管理部140は、プロセッサ101が実行するソフトウェアのモジュールとして実現できる。ここで、図4では、DBサーバ100を正系、DBサーバ100aを副系である場合を想定して各機能を説明する。
DB110は、APサーバ300で動作する各アプリケーションの処理に用いられる各種のデータ群を記憶する。オンラインログ記憶部120は、DB110に対するオンラインログを記憶する。制御情報記憶部130は、DB管理部140による処理に用いられる各種のデータを記憶する。
DB管理部140は、DB110へのアクセス、オンラインログの生成およびアーカイブログの生成を行う。DB管理部140は、制御部141、同期部142、分析部143および復元部144を有する。
制御部141は、APサーバ300から受け付けたアクセス要求に応じてDB110にアクセスし、アクセス結果をAPサーバ300に応答する。DB110に対するデータの参照や更新の内容は、例えば、SQL文によって表される。制御部141はアクセス要求に応じたSQL文を実行することで、DB110に対する参照や更新を実行し得る。制御部141は、参照や更新に応じてDB110に対する操作内容を記録したオンラインログを生成し、オンラインログ記憶部120に格納する。また、制御部141は、分析部143の指示に応じて、DB110の更新を制限する。
同期部142は、オンラインログ記憶部120に格納されたオンラインログをDBサーバ100aに送り、DBサーバ100,100aに格納された各DBを同期させる(ログシップ)。例えば、同期部142は、所定の周期(例えば、数秒〜数分程度)でオンラインログに記録された新たな内容をDBサーバ100aに送ることが考えられる。
分析部143は、DBサーバ100aでDBのリカバリが実行されている間のリカバリ状況および制御部141による新規のアーカイブログの生成状況を監視し、分析する。分析部143は、分析結果に応じて、DB110の更新を制限するよう制御部141に指示する。
復元部144は、DB110のリカバリを実行する。具体的には、復元部144は、共有ストレージ200に記憶されたバックアップデータを用いて、バックアップデータが取得された時点までDB110を復元する。更に、復元部144は、共有ストレージ200に記憶されたアーカイブログを用いて、当該アーカイブログが最後に取得された時点までDB110を復元する。
DBサーバ100aは、DB110a、オンラインログ記憶部120a、制御情報記憶部130aおよびDB管理部140aを有する。DB110a、オンラインログ記憶部120a、制御情報記憶部130aおよびDB管理部140aは、DBサーバ100が有する同名の機能と同様である。DB管理部140aは、DB管理部140と同様に、制御部141a、同期部142a、分析部143aおよび復元部144aを有する。ここで、DBサーバ100aが副系である場合を想定すると、DB管理部140aの各部の処理はDB管理部140とは一部異なる。
制御部141aは、オンラインログ記憶部120aに記憶されたオンラインログを用いてDB110aを更新する。同期部142aは、DBサーバ100からDB110の更新に応じたオンラインログを受信し、オンラインログ記憶部120aに格納する。
分析部143aは、DBサーバ100aが正系で動作する場合に、分析部143と同様の機能を発揮する。復元部144aは、DB110aのリカバリを実行する。具体的な方法は、復元部144と同様である。
ここで、DB110,110aは、DBサーバ100,100aに格納されるものとしたが、DBサーバ100,100a以外の装置に格納されてもよい。例えば、DBサーバ100,100aそれぞれに外付けされた記憶装置に格納されてもよいし、DBサーバ100,100aとネットワーク10を介して接続された記憶装置に格納されてもよい。
共有ストレージ200は、バックアップ記憶部210およびアーカイブログ記憶部220を有する。バックアップ記憶部210およびアーカイブログ記憶部220は、共有ストレージ200が備えるHDDやSSDなどに確保した記憶領域として実現できる。
バックアップ記憶部210は、DBサーバ100またはDBサーバ100aにより定期的に取得されるバックアップデータを記憶する。アーカイブログ記憶部220は、アーカイブログを記憶する。
APサーバ300は、複数の種類のアプリケーションを実行する。例えば、当該アプリケーションには、バッチ処理AP310、一般処理AP320およびオンライン処理AP330が含まれる。バッチ処理AP310は、バッチ処理を実行するアプリケーションの集合である。一般処理AP320は、第2の実施の形態の情報処理システムで実行される主な業務処理とは別個に実行される一般的な処理を実行するアプリケーションの集合である。オンライン処理AP330は、第2の実施の形態の情報処理システムで実行される主な業務処理を実行するアプリケーションの集合である。バッチ処理AP310、一般処理AP320およびオンライン処理AP330は、その処理の実行にDB110へのアクセスを伴う。なお、APサーバ300で実行される各アプリケーションは、それぞれが別個のAPサーバ上で実行されるものでもよい。
図5は、SQL優先度テーブルの例を示す図である。SQL優先度テーブル131は、制御情報記憶部130に予め格納される。SQL優先度テーブル131は、SQL優先度およびAP区分の項目を含む。
SQL優先度の項目には、SQL優先度を示す値が登録される。ここで、SQL優先度は、その値が大きいほど、より優先されることを示すものとする。AP区分の項目には、アプリケーションの区分(以下、AP区分ということがある)を示す情報が登録される。AP区分は、APサーバ300で実行されるアプリケーションの種類に対応している。例えば、AP区分には、“バッチ処理”、“一般処理”および“オンライン処理”などがある。
例えば、SQL優先度テーブル131には、SQL優先度が“1”、AP区分が“バッチ処理”という情報が登録される。これは、AP区分“バッチ処理”であるアプリケーションのSQL優先度が“1”であることを示す。SQL優先度“1”は最低の優先度である。
SQL優先度テーブル131によれば、AP区分が“一般処理”であるアプリケーションのSQL優先度は“2”であり、AP区分“バッチ処理”のアプリケーションよりも1段階優先度が高い。また、AP区分が“オンライン処理”であるアプリケーションのSQL優先度は“3”であり、AP区分が“一般処理”であるアプリケーションよりも1段階優先度が高い。図5ではSQL優先度“4”以上のAP区分の図示を省略している。
図6は、無更新確率テーブルの例を示す図である。無更新確率テーブル132は、優先度閾値よりも小さいSQL優先度であるアプリケーションに対してDB110の更新を制限した場合に、DB110が無更新である確率を、時間経過に対して求めたものである。無更新確率テーブル132は、制御情報記憶部130に格納される。無更新確率テーブル132は、分析部143により生成される。無更新確率テーブル132は、優先度閾値および無更新確率の項目を含む。
優先度閾値の項目には、優先度閾値が登録される。無更新確率の項目には、時間の経過に対して、DB110が無更新である確率(無更新確率)が登録される。
例えば、無更新確率テーブル132には、優先度閾値が“1”、1分間の無更新確率が“80%”、2分間の無更新確率が“67%”、3分間の無更新確率が“55%”、・・・という情報が登録される。これは、DB110にアクセスする全てのアプリケーションがDB110の更新を行う場合、DB110が1分間無更新である確率が“80%”であることを示す。また、同じ場合に、DB110が2分間無更新である確率が“67%”であること、3分間無更新である確率が“55%”であることを示す。
また、例えば、無更新確率テーブル132には、優先度閾値が“2”、1分間の無更新確率が“83%”、2分間の無更新確率が“70%”、3分間の無更新確率が“60%”、・・・という情報が登録される。これは、SQL優先度が“2”以上のアプリケーションがDB110の更新を行う場合、DB110が1分間無更新である確率が“83%”であることを示す。また、同じ場合に、DB110が2分間無更新である確率が“70%”であること、3分間無更新である確率が“60%”であることを示す。
無更新確率テーブル132において、同一の優先度閾値の場合、時間が長くなるほど、更新要求を受け付ける可能性は高まるので、無更新確率は小さくなる傾向となる。また、同一の時間の場合、優先度閾値が大きくなるほど、更新を行うアプリケーションの数が少なくなるので、無更新確率は大きくなる傾向となる。
また、後述するように、DBサーバ100は、優先度閾値を選択し、SQL優先度が優先度閾値以上であるAP区分についてDB更新を許容し、SQL優先度が優先度閾値よりも小さいAP区分についてDB更新を制限する。すなわち、優先度閾値は、DB更新を制限するAP区分の選択パターンを示しているといえる。例えば、優先度閾値“1”は何れのAP区分に対してもDB更新を制限しないことを示す。例えば、優先度閾値“3”は優先度閾値“1”、“2”のAP区分に対してDB更新を制限することを示す。
図7は、アクセス統計テーブルの例を示す図である。アクセス統計テーブル133,133a,133b,・・・は、無更新確率テーブル132を求めるために作成されるものである。アクセス統計テーブル133,133a,133b,・・・は、制御情報記憶部130に格納される。アクセス統計テーブル133,133a,133b,・・・は、分析部143により生成される。
アクセス統計テーブル133,133a,133b,・・・は、SQL優先度の複数の範囲に対して生成される。SQL優先度の複数の範囲とは、SQL優先度が“1以上”、“2以上”、“3以上”、・・・というものである。例えば、アクセス統計テーブル133は、SQL優先度“1以上”のAP区分について計測された情報である。アクセス統計テーブル133aは、SQL優先度“2以上”のAP区分について計測された情報である。アクセス統計テーブル133bは、SQL優先度“3以上”のAP区分について計測された情報である。
アクセス統計テーブル133,133a,133b,・・・は、時間、計測数、更新数および無更新確率の項目を含む。時間の項目には、計測した累積の時間(経過時間)が登録される。計測数には、受け付けたアクセス要求の数が登録される。更新数の項目には、受け付けた更新要求の数が登録される。無更新確率の項目には、計測数に対する(計測数−更新数)の割合が登録される。
例えば、アクセス統計テーブル133には、時間が“1分間”、計測数が“20”、更新数が“4”、無更新確率が“80%”という情報が登録されている。これは、SQL優先度が“1以上”のAP区分に属するアプリケーション(すなわち、全てのAP区分に属するアプリケーション)から計測開始より1分間の間に、アクセス要求を20回受け付け、そのうち更新要求が4回であったことを示す。この場合、無更新確率は、{(20−4)/20}×100=80%となる。アクセス統計テーブル133には、2分間、3分間、・・・と同様にして、累積時間ごとの無更新確率が記録される。アクセス統計テーブル133a,133b,・・・についても同様である。
なお、制御部141および分析部143は、アクセス要求に含まれるアプリケーションの識別子(例えば、SQL文に付加されたアプリケーションの識別子)により、何れのアプリケーションからアクセス要求を受け付けたかを識別できる。制御情報記憶部130には、各アプリケーションが何れのAP区分に属するかを示す情報が予め記憶される。制御部141および分析部143は、当該情報を参照することで、AP区分単位の計測数および更新数を把握できる。AP区分単位の計測数および更新数をSQL優先度の範囲ごと、経過時間ごとに積算すれば、アクセス統計テーブル133,133a,133b,・・・を得られる。
次に、第2の実施の形態の処理を例示する。以下の説明では、まず、DBサーバ100が副系であり、DBサーバ100aが正系である場合を想定する。その後、DBサーバ100aが故障すると、DBサーバ100が正系に切り換わることになる。
図8は、ログの出力例を示す図である。DB管理部140aは、APサーバ300から参照要求を受信する。DB管理部140aは、参照要求に応じて、DB110aからデータを読み出し、APサーバ300に応答する。DB管理部140aは、APサーバ300から更新要求を受信する。DB管理部140aは、更新要求に応じて、DB110aを更新する。DB管理部140aは更新の内容をオンラインログ121aに書き出す。DB管理部140aはオンラインログ121aをオンラインログ記憶部120aに格納する。
オンラインログ121aは、ログシップ機能によりDBサーバ100にも送られ、オンラインログ121としてオンラインログ記憶部120に格納される。DB管理部140は、オンラインログ121を用いてDB110aに対する更新内容をDB110にも反映させる。
また、DB管理部140aは、所定のタイミングでオンラインログ121aからアーカイブログ221を生成し、アーカイブログ記憶部220に格納する。このような通常運用の状態から、DBサーバ100aが故障した場合の処理を以下に例示する。ただし、DBサーバ100,100aの役割が逆になっても、処理の実行主体が入れ替わる他は、同様の手順となる。
図9は、障害時の正系の処理の例を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
(S11)制御部141は、DBサーバ100aの故障を検出する。例えば、DBサーバ100,100aは、死活監視用の所定の通信を定期的に行い、正系側がダウンしたか否かを判断してもよい。例えば、制御部141は、当該死活監視用の通信を行えなくなったことを検出することで、正系であるDBサーバ100aの故障を検出し得る。あるいは、制御部141は、ネットワーク10に接続された管理用の端末装置から、DBサーバ100aが故障した旨の通知を受け付けることで、当該故障を検出してもよい。
(S12)制御部141は、DBサーバ100aから正系の役割を引き継ぐ。DBサーバ100が正系として動作することになる。以降、DBサーバ100aに代えて、DBサーバ100がAPサーバ300からのアクセス要求を受け付けることになる。オンラインログおよびアーカイブログを生成する役割もDBサーバ100が引き継ぐ。
(S13)制御部141は、オンラインログの同期を停止するよう同期部142に指示する。同期部142は、オンラインログの同期を停止する。
(S14)制御部141は、APサーバ300からのアクセス要求を受け付け、DB110の運用を継続する。制御部141は、DB110の更新に応じてオンラインログおよびアーカイブログの生成を継続する。制御部141は、生成したオンラインログをオンラインログ記憶部120に格納する。制御部141は、生成したアーカイブログをアーカイブログ記憶部220に格納する。
(S15)制御部141は、DBサーバ100aからリカバリ開始の通知を受信することで、DBサーバ100aにおけるリカバリ開始を検出する。
(S16)制御部141は、DB110に対するリカバリ時のアクセス制御を行う。制御部141による具体的なアクセス制御の内容は、後述するように分析部143によって決定される。
(S17)制御部141は、DBサーバ100aのリカバリが完了したことを検出する。DBサーバ100aは副系として動作することになる。
(S18)制御部141は、オンラインログの同期を再開するよう同期部142に指示する。制御部141は、何れかのアプリケーションについてDB110の更新を制限している場合、当該制限を解除する。同期部142は、同期部142aとの間でオンラインログの同期を再開する。
このようにして、正系であるDBサーバ100aが故障した場合は、DBサーバ100が正系の役割を引き継ぐ。そして、DBサーバ100aのリカバリが完了すると、オンラインログの同期を再開させ、DBサーバ100,100aでの冗長化運用を再開させる。
ここで、ステップS11において、DBサーバ100を副系、DBサーバ100aを正系としたが、DBサーバ100を正系、DBサーバ100aを副系とした場合も同様である。その場合、DBサーバ100は、ステップS12の処理をスキップしてステップS13を実行すればよい。
図10は、片系運用時のログの出力例を示す図である。図10では、図9のステップS14におけるDBサーバ100によるオンラインログおよびアーカイブログの生成を例示している。この場合、DB管理部140は、DB110に対する更新に応じてオンラインログ122を生成し、オンラインログ記憶部120に格納する。また、DB管理部140は、所定のタイミングでアーカイブログ222を生成し、アーカイブログ記憶部220に格納する。また、DBサーバ100aは、故障しているので、ログシップの機能は停止されている(DBサーバ100,100a間のオンラインログの同期は行われない)。次に、DBサーバ100aのリカバリ処理を説明する。
図11は、副系のリカバリ処理の例を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。
(S21)制御部141aは、リカバリ開始の指示を受け付ける。制御部141aは、DBサーバ100aに接続された入力デバイスに対するユーザの所定の操作を受け付けることで、当該リカバリ開始の指示を受け付けてもよい。制御部141aは、ネットワーク10に接続された所定の管理用の端末装置から当該リカバリ開始の指示を受信してもよい。
(S22)制御部141aは、DBサーバ100にリカバリの開始を通知する。制御部141aは、復元部144aによるリカバリを開始させる。
(S23)復元部144aは、バックアップデータの適用開始をDBサーバ100に通知する。復元部144aは、バックアップ記憶部210に記憶されたバックアップデータを取得し、DB110aに適用する。これにより、DB110aは当該バックアップデータが生成された時点まで復旧される。復元部144aは、バックアップデータの適用完了をDBサーバ100に通知する。
(S24)復元部144aは、アーカイブログの適用開始をDBサーバ100に通知する。復元部144aは、アーカイブログ記憶部220に記憶されたアーカイブログを取得し、DB110aに適用する。これにより、DB110aは当該アーカイブログが生成された時点まで復旧される。復元部144aは、アーカイブログの適用完了をDBサーバ100に通知する。ステップS24が実行されている間にも、DBサーバ100ではDB110の更新が行われ得る。
(S25)復元部144aは、アーカイブログ記憶部220を参照して、アーカイブログの適用中にDBサーバ100により生成された新たなアーカイブログ(差分アーカイブログということがある)があるか否かを判定する。差分アーカイブログがある場合、処理をステップS26に進める。差分アーカイブログがない場合、処理をステップS27に進める。
(S26)復元部144aは、差分アーカイブログの適用開始(差分適用開始)をDBサーバ100に通知する。復元部144aは、アーカイブログ記憶部220に記憶された差分アーカイブログを取得し、DB110aに適用する。以下の説明では、この処理を差分適用ということがある。これにより、DB110aは当該差分アーカイブログが生成された時点まで復旧される。復元部144aは、差分アーカイブログの適用完了(差分適用完了)をDBサーバ100に通知する。そして、処理をステップS25に進める。ステップS26の後にステップS25を実行する場合、復元部144aは、当該差分アーカイブログの適用中に生成された、他の差分アーカイブログがあるか否かを判定することになる。
(S27)復元部144aは、リカバリの完了を制御部141aに通知する。制御部141aは、DB110aのリカバリが完了した旨をDBサーバ100に通知する(復元部144aが当該通知を行ってもよい)。
このようにして、DBサーバ100aにおけるDB110aのリカバリが行われる。次に、DBサーバ100aによるDB110aのリカバリの具体例を説明する。
図12は、リカバリの具体例を示す図である。DB管理部140aは、バックアップ記憶部210からバックアップデータを読み出してDB110aに適用する(ステップS23)。DB管理部140aは、アーカイブログ記憶部220からアーカイブログ222を読み出してDB110aに適用する(ステップS24)。アーカイブログ222がDB110aに提供されている間にも、DB管理部140により差分アーカイブログ223が生成されてアーカイブログ記憶部220に格納される。
DB管理部140aは、アーカイブログ記憶部220から差分アーカイブログ223を読み出してDB110aに適用する(ステップS26)。差分アーカイブログ223をDB110aに適用している間にも、DB管理部140により新規の差分アーカイブログ224が生成されてアーカイブログ記憶部220に格納される。すると、DB管理部140aは、差分アーカイブログ223の適用が完了すると、新規の差分アーカイブログ224をアーカイブログ記憶部220から読み出してDB110aに適用する(ステップS26a)。
このように、DB管理部140aは未適用の差分アーカイブログがなくなるまで、生成された順に差分アーカイブログを取得して順次適用する。次に、図9のステップS16の手順を説明する。
図13は、副系リカバリ時の正系の制御の例を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。
(S31)制御部141は、分析部143による分析を開始させる。分析部143は、統計情報を収集する。具体的には、分析部143は、APサーバ300から受け付けるアクセス要求を参照して、アクセス統計テーブル133,133a,133b,・・・を生成し、制御情報記憶部130に格納する。また、分析部143は、更新対象となったデータ量(例えば、オンラインログに書き込んだデータ量)や更新を受け付けた時間などを記録し、制御情報記憶部130に格納しておく。例えば、分析部143は、DBサーバ100aによりバックアップデータの適用が行われている間に受け付けたDB110に対するアクセス要求に基づいて、当該統計情報の収集を行える。また、分析部143は、図11のステップS23のバックアップデータの適用開始および適用完了の通知を基に、バックアップデータの適用に要した時間を計測し、制御情報記憶部130に格納しておく。
(S32)分析部143は、制御情報記憶部130に記憶されたアクセス統計テーブル133,133a,133b,・・・に基づいて、無更新確率テーブル132を生成し、制御情報記憶部130に格納する。
(S33)分析部143は、DBサーバ100aからアーカイブログの適用開始の通知を受け付ける。アーカイブログの適用開始の通知は、図11で説明したステップS24の適用開始の通知に相当する。分析部143は、アーカイブログ適用時間の計測を開始する。アーカイブログ適用時間の計測は、アーカイブログ(差分アーカイブログを含む)の適用に要した累積時間(総適用時間)を把握するために行われるものである。
(S34)分析部143は、ステップS31で収集された統計情報に基づいて、DB更新速度Vuを算出する。DB更新速度Vuは、例えば、バックアップデータの適用時間中に更新されたデータ量(例えば、アーカイブログに書き込まれたデータ量)を、当該適用時間で割ることで算出できる。DB更新速度Vuを、アーカイブログの単位時間当たりの平均の増加量の予測値と考えることができる。また、分析部143は、DBサーバ100aからアーカイブログの適用完了の通知を受け付ける。アーカイブログの適用完了の通知は、図11で説明したステップS24の適用完了の通知に相当する。すると、分析部143は、当該ステップS24において適用が完了したアーカイブログのサイズと、適用に要した時間とに基づいて、差分適用予測速度Vaを算出する。差分適用予測速度Vaは、単位時間当たりに適用されたアーカイブログの平均サイズである(これを差分アーカイブログの適用速度の予測値として用いる)。例えば、Vu,Vaの何れも、バイト毎秒などの単位で表すことができる。
(S35)分析部143は、アーカイブログ記憶部220を参照して、アーカイブログの適用中に生成された差分アーカイブログがあるか否かを判定する。差分アーカイブログがある場合、処理をステップS36に進める。差分アーカイブログがない場合、処理を終了する。分析部143は、アーカイブログ適用中に制御部141により差分アーカイブログが生成されたか否かを監視することで当該判定を行ってもよい。
(S36)分析部143は、完了希望時間Nに基づいて、確保すべき無更新確率pを算出する。完了希望時間Nは、全ての差分アーカイブログを用いたDB110aの復旧にかけられる時間としてユーザにより予め指定された時間である。分析部143は、全ての差分アーカイブログの適用が時間N以内に終わるように無更新確率pを決定する。具体的には、完了希望時間Nは、更新確率q=1−pを用いて、式(1)のように表せる。式(1)は、式(2),(3),(4)のように変形できる。
ここで、Sは、最初の差分アーカイブログのサイズ(例えば、単位はバイト)である。式(2)は、和記号を用いて式(1)を書き換えたものである。式(3)は、式(2)の係数を和記号の前に移動させたものである。式(3)において、0≦q≦1である。また、アーカイブログの適用は連続したDB更新を伴うため、更新要求による通常のDB更新よりも、単位時間当たりの更新量は大きいと考えられるから、0<Vu/Va<1と考えられる。よって、0<q×(Vu/Va)<1が成り立つ。式(3)から式(4)への変形にこの関係を用いている。式(4)をqについて解くことで、式(5)を得る。
無更新確率pと更新確率qとの関係は式(6)で表せるから、無更新確率pは式(7)で表せる。
式(7)に計測したVu,Va,Sと、ユーザにより予め与えられたNの値を代入することで、無更新確率pを得る。例えば、時間Nとして60分(3600秒)、120分(7200秒)など、運用に応じた値のユーザによる入力を許容する。すなわち、完了希望時間N以内で全ての差分アーカイブログの適用を完了させるためには、DB110に対して無更新確率p以上を維持できる時間以内に、各差分アーカイブログの適用が行われればよい。
(S37)分析部143は、ステップS36で算出された無更新確率pに対して、無更新確率テーブル132を参照し、DB更新制限なし(すなわち、優先度閾値“1”)で無更新確率p以上を確保できる最大の時間を無更新期待時間τ=τ0として特定する。例えば、無更新確率テーブル132によれば、p=60%であれば、τ0=2分間である。τ0は、無更新期待時間(DB110が無更新であると期待される時間)の初期値である。
(S38)分析部143は、変数nに1を代入する。ここで、変数nは差分適用の回数を管理するための変数である。
(S39)分析部143は、1回目の差分適用開始の通知を受け付ける。当該差分適用開始の通知は、図11で説明したステップS26の1回目の差分適用開始の通知に相当する。分析部143は、1回目の差分適用完了まで待機する。1回目の差分適用中は、DB110に対する更新制限を行わない。分析部143は、DBサーバ100aから1回目の差分適用完了の通知を受け付けることで、当該1回目の差分適用が完了したことを検出する。
(S40)分析部143は、差分適用時のDB更新制御を行う。処理の詳細は後述する。
ここで、ステップS31で示したように、リカバリ中に統計情報を収集すれば、最新のアクセス状況に基づいて、DB110の更新制限を行える。ただし、統計の収集方法は、ユーザにより任意に決定され得る。例えば、分析部143はDB110aのリカバリが開始される前に、アクセス統計テーブル133,133a,133b,・・・を作成しておいてもよい。具体的には、前の週の同じ曜日における1日分のアクセス統計を、アーカイブログのバックアップなどから取得してもよい。そうすれば、曜日別のアクセス状況に基づいて、DB110の更新制限を行える。
なお、アクセス統計テーブル133,133a,133b,・・・では統計情報を収集する時間の単位を1分とし、無更新確率を(経過時間の)1分単位に取得するものとしたが、他の時間を単位としてもよい。例えば、30秒単位、5分単位、10分単位、30分単位などとしてもよい。
また、統計情報を収集する時間も任意に決定可能である。例えば、30分、1時間などと時間範囲を定めて統計情報を収集してもよい。または、アーカイブログの増加分を予め与え、当該増加分に対応する時間帯のアクセス要求を採取して統計情報を収集してもよい。または、所定のサンプル数を予め与え、当該サンプル数に達するまでアクセス要求を採取して、統計情報を収集してもよい。
更に、無更新確率pは、ユーザにより予め与えられてもよい。例えば、リカバリが長引いても、DB更新の制限をかけたくない場合は、p=0%を予め設定しておいてもよい(常に全ての更新を許容する)。あるいは、参照業務専門のDBである場合など、更新を気にしない場合には、p=100%を予め設定しておいてもよい(以降の処理に拘わらず、常に全ての更新が制限されることになる)。あるいは、p=50%など、所定の値が予め設定されていてもよい。pの値が予め与えられる場合はステップS36をスキップする。
また、ステップS34〜S37の処理に時間を要する場合には、DBサーバ100aで1回目の差分適用が行われている間に、ステップS34〜S37を実行することも考えられる(1回目の差分適用完了まで時間的な猶予がある)。この場合、ステップS39における1回目の差分適用開始の通知をステップS38よりも前に受け付ける。次に、上記ステップS40のDB更新制御の手順を説明する。
図14は、正系のDB更新制御の例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
(S41)分析部143は、差分適用中に生成された新規の差分アーカイブログがあるか否かを判定する。新規の差分アーカイブログがある場合、処理をステップS42に進める。新規の差分アーカイブログがない場合、処理を終了する。分析部143は、差分適用中に制御部141により新規の差分アーカイブログが生成されたか否かを監視することで当該判定を行ってもよい。
(S42)分析部143は、変数nに1を加算する。
(S43)分析部143は、アーカイブログ(差分アーカイブログを含む)の総適用時間が閾値時間以上であるか否かを判定する。アーカイブログの総適用時間が閾値時間以上である場合、処理をステップS44に進める。アーカイブログの総適用時間が閾値時間よりも小さい場合、処理をステップS45に進める。ステップS43の時点でのアーカイブログの総適用時間は、図13のステップS33で計測が開始されたアーカイブログ適用時間を参照すれば得られる。また、例えば、閾値時間は制御情報記憶部130に予め格納される。例えば、閾値時間はバックアップデータの適用に要した時間の2倍の時間とする。なお、バックアップデータの適用に要した時間は、図13のステップS31で取得済である。
(S44)分析部143は、全てのアプリケーションによるDB110の更新を制限する(更新要求を受け付けても更新しない)。そして、処理をステップS49に進める。
(S45)分析部143は、n回目の差分適用時間Tnを予測する。具体的には、「差分適用時間Tn=(n−1回目の差分適用中に生成された新規の差分アーカイブログのサイズ)/差分適用予測速度Va」とする。
(S46)分析部143は、予測された差分適用時間Tn>無更新期待時間τであるか否かを判定する。Tn>τである場合、処理をステップS47に進める。Tn≦τである場合、処理をステップS49に進める。
(S47)分析部143は、制御情報記憶部130に記憶された無更新確率テーブル132を参照して、無更新確率がp以上であり、かつ、差分適用時間Tn≦無更新期待時間τ=τ’となるような時間τ’を取り得る優先度閾値を特定する。そして、分析部143は、特定した優先度閾値のうち最小の優先度閾値を特定する。当該最小の優先度閾値に対して無更新確率がp以上である最大の時間τ’をτに再設定する。例えば、前述のように無更新確率p=60%、無更新期待時間τ=τ0=2分間であり、予測された差分適用時間Tn=4分であるとする。このとき、無更新確率テーブル132によれば、無更新期待時間τ=τ’=5分間に再設定され、優先度閾値“3”が特定される。これは、予測された差分適用時間Tnに対して無更新確率p=60%以上を維持するために、SQL優先度が“3”よりも小さいAP区分に属するアプリケーションによるDB110の更新を制限すればよいことを意味する。
(S48)分析部143は、ステップS47で特定された優先度閾値よりも小さいSQL優先度のAP区分に属するアプリケーションによる、DB110の更新を制限するように、制御部141に指示する。以降、制御部141は、指示されたアプリケーションによるDB110の更新を制限する。例えば、特定された優先度閾値が“3”であれば、SQL優先度“1”であるAP区分“バッチ処理”に属するアプリケーションおよびSQL優先度“2”であるAP区分“一般処理”に属するアプリケーションから更新要求を受信しても、更新を行わない。この場合、当該更新要求に対応するログは、オンラインログおよび差分アーカイブログに記録されないことになる。逆にいえば、SQL優先度が“3”以上であるAP区分に属するアプリケーションによるDB110の更新のみを許容する。
(S49)分析部143は、n回目の差分適用開始の通知を受け付ける。当該差分適用開始の通知は、図11で説明したステップS26のn回目の差分適用開始の通知に相当する。分析部143は、n回目の差分適用完了まで待機する。分析部143は、DBサーバ100aからn回目の差分適用完了の通知を受け付けることで、当該n回目の差分適用が完了したことを検出する。そして、処理をステップS41に進める。
このように、DBサーバ100は、DBサーバ100aで差分アーカイブログの適用が行われている間、DB110の更新を制限する。このとき、DBサーバ100は、AP区分ごとのSQL優先度を示すSQL優先度テーブル131を参照して、予測された差分適用時間以上の時間経過に対してDB110aが更新されない確率が無更新確率p以上となるように、SQL優先度の低い方から、更新の制限対象とするAP区分を選択する。
更新の制限対象とするAP区分の複数の選択パターン、および、各選択パターンを採用した場合に時間経過に対してDB110aが更新されない確率は、無更新確率テーブル132により与えられている。分析部143は、複数の選択パターンの中から、予測された差分適用時間以上の時間経過に対してDB110aが更新されない確率が無更新確率p以上となる選択パターン(優先度閾値)を特定しているともいえる。
なお、ステップS44で示したように、アーカイブログの総適用時間が閾値時間以上である場合に、DB110に対する全ての更新を行わないようにすることで、リカバリの所要時間が過大となるのを抑制できる。
図15は、リカバリ時の処理の例を示すシーケンスである。以下、図15に示す処理をステップ番号に沿って説明する。図15では、アーカイブログの適用中に差分アーカイブログが生成される場合を例示している。なお、図15では、図12で例示した符号を用いる。
(ST101)DBサーバ100aは、リカバリの開始指示を受け付ける。
(ST102)DBサーバ100aは、バックアップデータの適用開始をDBサーバ100に通知する(バックアップデータ適用開始通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100は、統計情報の取得を開始する。DBサーバ100aは、バックアップ記憶部210からバックアップデータを読み出して、DB110aの復旧を行う。DBサーバ100は、当該復旧中にも更新要求を受け付け、オンラインログおよびアーカイブログを生成する。
(ST103)DBサーバ100aは、バックアップデータの適用を完了する。DBサーバ100aは、バックアップデータの適用完了をDBサーバ100に通知する(バックアップデータ適用完了通知の送信)。DBサーバ100は、当該通知を受信する。
(ST104)DBサーバ100aは、アーカイブログの適用開始をDBサーバ100に通知する(アーカイブログ適用開始通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100は、アーカイブログ適用開始時間の計測を開始する。DBサーバ100aは、アーカイブログ記憶部220からアーカイブログ222を読み出して、DB110aの復旧を行う。DBサーバ100は、当該復旧中にも更新要求を受け付ける。DBサーバ100は、更新に応じてオンラインログを生成する。また、DBサーバ100は、オンラインログに基づいて差分アーカイブログ223を生成し、アーカイブログ記憶部220に格納する。
(ST105)DBサーバ100aは、アーカイブログ222の適用を完了する。DBサーバ100aは、アーカイブログの適用完了をDBサーバ100に通知する(アーカイブログ適用完了通知の送信)。DBサーバ100は、当該通知を受信する。
(ST106)DBサーバ100は、アーカイブログ222の適用状況に基づいて、差分適用予測速度Vaを算出する。また、DBサーバ100は、DB更新速度Vuも算出する。ただし、DB更新速度Vuは、別のタイミング(例えば、ステップST106よりも前)に算出しておいてもよい。また、例えば、DBサーバ100は完了希望時間Nから先の式(7)を用いて、無更新確率pを算出し、無更新期待時間τ=τ0を特定する(ただし、前述のように無更新確率pとして予め与えられた値を用いてもよい)。
(ST107)DBサーバ100aは、1回目(n=1)の差分適用開始をDBサーバ100に通知する(差分適用開始通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100aは、アーカイブログ記憶部220から差分アーカイブログ223を読み出して、DB110aの復旧を行う。DBサーバ100は、当該復旧中にも更新要求を受け付ける。DBサーバ100は、更新に応じてオンラインログを生成する。また、DBサーバ100は、オンラインログに基づいて差分アーカイブログ224を生成し、アーカイブログ記憶部220に格納する。
(ST108)DBサーバ100aは、1回目(n=1)の差分適用完了をDBサーバ100に通知する(差分適用完了通知の送信)。DBサーバ100は、当該通知を受信する。
(ST109)DBサーバ100は、差分適用時間T2を予測する。差分適用時間T2は、差分アーカイブログ224の適用に要する時間の予測値である。ここでは、差分適用時間T2≦τ=τ0であるとする。このため、DBサーバ100は、DB110の更新制限を行わない。
(ST110)DBサーバ100aは、2回目(n=2)の差分適用開始をDBサーバ100に通知する(差分適用開始通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100aは、アーカイブログ記憶部220から差分アーカイブログ224を読み出して、DB110aの復旧を行う。DBサーバ100は、当該復旧中にも更新要求を受け付ける。DBサーバ100は、更新に応じてオンラインログを生成する。また、DBサーバ100は、オンラインログに基づいて新たな差分アーカイブログ(図12では不図示)を生成し、アーカイブログ記憶部220に格納する。ここで、2回目の差分適用時にDB110に対して想定外に大量の更新が発生する。オンラインログに書き込まれるデータ量が増大し、新たに生成される差分アーカイブログのサイズも増大する。
(ST111)DBサーバ100aは、2回目(n=2)の差分適用完了をDBサーバ100に通知する(差分適用完了通知の送信)。DBサーバ100は、当該通知を受信する。
(ST112)DBサーバ100は、差分適用時間T3を予測する。差分適用時間T3は、ステップST110〜ST111の間に生成された新たな差分アーカイブログの適用に要する時間の予測値である。ここでは、2回目の差分適用時に、DB110に対して想定外の更新が発生したことで、差分適用時間T3が比較的長い時間となる。差分適用時間T3>τ=τ0であるとする。この場合、DBサーバ100は、無更新確率テーブル132を参照して、無更新確率p以上であり、かつ、T3≦τ=τ’となる無更新確率を取り得る最小の優先度閾値を特定する(τ’が複数であれば最大のものを選択してτに代入する)。
(ST113)DBサーバ100は、DB110に対する更新制限を行う。例えば、APサーバ300で実行される複数のアプリケーションのうちの一部から更新要求を受け付けたとしても、当該更新要求に応じた更新を行わないようにする。前述のように、DBサーバ100は、制限対象とするアプリケーションの組合せを、優先度閾値に基づいてAP区分単位に特定できる。
(ST114)DBサーバ100aは、3回目(n=3)の差分適用開始をDBサーバ100に通知する(差分適用開始通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100aは、アーカイブログ記憶部220からステップST110〜ST111の間に生成された新たな差分アーカイブログを読み出して、DBサーバ100aの復旧を行う。DBサーバ100は、当該復旧中にも更新要求を受け付けるが、一部のアプリケーションによる更新を制限する。
(ST115)DBサーバ100aは、3回目(n=3)の差分適用完了をDBサーバ100に通知する(差分適用完了通知の送信)。DBサーバ100は、当該通知を受信する。以降、DBサーバ100は、ステップST112と同様に、次の差分アーカイブログの差分適用時間Tnを予測し、Tnとτとの大小の比較結果に応じて、DB110の更新を制限するAP区分の範囲を拡大する(優先度閾値を大きくする)。
(ST116)DBサーバ100aは、n回目の差分適用を完了した後、アーカイブログ記憶部220に新たな差分アーカイブログが生成されていないことを確認する。DBサーバ100aは、リカバリ完了をDBサーバ100に通知する(リカバリ完了通知の送信)。DBサーバ100は、当該通知を受信する。DBサーバ100は、DB110に対する更新制限を解除する。
(ST117)DBサーバ100は、ログシップ機能によるDBサーバ100aとのオンラインログの同期を再開する。
図16は、差分適用の所要時間の例を示す図である。図16(A)は、DB110の更新制限を行う場合の差分適用の所要時間を例示している。図16(B)は、その比較として、DB110の更新制限を行わない場合の差分適用の所要時間を例示している。
図16(A)では、横軸を時間として、(A1)通常時(差分適用中に想定外のDB更新が発生しない場合)と、(A2)想定外のDB更新発生時(図15で例示した場合)とにおける、差分適用の所要時間を示している。
図16(A1)では、差分適用の回数が増えるにつれて、差分適用の所要時間は徐々に小さくなり、やがて新たな差分アーカイブログが生成される前に、差分適用が完了し、所定の時間でリカバリが完了する。
図16(A2)では、2回目の差分適用時にDB110に対して想定外の更新が発生した場合を例示している。3回目の差分適用時にDB110に対する更新を制限する。すると、3回目の差分適用に比較的長時間を要しても、3回目の差分適用中に生成される差分アーカイブログのサイズが過大となるのを抑制できる。その結果、4回目の差分適用を無更新期待時間τ以内に終えることができる。このように、無更新確率pによって求まる無更新期待時間内に各差分適用が完了するように、DB110の更新を制限する。そうすれば、差分アーカイブの適用をおおよそ完了希望時間N以内に完了させることができる。
図16(B)では、横軸を時間として、(B1)通常時(差分適用中に想定外のDB更新が発生しない場合)と、(B2)想定外のDB更新発生時とにおける、差分適用の所要時間を示している。
図16(B1)の場合は、図16(A1)と同様である。すなわち、差分適用の回数が増えるにつれて、差分適用の所要時間は徐々に小さくなり、やがて新たな差分アーカイブログが生成される前に、差分適用が完了し、所定の時間でリカバリが完了する。
図16(B2)の場合は、2回目の差分適用時に正系のDBに対して想定外の更新が発生した場合を例示している。図16(B2)では、3回目の差分適用時に正系のDBに対する更新を制限しない点が図16(A2)と異なる。3回目の差分適用に比較的長時間を要するため、3回目の差分適用中における正系のDBの更新数も増大し、差分アーカイブログに記録される更新の内容も過大となる。すると、4回目の差分適用も比較的長時間を要することになり、4回目の差分適用中における正系のDBの更新も増大し、差分アーカイブログに記録される更新の内容も過大となる。
図16(B2)において、この状況が継続すると、差分適用が延々と完了しないことになり、リカバリが完了するまでに完了希望時間Nよりも長い時間がかかる可能性が高まる。その間、情報処理システムは、正系のDB単独での運用となり、長時間この状態が続くほど、耐障害性に対する影響は深刻になる。これに対し、副系のDBも迅速にリカバリ完了させて、冗長化運用を再開することが望ましい。
そこで、DBサーバ100は、差分アーカイブログ224の適用に比較的時間がかかると予測される場合に、差分アーカイブログ224の適用中のDB110の少なくとも一部に対する更新を制限する。すると、新たな差分アーカイブログに記録される更新の量を低減でき、全ての更新を記録する場合よりも、新たな差分アーカイブログの適用に要する時間を低減できる。よって、新たな差分アーカイブログの適用中に記録される更新の量も低減できることになり、これを繰り返すことで、リカバリの長期化を抑制できる。
また、差分アーカイブログを用いた復旧は、おおよそ完了希望時間N以内に完了されることが期待され、差分アーカイブログを用いた復旧が完了するおおよその時間を予測可能となる。
また、DBサーバ100aがリカバリを行っている間は、DBサーバ100を用いた運用を停止して、DB110の更新を行わないことも考えられる。しかし、この場合、ユーザの業務も行えないことになり、利便性が悪い。第2の実施の形態の情報処理システムによれば、業務を継続しながら、リカバリを行えるので、DB110の更新を完全に停止するよりも、利便性が向上する。すなわち、利便性の向上と、リカバリの長期化抑制とをバランス良く両立できる。
なお、第2の実施の形態では、データ群の一例として、DB110,110aを例示して説明したが、更新の履歴を用いてデータの更新を行うものであれば、DB110,110a以外のデータ群に第2の実施の形態の処理を適用し得る。
また、前述のように、第1の実施の形態の情報処理は、演算部1aにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、光ディスク13、メモリ装置14およびメモリカード16など)に記録できる。
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。