(57)【要約】【課題】バックアップに要する記憶容量を削減する制御プログラム、制御方法、及び、情報処理装置を提供する。【解決手段】コンピュータに、第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、ことを実行させる。【選択図】図４
2017068342.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、
ことを実行させることを特徴とする制御プログラム。
【請求項２】
請求項１において、
前記操作は、前記第１記憶部に記憶されたデータベースに対する操作を有し、
前記正常に終了した操作は、前記データベースに反映された操作を有する、
制御プログラム。
【請求項３】
請求項２において、
前記データベースに反映された操作は、前記データベースに対する一連の操作群をであって、前記操作群の更新を確定させる確定命令が実行された操作を有する、
制御プログラム。
【請求項４】
請求項３において、
前記データベースに反映された操作は、前記確定命令が実行された操作群に含まれる操作のうち、処理が正常終了した操作を有する、
制御プログラム。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記第３記憶部に記憶された操作実行ログに基づいて、前記第１記憶部をさらに復元する、
制御プログラム。
【請求項６】
請求項５において、
前記復元は、前記第３記憶部に記憶された操作実行ログを、前記操作の対象の記憶領域が重複しない複数のグループに分類し、複数のグループの操作実行ログに基づく復元を並列して実行する、
制御プログラム。
【請求項７】
第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、
制御方法。
【請求項８】
第１記憶部と、
前記第１記憶部に対して実行された操作に応じて操作実行ログを記憶する第２記憶部と、
前記第２記憶部に記憶された前記操作実行ログを第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法、及び、情報処理装置に関する。
【背景技術】
【０００２】
データベース管理システムは、業務の処理に応じたデータを、データベースに格納する。また、データベース管理システムは、データベースに対する操作に応じて、逐一、操作の実行履歴を示すアーカイブログを記憶する。
【０００３】
データベース管理システムは、データベースのディスク等の障害の発生に備えて、データベース、及び、アーカイブログを複写し、退避しておく。そして、障害が発生した場合、データベース管理システムは、退避したデータベースをリストアし、リストアしたデータベースに対して、アーカイブログが有する実行履歴を時系列に適用することによって、データベースを復元する。
【０００４】
障害発生時のデータベースの復元に関する技術については、例えば、特許文献１に記載される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１４３４２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、データベースに多量の更新が行われる場合、アーカイブログのサイズが増大する。これにより、アーカイブログをバックアップするための記憶容量が増大し、コストが増大する。また、バックアップして記憶したアーカイブログが、データベースの記憶領域を圧迫する場合がある。
【０００７】
１つの側面では、本発明は、バックアップに要する記憶容量を削減する制御プログラム、制御方法、及び、情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の態様によれば、第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、ことを実行させる。
【発明の効果】
【０００９】
１つの側面では、バックアップに要する記憶容量を削減できる。
【図面の簡単な説明】
【００１０】
【図１】比較例におけるデータベース管理システムの、データベースのバックアップ処理の概要を模式的に説明する図である。
【図２】トランザクションのアーカイブログＡＬの一例を示す。
【図３】図１に示した復元処理ｆ３の流れを模式的に説明する図である。
【図４】本実施の形態例における制御プログラムによる、アーカイブログＡＬのバックアップ処理の概要を模式的に説明する図である。
【図５】正常終了した操作の実行履歴の一例を説明する図である。
【図６】アーカイブバックアップログＡＬｘに基づく復元処理ｆ３ｘ（図４）の流れを模式的に説明する図である。
【図７】本実施の形態における情報処理装置１００のハードウェア構成図である。
【図８】図７に示した、情報処理装置１００のソフトウェアブロックの構成図である。
【図９】図８に示したＤＢ管理プログラム１２０のバックアップモジュール１２２の処理の流れを説明するフローチャート図である。
【図１０】時点ｔＡにおけるデータベース１０５Ａの一例を示す図である。
【図１１】時点ｔＡから時点ｔＢ（図４）までの間に、データベース１０５Ａ（図１０）に対して実行されたトランザクションの一例を示す図である。
【図１２】図１１に示したトランザクションが実行されたことによって更新された、時点ｔＢのデータベース１０５Ｂを示す図である。
【図１３】図１１に示したトランザクションを実行した際に生成されたアーカイブログＡＬの一例を示す図である。
【図１４】図１３に示したアーカイブログＡＬのバックアップ処理にしたがって生成した、アーカイブバックアップログＡＬｘの一例を示す図である。
【図１５】本実施の形態例における復元処理の概要を模式的に説明する図である。
【図１６】復元対象のレコード量に基づいて分類したグループの一例を示す図である。
【図１７】図８に示したＤＢ管理プログラム１２０のリカバリモジュール１２３の処理の流れを説明するフローチャート図である。
【図１８】各ページの更新対象のレコードの総量を説明する図である。
【図１９】レコード量に基づく実行履歴のグループ分類を説明する図である。
【発明を実施するための形態】
【００１１】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１２】
［バックアップ処理の概要］
図１は、比較例におけるデータベース管理システムの、データベースのバックアップ処理の概要を模式的に説明する図である。図１に示す矢印ｔｔは、時間の経過を示す。
【００１３】
図１におけるデータベース１０５Ａは、時点ｔＡにおけるデータベースを示す。また、データベース１０５Ｂは、時点ｔＢにおけるデータベースを示し、データベース１０５Ａに対して更新が行われたデータベースを示す。同様にして、データベース１０５Ｃは、時点ｔＣにおけるデータベースを示し、データベース１０５Ｂに対してさらに更新が行われたデータベースを示す。図１に示すデータベース１０５Ａ〜１０５Ｃを、データベース１０５とも称する。
【００１４】
データベース管理システムは、データベース１０５に対する操作（アクセス処理）に応じて、実行履歴を逐一生成し、アーカイブログ（操作実行ログともいう）ＡＬとして記憶する。アーカイブログＡＬは、データベース１０５に対する操作の履歴情報を示し、データの挿入や更新等の操作情報を時系列に有する。
【００１５】
（時点ｔＡ）
データベース管理システムは、例えば、メンテナンス期間等に、データベース１０５Ａのバックアップ処理ｆ１を行う。データベース管理システムは、バックアップ処理ｆ１として、データベース１０５Ａの複写を生成し、データベースバックアップファイル（以下、ＤＢバックアップファイルと称する）１０５Ａｂとして、記憶媒体等に記憶する。
【００１６】
ただし、データベース１０５Ａが有するレコード量が膨大である場合、バックアップ処理ｆ１に要する時間が長くなる。したがって、メンテナンス期間中に、バックアップ処理ｆ１が完了しない場合がある。また、バックアップ処理ｆ１を頻繁に行う場合、ＤＢバックアップファイル１０５Ａｂを記憶する記憶媒体の容量が不足する場合がある。
【００１７】
したがって、データベース管理システムは、バックアップ処理ｆ１の実行間隔に対してより短い時間間隔にしたがって、アーカイブログＡＬのバックアップ処理ｆ２を行う。アーカイブログＡＬは、データベース１０５Ａに対してサイズが小さいため、バックアップ処理ｆ２に要する時間は、バックアップ処理ｆ１に要する時間に対して短い。
【００１８】
（時点ｔＢ）
データベース管理システムは、アーカイブログＡＬのバックアップ処理ｆ２として、アーカイブログＡＬの複写を生成し、アーカイブバックアップログＡＬｂとして、記憶媒体等に記憶する。図１に示すアーカイブログＡＬは、時点ｔＡから時点ｔＢまでの、データベース１０５Ａに対する操作の履歴情報を有する。
【００１９】
（時点ｔＣ）
時点ｔＣは、データベースのディスク等の障害が発生した時点を示す。データベース管理システムは、復元処理ｆ３として、ＤＢバックアップファイル１０５Ａｂと、アーカイブバックアップログＡＬｂとに基づいて、時点ｔＢにおけるデータベース１０５Ｂの内容を復元する。
【００２０】
具体的に、データベース管理システムは、ＤＢバックアップファイル１０５Ａｂをリストアすることによって、時点ｔＡのデータベース１０５Ａの内容を復元する。そして、データベース管理システムは、リストア後のデータベース１０５Ａに対して、アーカイブバックアップログＡＬｂが有する時点ｔＡから時点ｔＢまでの実行履歴を、時系列に反映することによって、時点ｔＢのデータベース１０５Ｂの内容を復元する。
【００２１】
［トランザクション］
データベース管理システムは、ＳＱＬ（Structured Query Language：ＳＱＬ）コマンド（問い合わせ）を実行することによって、データベースの操作（アクセス処理）を実行する。ＳＱＬコマンドは、データベース１０５に対するデータのアクセス処理や、データベース１０５の定義を指示するデータベース言語（問い合わせ言語）である。アクセス処理は、例えば、データの検索（SELECT）、追加（INSERT）、削除（DELETE）、更新（UPDATE）等を示す。
【００２２】
トランザクションは、１つの関連性のある処理の単位を示し、複数のＳＱＬコマンドを含む。トランザクションは、トランザクションが有する各ＳＱＬコマンドの処理がＣＯＭＭＩＴ命令にしたがって有効化されることによって、正常終了する。即ち、ＣＯＭＭＩＴ命令が実行された場合に、トランザクションの各ＳＱＬコマンドによる、データベースに対する更新が確定する。換言すると、トランザクションの各ＳＱＬコマンドの更新がデータベース１０５に反映されたか否かは、トランザクションが完了するまで確定しない。
【００２３】
図２は、トランザクションのアーカイブログＡＬの一例を示す。図２に示すアーカイブログＡＬは、２つのＳＱＬコマンドを有するトランザクションの実行履歴を示す。図２の例において、ＳＱＬコマンド２は、ＳＱＬコマンド１に後続するＳＱＬコマンドである。
【００２４】
アーカイブログＡＬは、トランザクションが含む各ＳＱＬコマンドの実行履歴を有する。実行履歴は、例えば、ＳＱＬコマンドが更新するデータ、更新対象のレコード量、ＳＱＬコマンドの実行結果（正常終了／異常終了）の情報を有する。また、実行履歴は、さらに、ＳＱＬコマンドが更新対象とする、データベース１０５内のページ情報や、ページ内のアドレス情報等を有する。
【００２５】
図２の（Ａ）は、正常終了したトランザクションのアーカイブログＡＬを示す。即ち、図２の（Ａ）は、ＳＱＬコマンド１、２の後、ＣＯＭＭＩＴ命令にしたがって、更新が確定されたトランザクションのアーカイブログＡＬである。したがって、アーカイブログＡＬは、ＳＱＬコマンド１、２の実行履歴に加えて、ＣＯＭＭＩＴ命令の実行履歴を有する。
【００２６】
例えば、トランザクションが含むＳＱＬコマンド１、２のいずれかが軽微なエラーにしたがって異常終了した場合であっても、トランザクションは正常終了する。軽微なエラーは、例えば、ＳＱＬコマンドのステートメントエラー等を示す。一方、トランザクションの実行中に深刻なエラーが発生した場合、ＲＯＬＬＢＡＣＫ命令が実行され、トランザクションは異常終了する。
【００２７】
深刻なエラーは、例えば、メモリ不足やデータベース１０５との通信の切断等に起因した、トランザクションが含むＳＱＬコマンドの異常終了である。または、深刻なエラーは、トランザクションのアクセス対象のデータの、他のトランザクションによる更新等を示す。
【００２８】
図２の（Ｂ）は、異常終了したトランザクションのアーカイブログＡＬを示す。ＲＯＬＬＢＡＣＫ命令が実行された場合、データベース管理システムは、トランザクションが含む各ＳＱＬコマンドによる更新を、更新前の状態に戻す。
【００２９】
具体的に、データベース管理システムは、トランザクションの開始時に、各ＳＱＬコマンドがアクセスの対象とするデータを複写して、保持しておく。そして、ＲＯＬＬＢＡＣＫ命令が実行された場合、データベース管理システムは、保持したデータに基づいて、データベースの内容をトランザクションが実行される前の状態に戻す。
【００３０】
図２の（Ｂ）に示すアーカイブログＡＬは、ＳＱＬコマンド１、２の後にＲＯＬＬＢＡＣＫ命令が実行されたトランザクションの、アーカイブログＡＬを示す。したがって、図２の（Ｂ）に示すアーカイブログＡＬは、ＳＱＬコマンド１、２の実行履歴に加えて、ＲＯＬＬＢＡＣＫ命令の実行履歴を有する。
【００３１】
図２に示すように、正常終了したトランザクションのアーカイブログＡＬは、ＣＯＭＭＩＴ命令の実行履歴を含み、異常終了したトランザクションのアーカイブログＡＬは、ＲＯＬＬＢＡＣＫ命令の実行履歴を含む。アーカイブログＡＬは、操作のトレース情報としての役割も有するため、異常終了した操作の実行履歴を含む。
【００３２】
［復元処理の流れ］
図３は、図１に示した復元処理ｆ３の流れを模式的に説明する図である。図３に示すアーカイブバックアップログＡＬｂは、トランザクション１、トランザクション２、トランザクション３の順にトランザクションが実行された場合の、アーカイブバックアップログＡＬｂである。
【００３３】
図１で前述したとおり、データベース管理システムは、復元処理ｆ３として、ＤＢバックアップファイル１０５Ａｂ（図１）と、アーカイブバックアップログＡＬｂ（図１）とに基づいて、時点ｔＢにおけるデータベース１０５Ｂの内容を復元する。
【００３４】
前述したとおり、復元処理ｆ３として、データベース管理システムは、まず、ＤＢバックアップファイル１０５Ａｂ（図１）に基づいて、時点ｔＡのデータベース１０５Ａをリストアする。そして、データベース管理システムは、アーカイブバックアップログＡＬｂが有するトランザクション１〜５の実行履歴を実行順に適用することによって、時点ｔＢにおけるデータベース１０５Ｂの内容を復元する。
【００３５】
具体的に、データベース管理システムは、アーカイブバックアップログＡＬｂを参照して、トランザクション１の実行履歴を取得し、トランザクション１が正常終了したか否かを判定する。図３の例におけるトランザクション１は、ＣＯＭＭＩＴ命令の実行履歴を有し、正常終了したトランザクションを示す。
【００３６】
また、データベース管理システムは、トランザクション１が含む、ＳＱＬコマンドのそれぞれが正常終了したか否かを判定する。データベース管理システムは、正常終了したＳＱＬコマンドの更新を、リストアしたデータベース１０５Ａに適用する。トランザクション１は、データベース１０５Ａのページ１に対する更新を行う。したがって、データベース管理システムは、データベース１０５Ａのページ１に、トランザクション１の更新を適用する。
【００３７】
次に、データベース管理システムは、トランザクション２の実行履歴を取得し、トランザクション２が正常終了したか否かを判定する。図３の例におけるトランザクション２は、ＲＯＬＬＢＡＣＫ命令の実行履歴を有し、異常終了したトランザクションを示す。したがって、データベース管理システムは、データベース１０５Ａのページ１、２に、トランザクション２の更新を適用しない。
【００３８】
同様にして、データベース管理システムは、トランザクション３の実行履歴を取得し、トランザクション３が正常終了したトランザクションである旨、判定する。トランザクション３が有する各ＳＱＬコマンドが正常終了している場合、データベース管理システムは、データベース１０５Ａのページ１、２に、トランザクション３の更新を適用する。同様にして、データベース管理システムは、ページ１、３にトランザクション４の更新を適用し、ページ１、２にトランザクション５の更新を適用する。
【００３９】
このように、データベース管理システムは、アーカイブバックアップログＡＬｂを参照し、実行したトランザクションが正常終了したか否かを判定する。また、データベース管理システムは、正常終了したトランザクションである場合に、当該トランザクションに含まれるＳＱＬコマンドが正常終了したか否かを判定する。そして、データベース管理システムは、正常終了したＳＱＬコマンドによる更新を、リストアしたデータベース１０５Ａに適用する。
【００４０】
データベース１０５に対する操作が多量に実行された場合、アーカイブログＡＬ、及び、アーカイブバックアップログＡＬｂのサイズは増大する。これにより、バックアップして生成したアーカイブバックアップログＡＬｂを記憶するために、大容量の記憶領域が必要となる。したがって、コストが増大するとともに、データベース１０５を記憶するための領域を圧迫する場合がある。
【００４１】
また、アーカイブバックアップログＡＬｂは、異常終了したトランザクションの実行履歴や、異常終了したＳＱＬコマンドの実行履歴を含む。即ち、アーカイブバックアップログＡＬｂは、復元処理に用いない実行履歴を有する。
【００４２】
したがって、データベース管理システムは、復元処理の際に、実行履歴に対応するトランザクションが正常終了したかトランザクションであるか否かを、逐一、判定する必要がある。また、データベース管理システムは、正常終了したトランザクションに含まれる各ＳＱＬコマンドが正常終了したか否かを判定する必要がある。
【００４３】
これにより、復元処理の速度を向上できない場合がある。データベース１０５の障害が発生した場合、早急に、復元処理が完了することが望ましい。
【００４４】
［本実施の形態の概要］
したがって、本実施の形態における制御プログラムは、第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、操作実行ログを選択して、第３記憶部に記憶する。具体的に、制御プログラムは、第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する。
【００４５】
第３記憶部は、正常に終了した操作の操作実行ログのみを記憶するため、第３の記憶部に格納された操作実行ログの容量を削減することが可能になる。これにより、操作実行ログのバックアップに要する記憶容量を削減し、コストを抑えることが可能になる。
【００４６】
また、制御プログラムは、第３記憶部に記憶された操作実行ログに基づいて第１記憶部を復元する際に、記憶された各操作実行ログが正常に終了した（即ち、前記第１記憶部に適用すべき）操作の操作実行ログであるか否かを逐一判定する必要がない。したがって、制御プログラムは、正常に終了した操作の操作実行ログのみに基づいて、効率的に復元処理を行うことができる。
【００４７】
第１〜第３記憶部は、例えば、情報処理装置の補助記憶装置やストレージ装置等を示す。第１〜第３記憶部は、同一の記憶領域であってもよい。第１記憶部は、例えば、図１に示したデータベース１０５を記憶し、操作実行ログは図１に示したアーカイブログＡＬを示す。次に、図４のフローチャート図にしたがって、第１記憶部にデータベース１０５が記憶される場合における、本実施の形態における制御プログラムの処理を説明する。
【００４８】
［本実施の形態例におけるバックアップ処理の概要］
図４は、本実施の形態例における制御プログラムによる、アーカイブログＡＬのバックアップ処理の概要を模式的に説明する図である。図４において、図１で示したものと同一のものは、同一の記号で示す。時点ｔＡの処理は、図１において説明したとおりである。
【００４９】
（時点ｔＢ）
時点ｔＢにおいて、本実施の形態の制御プログラムは、アーカイブログＡＬのバックアップ処理ｆ２ｘを実行する。このとき、本実施の形態における制御プログラムは、アーカイブログＡＬが有する実行履歴のうち、処理が正常終了した操作の実行履歴を選択し、アーカイブバックアップログＡＬｘ（斜線）に記憶する。
【００５０】
したがって、バックアップ処理ｆ２ｘにしたがって生成されたアーカイブバックアップログＡＬｘは、時点ｔＡから時点ｔＢの間に実行された操作の実行履歴のうち、処理が正常終了した操作の実行履歴のみを有する。処理が正常終了した操作は、例えば、データベース１０５に反映された操作を示す。
【００５１】
アーカイブバックアップログＡＬｘが復元処理のための情報である場合、異常終了した操作の実行履歴は必ずしも必要ない。したがって、アーカイブバックアップログＡＬｘは、時点ｔＡから時点ｔＢの間に実行された操作の実行履歴のうち、異常終了し、データベース１０５に反映されなかった操作の実行履歴を有しない。これにより、アーカイブバックアップログＡＬｘの容量を削減可能になり、アーカイブバックアップログＡＬｘを記憶するための記憶領域にかかるコストを低減可能になる。また、データベース１０５の記憶領域を圧迫することを回避可能になる。
【００５２】
一方、アーカイブログＡＬは、時点ｔＡから時点ｔＢの間に実行された、全ての操作の実行履歴を有する。即ち、データベース管理システムは、実行に応じて操作の実行履歴をアーカイブログＡＬに記憶する際に、正常終了した操作の実行履歴か否かを判定しない。つまり、本実施の形態では、通常の操作時は実行履歴の選択を行わず、バックアップの際に、実行履歴の選択を行う。これにより、通常の操作時に実行履歴の選択を行うことによる、処理速度の低下を抑制可能になる。
【００５３】
（時点ｔＣ）
障害が発生すると、制御プログラムは、ＤＢバックアップファイル１０５Ａｂと、アーカイブバックアップログＡＬｘとに基づいて、時点ｔＢにおけるデータベースの内容を復元する。
【００５４】
前述したとおり、本実施の形態におけるアーカイブバックアップログＡＬｘは、正常終了した操作の実行履歴のみを有する。したがって、制御プログラムは、アーカイブバックアップログＡＬｘが有する各実行履歴が、データベース１０５Ａに反映された操作の実行履歴であるか否かを逐一判定することなく、復元処理を行うことができる。これにより、制御プログラムは、復元処理を高速に実行できる。
【００５５】
また、本実施の形態における制御プログラムは、復元処理時に実行履歴の選択を行うのではなく、バックアップの際に、予め実行履歴の選択を行う。これにより、復元処理の際に、実行履歴の選択を行うことによる処理速度の低下を抑制可能になる。
【００５６】
このように、本実施の形態における制御プログラムは、アーカイブログＡＬのバックアップの際に、正常終了した操作の実行履歴の抽出処理を行う。これにより、通常の操作時や、復元処理時に実行履歴の抽出を行うことによる処理速度の低下を抑制可能になるとともに、復元処理に要する処理時間を短縮可能になる。
【００５７】
次に、図５にしたがって、正常終了した操作の一例を説明する。
【００５８】
［正常終了した操作の実行履歴］
図５は、正常終了した操作の実行履歴の一例を説明する図である。図５の（Ａ）、（Ｂ）は、アーカイブログＡＬをバックアップして生成した、アーカイブバックアップログＡＬｘの一例を示す。
【００５９】
図５の（Ａ）に示すアーカイブログＡＬ−１は、３つのＳＱＬコマンドを含むトランザクションであって、ＲＯＬＬＢＡＣＫ命令にしたがって異常終了したトランザクションの実行履歴を示す。トランザクションが異常終了した場合、各ＳＱＬコマンドは異常終了したものとみなされる。したがって、図５の（Ａ）に示すアーカイブバックアップログＡＬｘ−１は、いずれのＳＱＬコマンド（操作）の実行履歴も有しない。
【００６０】
図５の（Ｂ）に示すアーカイブログＡＬ−２は、３つのＳＱＬコマンドを含むトランザクションであって、ＣＯＭＭＩＴ命令にしたがって正常終了したトランザクションの実行履歴を示す。また、３つのＳＱＬコマンドのうち、２つ目のＳＱＬコマンドがステートメントエラーに起因して異常終了した場合の実行履歴を示す。したがって、図５の（Ｂ）に示すアーカイブバックアップログＡＬｘ−２は、１、３つ目のＳＱＬコマンド（操作）のみの実行履歴を有する。
【００６１】
このように、本実施の形態におけるアーカイブバックアップログＡＬｘは、正常終了したトランザクションのＳＱＬコマンドであって、正常終了したＳＱＬコマンドの実行履歴を、正常終了した操作の実行履歴として有する。
【００６２】
ＳＱＬコマンドのステートメントエラーは、ＳＱＬコマンドの記述手法によっては、多量に発生し得る。ここで、ステートメントエラーが発生し得るＳＱＬコマンドの記述手法の一例を説明する。所定条件に合致するレコードが存在する場合に更新処理を行い、合致するレコードが存在しない場合に追加処理を行うプログラムのＳＱＬコマンドの記述例を説明する。
【００６３】
第１の記述例によると、プログラムは、（１）所定条件に合致するレコードを検索するＳＱＬコマンド「SELECT」の記述を有する。また、プログラムは、ＳＱＬコマンド「SELECT」の実行結果が０件である場合に、（２）レコードを追加するＳＱＬコマンド「INSERT」の記述を有し、実行結果が１件以上である場合に、（３）レコードを更新するＳＱＬコマンド「UPDATE」の記述を有する。したがって、ＳＱＬコマンド「SELECT」の実行結果が１件以上である場合、プログラムは、２つのＳＱＬコマンド「SELECT」、「UPDATE」を実行する。
【００６４】
第２の記述例によると、プログラムは、（１）レコードを更新するＳＱＬコマンド「UPDATE」の記述と、ＳＱＬコマンド「UPDATE」が異常終了した場合に、（２）レコードを追加するＳＱＬコマンド「INSERT」の記述を有する。ＳＱＬコマンド「UPDATE」が異常終了するケースは、第１の記述例におけるＳＱＬコマンド「SELECT」の実行結果が０件であるケースに該当する。
【００６５】
第２の記述例によると、ＳＱＬコマンド「UPDATE」が正常終了する場合（実行結果が１件以上である場合に相当）、プログラムは、ＳＱＬコマンド「UPDATE」のみを実行する。即ち、第２の記述例によると、ＳＱＬコマンド「UPDATE」が正常終了する場合、プログラムは、ＳＱＬコマンド「SELECT」を実行するステップを省略可能になる。したがって、実行するＳＱＬコマンドの数が低減し、処理性能が向上する。
【００６６】
ただし、第２の記述例によると、所定条件に合致するレコードが存在しない場合、ＳＱＬコマンド「UPDATE」は異常終了し、ステートメントエラーが発生する。プログラムが第２の記述例のような記述を多量に含む場合、多量のステートメントエラーが生じ得る。この場合、アーカイブログＡＬは、異常終了したＳＱＬコマンドの実行履歴を多量に含む。したがって、正常終了した操作の実行履歴を選択することにより、アーカイブバックアップログＡＬｘのサイズを大幅に削減可能になる場合がある。
【００６７】
次に、図６にしたがって、本実施の形態におけるアーカイブバックアップログＡＬｘに基づく復元処理の概要を説明する。
【００６８】
［アーカイブバックアップログＡＬｘに基づく復元処理の流れ］
図６は、アーカイブバックアップログＡＬｘに基づく復元処理ｆ３ｘ（図４）の流れを模式的に説明する図である。図６において、図３で示したものと同一のものは、同一の記号で示す。
【００６９】
図４、図５で説明したように、本実施の形態における制御プログラムは、正常終了したトランザクション１、３〜５の実行履歴を選択し、アーカイブバックアップログＡＬｘとして記憶する。したがって、図６に示すアーカイブバックアップログＡＬｘは、異常終了したトランザクション２の実行履歴を除外した実行履歴を有する。
【００７０】
データベース１０５Ｂに障害が発生した場合、制御プログラムは、復元処理ｆ３ｘとして、ＤＢバックアップファイル１０５Ａｂ（図４）と、アーカイブバックアップログＡＬｘとに基づいて、データベース１０５Ｂを復元する。
【００７１】
本実施の形態におけるアーカイブバックアップファイルＡＬｘが、正常終了した操作の実行履歴のみを有する。したがって、制御プログラムは、復元処理の際に、読み出した実行履歴が、正常終了した操作の実行履歴であるか否かを逐一判定することなく、トランザクション１、３〜５の更新を対応するページに適用する。これにより、制御プログラムは、復元処理を高速に実行できる。
【００７２】
なお、図４〜図６は、第１記憶部がデータベース１０５を記憶し、操作実行ログが図１に示したアーカイブログＡＬを示す場合を例示した。ただし、この例に限定されるものではない。例えば、第１記憶部には、ファイルシステムや別の形態のデータ群が記憶されていてもよい。この場合、操作ログは、ファイルシステムや別の形態のデータ群等の操作に応じて生成される実行ログを示す。
【００７３】
次に、図７にしたがって、本実施の形態における情報処理装置のハードウェア構成図を、図８にしたがって、本実施の形態における情報処理装置のソフトウェアブロック図を説明する。
【００７４】
［情報処理装置のハードウェア構成図］
図７は、本実施の形態における情報処理装置１００のハードウェア構成図である。情報処理装置１００は、例えば、ＣＰＵ（Central Processing Unit：ＣＰＵ）１０１、メインメモリ１１０や補助記憶装置１１１等を備えるメモリ１０２、通信インタフェース部１０３、ディスクインタフェース部１０４、データベース１０５を有する。各部は、バス１０６を介して相互に接続する。
【００７５】
ＣＰＵ１０１は、バス１０６を介してメモリ１０２等と接続するとともに、情報処理装置１００全体の制御を行う。通信インタフェース部１０３は、他の装置（図示せず）と接続し、データの送受信を行う。ＲＡＭ（Random Access Memory：ＲＡＭ）等を示すメインメモリ１１０は、ＣＰＵ１０１が処理を行うデータ等を記憶する。
【００７６】
補助記憶装置１１１は、ＣＰＵ１０１が実行するオペレーションシステムのプログラムを格納する領域（図示せず）や、ＤＢ管理プログラム格納領域１１０を有する。また、補助記憶装置１１１は、さらに、アーカイブログ格納領域ＡＬ、アーカイブバックアップログ格納領域ＡＬｘ、ＤＢバックアップファイル格納領域１０５Ａｂを有する。補助記憶装置１１１は、ＨＤＤ（Hard disk drive：ＨＤＤ）、不揮発性半導体メモリ等を示す。
【００７７】
ＤＢ管理プログラム格納領域１２０のＤＢ管理プログラム（以下、ＤＢ管理プログラム１２０と称する、制御プログラム）は、ＣＰＵ１０１の実行によって、データベース管理システム（DataBase Management System：ＤＢＭＳ）の処理を実現する。ＤＢＭＳの処理は、例えば、データベース１０５に対するアクセスの制御や、データベース１０５の管理処理等を示す。
【００７８】
アーカイブログ格納領域ＡＬのアーカイブログ（以下、アーカイブログＡＬと称する）は、データベース１０５に対する操作の実行履歴を示す情報である。アーカイブログＡＬの詳細は、図１３にしたがって後述する。
【００７９】
アーカイブバックアップログ格納領域ＡＬｘのアーカイブバックアップログ（以下、アーカイブバックアップログＡＬｘと称する）は、アーカイブログＡＬをバックアップして生成した情報である。アーカイブバックアップログＡＬｘの詳細は、図１４にしたがって後述する。
【００８０】
ＤＢバックアップファイル格納領域１０５ＡｂのＤＢバックアップファイル（以下、ＤＢバックアップファイル１０５Ａｂと称する）は、データベース１０５Ａをバックアップして生成した情報である。
【００８１】
［情報処理装置のソフトウェアブロック図］
図８は、図７に示した、情報処理装置１００のソフトウェアブロックの構成図である。図８に示すように、ＤＢ管理プログラム１２０（図７、制御プログラム）は、例えば、アクセスモジュール１２１、バックアップモジュール１２２、リカバリモジュール１２３を有する。
【００８２】
アクセスモジュール１２１は、ＳＱＬコマンドを実行することによって、データベース１０５に対するアクセス処理を行う。また、アクセスモジュール１２１は、データベース１０５に対する操作に応じて、アーカイブログＡＬを生成する。
【００８３】
バックアップモジュール１２２は、アーカイブログＡＬをバックアップする旨の指示に応じて、処理が正常に終了した操作の実行履歴を選択し、アーカイブバックアップログＡＬｘとして記憶する。バックアップモジュール１２２の処理の詳細は、図９のフローチャート図にしたがって後述する。また、図示していないが、バックアップモジュール１２２は、データベース１０５をバックアップして、ＤＢバックアップファイル１０５Ａｂを生成する。
【００８４】
リカバリモジュール１２３は、障害発生時等に、データベース１０５の復元指示に応じて、ＤＢバックアップファイル１０５Ａｂと、アーカイブバックアップログＡＬｘとに基づいて、データベース１０５の内容を復元する。リカバリモジュール１２３の処理の詳細は、図１７のフローチャート図にしたがって後述する。
【００８５】
次に、図９〜図１４にしたがって、図８に示した、ＤＢ管理プログラム１２０のバックアップモジュール１２２の処理を説明する。また、図１５〜図１９にしたがって、図８に示した、ＤＢ管理プログラム１２０のリカバリモジュール１２３の処理を説明する。
【００８６】
［バックアップモジュール１２２の処理の流れ］
図９は、図８に示したＤＢ管理プログラム１２０のバックアップモジュール１２２の処理の流れを説明するフローチャート図である。
【００８７】
バックアップモジュール１２２は、アーカイブログＡＬのバックアップ要求に応じて、図９のフローチャート図に示すバックアップ処理を実行する。例えば、バックアップモジュール１２２は、情報処理装置１００のユーザインタフェース等に、コマンド「ｒｄｂｌｏｇ -Ｂ ｛アーカイブバックアップログ名｝ −ＣＯＭＰ」が入力されたことに応じて、バックアップ処理を実行する。
【００８８】
Ｓ１１：バックアップモジュール１２２は、バックアップ要求に、アーカイブログＡＬの圧縮指示「−ＣＯＭＰ」が指定されたか否かを判定する。圧縮指示が指定されなかった場合（Ｓ１１のＮｏ）、バックアップモジュール１２２は、バックアップ処理を終了する。
【００８９】
Ｓ１２：一方、圧縮指示が指定された場合（Ｓ１１のＹｅｓ）、バックアップモジュール１２２は、アーカイブログＡＬを読み出す。
【００９０】
Ｓ１３：バックアップモジュール１２２は、アーカイブログＡＬから、全ての実行履歴を読み出したか否かを判定する。全ての実行履歴を読み出した場合（Ｓ１３のＹｅｓ）、バックアップモジュール１２２は処理を終了する。
【００９１】
Ｓ１４：読み出していない実行履歴がある場合（Ｓ１３のＮｏ）、バックアップモジュール１２２は、アーカイブログＡＬから読み出した実行履歴が、ＣＯＭＭＩＴ命令、または、ＲＯＬＬＢＡＣＫ命令を含むか否かを判定する。
【００９２】
Ｓ１５：実行履歴がＣＯＭＭＩＴ命令、または、ＲＯＬＬＢＡＣＫ命令を含んでいない場合（Ｓ１４のＮｏ）、読み出した実行履歴がＳＱＬコマンドの実行履歴である場合を示す。即ち、バックアップモジュール１２２は、読み出した、ＳＱＬコマンドの実行履歴が、正常終了したＳＱＬコマンドの実行履歴であるか否かを判定する。
【００９３】
Ｓ１６：正常終了したＳＱＬコマンドの実行履歴である場合（Ｓ１５のＹｅｓ）、バックアップモジュール１２２は、当該実行履歴をトランザクション単位にメモリ１１０（図７）に記憶する。一方、異常終了したＳＱＬコマンドの実行履歴である場合（Ｓ１５のＮｏ）、バックアップモジュール１２２は、当該実行履歴をメモリ１１０に記憶しない。即ち、バックアップモジュール１２２は、異常終了したＳＱＬコマンドの実行履歴をアーカイブバックアップログＡＬｘに記憶しない。
【００９４】
Ｓ１７：バックアップモジュール１２２は、メモリ１１０に保持した実行履歴を、トランザクション毎に分類する。そして、バックアップモジュール１２２は、工程Ｓ１２の処理に遷移し、アーカイブログＡＬから新たな実行履歴を読み出す。
【００９５】
Ｓ１８：実行履歴がＲＯＬＬＢＡＣＫ命令を含む場合（Ｓ１４のＹｅｓ）、当該実行履歴は、異常終了したトランザクションの実行履歴であることを示す。したがって、バックアップモジュール１２２は、ＲＯＬＬＢＡＣＫ命令を含むトランザクションの実行履歴を、メモリ１１０から破棄する。
【００９６】
Ｓ１９：一方、実行履歴がＣＯＭＭＩＴ命令を含む場合（Ｓ１４のＹｅｓ）、当該実行履歴は、正常終了したトランザクションの実行履歴であることを示す。したがって、バックアップモジュール１２２は、メモリ１１０に記憶した、ＣＯＭＭＩＴ命令を含むトランザクションの実行履歴を、アーカイブバックアップログＡＬｘとして記憶する。
【００９７】
また、このとき、バックアップモジュール１２２は、各ＳＱＬコマンドの更新に関する情報を付加して、アーカイブバックアップログＡＬｘに記憶する。具体的に、バックアップモジュール１２２は、ＳＱＬコマンドが対象とするデータベース１０５のページ情報、及び、更新対象のレコード量を取得し、アーカイブバックアップログＡＬｘに記憶する。
【００９８】
このように、本実施の形態において、操作は、第１記憶部に記憶されたデータベースに対する操作を有し、正常に終了した操作は、データベースに反映された操作を有する。即ち、バックアップモジュール１２２は、第２記憶部に記憶された操作実行ログ（アーカイブログＡＬ）のうち、データベース１０５に反映された操作の操作実行ログ（実行履歴）を選択して、アーカイブバックアップログＡＬｘに記憶する。これにより、実際にデータベース１０５に反映された操作の実行履歴のみを有する、アーカイブバックアップログＡＬｘを生成できる。
【００９９】
また、本実施の形態において、データベース１０５に反映された操作は、データベース１０５に対する一連の操作群（トランザクション）であって、操作群の更新を確定させる確定命令（ＣＯＭＭＩＴ命令）が実行された操作を示す。
【０１００】
これにより、バックアップモジュール１２２は、ＣＯＭＭＩＴ命令によって更新が確定されたトランザクションのＳＱＬコマンドの実行履歴を有する、アーカイブバックアップログＡＬｘを生成できる。即ち、バックアップモジュール１２２は、ＲＯＬＬＢＡＣＫ命令により更新が取り消されたトランザクションのＳＱＬコマンドの実行履歴を除外した、アーカイブバックアップログＡＬｘを生成できる。
【０１０１】
また、本実施の形態におけるデータベース１０５に反映された操作は、さらに、確定命令（ＣＯＭＭＩＴ命令）が実行された操作群（トランザクション）に含まれる操作（ＳＱＬコマンド）のうち、処理が正常終了した操作（ＳＱＬコマンド）を示す。これにより、バックアップモジュール１２２は、正常終了したトランザクションの実行履歴のうち、実際のデータベース１０５に反映されたＳＱＬコマンドの実行履歴を有する、アーカイブバックアップログＡＬｘを生成できる。
【０１０２】
［実施例］
次に、図１０〜図１４にしたがって、図９のフローチャート図で説明した、バックアップモジュール１２２の処理の実施例を説明する。
【０１０３】
（時点ｔＡにおけるデータベース１０５Ａ）
図１０は、時点ｔＡにおけるデータベース１０５Ａの一例を示す図である。図１０に示すデータベース１０５Ａは、実施例の説明のために簡易な例を示す。実際のデータベース１０５Ａは、例えば、図１０に示すデータベース１０５Ａに対し、多量のレコードを有する。
【０１０４】
図１０に示すデータベースは、例えば、項目「支店」、項目「発注」、項目「在庫」の情報を有する。図１０に示すデータベースは、２つのレコードの情報を有する。１番目のレコードは、支店「東京」、発注「ＡＡＡ」、在庫「０」の情報を有する。また、２番目のレコードは、支店「大阪」、発注「ＡＡＡ」、在庫「１」の情報を有する。
【０１０５】
（時点ｔＡから時点ｔＢまでに実行されたトランザクション）
図１１は、時点ｔＡから時点ｔＢ（図４）までの間に、データベース１０５Ａ（図１０）に対して実行されたトランザクションの一例を示す図である。図１１の例において、アクセスモジュール１２１は、トランザクション１、トランザクション２、トランザクション３の順に、順次、トランザクションを実行する。
【０１０６】
トランザクション１は、４つのＳＱＬコマンドを含み、正常終了する。また、トランザクション１が有する４つのＳＱＬコマンドのうち、２つのＳＱＬコマンドは異常終了する。
【０１０７】
トランザクション１の１番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘BBB’WHERE 支店＝‘名古屋’」は、支店「名古屋」のレコードの項目「発注」を値「ＢＢＢ」に更新するコマンドを示す。図１０に示すデータベース１０５Ａは、支店「名古屋」のレコードを有していないため、１番目のＳＱＬコマンドは異常終了する。また、２番目のＳＱＬコマンド「INSERT INTOテーブル(支店, 発注, 在庫) VALUES(‘名古屋’,'BBB',2)」は、支店「名古屋」、発注「ＢＢＢ」、在庫「２」のレコードを追加するコマンドを示し、正常終了する。
【０１０８】
また、３番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘BBB’WHERE 支店＝‘神奈川’」は、支店「神奈川」のレコードの項目「発注」を値「ＢＢＢ」に更新するコマンドを示す。図１０に示すデータベース１０５Ａは、支店「神奈川」のレコードを有していないため、３番目のＳＱＬコマンドは異常終了する。４番目のＳＱＬコマンド「INSERT INTOテーブル(支店, 発注, 在庫) VALUES(‘神奈川’,'BBB',3)」は、支店「神奈川」、発注「ＢＢＢ」、在庫「３」のレコードを追加するコマンドを示し、正常終了する。
【０１０９】
トランザクション２は、２つのＳＱＬコマンドを含み、ＲＯＬＬＢＡＣＫ命令にしたがって異常終了する。トランザクション２の１番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘CCC’WHERE 支店＝‘東京’」は、支店「東京」のレコードの項目「発注」を値「ＣＣＣ」に更新するコマンドを示す。また、２番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘CCC’WHERE 支店＝‘大阪’」は、支店「大阪」のレコードの項目「発注」を値「ＣＣＣ」に更新するコマンドを示す。
【０１１０】
トランザクション３は、２つのＳＱＬコマンドを含み、正常終了する。トランザクション３の１番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘BBB’WHERE 支店＝‘東京’」は、支店「東京」のレコードの項目「発注」を値「ＢＢＢ」に更新するコマンドを示し、正常終了する。２番目のＳＱＬコマンド「UPDATE テーブル SET 発注＝‘BBB’WHERE 支店＝‘大阪’」は、支店「大阪」のレコードの項目「発注」を値「ＢＢＢ」に更新するコマンドを示し、正常終了する。
【０１１１】
（時点ｔＢにおけるデータベース１０５Ｂ）
図１２は、図１１に示したトランザクションが実行されたことによって更新された、時点ｔＢのデータベース１０５Ｂを示す図である。図１１で説明したとおり、トランザクション１のＳＱＬコマンドの、２、４番目のＳＱＬコマンドは正常終了する。したがって、図１２に示すデータベース１０５Ｂは、支店「名古屋」及び指定「神奈川」のレコードを有する。また、トランザクション３の２つのＳＱＬコマンドは正常終了する。したがって、図１２に示すデータベース１０５Ｂは、項目「発注」に値「ＢＢＢ」を有する、支店「東京」及び支店「大阪」のレコードを有する。
【０１１２】
（アーカイブログＡＬ）
図１３は、図１１に示したトランザクションを実行した際に生成されたアーカイブログＡＬの一例を示す図である。図１３に示すアーカイブログＡＬは、例えば、項目「トランザクションＩＤ」、項目「実行結果」、項目「更新情報」の情報を有する。
【０１１３】
図１３に示す項番「１」〜項番「５」の実行履歴は、トランザクション１の実行履歴を示す。項番「１」の実行履歴は、１つ目のＳＱＬコマンドの実行履歴を示し、トランザクションＩＤ「１」、更新情報「UPDATE：名古屋 BBB」と、実行結果「異常終了」の情報を有する。なお、図１３は、更新情報として簡易な情報を例示するが、更新情報は更新対象のデータや更新対象のレコードの位置情報等を含む。
【０１１４】
同様にして、項番「２」の実行履歴は、２つ目のＳＱＬコマンドの実行履歴を示し、トランザクションＩＤ「１」、更新情報「INSERT：名古屋 BBB」と、実行結果「正常終了」の情報を有する。同様にして、項番「３」「４」の実行履歴は、トランザクション１の３、４番目のＳＱＬコマンドの実行履歴を示す。また、項番「５」の実行履歴は、トランザクション１の更新を確定するＣＯＭＭＩＴ命令の実行履歴を示す。
【０１１５】
また、図１３に示す項番「６」〜項番「８」の実行履歴は、トランザクション２の実行履歴を示す。項番「６」「７」の実行履歴は、トランザクション２に含まれる各ＳＱＬコマンドの実行履歴を示す。また、項番「８」の実行履歴は、トランザクション２の更新を取り消すＲＯＬＬＢＡＣＫ命令の実行履歴を示す。同様にして、図１３に示す項番「９」〜項番「１１」の実行履歴は、トランザクション３の実行履歴を示す。
【０１１６】
（アーカイブバックアップログＡＬｘ）
図１４は、図１３に示したアーカイブログＡＬのバックアップ処理にしたがって生成した、アーカイブバックアップログＡＬｘの一例を示す図である。
【０１１７】
図１４の矢印Ｙ１に示すように、本実施の形態におけるアーカイブログバックアップＡＬｘは、例えば、圧縮版のアーカイブバックアップログＡＬｘであることを示す情報「ＫＩＮＤ＝１」を有してもよい。例えば、情報「ＫＩＮＤ＝０」を有する場合、非圧縮版のアーカイブバックアップログＡＬｂ（図１）であることを示す。
【０１１８】
図１４に示すアーカイブログバックアップＡＬｘは、例えば、項目「トランザクションＩＤ」、項目「実行結果」、項目「更新情報」、項目「ページ情報」、項目「レコード量」の情報を有する。項目「ページ情報」は更新対象のページを示し、項目「レコード量」は更新対象のレコード量を示す。
【０１１９】
（トランザクション１）
バックアップモジュール１２２は、アーカイブログＡＬから、項番「１」の実行履歴を読み出す（図９のＳ１２）。項番「１」の実行履歴は、ＣＯＭＭＩＴ命令及びＲＯＬＬＢＡＣＫ命令を含まない（Ｓ１４のＮｏ）。また、項番「１」の実行履歴は、項目「実行結果」によると、異常終了したＳＱＬコマンドの実行履歴を示すため（Ｓ１５のＮｏ）、バックアップモジュール１２２は、項番「１」の実行履歴をメモリ１１０に記憶しない。
【０１２０】
次に、バックアップモジュール１２２は、アーカイブログＡＬから、項番「２」の実行履歴を読み出す（Ｓ１２）。項番「２」の実行履歴は正常終了したＳＱＬコマンドの実行履歴を示すため（Ｓ１４のＮｏ、Ｓ１５のＹｅｓ）、バックアップモジュール１２２は、項番「２」の実行履歴をメモリ１１０に記憶する（Ｓ１６）。同様にして、バックアップモジュール１２２は、項番「３」「４」の実行履歴を読み出し（Ｓ１２）、項番「４」の実行履歴をメモリ１１０に記憶する（Ｓ１６）。
【０１２１】
次に、バックアップモジュール１２２は、ＣＯＭＭＩＴ命令を含む、項番「５」の実行履歴を読み出す（Ｓ１４のＹｅｓ）。そして、バックアップモジュール１２２は、メモリ１１０に記憶した実行履歴のうち、項番「５」の実行履歴と項目「トランザクションＩＤ」の値が同一の項番「２」「４」の実行履歴を、アーカイブバックアップログＡＬｘに格納する（Ｓ１９）。
【０１２２】
したがって、図１４に示す、アーカイブバックアップログＡＬｘは、トランザクション１が含むＳＱＬコマンドの実行履歴のうち、正常終了したＳＱＬコマンドの、項番「２」「４」の実行履歴を有する。また、アーカイブバックアップログＡＬｘは、各ＳＱＬコマンドの実行履歴として、ページ情報及びレコード量の情報を有する。図１４の例において、項番「２」の実行履歴は、ページ情報「１−１」及びレコード量「１００」の情報を、項番「４」の実行履歴は、ページ情報「１−２」及びレコード量「１００」の情報を有する。
【０１２３】
（トランザクション２）
バックアップモジュール１２２は、項番「６」「７」の実行履歴を読み出し（図９のＳ１２）、メモリ１１０に記憶する（Ｓ１６）。ＲＯＬＬＢＡＣＫ命令を含む、項番「８」の実行履歴を読み出すと（Ｓ１４のＹｅｓ）、バックアップモジュール１２２は、メモリ１１０に記憶した、項目「トランザクションＩＤ」の値が同一の、項番「６」「７」の実行履歴の情報を削除する（Ｓ１８）。したがって、図１４に示すアーカイブバックアップログＡＬｘは、トランザクション２の実行履歴を有しない。
【０１２４】
（トランザクション３）
同様にして、バックアップモジュール１２２は、項番「９」「１０」の実行履歴をメモリ１１０に記憶し（Ｓ１６）、項番「１１」の実行履歴を読み出すと（Ｓ１４のＹｅｓ）、項番「９」「１０」の実行履歴を、アーカイブバックアップログＡＬｘに格納する（Ｓ１９）。したがって、図１４に示すアーカイブバックアップログＡＬｘは、トランザクション３が含む各ＳＱＬコマンドの、項番「９」「１０」の実行履歴を有する。
【０１２５】
［復元処理の並列化の概要］
図１５は、本実施の形態例における復元処理の概要を模式的に説明する図である。図１５において、図６で示したものと同一のものは、同一の記号で示す。
【０１２６】
図８に示したＤＢ管理プログラム１２０のリカバリモジュール１２３は、第３記憶部に記憶された操作実行ログ（アーカイブバックアップログＡＬｘ）に基づいて、データベース１０５を復元する。リカバリモジュール１２３は、アーカイブバックアップログＡＬｘが有する実行履歴が、データベース１０５Ａに反映された操作の実行履歴であるか否かを逐一判定する必要がないため、復元処理を高速に行うことができる。
【０１２７】
また、リカバリモジュール１２３は、第３記憶部に記憶された操作実行ログ（アーカイブバックアップログＡＬｘ）を、操作の対象の記憶領域が重複しない複数のグループに分類し、複数のグループの操作実行ログに基づく復元を並列して実行してもよい。第１記憶部がデータベース１０５を記憶する場合、記憶領域は、例えば、排他制御の単位であって、データベース１０５のページ（後述する、ページ「１−１」、「１−２」等）を示す。
【０１２８】
同一の記憶領域を操作の対象とする復元処理は、レコードの不整合の発生を回避するために、操作の実行順に行われる必要がある。一方、異なる記憶領域を操作の対象とする復元処理は、並列して実行することが可能である。したがって、アーカイブバックアップログＡＬｘが有する実行履歴を、対象の記憶領域が重複しない複数のグループに分類し、グループの復元処理を並列して実行することによって、復元処理に要する時間を短縮できる。
【０１２９】
図１５は、複数のページの復元処理を並列して実行する場合を例示する。リカバリモジュール１２３は、例えば、各グループｇ１〜ｇ３の復元処理を実行するスレッドをそれぞれ生成し、生成した複数のスレッドにしたがって復元処理を並列に実行する。
【０１３０】
図１５の例によると、リカバリモジュール１２３の第１のスレッドは、グループｇ１の実行履歴に基づく復元処理を行う。即ち、第１のスレッドは、グループｇ１に属する、ページ１を更新対象とするトランザクション１、３〜５の更新を適用する。なお、第１のスレッドは、トランザクション１、３〜５の実行順に、復元処理を行う。
【０１３１】
同様にして、第２のスレッドは、グループｇ２に属する、ページ２を更新対象とするトランザクション３、５の更新を、トランザクション３、５の順に適用する。同様にして、第３のスレッドは、グループｇ３に属する、ページ３を更新対象とするトランザクション４の更新を適用する。
【０１３２】
本実施の形態例におけるアーカイブバックアップログＡＬｘは、正常終了した操作の実行履歴のみを有する。したがって、リカバリモジュール１２３は、各実行履歴を読み出して、正常終了した操作の実行履歴であるか否かを判定する必要がないため、各実行履歴を効率的にグループｇ１〜ｇ３に分類できる。したがって、リカバリモジュール１２３は、効率的に復元処理を実行できる。
【０１３３】
［レコード量に基づく分類］
また、本実施の形態におけるリカバリモジュール１２３は、第３記憶部に記憶された操作実行ログ（アーカイブバックアップログＡＬｘ）を、復元する対象のデータの量に応じて、複数のグループにさらに分類してもよい。
【０１３４】
即ち、リカバリモジュール１２３は、グループ間の復元処理に要する時間が平滑化されるように、さらに、復元対象のレコード量に基づいてグループに分類する。各グループの復元処理に要する処理時間が平滑化されることにより、リカバリモジュール１２３は、データベース１０５の復元処理に要する処理時間を短縮できる。
【０１３５】
前述したとおり、データベース１０５に障害が生じた場合の復元処理に要する処理時間は、より短い時間であることが望ましい。したがって、レコード量に基づいて並列処理を効率化して処理時間を短縮することにより、業務処理への障害の影響を最小限に抑えることが可能になる。
【０１３６】
図１６は、復元対象のレコード量に基づいて分類したグループの一例を示す図である。図１５の例によると、グループｇ１のレコード量が多い。また、図１５、１６の例において、記憶領域の単位は、例えば、ページ「１−１」「１−２」を示し、ページ「１−１」「１−２」の更新の復元処理は並列に実行可能である。
【０１３７】
したがって、リカバリモジュール１２３は、図１６に示すように、グループｇ１（図１５）に属する実行履歴を、２つのグループｇ１ｘ、ｇ２ｘに分類する。これにより、各グループｇ１ｘ〜ｇ４ｘが行う復元処理の量を平滑化し、復元処理にかかる時間をグループ間で均等化可能になる。
【０１３８】
［復元処理の流れ］
図１７は、図８に示したＤＢ管理プログラム１２０のリカバリモジュール１２３の処理の流れを説明するフローチャート図である。ＤＢ管理プログラム１２０のリカバリモジュール１２３は、データベースの復元要求に応じて、図１７に示す復元処理を実行する。
【０１３９】
Ｓ２１：リカバリモジュール１２３は、復元要求に応じて、アーカイブバックアップログ（図１４）ＡＬｘを読み出す。
【０１４０】
Ｓ２２：リカバリモジュール１２３は、復元要求に、圧縮指定が行われているか否かを判定する。例えば、コマンドに文字列「−ＣＯＭＰ」が指定された場合、圧縮指定が行われたことを示す。圧縮指定が行われていない場合（Ｓ２２のＮｏ）、リカバリモジュール１２３は、復元処理を終了する。
【０１４１】
Ｓ２３：一方、圧縮指定が行われた場合（Ｓ２２のＹｅｓ）、リカバリモジュール１２３は、アーカイブバックアップログＡＬｘの実行履歴を全て読み出したか否かを判定する。
【０１４２】
Ｓ２４：読み出していない実行履歴がある場合（Ｓ２３のＮｏ）、リカバリモジュール１２３は、実行履歴に基づいて、更新する対象のレコード量を判定する。リカバリモジュール１２３は、更新する対象のレコード量に基づいて、復元処理を依頼するグループを判定する。
【０１４３】
Ｓ２５：リカバリモジュール１２３は、読み出した実行履歴に基づく復元処理を、既存の実行中のグループに依頼するか否かを判定する。
【０１４４】
Ｓ２６：既存のグループに依頼する場合（Ｓ２５のＹｅｓ）、リカバリモジュール１２３は、実行中のグループの復元処理を行う既存スレッドに、読み出した実行履歴に基づく復元処理を依頼する。
【０１４５】
Ｓ２７：新規のグループに依頼する場合（Ｓ２５のＮｏ）、リカバリモジュール１２３は、新規のグループの復元処理を行うスレッドを生成する。そして、リカバリモジュール１２３は、新たに生成したスレッドに、読み出した実行履歴に基づく復元処理を依頼する。
【０１４６】
このように、リカバリモジュール１２３は、読み出した実行履歴が、正常終了した操作の実行履歴であるか否かを判定しない。したがって、リカバリモジュール１２３は、復元処理を高速に行うことができる。また、リカバリモジュール１２３は、バックアップの際に付加したページ情報やレコード量に基づいて、実行履歴を効率的にグループに分類できる。これにより、リカバリモジュール１２３は、効率的に、高速に復元処理を実行できる。
【０１４７】
次に、図１８、図１９にしたがって、図１７のフローチャート図の工程Ｓ２４の処理を説明する。
【０１４８】
［実施例］
図１８は、各ページの更新対象のレコードの総量を説明する図である。図１８の表Ｈ１は、図１４に示すアーカイブバックアップログＡＬｘの情報に基づく。表Ｈ１は、更新対象のページの情報（ページ）、更新対象のレコードの総量（総レコード量）、実行履歴が属するトランザクションＩＤの情報を有する。なお、表Ｈ１は、トランザクション１、３の情報を例示するが、他のトランザクション４、５についても、同様に情報を有する。
【０１４９】
リカバリモジュール１２３は、工程Ｓ２４にしたがって、各実行履歴の更新対象のレコード量に基づいて、復元処理を依頼するグループを判定する。例えば、トランザクション１、及び、トランザクション３の復元処理を行う場合を例示する。
【０１５０】
表Ｈ１によると、ページ「１−１」「１−２」は、トランザクション１、３の更新対象であって、更新対象の総レコード量は「２５０」レコードである。また、ページ「２−１」は、トランザクション３の更新対象であって、更新対象の総レコード量は「１５０」レコードである。このように、ページ「１−１」「１−２」の更新対象の総レコード量は、ページ「２−１」の更新対象の総レコード量に対して多い。したがって、リカバリモジュール１２３は、ページ「１−１」とページ「１−２」に対する更新の復元処理を別のグループに依頼する旨、判定する。
【０１５１】
図１９は、レコード量に基づく実行履歴のグループ分類を説明する図である。図１９に示す表Ｈ２は、グループ、ページ情報、総レコード量、トランザクションＩＤの情報を有する。
【０１５２】
表Ｈ２によると、ページ「１−１」「１−２」に対する更新の復元処理は、複数のグループ（グループ１、２）に分割されている。リカバリモジュール１２３は、グループ（グループ１〜４）毎にスレッドを生成し、生成したスレッドに各グループに分類された実行履歴に基づく復元を依頼する。
【０１５３】
このように、リカバリモジュール１２３は、グループ間の総レコード量が平滑化されるように、復元対象の実行履歴をグループに分類する。これにより、リカバリモジュール１２３は、各グループの復元処理に要する処理時間を平滑化し、データベース１０５の復元処理に要する処理時間を短縮できる。
【０１５４】
なお、図１８、図１９の例は、各グループが、同一のページ（記憶領域）の更新の復元処理を行う場合を例示するが、異なるページの更新の復元処理をさらに行ってもよい。例えば、グループ１は、さらに、ページ４の更新の復元処理を行ってもよい。
【０１５５】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１５６】
（付記１）
コンピュータに、
第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、
ことを実行させることを特徴とする制御プログラム。
【０１５７】
（付記２）
付記１において、
前記操作は、前記第１記憶部に記憶されたデータベースに対する操作を有し、
前記正常に終了した操作は、前記データベースに反映された操作を有する、
制御プログラム。
【０１５８】
（付記３）
付記２において、
前記データベースに反映された操作は、前記データベースに対する一連の操作群であって、前記操作群の更新を確定させる確定命令が実行された操作を有する、
制御プログラム。
【０１５９】
（付記４）
付記３において、
前記データベースに反映された操作は、前記確定命令が実行された操作群に含まれる操作のうち、処理が正常終了した操作を有する、
制御プログラム。
【０１６０】
（付記５）
付記１乃至４のいずれかにおいて、
前記第３記憶部に記憶された操作実行ログに基づいて、前記第１記憶部をさらに復元する、
制御プログラム。
【０１６１】
（付記６）
付記５において、
前記復元は、前記第３記憶部に記憶された操作実行ログを、前記操作の対象の記憶領域が重複しない複数のグループに分類し、複数のグループの操作実行ログに基づく復元を並列して実行する、
制御プログラム。
【０１６２】
（付記７）
付記６において、
前記復元は、前記第３記憶部に記憶された操作実行ログを、復元する対象のデータの量に応じて前記複数のグループにさらに分類する、
制御プログラム。
【０１６３】
（付記８）
第１記憶部に対して実行された操作に応じて第２記憶部に記憶された操作実行ログを、第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する、
制御方法。
【０１６４】
（付記９）
付記８において、
前記操作は、前記第１記憶部に記憶されたデータベースに対する操作を有し、
前記正常に終了した操作は、前記データベースに反映された操作を有する、
制御方法。
【０１６５】
（付記１０）
付記９において、
前記データベースに反映された操作は、前記データベースに対する一連の操作群であって、前記操作群の更新を確定させる確定命令が実行された操作を有する、
制御方法。
【０１６６】
（付記１１）
付記１０において、
前記データベースに反映された操作は、前記確定命令が実行された操作群に含まれる操作のうち、処理が正常終了した操作を有する、
制御方法。
【０１６７】
（付記１２）
付記８乃至１１のいずれかにおいて、
前記第３記憶部に記憶された操作実行ログに基づいて、前記第１記憶部をさらに復元する、
制御方法。
【０１６８】
（付記１３）
付記１２において、
前記復元は、前記第３記憶部に記憶された操作実行ログを、前記操作の対象の記憶領域が重複しない複数のグループに分類し、複数のグループの操作実行ログに基づく復元を並列して実行する、
制御方法。
【０１６９】
（付記１４）
第１記憶部と、
前記第１記憶部に対して実行された操作に応じて操作実行ログを記憶する第２記憶部と、
前記第２記憶部に記憶された前記操作実行ログを第３記憶部にバックアップする際に、前記第２記憶部に記憶された操作実行ログのうち、正常に終了した操作の操作実行ログを選択して第３記憶部に記憶する処理部と、
を有する情報処理装置。
【０１７０】
（付記１５）
付記１４において、
前記操作は、前記第１記憶部に記憶されたデータベースに対する操作を有し、
前記正常に終了した操作は、前記データベースに反映された操作を有する、
情報処理装置。
【０１７１】
（付記１６）
付記１５において、
前記データベースに反映された操作は、前記データベースに対する一連の操作群であって、前記操作群の更新を確定させる確定命令が実行された操作を有する、
情報処理装置。
【０１７２】
（付記１７）
付記１６において、
前記データベースに反映された操作は、前記確定命令が実行された操作群に含まれる操作のうち、処理が正常終了した操作を有する、
情報処理装置。
【０１７３】
（付記１８）
付記１４乃至１７のいずれかにおいて、
前記処理部は、前記第３記憶部に記憶された操作実行ログに基づいて、前記第１記憶部を復元する、
情報処理装置。
【０１７４】
（付記１９）
付記１８において、
前記処理部は、前記第３記憶部に記憶された操作実行ログを、前記操作の対象の記憶領域が重複しない複数のグループに分類し、複数のグループの操作実行ログに基づく復元を並列して実行する、
情報処理装置。
【符号の説明】
【０１７５】
１０５（１０５Ａ〜１０５Ｃ）：データベース、ＡＬ：アーカイブログ、ＡＬｘ：アーカイブバックアップログ、１０５Ａｂ：ＤＢバックアップファイル、１００：情報処理装置、１２０：ＤＢ管理プログラム
【図１】
2017068342.tif 000003
【図２】
2017068342.tif 000004
【図３】
2017068342.tif 000005
【図４】
2017068342.tif 000006
【図５】
2017068342.tif 000007
【図６】
2017068342.tif 000008
【図７】
2017068342.tif 000009
【図８】
2017068342.tif 000010
【図９】
2017068342.tif 000011
【図１０】
2017068342.tif 000012
【図１１】
2017068342.tif 000013
【図１２】
2017068342.tif 000014
【図１３】
2017068342.tif 000015
【図１４】
2017068342.tif 000016
【図１５】
2017068342.tif 000017
【図１６】
2017068342.tif 000018
【図１７】
2017068342.tif 000019
【図１８】
2017068342.tif 000020
【図１９】
2017068342.tif 000021