(57)【要約】【課題】  データベース管理システムからテーブルのリモートコピーによる二重化を管理することが可能なリモートコピーシステムを提供することを課題とする。【解決手段】  ホスト計算機２Ａは、コピー元の第１ストレージ装置３Ａと、コピー先となる第２ストレージ装置３Ｃとのペア形成を定義し、形成されたペアの定義対象となるデータベースのテーブルおよびログから第１ストレージ装置３Ａ上でテーブルおよびログに対応するデータ領域へのアドレス変換をするための変換テーブル２７を作成し、変換テーブル２７を用いて、定義したペア形成を第１ストレージ装置３Ａに指示し、第１ストレージ装置３Ａは、ホスト計算機２Ａからの指示に応じ、定義されたコピー元およびコピー先のペア関係をペア状態管理テーブル４８に作成する。そして、コピー対象のデータをコピー先である第２ストレージ装置３Ｃにリモートコピーする。【選択図】      図２
2006293850.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機と前記ホスト計算機との間でデータ更新を行う第１ストレージ装置とによって構成されるリモートコピーシステムであって、
前記ホスト計算機は、
予め与えられた指示に従って、コピー元の第１ストレージ装置と、コピー先となる第２ストレージ装置とのペア形成を定義し、
前記形成されたペアの定義対象となるデータベースのテーブル、ログから前記第１ストレージ装置上で前記テーブルおよびログに対応するデータ領域へのアドレス変換をするための変換テーブルを作成し、
前記作成した変換テーブルを用いて、前記定義したペア形成を前記第１ストレージ装置に指示し、
前記第１ストレージ装置は、
前記ホスト計算機からの指示に応じ、前記定義されたコピー元およびコピー先のペア関係をペア状態管理テーブルに作成すること
を特徴とするリモートコピーシステム。
【請求項２】
前記第１ストレージ装置は、
前記テーブルおよびログのペア形成状態に応じて前記ペア状態管理テーブルを更新し、
コピー対象のデータをコピー先である第２ストレージ装置にリモートコピーすることを特徴とする請求項１に記載のリモートコピーシステム。
【請求項３】
前記第１ストレージ装置は、
前記テーブルのデータ量が増加した場合、前記テーブルに対応するデータ領域を新たに確保し、
前記新たに確保したデータ領域のペア形成を前記ペア状態管理テーブルに定義し、
コピー対象のデータをコピー先である第２ストレージ装置にリモートコピーすることを特徴とする請求項２に記載のリモートコピーシステム。
【請求項４】
前記第２ストレージ装置は、
前記ホスト計算機に指定されたテーブルのリモートコピーを中断して、当該テーブルに関するログの情報を用いて未完結のトランザクションで変更されたデータを復旧する場合、当該復旧したデータに関して、当該第２ストレージ装置と前記第１ストレージ装置とのデータの差分を表す差分ビットマップにビットを立てることを特徴とする請求項３に記載のリモートコピーシステム。
【請求項５】
前記第１ストレージ装置は、
前記形成した差分ビットマップを用いてリモートコピー中断後のデータ更新を前記第２ストレージ装置に反映し、
指定されたテーブルのリモートコピーを再開することを特徴とする請求項４に記載のリモートコピーシステム。
【請求項６】
前記第１ストレージ装置は、
前記ログおよびテーブルに対応するデータ領域のペア状態を確認し、
前記ログおよびテーブルに対応するデータ領域が二重化されている場合、その旨を返し、他方、
前記ログおよびテーブルに対応するデータ領域が二重化の対象とされていない場合、その旨を返すとともに、
前記ログおよびテーブルに対応するデータ領域の二重化が中断されている場合、その旨を返し、さらに、
前記ログおよびテーブルに対応するデータ領域が二重化するためのコピーを行う準備段階にある場合、その旨を返すことを特徴とする請求項５に記載のリモートコピーシステム。
【請求項７】
前記第１ストレージ装置は、
更新対象となる前記テーブルが保護対象でない場合、または、前記テーブルが保護対象でかつ二重化が中断されていない場合、更新を反映させる命令に従って、前記データ領域の更新を反映させることを特徴とする請求項６に記載のリモートコピーシステム。
【請求項８】
前記第１ストレージ装置は、
更新対象であった前記テーブルが保護対象でかつ二重化が中断されている場合、更新に対する復旧を行う命令に従って、ログの情報による前記データ領域の復旧処理を行うことを特徴とする請求項６に記載のリモートコピーシステム。
【請求項９】
前記第１ストレージ装置は、
一部の領域において障害が起きた場合、
前記テーブルが使っているほかのすべての領域に対する二重化を中断し、
コピー先である前記第２ストレージ装置において、ログの情報による前記データ領域の復旧処理を行うことを特徴とする請求項６に記載のリモートコピーシステム。
【請求項１０】
前記第１ストレージ装置は、
更新対象となる前記テーブルが保護対象でない場合、または、前記テーブルが保護対象でかつ二重化が中断されていない場合、更新を反映させる命令に従って、前記データ領域の更新を反映させ、他方、
更新対象であった前記テーブルが保護対象でかつ二重化が中断されている場合、更新に対する復旧を行う命令に従って、ログの情報による前記データ領域の復旧処理を行うとともに、
一部の領域において障害が起きた場合、
前記テーブルが使用している他のすべての領域に対する二重化を中断し、
前記第２ストレージ装置は、
ログの情報による前記データ領域の復旧処理を行うこと
を特徴とする請求項６に記載のリモートコピーシステム。
【請求項１１】
ホスト計算機と前記ホスト計算機との間でデータ更新を行う第１ストレージ装置とによって構成されるリモートコピーシステムにおいて実行されるリモートコピー方法であって、
前記ホスト計算機は、
予め与えられた指示に従って、コピー元の第１ストレージ装置と、コピー先となる第２ストレージ装置とのペア形成を定義する手順と、
前記形成されたペアの定義対象となるデータベースのテーブル、ログから前記第１ストレージ装置上で前記テーブルおよびログに対応するデータ領域へのアドレス変換をするための変換テーブルを作成する手順と、
前記作成した変換テーブルを用いて、前記定義したペア形成を前記第１ストレージ装置に指示する手順とを実行し、
前記第１ストレージ装置は、
前記ホスト計算機からの指示に応じ、前記定義されたコピー元およびコピー先のペア関係をペア状態管理テーブルに作成する手順を実行すること
を特徴とするリモートコピー方法。
【請求項１２】
前記第１ストレージ装置は、
前記テーブルおよびログのペア形成状態に応じて前記ペア状態管理テーブルを更新する手順と、
コピー対象のデータをコピー先である第２ストレージ装置にリモートコピーする手順とをさらに実行することを特徴とする請求項１１に記載のリモートコピー方法。
【請求項１３】
前記第１ストレージ装置は、
前記テーブルのデータ量が増加した場合、前記テーブルに対応するデータ領域を新たに確保する手順と、
前記新たに確保したデータ領域のペア形成を前記ペア状態管理テーブルに定義する手順と、
コピー対象のデータをコピー先である第２ストレージ装置にリモートコピーする手順とをさらに実行することを特徴とする請求項１２に記載のリモートコピー方法。
【請求項１４】
前記第２ストレージ装置は、
前記ホスト計算機に指定されたテーブルのリモートコピーを中断する手順と、
当該テーブルに関するログの情報を用いて未完結のトランザクションで変更されたデータを復旧する場合、当該復旧したデータに関して、当該第２ストレージ装置と前記第１ストレージ装置とのデータの差分を表す差分ビットマップにビットを立てる手順とをさらに実行することを特徴とする請求項１３に記載のリモートコピー方法。
【請求項１５】
前記第１ストレージ装置は、
前記形成した差分ビットマップを用いてリモートコピー中断後のデータ更新を前記第２ストレージ装置に反映する手順と、
指定されたテーブルのリモートコピーを再開する手順とをさらに実行することを特徴とする請求項１４に記載のリモートコピー方法。
【請求項１６】
前記第１ストレージ装置は、
前記ログおよびテーブルに対応するデータ領域のペア状態を確認する手順と、
前記ログおよびテーブルに対応するデータ領域が二重化されている場合、その旨を返す手順と、
前記ログおよびテーブルに対応するデータ領域が二重化の対象とされていない場合、その旨を返す手順と、
前記ログおよびテーブルに対応するデータ領域の二重化が中断されている場合、その旨を返す手順と、
前記ログおよびテーブルに対応するデータ領域が二重化するためのコピーを行う準備段階にある場合、その旨を返す手順とをさらに実行することを特徴とする請求項１５に記載のリモートコピー方法。
【請求項１７】
前記第１ストレージ装置は、
更新対象となる前記テーブルが保護対象でない場合、または、前記テーブルが保護対象でかつ二重化が中断されていない場合、更新を反映させる命令に従って、前記データ領域の更新を反映させる手順をさらに実行することを特徴とする請求項１６に記載のリモートコピー方法。
【請求項１８】
前記第１ストレージ装置は、
更新対象であった前記テーブルが保護対象でかつ二重化が中断されている場合、更新に対する復旧を行う命令に従って、ログの情報による前記データ領域の復旧処理を行う手順をさらに実行することを特徴とする請求項１６に記載のリモートコピー方法。
【請求項１９】
前記第１ストレージ装置は、
一部の領域において障害が起きた場合、前記テーブルが使っているほかのすべての領域に対する二重化を中断する手順と、
コピー先である前記第２ストレージ装置において、ログの情報による前記データ領域の復旧処理を行う手順とをさらに実行することを特徴とする請求項１６に記載のリモートコピー方法。
【請求項２０】
前記第１ストレージ装置は、
更新対象となる前記テーブルが保護対象でない場合、または、前記テーブルが保護対象でかつ二重化が中断されていない場合、更新を反映させる命令に従って、前記データ領域の更新を反映させる手順と、
更新対象であった前記テーブルが保護対象でかつ二重化が中断されている場合、更新に対する復旧を行う命令に従って、ログの情報による前記データ領域の復旧処理を行う手順と、
一部の領域において障害が起きた場合、前記テーブルが使用している他のすべての領域に対する二重化を中断する手順とをさらに実行し、
前記第２ストレージ装置は、
ログの情報による前記データ領域の復旧処理を行う手順をさらに実行することを特徴とする請求項１６に記載のリモートコピー方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置間またはホスト間におけるにリモートコピーシステムおよびリモートコピー方法に関する。
【背景技術】
【０００２】
従来、ストレージ装置間で、物理ボリュームまたは論理ボリュームの内容をリモートコピーして二重化を行い、ストレージ装置に障害が発生したときには、リモートコピーを保持しているストレージ装置への切り替えを行う技術は実用化されている。特許文献１には、このようなリモートコピーによるボリュームのリモートコピーをボリューム全体ではなく、必要な部分をリモートコピーして二重化を行う技術が開示されている。
【特許文献１】米国特許  ＵＳ  ６，６８１，３０３Ｂ１号  公開公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、この技術では、ボリュームの一部を指定して二重化することはできても、特定のアプリケーションが扱うデータの領域に対応したきめ細かな二重化を行うことはできなかった。具体的には、データベースの内容を二重化するには、データベースの命令ではなく、オペレーティングシステムのレベルの計算機管理の命令を用いなければならなかった。また、データベース管理システムにおけるテーブル単位で二重化を行うことは容易ではなかった。
【０００４】
そこで、本発明では、データベースが扱うデータの領域すなわちテーブルに対応してデータの二重化を行う。
【課題を解決するための手段】
【０００５】
前記課題を解決するため、本発明では、ホスト計算機と前記ホスト計算機との間でデータ更新を行う第１ストレージ装置とによって構成されるリモートコピーシステムを構成し、前記ホスト計算機は、予め与えられた指示にしたがって、コピー元の第１ストレージ装置と、コピー先となる第２ストレージ装置とのペア形成を定義し、前記形成されたペアの定義対象となるデータベースのテーブルおよびログから前記第１ストレージ装置上で前記テーブルおよびログに対応するストレージデータ領域へのアドレス変換をするための変換テーブルを作成し、前記作成した変換テーブルを用いて、前記定義したペア形成を前記第１ストレージ装置に指示し、前記第１ストレージ装置は、前記ホスト計算機からの指示に応じ、前記定義されたコピー元およびコピー先のペア関係をペア状態管理テーブルに作成する。
【発明の効果】
【０００６】
本発明によれば、データベース管理システムへの命令によって、データベースのテーブル単位で二重化を制御することが可能になる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の各実施形態について図面を参照して説明する。第１の実施形態は、主としてストレージ装置のレベルでリモートコピーを行う場合である。第２の実施形態は、第１の実施形態の変形例、すなわち、主としてデータベースが稼動しているホストのレベルでリモートコピーを行う場合である。これらを順次説明する。
【０００８】
<<第１の実施形態>>
［リモートコピーシステムの構成］
図１は、第１の実施形態におけるリモートコピーシステムを含む全体的な構成を示す図である。図１に示すように、リモートコピーシステム１は、ホスト２Ａ、コピー元のストレージ装置３Ａ，３Ｂおよびコピー先のストレージ装置３Ｃ，３Ｄから構成されている。なお、図１では、ストレージ装置３Ｃ，３Ｄ側にホスト２Ｂを備えているが、ホスト２Ｂは必須の構成要素ではない。また、コピー元のストレージ装置およびコピー先のストレージ装置は、それぞれ１台示されているが、複数のストレージ装置を備えてもよい。例えば、ホスト２Ａに３台のストレージ装置が接続されていてもよい。
【０００９】
ストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄは、それぞれ1つ以上の論理ディスクを含むことができる。図１の例では、ストレージ装置３Ａは論理ディスク４Ａを含み、ストレージ装置３Ｂは論理ディスク４Ｂを含み、ストレージ装置３Ｃは論理ディスク４Ｃを含み、ストレージ装置３Ｄは論理ディスク４Ｄを含む。
【００１０】
本実施形態において、リモートコピーの対象となるデータベースのテーブルは、ホスト２Ａのデータベースサーバ（以下、「ＤＢサーバ」という）２１においてページ単位で管理や読み書きされる。他方、ストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄではページで管理するのではなく、ブロックと呼ばれる単位で管理したり、ホスト２Ａ，２Ｂから読み書きされたりする。そのため、通常、データベースのテーブルで用いられるページサイズはブロックサイズの整数倍となっている。
【００１１】
そして、ストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄにおいてブロックの単位で対象を管理して、次のようなリモートコピーを行う。すなわち、ストレージ装置３Ａからストレージ装置３Ｃへ、および、ストレージ装置３Ｂからストレージ装置３Ｄへとリモートコピーを行う。この管理方法については、後記する。
【００１２】
なお、ＤＢサーバ２１Ａで管理されているログやテーブルは必ずしも１台のディスク装置または論理ディスクに格納されるとは限らない。例えば、図１に示すＴＢＬ１の例のように、１つのテーブルを複数のディスク装置または論理ディスク内のブロックより構成されるストレージデータ領域（データ領域）に分割して格納してもよい。その場合には、分割されたストレージデータ領域をそれぞれリモートコピーすることとなる。
【００１３】
図２は、リモートコピーシステムの構成を示す図である。ここでは、図１に示したホスト２Ａとストレージ装置３Ａについて説明するが、ホスト２Ｂとストレージ装置３Ｂ，３Ｃ，３Ｄも同様である。
【００１４】
（ホストの構成）
ホスト２Ａは、ＣＰＵ（Central Processing Unit）２２、メモリ３４、ネットワークインタフェース（以下、「ネットワークＩ／Ｆ」という）３０を含んで構成される計算機である。ＣＰＵ２２は、所定の演算機能を備えたものであればよく、種類は特に限定されない。メモリ３４は、通常の半導体メモリなど、ＣＰＵ２２の演算に利用できるものであれば、種類は特に限定されない。ネットワークＩ／Ｆ３０は、特に種類は限定されず、ストレージ装置３Ａとの間で通信できるものであればよい。例えば、ギガビットイーサネット（登録商標）やファイバチャネルやＦＩＣＯＮ（登録商標）（なお、ＦＩＣＯＮ（登録商標）はＦｉｂｒｅ  Ｃｏｎｎｅｃｔｉｏｎの略である）の通信ができるものであってもよい。
【００１５】
メモリ３４の中には、ＤＢサーバ２１が含まれ、このＤＢサーバ２１には、ＳＱＬ実行部２３、ログマネージャ部２４およびバッファマネージャ部２５が含まれている。これら各部２３〜２５はプログラムである。また、ＤＢサーバ２１には、バッファ管理用キュー２６、ＤＢアドレス−ブロックアドレス変換テーブル２７、ログバッファ２８およびテーブルバッファ２９が含まれている。
【００１６】
ＳＱＬ実行部２３は、ＳＱＬ文を解析し、テーブルバッファ２９上のレコードを読み書きする。そして、書き込みを行った場合は、そのログをログバッファ２８に書き込む。また、ＳＱＬ実行部２３は、必要に応じて、ログマネージャ部２４とバッファマネージャ部２５にブロックとの読み書きを指示することもある。なお、ＳＱＬ実行部２３が処理できるのは、標準的なＳＱＬ文とリモートコピーのペア操作指示に関する５つの命令である。ペア操作指示に関する５つの命令とは、ペア形成を行うための「Paircreate」と、ペア状態の表示を行う「Pairdisplay」と、ペア間のリモートコピーを中断する「Pairsuspend」と、中断したリモートコピーを再開してペア間を再同期する「Pairresync」と、ペアを削除する「Pairdelete」である。
【００１７】
前記の「Pairdelete」が実行されると、まず、最初に「Pairsuspend」を実行して、リモートコピーを中断する。そして、ＳＱＬ実行部２３は、ホスト２Ａからストレージ装置３Ａへ対象となるブロックに対する削除を指示する。そして、ストレージ装置３Ａは、ペア状態管理テーブル４８から当該ブロックの情報を削除する。なお、「Paircreate」、「Pairdisplay」、「Pairsuspend」および「Pairresync」の処理については、後記する。
【００１８】
ログマネージャ部２４は、ログバッファ２８とストレージ装置３Ａにあるブロックの間の読み書き（ページイン／ページアウト）の処理を実施する。そして、バッファマネージャ部２５は、テーブルバッファ２９とストレージ装置３Ａ内のストレージデータ領域の間の読み書き（ページイン／ページアウト）の処理を実施する。
【００１９】
バッファ管理用キュー２６には、フリーキュー３１、ダーティキュー３２およびクリーンキュー３３が含まれる。フリーキュー３１、ダーティキュー３２およびクリーンキュー３３は、テーブルバッファ２９のページ管理をする。そして、フリーキュー３１、ダーティキュー３２およびクリーンキュー３３は、それぞれのキューにおいて、双方向のリンクで結び付けられた形でページ情報を管理していて、すべてのページはこの３つのいずれかで管理される。なお、双方向リンクのキューは、次のキューエントリ（ページ情報を管理するノード）を示すポインタと、ひとつ前のキューエントリを示すポインタと、当該キューエントリが管理しているテーブルバッファ２９上のページのアドレスとを含むキューエントリを用いて構成されている。なお、キューを管理するデータ構造は双方向リンク以外の片方向リンクやこれ以外の方式であってもよい。
【００２０】
フリーキュー３１は、ブロックから内容が読み込まれていない未使用のページを管理しており、フリーキュー３１で管理されているページは、そのまま利用することができ、新たに利用される場合にもブロックへ書き込むことを必要としない。
【００２１】
ダーティキュー３２は、ブロックから内容が読み込まれた後に、その内容が変更されたページへのポインタを含むキューであり、ダーティキュー３２で管理されているページは、ブロックへの書き込みを必要とするページである。
【００２２】
クリーンキュー３３は、ブロックから読み込まれた後に、内容は全く変更されていないページへのポインタを含むキューであり、クリーンキュー３３で管理されているページはブロックへ書き込むことを必要としない。
【００２３】
フリーキュー３１、ダーティキュー３２およびクリーンキュー３３に管理されているページは、相互に遷移する。
まず、ストレージ装置３Ａからテーブルバッファ２９にページが読み込まれた場合には、その読み込まれたページは、フリーキュー３１の管理下からクリーンキュー３３の管理下に遷移する。そして、テーブルバッファ２９上のデータが破棄された場合には、そのデータを記録していたページは、クリーンキュー３３の管理下からフリーキュー３１の管理下へ遷移する。
【００２４】
ストレージ装置３Ａからテーブルバッファ２９にページが読み込まれ、さらに、その内容が更新された場合には、そのページは、フリーキュー３１の管理下からダーティキュー３２の管理下に遷移する。そして、テーブルバッファ２９のデータをストレージ装置３Ａに書き込み、その後、そのデータを破棄した場合には、そのデータを記録していたページは、ダーティキュー３２の管理下からフリーキュー３１の管理下に遷移する。
【００２５】
テーブルバッファ２９上のデータをストレージ装置３Ａに書き込んだ場合は、そのデータを記録していたページは、ダーティキュー３２の管理下からクリーンキュー３３の管理下へ遷移する。そして、テーブルバッファ２９上のデータを更新した場合には、そのデータを記録していたページは、クリーンキュー３３の管理下からダーティキュー３２の管理下へ遷移する。
【００２６】
ＤＢアドレス−ブロックアドレス変換テーブル２７は、ホスト２Ａにおいてデータベースのテーブルが保持されているアドレスからストレージ装置３Ａにおいてその内容を保存するストレージデータ領域内のブロックアドレスに変換するテーブルである。ＤＢアドレス−ブロックアドレス変換テーブル２７の構成例については、後記する。
【００２７】
ログバッファ２８は、ＤＢサーバ２１に対するデータベースの命令をＳＱＬ実行部２３が実行したＳＱＬ文のログをメモリ３４上に保存する領域である。例えば、ＵＰＤＡＴＥ文とＣＯＭＭＩＴ文が最後に実行されたとすると、図２におけるログＬ１にはＵＰＤＡＴＥ文のログが、ログＬ２にはＣＯＭＭＩＴ文のログが、それぞれ記録されることになる。
【００２８】
なお、ログバッファ２８は双方向リンクのキュー以外のリングバッファ形式で管理されてもよい。リングバッファ形式の場合は、ログバッファ２８の先頭アドレスから順に使われる。そして、ログバッファ２８の終了アドレスまで到達した場合は、再び先頭アドレスからページを再利用する。
【００２９】
テーブルバッファ２９は、データベースのテーブルを記録しておくバッファである。テーブルバッファ２９では、図２に示すようにテーブルをページ単位で記録していて、バッファ管理用キュー２６を用いて管理されている。ここでいうテーブルは、図２に示したテーブルバッファ２９のページＰ１，Ｐ２に格納されている。
【００３０】
なお、テーブルは、ＤＢサーバ２１のバッファのレベルではページ単位でキューによって管理され、バッファへの読み込みや書き込みもページ単位で行われる。そのため、ストレージに対するＲｅａｄ／Ｗｒｉｔｅ要求はメインフレームを除くと１ブロック単位で指定可能であるが（メインフレームの場合は１バイト単位でのＲｅａｄ／Ｗｒｉｔｅ要求が可能）、前記に示したＤＢサーバ２１の特徴からページサイズのＲｅａｄ／Ｗｒｉｔｅ命令がブロックアドレスに変換されて発行される。ただし、ログバッファについてはこれに限らず、ブロック単位で読み書きされてもよい。
【００３１】
（ストレージ装置の構成）
ストレージ装置３Ａは、ディスクコントローラ４２と３台のディスク装置４４Ａ，４４Ｂ，４４Ｃから構成される。そして、ディスク装置４４Ａ，４４Ｂ，４４Ｃは、ディスクコントローラ４２の管理下で、例えば、１つの論理ディスク４５として扱われてもよい。なお、ディスク装置の台数と論理ディスクの個数は変更してもよい。
【００３２】
ディスクコントローラ４２は、少なくとも、ＣＰＵ４１とメモリ４３を備えた計算機である。ＣＰＵ４１は、所定の演算が可能なものであれば種類は限定されず、メモリ４３も半導体メモリなど、ＣＰＵ４１の演算に利用できるものであれば、種類は特に限定されない。
【００３３】
そして、メモリ４３中には、リモートコピープログラム部４６と、ディスクアレイ制御プログラム部４７と、ペア状態管理テーブル４８とを含んで構成される。
【００３４】
リモートコピープログラム部４６は、ディスク装置４４Ａ，４４Ｂ，４４Ｃまたは論理ディスク４５に記録されているデータベースのテーブルに対応するストレージデータ領域をリモートコピーするためのプログラムである。
【００３５】
ディスクアレイ制御プログラム部４７は、ディスクコントローラ４２に接続されている複数のディスク装置４４Ａ，４４Ｂ，４４Ｃをディスクアレイとして制御して、例えば、論理ディスク４５として示すような形で再構成する機能をもつ。ディスクアレイの制御方法は、例えば、ＲＡＩＤ（Redundant Array of Independent Disks）のようなものであってもよいが、これに限定されない。
【００３６】
ペア状態管理テーブル４８は、リモートコピーを行うペアの状態を管理するテーブルであり、ディスクコントローラ４２またはストレージ装置３Ａがリモートコピーを行うときに必要な情報を管理している。
【００３７】
（ページとログの構成例）
次に、図２に示したページＰ１，Ｐ２と図２に示したログＬ１，Ｌ２について、図３を参照して説明する。
図３（ａ）に示すように、ページＰ１には、テーブルＩＤ（符号はＰ１Ａ）、ＤＢアドレスＰ１Ｂ、ＬａｓｔＬＳＮ（Last Log Sequence Number）Ｐ１Ｃ、ＬａｓｔＴＳＮ（Last Transaction Sequence Number）Ｐ１Ｄ、ダーティフラグＰ１ＥおよびレコードＰ１Ｆを含んでいる。なお、ＬａｓｔＬＳＮおよびＬａｓｔＴＳＮは、それぞれログとトランザクションのＩＤを含む。なお、ページＰ２も同様である。
【００３８】
テーブルＩＤ（Ｐ１Ａ）は、当該ページがどのテーブルに含まれているのかを示す情報であり、ＤＢアドレスＰ１Ｂは、当該ページに存在するデータがデータベース中のどのテーブルがどのアドレスのものかを判別するための情報である。ＤＢアドレスＰ１Ｂの使い方の例としては、バッファマネージャ部２５が当該ページを書き戻す場合に、このＤＢアドレスＰ１ＢからＤＢアドレス−ブロックアドレス変換テーブル２７で変換を行って得たストレージデータ領域に対する書き込み要求を行う例がある。
【００３９】
ＬａｓｔＬＳＮ（Ｐ１Ｃ）およびＬａｓｔＴＳＮ（Ｐ１Ｄ）は、それぞれログとトランザクションの識別情報であり、両者が含む情報はほぼ等価である。ここには、最後にそのページを用いたログまたはトランザクションの識別情報が保存されている。そして、ダーティフラグＰ１Ｅは、このページがダーティであるか否か、すなわち、メモリ３４に読み込まれた後に内容が変化したか否かを示すフラグである。このダーティフラグＰ１Ｅが立っている場合には、当該ページは、内容が変化しているので、このページをバッファから排除するときにはブロックにその内容を書き出す必要がある。
【００４０】
レコードＰ１Ｆは、データベースのレコードに該当するものであり、ページＰ１の例には、複数のレコードが含まれている。なお、ページＰ１に含まれるレコードの数は１つであってもよい。レコードＰ１Ｆは、図３（ａ）に示したように、レコードＩＤ（Ｐ１Ｇ）、属性１（Ｐ１Ｈ）の値、属性２（Ｐ１Ｊ）の値などを含む。この例では、属性は２つしかないが、より多くの属性を含むものであってもよい。なお、ここでの属性とは、データベースのテーブルにおける属性のことを指す。例えば、商品名と価格を含むテーブルであれば、属性は「商品名」と「価格」が該当する。また、属性１（Ｐ１Ｈ）の値、属性２（Ｐ１Ｊ）の値としては、具体的な商品名のデータと具体的な価格が含まれることになる。
【００４１】
次に、ログＬ１，Ｌ２の構成を説明する。図３（ｂ）に示すように、ログＬ１は、ＬａｓｔＬＳＮ（Ｌ１Ａ）、ＬａｓｔＴＳＮ（Ｌ１Ｂ）、テーブルＩＤ（Ｌ１Ｃ）、レコードＩＤ（Ｌ１Ｄ）、コミットフラグＬ１Ｅ、アボートフラグＬ１Ｆ、変更前データＬ１Ｇおよび変更後データＬ１Ｈを含む。なお、ログＬ２も同様である。
【００４２】
ＬａｓｔＬＳＮ（Ｌ１Ａ）およびＬａｓｔＴＳＮ（Ｌ１Ｂ）は、図３（ａ）に示したＬａｓｔＬＳＮ（Ｐ１Ｃ）およびＬａｓｔＴＳＮ（Ｐ１Ｄ）と同様である。テーブルＩＤ（Ｌ１Ｃ）は、ログで記録される命令の対象となるデータベースのテーブルの識別情報を含む。レコードＩＤ（Ｌ１Ｄ）は、ログで更新対象となったレコードの識別情報を含む。なお、図３（ｂ）には記載されていないが、ログＬ１には更新対象レコードが存在するＤＢアドレスを示す情報が存在してもよい。
【００４３】
コミットフラグＬ１Ｅは、このログで記録される命令がコミット（ＣＯＭＭＩＴ）であるか否かを示すフラグである。アボートフラグＬ１Ｆは、このログで記録される命令がアボート（ＡＢＯＲＴ）であるか否かを示すフラグである。
【００４４】
変更前データＬ１Ｇと変更後データＬ１Ｈは、それぞれ、当該ログの記録の対象となった命令によるレコードの変更前と変更後の内容を含むデータである。
【００４５】
図４は、ＤＢアドレス−ブロックアドレス変換テーブルの構成例を示す図である。図４に示すテーブルは、図２に示したＤＢアドレス−ブロックアドレス変換テーブル２７の一例である。具体的には、このテーブル２７には、ＤＢアドレス入力２７１に対して、ブロックアドレス出力２７２が変換結果として得られるという構造になっている。
【００４６】
ＤＢアドレス入力２７１は、データベースにおけるテーブルのテーブルＩＤとテーブルアドレスの情報から構成される。ブロックアドレス出力２７２は、ストレージ装置の装置ＩＤとディスク装置や論理ディスクのボリュームＩＤとその装置およびボリュームＩＤにおけるストレージデータ領域を示すブロックアドレスを含む。図４では、４つのエントリについての変換の情報を示している。
【００４７】
ＤＢアドレス−ブロックアドレス変換テーブル２７では、１つのデータベースのテーブルを複数のエントリに分けて記述することができる。図４では、ＤＢアドレス入力２７１ＡとＤＢアドレス入力２７１Ｂは、１つのデータベースのテーブルＴＢＬ１に対応するものである。この例では、ＤＢアドレス入力２７１ＡのテーブルＩＤを「ＴＢＬ１（Ａ）」、ＤＢアドレス入力２７１ＢのテーブルＩＤを「ＴＢＬ１（Ｂ）」とそれぞれ記述して区別しているが、本来は「ＴＢＬ１」で充分であるため、テーブルＩＤが同じでもテーブルアドレスの違いによって識別するようにしてもよい。
【００４８】
図４では、ＤＢアドレス入力２７１Ａは、対応するブロックアドレス出力２７２Ａにおいて、装置ＩＤ１およびボリュームＩＤ１に対応している。これに対して、ＤＢアドレス入力２７１Ｂは、対応するブロックアドレス出力２７２Ｂにおいて、装置ＩＤ２およびボリュームＩＤ１に対応している。このように、１つのテーブルが１つのディスク装置または論理ディスクに対応しているとは限らないことがわかる。
【００４９】
テーブルＴＢＬ２についてのＤＢアドレス入力２７１Ｃは、対応するブロックアドレス出力２７２Ｃに対応しているが、図４では、１つのテーブルが１つのディスク装置または論理ディスクに対応している。そして、テーブルの操作に関するログであるＬＯＧについてのＤＢアドレス入力２７１Ｄは、対応するブロックアドレス出力２７２Ｄに対応しているが、１つのディスク装置または論理ディスクに対応している。
【００５０】
図５は、ペア状態管理テーブルの例を示す図である。ここでは、図２に示したペア状態管理テーブル４８を例にして示している。ペア状態管理テーブル４８には、大きく分けてペアＩＤの情報、コピー元に関する情報、コピー先に関する情報およびペア状態に関する情報が含まれている。これらの情報があれば、ストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄにおいて、リモートコピーを制御することができる。なお、前記したコピー元に関する情報とコピー先に関する情報は、それぞれ装置ＩＤとボリュームＩＤとストレージデータ領域の開始アドレスと終了アドレスとからなっているので、リモートコピーのコピー元とコピー先のブロックをストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄが認識できるようになっている。
【００５１】
図５に示したエントリ４８１においては、ペアＩＤは＃１となっており、それぞれコピー元とコピー先の装置ＩＤとボリュームＩＤと開始アドレスと終了アドレスとが示されている。つまり、ペア状態はＤｕｐｌｅｘとなっている。なお、このＤｕｐｌｅｘの状態とは、コピー元からコピー先へのリモートコピーが正常に機能していて、テーブルが二重化され、かつ、コピー元で障害が起きてもコピー先に切り替え（フェイルオーバー）ができる状態にあることを意味する。前記のＤｕｐｌｅｘ以外のペア状態としては、例えば、Ｓｉｍｐｌｅｘ、Ｓｕｓｐｅｎｄ、Ｄｕｐｌｅｘ−Ｐｅｎｄｉｎｇがある。
【００５２】
Ｓｉｍｐｌｅｘ状態は、リモートコピーのペア形成が行われない通常の単体のストレージと同様の稼動状態を表す。これらのペア状態の判定については、後記する。
【００５３】
Ｓｕｓｐｅｎｄ状態は、一旦、リモートコピーペアが形成された後に、何らかの理由によって、リモートコピーが停止された状態を表している。なお、Ｓｕｓｐｅｎｄ状態のコピー元ストレージ装置３Ａ（図1参照）に対して書き込み（ライト）処理が行われた場合には、コピー元ストレージ装置３Ａは、Ｓｕｓｐｅｎｄ状態になった後に行われた書込みの位置を、Ｓｕｓｐｅｎｄ状態後にデータ内容が変化した可能性がある領域として差分ビットマップに記録する。すなわち、書込みが行われた内容を含むストレージデータ領域に対応する差分ビットマップのビットを立てる。
【００５４】
Ｄｕｐｌｅｘ−Ｐｅｎｄｉｎｇ状態は、リモートコピーペアを形成するためのコピーを開始して、同期処理を行っている状態であるが、ペアになるためのコピーは進行中であり、その時点では、まだ、コピー先に切り替え（フェイルオーバー）を行うことができない状態にある。Ｄｕｐｌｅｘ−Ｐｅｎｄｉｎｇ状態へは、Ｓｉｍｐｌｅｘ状態でストレージデータ領域に対するＰａｉｒｃｒｅａｔｅを受け取った場合やＳｕｓｐｅｎｄ状態でストレージデータ領域に対するＰａｉｒｒｅｓｙｎｃを受け取った場合にそれぞれの状態から遷移がおきる。そして、ペアになるためのコピーが終わった場合には、Ｄｕｐｌｅｘ−Ｐｅｎｄｉｎｇ状態からＤｕｐｌｅｘ状態に遷移する。
【００５５】
［リモートコピーシステムの動作］
次に、リモートコピーシステム１の動作について説明する。リモートコピーシステム１は、ホスト２Ａからペア形成命令などのペア操作命令を出し、ストレージ装置３Ａでは、受け取ったその命令に従って動作する。以下、各命令に対応して行われる処理について、命令ごとに説明する。
【００５６】
図６は、データベースにおけるＵＰＤＡＴＥ文の処理を示す図である。
まず、ＤＢサーバ２１がＵＰＤＡＴＥ文（ＳＱＬの更新命令）を受け取る（Ｓ１１）。そして、ＤＢサーバ２１は、テーブルバッファ２９（図２参照）に必要なレコードが存在するか否かを判断する（Ｓ１２）。判断の結果、必要なレコードが存在しない場合（Ｓ１２のＮｏ）、ＤＢサーバ２１は、ＳＱＬ実行部２３からの指示を受けて、バッファマネージャ部２５がレコードの読み込みを行い（Ｓ１３）、ステップＳ１４に進む。他方、Ｓ１２において、必要なレコードが既に存在する場合（Ｓ１２のＹｅｓ）、そのままステップＳ１４に進む。
【００５７】
ステップＳ１４では、ＳＱＬ実行部２３が、ＬａｓｔＬＳＮとＬａｓｔＴＳＮを更新し、ダーティフラグＰ１Ｅ（図３（ａ）参照）を立てる（Ｓ１４）。
【００５８】
次に、ＳＱＬ実行部２３が、各テーブルごとに付与されている更新フラグを更新対象となったテーブルについて立てる（Ｓ１５）。そして、レコード更新のログを作成し（Ｓ１６）、ＵＰＤＡＴＥ文に対するＯＫを返して（Ｓ１７）、処理を終了する。
【００５９】
図６では、ＳＱＬ文のうちＵＰＤＡＴＥ文を例として取り上げたが、ＩＮＳＥＲＴ文などのレコードの書き込みを伴う文を実行する場合もほぼ同様の処理が行われる。レコードへの書き込みを伴わない文を実行する場合は、ステップＳ１４が不要になるが、他はほぼ同様の処理が行われる。ＣＯＭＭＩＴ（コミット）文やＡＢＯＲＴ（アボート）文については、後記する。
【００６０】
図７は、データベースにおけるＣＯＭＭＩＴ文の処理を示す図である。この処理は、多くの場合に図６の処理などに引き続いて行われる処理である。
【００６１】
まず、ＤＢサーバ２１は、ＣＯＭＭＩＴ文（ＳＱＬの更新などを反映させる命令）を受け取る（Ｓ２１）。そして、ＤＢサーバ２１は、ＣＯＭＭＩＴ文についてのログを作成する（Ｓ２２）。その後、ログマネージャ部２４は、ＳＱＬ実行部２３の指示を受けてログバッファ２８のデータをログが保存されているストレージデータ領域に書き込み（Ｓ２３）、ＳＱＬ実行部２３は、ＣＯＭＭＩＴ文のログまでログストレージデータ領域に書き込まれてからバッファマネージャ部２５にＣＯＭＭＩＴ文に対するＯＫを返す（Ｓ２４）。
【００６２】
次に、バッファマネージャ部２５は、このようなトランザクション処理とは独立なタイミングでテーブルバッファ２９上の更新されたページをテーブルが保存されているストレージデータ領域へ書き出して（Ｓ２５）、処理を終了する。
【００６３】
図８は、ペア形成命令の処理を示す図である。このペア形成命令は、前記したＰａｉｒｃｒｅａｔｅ文と同じものである。
まず、ＤＢサーバ２１は、ストレージ装置３Ａの関係を定義する（Ｓ３１）。これは、リモートコピーを行うペアを定義するものであり、どのホストとどのストレージ装置がコピー元のデータベースを管理する計算機システムであり、どのホストとどのストレージ装置がコピー先のデータベースを管理する計算機システムであるかをホスト２Ａの上に定義するものである。例えば、図１に示した構成では、ホスト２Ａおよびストレージ装置３Ａ，３Ｂがコピー元、ホスト２Ｂおよびストレージ装置３Ｃ，３Ｄがコピー先のペアとして定義されていることになる。
【００６４】
そして、ＤＢサーバ２１がクライアントからテーブルのペア形成命令を受ける（Ｓ３２）。なお、ここでいうクライアントとは、ＤＢサーバ２１にＳＱＬ文の実行を依頼する計算機を指し、ホスト２Ａ，２Ｂ自身からのアクセスでもよいし、ネットワーク経由で別の計算機からのアクセスでもよい。
【００６５】
次に、ＳＱＬ実行部２３は、ログストレージデータ領域（ログが記憶されているストレージ装置上のストレージデータ領域）がリモートコピーされているか否かを判断する（Ｓ３３）。これは、ログストレージデータ領域に対するペア状態参照命令（Ｐａｉｒｄｉｓｐｌａｙ）を実行すれば調べることができる。
【００６６】
前記判断の結果、ログストレージデータ領域がリモートコピーされている場合には（Ｓ３３のＹｅｓ）、処理はそのままステップＳ３６に進む。他方、ログストレージデータ領域がリモートコピーされていない場合には（Ｓ３３のＮｏ）、ホスト２Ａは、ログストレージデータ領域のペア形成をストレージ装置３Ａに指示する（Ｓ３４）。そして、ストレージ装置３Ａは、ログストレージデータ領域のペア形成コピーを開始し、ペア状態管理テーブル４８にログストレージデータ領域を加え（Ｓ３５）、ステップＳ３６に進む。
【００６７】
ステップＳ３６では、ホスト２Ａは、テーブルが使用しているストレージ装置上のストレージデータ領域（以後、テーブルストレージデータ領域と呼ぶ）をＤＢアドレス−ブロックアドレス変換テーブル２７で求めて、ペア形成をストレージ装置３Ａへ指示する（Ｓ３６）。そして、ストレージ装置３Ａは、テーブルストレージデータ領域のペア形成コピーを開始し、ペア状態管理テーブル４８にテーブルストレージデータ領域を加えて（Ｓ３７）、処理を終了する。なお、このペア形成の処理が終わった時点では、ペア状態はＤｕｐｌｅｘ−ｐｅｎｄｉｎｇ状態になっている。また、ペア状態管理テーブルに必要なすべての情報は、ステップＳ３５からステップＳ３７で与えているが、このような情報をステップＳ３１の実行の時点で与えるようにしてもよい。
【００６８】
図９は、ペア再同期命令の処理を示す図である。ペア再同期命令は、前記したＰａｉｒｒｅｓｙｎｃ文と同じものである。
この処理では、まず、ＤＢサーバ２１が、クライアントからテーブルのペア再同期命令を受ける（Ｓ４１）。そして、ログストレージデータ領域がリモートコピーされているか否かを判断する（Ｓ４２）。その判断の結果、ログストレージデータ領域がリモートコピーされている場合は（Ｓ４２のＹｅｓ）、そのままステップＳ４５の処理に進む。ログストレージデータ領域がリモートコピーされていない場合は（Ｓ４２のＮｏ）、ログストレージデータ領域のペア再同期をストレージ装置３Ａに指示する（Ｓ４３）。そして、ログストレージデータ領域の差分ビットマップを用いた差分コピーを開始し（Ｓ４４）、ステップＳ４５に進む。なお、このときに用いられる差分ビットマップは、コピー元ストレージ装置３Ａが記録している差分ビットマップとコピー先ストレージ装置３Ｃが記録している差分ビットマップに対して論理和演算（ＯＲ）を行ってマージした後の差分ビットマップである。
【００６９】
ステップＳ４５では、テーブルが使用しているストレージデータ領域をＤＢアドレス−ブロックアドレス変換テーブル２７で求めて、ペア形成をストレージ装置３Ａへ指示する。そして、差分ビットマップを用いて、テーブルストレージデータ領域の差分コピーを開始して（Ｓ４６）、処理を終了する。
【００７０】
図１０は、テーブルのペア状態参照命令の処理を示す図である。ペア状態参照命令は、前記したＰａｉｒｄｉｓｐｌａｙ文と同じものである。この命令は、リモートコピーが正常に行われているか否かの監視や形成コピーや差分コピーの結果としてコピー先の状態がＤｕｐｌｅｘ状態になっているか否かを判断する場合などに用いる。
【００７１】
まず、ＤＢサーバ２１は、テーブルに対応するペア状態参照命令を受け取る（Ｓ５１）。そして、ストレージ装置３Ａは、ログストレージデータ領域とテーブルストレージデータ領域のペア状態を確認する（Ｓ５２）。なお、本ステップでログストレージデータ領域とテーブルストレージデータ領域を求めるにあたっては、ＤＢアドレス−ブロックアドレス変換テーブル２７の情報を用いることが考えられる。しかし、その他の方法を用いてもよい。一例としては、ストレージ装置に対するペア形成命令の応答として識別子をＤＢサーバ２１に返し、ＤＢサーバはこの識別子を記憶し、以後のストレージデータ領域に対するペア操作ではこの識別子を指定する方法がある。
【００７２】
そして、そのテーブルのすべてのストレージデータ領域がＤｕｐｌｅｘ状態（ペア状態）であるか否かを調べる（Ｓ５３）。その結果、すべてＤｕｐｌｅｘ状態であった場合には（Ｓ５３のＹｅｓ）、Ｄｕｐｌｅｘ状態である旨を返して（Ｓ５７）、処理を終了する。すべてのストレージデータ領域がＤｕｐｌｅｘ状態ではなかった場合には（Ｓ５３のＮｏ）、ステップＳ５４に進む。
【００７３】
ステップＳ５４では、そのテーブルのすべてのストレージデータ領域の中にＳｉｍｐｌｅｘ状態（非ペア状態）のストレージデータ領域があるか否かを判断する。その判断の結果、Ｓｉｍｐｌｅｘ状態のストレージデータ領域があった場合には（Ｓ５４のＹｅｓ）、Ｓｉｍｐｌｅｘ状態である旨返して（Ｓ５８）、処理を終了する。Ｓｉｍｐｌｅｘ状態のストレージデータ領域がなかった場合には（Ｓ５４のＮｏ）、ステップＳ５５に進む。
【００７４】
ステップＳ５５では、そのテーブルのすべてのストレージデータ領域の中にＳｕｓｐｅｎｄ状態（サスペンド状態）のストレージデータ領域があるか否かを調べる。その結果、Ｓｕｓｐｅｎｄ状態のストレージデータ領域があった場合には（Ｓ５５のＹｅｓ）、Ｓｕｓｐｅｎｄ状態である旨返して（Ｓ５９）、処理を終了する。Ｓｕｓｐｅｎｄ状態のストレージデータ領域がなかった場合には（Ｓ５５のＮｏ）、Ｄｕｐｌｅｘ−ｐｅｎｄｉｎｇ状態（ペア化待ち状態）である旨を返して（Ｓ５６）、処理を終了する。
【００７５】
図１１は、テーブル書き込み保護設定時のＣＯＭＭＩＴ文の処理を示す図である。この処理が行われるのは、通常、テーブルバッファ２９に対する書き込み命令が行われた後である。具体的には、図６を用いて説明したＵＰＤＡＴＥ文の処理が先行している場合などにこの処理が行われることを想定している。
【００７６】
この処理では、まず、ＤＢサーバ２１が、ＣＯＭＭＩＴ文を受け取る（Ｓ６１）。そして、書き込みや更新の対象テーブルが書き込み保護対象になっているか否かを調べる（Ｓ６２）。
【００７７】
書込み保護になっていない場合には（Ｓ６２のＮｏ）、そのままステップＳ６５に進む。書き込み保護になっている場合には（Ｓ６２のＹｅｓ）、ログとテーブルストレージデータ領域のペア状態をストレージ装置３Ａから得る（Ｓ６３）。そして、Ｓｕｓｐｅｎｄ状態のストレージデータ領域が存在するか否かを調べる（Ｓ６４）。その結果、Ｓｕｓｐｅｎｄ状態のストレージデータ領域があった場合には（Ｓ６４のＹｅｓ）、アボート処理を行って（Ｓ６９）、処理を終了する。なお、ステップＳ６９のアボート処理の詳細は後記する。Ｓｕｓｐｅｎｄ状態のストレージデータ領域がなかった場合には（Ｓ６４のＮｏ）、ステップＳ６５に進む。
【００７８】
ステップＳ６５では、ログバッファ２８にＣＯＭＭＩＴ文のログを作成する。そして、そのログバッファ２８を書き出す（Ｓ６６）。すなわち、ステップＳ６５で書き換えたログバッファ２８の内容をストレージ装置３Ａに記録する。
【００７９】
そして、ログストレージデータ領域のペア状態をストレージ装置３Ａから得る（Ｓ６７）。そして、ログストレージデータ領域がＳｕｓｐｅｎｄ状態であるか否かを調べる（Ｓ６８）。Ｓｕｓｐｅｎｄ状態だった場合は（Ｓ６８のＹｅｓ）、アボート処理を行い（Ｓ６９）、処理を終了する。Ｓｕｓｐｅｎｄ状態ではなかった場合には（Ｓ６８のＮｏ）、そのまま処理を終了する。
【００８０】
図１２は、リモートコピーの制御処理におけるアボート処理を示す図である。なお、この処理は、図１１に示したステップＳ６９の詳細な処理である。
【００８１】
この処理では、まず、ログバッファ２８にＣＯＭＭＩＴ文のログがあるか否かを調べる（Ｓ７１）。ＣＯＭＭＩＴ文のログがある場合には（Ｓ７１のＹｅｓ）、ＣＯＭＭＩＴ文のログをアボート文のログに書き換えて（Ｓ７２）、ステップＳ７３に進む。ＣＯＭＭＩＴ文のログがない場合には（Ｓ７１のＮｏ）、アボート文のログを作って（Ｓ７６）、ステップＳ７３に進む。
【００８２】
ステップＳ７３では、ログに記録されている内容（図３（ｂ）の更新前データＬ１Ｇ等）に従って、テーブルバッファ２９を元に戻す。そして、ログバッファ２８をストレージ装置３Ａに書き出す（Ｓ７４）。そして、ＣＯＭＭＩＴ文に対して（ＣＯＭＭＩＴが正常に処理できなかったことを意味する）ＮＧを返して（Ｓ７５）、処理を終了する。
【００８３】
図１３は、ペア中断命令の処理を示す図である。ペア中断命令は、前記したＰａｉｒｓｕｓｐｅｎｄ文と同じものである。
【００８４】
この処理では、まず、ＤＢサーバ２１がテーブルのペア中断命令を受ける（Ｓ８１）。そして、テーブルが使用しているストレージデータ領域をＤＢアドレス−ブロックアドレス変換テーブル２７で求めて、ペア中断をコピー元ストレージ装置３Ａに指示する（Ｓ８２）。そして、この指示を受けたコピー元ストレージ装置３Ａ（図１参照）は、指示されたストレージデータ領域について、コピーを中止する（Ｓ８３）。
【００８５】
次に、コピー先のストレージ装置３Ｃ（図１参照）は、ログストレージデータ領域からテーブルに関係するログを使って更新途中のレコードに対する復旧処理を行う（Ｓ８４）。ここでの復旧処理とは、図１２を用いて説明したデータベースにおけるアボート処理と類似した処理であり、ＣＯＭＭＩＴ文が実行されていないトランザクションについて、更新途中のデータが残らないようにレコードの内容を元に戻す処理である。すなわち、ログストレージデータ領域に保存されている更新前データ（図３（ｂ）のＬ１Ｇに該当）を用いて、命令文の実行を順次さかのぼっていき、最後に実行されたＣＯＭＭＩＴ文の実行直後の内容まで戻す（ロールバックする）処理のことを指している。
【００８６】
なお、ロールバック処理では、コピー先のストレージ装置３Ｃにおいてレコードの内容を元に戻すために更新前データを用いたライト処理が行われるので、処理の過程でコピー先のストレージ装置３Ｃのデータを変更することがある。そのため、コピー先のストレージ装置３Ｃも、コピー元ストレージ装置３Ａと同様に、Ｓｕｓｐｅｎｄ状態以後のライト位置を差分ビットマップに記録することとし、ロールバック処理によって実行されるライト処理におけるライト位置も差分ビットマップに記録することとする。
また、本実施形態においては、復旧処理はコピー先のホスト２Ｂ（図１参照）が実行することを想定しているが、コピー先のストレージ装置３Ｃ，３Ｄが、データベースを扱う機能を備えて、復旧処理を行う構成としてもよい。
【００８７】
そして、ＤＢサーバ２１は、他にリモートコピーしているテーブルは残っているか否かを調べて（Ｓ８５）、そのようなテーブルがない場合には（Ｓ８５のＮｏ）、ログストレージデータ領域に対してもペア中断処理を行い（Ｓ８６）、処理を終了する。そのようなテーブルが残っている場合には（Ｓ８５のＹｅｓ）、ＤＢサーバ２１は、Ｓｕｓｐｅｎｄの指示を与えずにストレージ装置３Ａ，３Ｃによるログストレージデータ領域のリモートコピーを続けたまま処理を終了する。
【００８８】
図１４は、リモートコピーが障害停止した時の処理を示す図である。
この処理では、最初にテーブルを構成するすべてのストレージデータ領域の中に障害停止しているものがあるか否かを調べる（Ｓ９１）。そのようなストレージデータ領域がない場合には（Ｓ９１のＮｏ）、そのまま何もせずに処理を終了する。障害停止しているストレージデータ領域があった場合には（Ｓ９１のＹｅｓ）、テーブルを構成するすべてのストレージデータ領域にペア中断命令を実行する（Ｓ９２）。そして、コピー先ストレージ装置３Ｃで、ログストレージデータ領域のログを用いて復旧処理を行い（Ｓ９３）、処理を終了する。なお、ここでの復旧処理も前記した復旧処理と同様の処理である。
【００８９】
このように第１の実施形態によれば、ホスト計算機２Ａは、予め与えられた指示にしたがって、コピー元の第１ストレージ装置３Ａと、コピー先となる第２ストレージ装置３Ｃとのペア形成を定義し、形成されたペアの定義対象となるデータベースのテーブル、ログから第１ストレージ装置３Ａ上でテーブルおよびログに対応するストレージデータ領域へのアドレス変換をするための変換テーブル２７を作成し、作成した変換テーブル２７を用いて、定義したペア形成を前記第１ストレージ装置３Ａに指示し、第１ストレージ装置３Ａは、ホスト計算機２Ａからの指示に応じ、定義されたコピー元およびコピー先のペア関係をペア状態管理テーブル４８に作成する。
【００９０】
これによれば、ホスト２Ａからの指示により、コピー元のストレージ装置３Ａとコピー先のストレージ装置３Ｃの間でペア形成が行われて、リモートコピーが可能になる。
【００９１】
また、第１の実施形態によれば、第１ストレージ装置３Ａは、テーブルおよびログのペア形成状態に応じてペア状態管理テーブル４８を更新し、コピー対象のデータをコピー先である第２ストレージ装置３Ｃにリモートコピーする。
【００９２】
これによれば、コピー元のストレージ装置３Ａとコピー先のストレージ装置３Ｃの間でリモートコピーが実行される。
【００９３】
また、第１の実施形態によれば、第１ストレージ装置３Ａは、テーブルのデータ量が増加した場合、テーブルに対応するストレージデータ領域を新たに確保し、新たに確保したストレージデータ領域のペア形成をペア状態管理テーブル４８に定義し、コピー対象のデータをコピー先である第２ストレージ装置３Ｃにリモートコピーする。
【００９４】
これによれば、リモートコピーシステム１は、データベースのテーブルのサイズ増大に自動的に対応できる。
【００９５】
また、第１の実施形態によれば、前記第２ストレージ装置３Ｃは、前記ホスト計算機２Ａに指定されたテーブルのリモートコピーを中断して、当該テーブルに関するログの情報を用いて未完結のトランザクションで変更されたデータを復旧する場合、当該復旧したデータに関して、当該第２ストレージ装置３Ｃと前記第１ストレージ装置３Ａとのデータの差分を表す差分ビットマップにビットを立てる。
【００９６】
これによれば、再開が可能な形でリモートコピーを中断することができる。
【００９７】
また、第１の実施形態によれば、第１ストレージ装置３Ａは、形成した差分ビットマップを用いてリモートコピー中断後のデータ更新を第２ストレージ装置３Ｃに反映し、指定されたテーブルのリモートコピーを再開する。
【００９８】
これによれば、中断中のコピー元での変更をコピー先に反映して、中断されたリモートコピーを再開することができる。
【００９９】
また、第１の実施形態によれば、第１ストレージ装置３Ａは、ログおよびテーブルに対応するストレージデータ領域のペア状態を確認し、ログおよびテーブルに対応するストレージデータ領域が二重化されている場合、その旨を返し、他方、ログおよびテーブルに対応するストレージデータ領域が二重化の対象とされていない場合、その旨を返すとともに、ログおよびテーブルに対応するストレージデータ領域の二重化が中断されている場合、その旨を返し、さらに、ログおよびテーブルに対応するストレージデータ領域が二重化するためのコピーを行う準備段階にある場合、その旨を返す。
【０１００】
これによれば、必要に応じてリモートコピーの状態を判断することができる。
【０１０１】
これによって、従来は容易ではなかった特定のアプリケーションで利用するデータを操作対象としたリモートコピー操作を実現することができる。具体的には、データベースのテーブルを単位としてリモートコピーを行うとこで、きめ細かな二重化の設定が可能になる。しかも、その設定を計算機のオペレーティングシステムのレベルで行うのではなく、データベース管理システムのレベルでＳＱＬ言語に付け加えられた命令文を用いて行うので、計算機の管理の経験がないデータベース管理者にも無理なく二重化の設定や管理を行うことができる。
【０１０２】
さらに、ストレージ装置がリモートコピーを実行するので、ホストに対してリモートコピーのための負荷をかけずにリモートコピーを行うことが可能となる。したがって、ホストにおける処理速度を低下させずに二重化を行うことができ、安定した信頼性の高いシステムを構築することができる。
【０１０３】
<<第２の実施形態>>
図１５は、第２の実施形態におけるリモートコピーシステムを含む全体的な構成を示す図である。第２の実施形態では、第１の実施形態とは異なり、ストレージ装置１０３Ａ，１０３Ｂに代えて、ホスト１０２Ａ，１０２Ｂがリモートコピーを行う点に特徴がある。その他のリモートコピーシステム１０を含む全体的な構成は、第１の実施形態の場合とほぼ同様である。ただし、コピー先のホスト３Ｂは、第１の実施形態とは異なり、必須の要素となる。なお、第２の実施形態におけるストレージ装置１０３Ａは、リモートコピーに対応したものである必要はない。
【０１０４】
図１５に示すように、リモートコピーシステム１０は、コピー元のホスト１０２Ａ、コピー元のストレージ装置１０３Ａ、コピー先のホスト１０２Ｂおよびコピー先のストレージ装置１０３Ｂを含んで構成される。そして、コピー元のホスト１０２Ａおよびコピー先のホスト１０２Ｂには、それぞれ、ＤＢサーバ１０５Ａ，１０５Ｂおよびボリュームマネージャ１０６Ａ，１０６Ｂが含まれている。なお、ストレージ装置１０３Ａ，１０３Ｂは、それぞれ、ディスク装置１０４Ａ，１０４Ｂを含んでいるものとするが、ストレージ装置１０３Ａ，１０３Ｂに含まれるディスク装置の台数は１台に限定されず、何台であってもよい。
【０１０５】
本実施形態においては、リモートコピープログラムおよびペア状態管理テーブルは、ストレージ装置３Ａ，３Ｂ，３Ｃ，３Ｄが保持していた第１の実施形態の場合と異なり、ホスト１０２Ａ，１０２Ｂのボリュームマネージャ１０６Ａ，１０６Ｂで保持する。他の基本的な動作および構成は第１の実施形態とほぼ同様であるので、以下では、第１の実施形態と異なる点を中心に説明する。
【０１０６】
第２の実施形態においては、リモートコピーは、ボリュームマネージャ１０６Ａからストレージ装置１０３Ａに対して出されるアクセス命令の実行と同様のアクセス命令をコピー元ホスト１０２Ａのボリュームマネージャ１０６Ａからコピー先ホスト１０２Ｂに転送することでリモートコピーを実現する。
【０１０７】
例えば、コピー元のホスト１０２Ａがストレージ装置１０３Ａに対するアクセス命令としてＳＣＳＩの書き込み命令を出した場合、ボリュームマネージャ１０６Ａは、そのＳＣＳＩ命令をストレージ装置１０３Ａに送ると同時にコピー先のボリュームマネージャ１０６Ｂにも同じアクセス命令を送る。そして、コピー先のボリュームマネージャ１０６Ｂは、その送られてきたアクセス命令を、そのままストレージ装置１０３Ｂに送ったり、あるいは、コピー先のストレージ装置１０３Ｂのストレージデータ領域の事情にあわせて適宜変換を施して、ストレージ装置１０３Ｂに送ったりする。これにより、変換を施していない場合には、コピー元とコピー先で、全く同じ番地に二重化が行われ、変換を施した場合には、コピー元とコピー先での保存されている番地は異なるが、同様に二重化が行われる。
【０１０８】
なお、本実施形態では、ボリュームマネージャ１０６Ａ，１０６Ｂが主体となってリモートコピーを行う構成について説明したが、このような役割をファイルシステムが担う形に構成してもよい。この場合には、ファイルシステムがリモートコピーを行うための機構やファイルの中の特定の領域（ブロックに該当するもの）を管理する機構やペア状態管理テーブルに該当するデータを備えることになる。
【０１０９】
このように、第２の実施形態によれば、特別な機構を備えていないストレージ装置を用いた場合でも、データベースのテーブルに該当するリモートコピーによるブロックの二重化を行うことができる。しかも、一般的なコンピュータであるホストを利用して安価にリモートコピーシステムを構成できるというメリットがある。
【０１１０】
なお、本発明に係る実施形態は、本発明の趣旨を逸脱しない範囲で変更が可能である。
【図面の簡単な説明】
【０１１１】
【図１】第１の実施形態におけるリモートコピーシステムを含む全体的な構成を示す図である。
【図２】リモートコピーシステムの構成を示す図である。
【図３】（ａ）は、図２におけるページを詳細に示す図であり、（ｂ）は、図２におけるログについて詳細に示す図である。
【図４】ＤＢアドレス−ブロックアドレス変換テーブルの構成例を示す図である。
【図５】ペア状態管理テーブルの例を示す図である。
【図６】データベースにおけるＵＰＤＡＴＥ文の処理を示す図である。
【図７】データベースにおけるＣＯＭＭＩＴ文の処理を示す図である。
【図８】ペア形成命令の処理を示す図である。
【図９】ペア再同期命令の処理を示す図である。
【図１０】テーブルのペア状態参照命令の処理を示す図である。
【図１１】テーブル書き込み保護設定時のＣＯＭＭＩＴ文の処理を示す図である。
【図１２】リモートコピーの制御処理におけるアボート処理を示す図である。
【図１３】ペア中断命令の処理を示す図である。
【図１４】リモートコピーが障害停止した時の処理を示す図である。
【図１５】第２の実施形態におけるリモートコピーシステムを含む全体的な構成を示す図である。
【符号の説明】
【０１１２】
１      リモートコピーシステム
２，２Ａ，２Ｂ  ホスト
３，３Ａ，３Ｂ  ストレージ装置
４，４Ａ，４Ｂ，４Ｃ，４Ｄ  ディスク装置
１０    リモートコピーシステム
２１    ＤＢサーバ
２２    ＣＰＵ
２３    ＳＱＬ実行部
２４    ログマネージャ部
２５    バッファマネージャ部
２６    バッファ管理用キュー
２７    ＤＢアドレス−ブロックアドレス変換テーブル
２８    ログバッファ
２９    テーブルバッファ
３０    ネットワークＩ／Ｆ
３１    フリーキュー
３２    ダーティキュー
３３    クリーンキュー
３４    メモリ
４１    ＣＰＵ
４２    ディスクコントローラ
４３    メモリ
４４，４４Ａ，４４Ｂ，４４Ｃ  ディスク装置
４５    論理ディスク
４６    リモートコピープログラム部
４７    ディスクアレイ制御プログラム部
４８    ペア状態管理テーブル
Ｌ１，Ｌ２  ログ
Ｐ１，Ｐ２  ページ
【図１】
2006293850.tif 000003
【図２】
2006293850.tif 000004
【図３】
2006293850.tif 000005
【図４】
2006293850.tif 000006
【図５】
2006293850.tif 000007
【図６】
2006293850.tif 000008
【図７】
2006293850.tif 000009
【図８】
2006293850.tif 000010
【図９】
2006293850.tif 000011
【図１０】
2006293850.tif 000012
【図１１】
2006293850.tif 000013
【図１２】
2006293850.tif 000014
【図１３】
2006293850.tif 000015
【図１４】
2006293850.tif 000016
【図１５】
2006293850.tif 000017