(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-31
(54)【発明の名称】ターゲット・データベース・システムにデータをロードする方法、システム、コンピュータ・プログラム
(51)【国際特許分類】
G06F 16/27 20190101AFI20241024BHJP
【FI】
G06F16/27
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024521373
(86)(22)【出願日】2022-11-15
(85)【翻訳文提出日】2024-04-09
(86)【国際出願番号】 EP2022082003
(87)【国際公開番号】W WO2023088904
(87)【国際公開日】2023-05-25
(32)【優先日】2021-11-17
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】100091568
【氏名又は名称】市位 嘉宏
(72)【発明者】
【氏名】ストルツェ、クヌート
(72)【発明者】
【氏名】オリヴェイラ リザルド、ルイス エドアルド
(72)【発明者】
【氏名】ガイゼルハルト、ラインホルト
(72)【発明者】
【氏名】バイヤー、フェリックス
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175AA01
5B175CA09
5B175CA10
(57)【要約】
方法は、第1のターゲット・テーブルに記憶された、第1のソース・テーブルにアクセスすることを可能にするターゲット・データベース・システムのクエリ・ビューを識別し、第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、ロード・プログラムを実行することが、第1のソース・パーティションを第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含む、実行することと、第1のターゲット・テーブルのレコードを選択するためにクエリ・ビューを変更し、第1のレプリケーション・ターゲット・パーティションのレコードを第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行し、更新プログラムの実行が終了したかどうかを判定することことに基づいて、レプリケーション・プログラムの動作モードを選択し、選択された動作モードに従ってレプリケーション・プログラムを実行し、第1のレプリケーション・ターゲット・パーティションのレコードをさらに選択するために、クエリ・ビューを変更することを含む。
【特許請求の範囲】
【請求項1】
ソース・データベース・システムとターゲット・データベース・システムとの間のデータ同期のためのコンピュータ実装方法であって、前記方法が、
第1のターゲット・テーブルに記憶された、第1のソース・テーブルの最終バージョンへアクセスすることを可能にする前記ターゲット・データベース・システムのクエリ・ビューを識別することであって、前記クエリ・ビューが前記第1のターゲット・テーブルのレコードを選択するように構成され、前記第1のターゲット・テーブルが、第1のロード・パーティションIDを持つ第1のロード・ターゲット・パーティションと、第1のレプリケーション・パーティションIDを持つ第1のレプリケーション・ターゲット・パーティションとを有する、前記識別することと、
前記第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、前記ロード・プログラムを実行することが、前記第1のソース・パーティションを前記第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含み、前記第2のロード・ターゲット・パーティションが第2のロード・パーティションIDを有する、前記実行することと、
前記第2のロード・パーティションIDを有する前記第1のターゲット・テーブルのレコードを選択するために前記クエリ・ビューを変更することと、
前記第1のレプリケーション・ターゲット・パーティションのレコードを前記第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行することと、
前記第1のソース・テーブルの前記第1のソース・パーティションの1つまたは複数の現在のレコードのレプリケーション要求を受信したことに応答して、前記更新プログラムの前記実行が終了したかどうかを判定することと、
少なくとも部分的に、前記更新プログラムの前記実行が終了したかどうかを判定することに基づいて、レプリケーション・プログラムの動作モードを選択することと、
前記選択された動作モードに従って前記レプリケーション・プログラムを実行することと、
前記第1のレプリケーション・ターゲット・パーティションの前記レコードをさらに選択するために、前記クエリ・ビューを変更することとを含む、コンピュータ実装方法。
【請求項2】
前記レプリケーション・プログラムの前記動作モードを選択することが、前記更新プログラムの前記実行が終了したとの判定に応答して、前記レコードを前記第1のレプリケーション・ターゲット・パーティションにコピーするデフォルトの動作モードを選択することを含む、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記レプリケーション・プログラムが、前記デフォルトの動作モードに従って
ソース・パーティションの変更済レコードをコピーすることと、
前記ソース・パーティションを1つまたは複数のロード・ターゲット・パーティションおよびレプリケーション・ターゲット・パーティションと関連付けることとを行うように構成される、請求項2に記載のコンピュータ実装方法。
【請求項4】
前記ターゲット・データベース・システムが前記ソース・データベース・システムの前記第1のソース・テーブルに関連付けられた前記第1のターゲット・テーブルを含み、前記第1のソース・テーブルが少なくとも1つのソース・パーティションを含み、前記ソース・パーティションの現行バージョンが前記第1のロード・ターゲット・パーティションに記憶され、前記第1のターゲット・テーブルの前記第1のレプリケーション・ターゲット・パーティションが前記ロード・プログラムと前記レプリケーション・プログラムをそれぞれ使用し、前記第1のロード・ターゲット・パーティションが一意な第1のロード・パーティションIDおよび一意な第1のレプリケーション・パーティションIDを有する、請求項1ないし3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
前記クエリ・ビューを含むレプリケーション・ビューを提供することであって、前記レプリケーション・プログラムが、前記レコードを挿入するための前記レプリケーション・ビューに対するinsertコマンドを含む、前記提供することをさらに含み、前記デフォルトの動作モードに従って前記レプリケーション・プログラムを実行することが、前記レプリケーション・ビューを変更することによって実行される、請求項2ないし4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記レプリケーション・プログラムの前記動作モードを選択することが、前記更新プログラムが終了していないとの判定に応答して、前記レコードを前記第1のターゲット・テーブルの所与のターゲット・パーティションにコピーするために代替の動作モードを選択することを含む、請求項1ないし5のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
前記所与のパーティションが、前記第2のロード・ターゲット・パーティションである、請求項6に記載のコンピュータ実装方法。
【請求項8】
前記レコードを前記所与のターゲット・パーティションにコピーするために前記代替の動作モードに従って前記レプリケーション・プログラムを実行することが、
前記レコードを、前記第1のターゲット・テーブルとは異なるステージング・テーブルに記憶することと、
前記ステージング・テーブルの前記レコードをさらに選択するために前記クエリ・ビューを変更することとを含む、請求項6または7項に記載のコンピュータ実装方法。
【請求項9】
前記更新プログラムが終了したことを検証することと、
前記ステージング・テーブルを前記第1のターゲット・テーブルの前記所与のパーティションに移動することとをさらに含む、請求項1ないし8のいずれか一項に記載のコンピュータ実装方法。
【請求項10】
前記所与のパーティションが前記第2のロード・パーティションまたは前記第1のロード・ターゲット・パーティションあるいはその両方と異なっており、前記方法が、前記所与のパーティションの前記レコードをさらに選択するために前記クエリ・ビューを変更することをさらに含む、請求項6ないし9のいずれか一項に記載のコンピュータ実装方法。
【請求項11】
前記レコードを前記第2のロード・ターゲット・パーティションにコピーするために前記代替の動作モードに従って前記レプリケーション・プログラムを実行することが、
前記レプリケーション・プログラムのデフォルトの動作モードから前記代替の動作モードに切り替えるためにトリガを実装することであって、前記トリガが、前記レコードの前記第1のレプリケーション・ターゲット・パーティションへの前記コピーをスキップして、前記レコードを前記第2のロード・ターゲット・パーティションにコピーするための前記トリガにおいて定義された別のコマンドを実行する、SQL INSTEAD OFトリガを含み、前記トリガが、前記更新プログラムが終了していないとの判定に応答して起動される、前記実装することを含む、請求項6ないし10のいずれか一項に記載のコンピュータ実装方法。
【請求項12】
前記更新プログラムが終了したことを検証することと、
前記トリガを削除することと、
前記デフォルトの動作モードに従って前記レプリケーション・プログラムの前記実行を完了することとをさらに含む、請求項11に記載のコンピュータ実装方法。
【請求項13】
前記クエリ・ビューを変更することが、前記第1のロード・パーティションIDおよび前記第1のレプリケーション・パーティションIDの選択を解除することをさらに含み、前記選択された動作モードに従って前記レプリケーション・プログラムを実行することが、前記最初に変更されたクエリ・ビューを使用するクエリが終了した後に実行される、請求項1ないし12のいずれか一項に記載のコンピュータ実装方法。
【請求項14】
前記クエリ・ビューが、前記ロード・パーティションIDの最大ロード・パーティションIDより小さいIDを有するレコードの選択を含む、請求項1ないし13のいずれか一項に記載のコンピュータ実装方法。
【請求項15】
前記ロード・プログラムが、
ソース・データベース・システムのソース・テーブルのソース・パーティションの1つまたは複数の別個のバージョンを、ターゲット・データベース・システムの対応するターゲット・テーブルのそれぞれ別個のターゲット・パーティションにロードすることであって、前記それぞれ別個のターゲット・パーティションが一意なロード・パーティションIDを有する、前記ロードすることを行うように構成される、請求項1ないし14のいずれか一項に記載のコンピュータ実装方法。
【請求項16】
ソース・データベース・システムとターゲット・データベース・システムとの間のデータ同期のためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、
1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体に記憶されたプログラム命令とを含み、前記プログラム命令が、
第1のターゲット・テーブルに記憶された、第1のソース・テーブルの最終バージョンへアクセスすることを可能にする前記ターゲット・データベース・システムのクエリ・ビューを識別することであって、前記クエリ・ビューが前記第1のターゲット・テーブルのレコードを選択するように構成され、前記第1のターゲット・テーブルが、第1のロード・パーティションIDを持つ第1のロード・ターゲット・パーティションと、第1のレプリケーション・パーティションIDを持つ第1のレプリケーション・ターゲット・パーティションとを有する、前記識別することと、
前記第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、前記ロード・プログラムを実行することが、前記第1のソース・パーティションを前記第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含み、前記第2のロード・ターゲット・パーティションが第2のロード・パーティションIDを有する、前記実行することと、
前記第2のロード・パーティションIDを有する前記第1のターゲット・テーブルのレコードを選択するために前記クエリ・ビューを変更することと、
前記第1のレプリケーション・ターゲット・パーティションのレコードを前記第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行することと、
前記第1のソース・テーブルの前記第1のソース・パーティションの1つまたは複数の現在のレコードのレプリケーション要求を受信したことに応答して、前記更新プログラムの前記実行が終了したかどうかを判定することと、
少なくとも部分的に、前記更新プログラムの前記実行が終了したかどうかを判定することに基づいて、レプリケーション・プログラムの動作モードを選択することと、
前記選択された動作モードに従って前記レプリケーション・プログラムを実行することと、
前記第1のレプリケーション・ターゲット・パーティションの前記レコードをさらに選択するために、前記クエリ・ビューを変更することとを行うための命令を含む、
前記プログラム命令を含む、コンピュータ・プログラム製品。
【請求項17】
前記レプリケーション・プログラムの前記動作モードを選択するための前記命令が、前記更新プログラムが終了していないとの判定に応答して、前記レコードを前記第1のターゲット・テーブルの所与のターゲット・パーティションにコピーするために代替の動作モードを選択するための命令を含む、請求項16に記載のコンピュータ・プログラム製品。
【請求項18】
前記レプリケーション・プログラムの前記動作モードを選択するための前記命令が、前記更新プログラムの前記実行が終了したとの判定に応答して、前記レコードを前記第1のレプリケーション・ターゲット・パーティションにコピーするデフォルトの動作モードを選択するための命令を含む、請求項16または17に記載のコンピュータ・プログラム製品。
【請求項19】
コンピュータ・システムであって、
1つまたは複数のコンピュータ・プロセッサと、
1つまたは複数のコンピュータ可読記憶媒体と、
前記1つまたは複数のプロセッサのうちの少なくとも1つによる実行のために前記コンピュータ可読記憶媒体に記憶されたプログラム命令であって、前記プログラム命令が、
第1のターゲット・テーブルに記憶された、第1のソース・テーブルの最終バージョンへアクセスすることを可能にする前記ターゲット・データベース・システムのクエリ・ビューを識別することであって、前記クエリ・ビューが前記第1のターゲット・テーブルのレコードを選択するように構成され、前記第1のターゲット・テーブルが、第1のロード・パーティションIDを持つ第1のロード・ターゲット・パーティションと、第1のレプリケーション・パーティションIDを持つ第1のレプリケーション・ターゲット・パーティションとを有する、前記識別することと、
前記第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、前記ロード・プログラムを実行することが、前記第1のソース・パーティションを前記第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含み、前記第2のロード・ターゲット・パーティションが第2のロード・パーティションIDを有する、前記実行することと、
前記第2のロード・パーティションIDを有する前記第1のターゲット・テーブルのレコードを選択するために前記クエリ・ビューを変更することと、
前記第1のレプリケーション・ターゲット・パーティションのレコードを前記第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行することと、
前記第1のソース・テーブルの前記第1のソース・パーティションの1つまたは複数の現在のレコードのレプリケーション要求を受信したことに応答して、前記更新プログラムの前記実行が終了したかどうかを判定することと、
少なくとも部分的に、前記更新プログラムの前記実行が終了したかどうかを判定することに基づいて、レプリケーション・プログラムの動作モードを選択することと、
前記選択された動作モードに従って前記レプリケーション・プログラムを実行することと、
前記第1のレプリケーション・ターゲット・パーティションの前記レコードをさらに選択するために、前記クエリ・ビューを変更することとを行うための命令を含む、
前記プログラム命令を含む、コンピュータ・システム。
【請求項20】
前記レプリケーション・プログラムの前記動作モードを選択するための前記命令が、前記更新プログラムが終了していないとの判定に応答して、前記レコードを前記第1のターゲット・テーブルの所与のターゲット・パーティションにコピーするために代替の動作モードを選択するための命令を含む、請求項19に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デジタル・コンピュータ・システムの分野に関し、より詳細には、異なる同期プログラムを使用して、ターゲット・データベース・システムにデータをロードするための方法に関する。
【0002】
データのロードは、データベース・システムで最も頻繁に実行される操作のひとつである。データのロードを改善することで、データベース・システムの全体的なパフォーマンスを向上させることができる。しかしながら、このようなデータのロードを実行するために要する時間を制御することは、難しいタスクである場合がある。
【発明の概要】
【0003】
様々な実施形態は、独立請求項の主題によって説明されるように、異なる同期プログラム、コンピュータ・システム、およびコンピュータ・プログラム製品を使用して、ターゲット・データベース・システムにデータをロードするための方法を提供する。有利な実施形態は、従属請求項において説明される。本発明の実施形態は、相互に排他的でなければ互いに自由に組み合わせることができる。
【0004】
本明細書で開示されるように、ソース・データベース・システムとターゲット・データベース・システムとの間のデータ同期のためのコンピュータ実装方法は、第1のターゲット・テーブルに記憶された、第1のソース・テーブルの最終バージョンへアクセスすることを可能にするターゲット・データベース・システムのクエリ・ビューを識別することであって、クエリ・ビューが第1のターゲット・テーブルのレコードを選択するように構成され、第1のターゲット・テーブルが、第1のロード・パーティションIDを持つ第1のロード・ターゲット・パーティションと、第1のレプリケーション・パーティションIDを持つ第1のレプリケーション・ターゲット・パーティションとを有する、識別することと、第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、ロード・プログラムを実行することが、第1のソース・パーティションを第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含み、第2のロード・ターゲット・パーティションが第2のロード・パーティションIDを有する、実行することと、第2のロード・パーティションIDを有する第1のターゲット・テーブルのレコードを選択するためにクエリ・ビューを変更することと、第1のレプリケーション・ターゲット・パーティションのレコードを第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行することと、第1のソース・テーブルの第1のソース・パーティションの1つまたは複数の現在のレコードのレプリケーション要求を受信したことに応答して、更新プログラムの実行が終了したかどうかを判定することと、少なくとも部分的に、更新プログラムの実行が終了したかどうかを判定することに基づいて、レプリケーション・プログラムの動作モードを選択することと、選択された動作モードに従ってレプリケーション・プログラムを実行することと、第1のレプリケーション・ターゲット・パーティションのレコードをさらに選択するために、クエリ・ビューを変更することとを含む。また、方法に対応するコンピュータ・プログラム製品およびコンピュータ・システムも開示される。
【図面の簡単な説明】
【0005】
【
図1】本発明の主題の例による、データ分析システムの図である。
【0006】
【
図2】本発明の主題の例による、ターゲット・データベース・システムにデータをロードするための方法のフローチャートである。
【0007】
【
図3A】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3B】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3C】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3D】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3E】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3F】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【
図3G】本発明の主題の例による、ソース・データベース・システムとターゲット・データベース・システムの内容の推移を示す図である。
【0008】
【
図4】第2の動作モードに従ってレプリケーション・プログラムを実行するための方法のフローチャートである。
【0009】
【
図5】第2の動作モードに従ってレプリケーション・プログラムを実行するための方法のフローチャートである。
【0010】
【
図6】本発明の主題に関与する、1つまたは複数の方法ステップを実装するために好適な、コンピュータ化されたシステムの表現図である。
【発明を実施するための形態】
【0011】
本発明の様々な実施形態の説明は、説明目的で提示されるが、網羅的であること、または開示される実施形態に限定されることを意図するものではない。説明される実施形態の範囲および趣旨から逸脱することなく、当業者には多くの修正および変形が明らかであろう。本明細書で使用される用語は、実施形態の原理、実用的な応用、もしくは市場で見られる技術に対する技術的改善を最良に説明するために、または本明細書で開示される実施形態を当分野の他の当業者が理解できるように選択された。
【0012】
データ分析システムは、ソース・データベース・システムおよびターゲット・データベース・システムを含む。データ分析システムは、例えば、データ・ウェアハウジング・システムまたはマスタ・データ管理システムであり得る。データ分析システムは、データ・ウェアハウジング、またはマスタ・データ管理、またはソース・データベース・システムとターゲット・データベース・システムを使用する別の技術を可能にすることができ、ターゲット・データベース・システムは、ソース・データベース・システムの対応するソース・データベースの内容のコピーを受信するように/含むように構成されるターゲット・データベースを備える。ソース・データベース・システムは、例えば、トランザクション・エンジンであってもよく、ターゲット・データベース・システムは、分析用エンジンであってもよい。例えば、ソース・データベース・システムはオンライン・トランザクション処理(OLTP)システムであってもよく、ターゲット・データベース・システムはオンライン分析処理(OLAP)システムであってもよい。ソース・データベース・システムはソース・データセットを含んでもよく、ターゲット・データベース・システムはターゲット・データセットを含んでもよい。ソース・データセットはソース・データベースの一部であってもよく、ターゲット・データセットはターゲット・データベースの一部であってもよい。ソース・データセットとターゲット・データセットは、同一のフォーマットで記憶されてもよいし、異なるフォーマットで記憶されてもよい。フォーマットは、暗号化、圧縮、行指向ストレージか列指向ストレージか、などが異なる場合がある。例えば、ソース・データセットは行指向のフォーマットで記憶されてもよく、ターゲット・データセットは列指向のフォーマットで記憶されてもよい。言い換えれば、ターゲット・データセットは、「行」ではなく「列」で記憶されてもよい。ソース・データセットの内容は、1つまたは複数のデータベース・トランザクションによって変更することができる。
【0013】
ソース・テーブルは、ソース・パーティションと呼ばれる1つまたは複数のパーティションSP
1…SP
Nを含む。ただしN≧1である。ソース・テーブルは水平にパーティショニングすることができ、そのことによって完全な行を特定のパーティションに置くことができる。各ソース・パーティションは、ソース・テーブルのそれぞれの行のセットを含むことができる。ソース・テーブルの各ソース・パーティションは、ソース・パーティションIDと呼ばれる識別子(ID)を有することができる。同じタイプのソース・パーティションIDを、ソース・パーティションに使用してもよい。ソース・パーティションSP
1…SP
Nは、例えば、それぞれソース・パーティションID
【数1】
を有することができる。ターゲット・テーブルは、MパーティションTP
1…TP
Mを含むことができ、ターゲット・パーティションと呼ばれる。ターゲット・テーブルの各ターゲット・パーティションはIDを有することができ、ターゲット・パーティションIDと呼ばれる。ターゲット・パーティションは、データを前記ターゲット・パーティションにコピーした同期プログラムに起因して、異なるタイプのパーティションIDを有することがある。同一パーティションに属するレコード(行とも呼ばれる)は、前記パーティションの同一パーティションIDを有する。例えば、所与のソース・パーティションの各レコードは、その所与のソース・パーティションの同一ソース・パーティションIDを記憶する専用の属性または列を有する。データ分析システムは、ソース・データベース・システムのソース・テーブルの内容を、ターゲット・データベース・システムの対応するターゲット・テーブルと同期させるように構成される場合がある。同期後、ソース・テーブルの各ソース・パーティションのレコードは、例えば、異なるターゲット・パーティションIDを有する2つのターゲット・パーティションの一部になる可能性がある。そのためには、複数の同期プログラムを使用することができる。同期プログラムは、ロード・プログラム(部分的なリロード・プログラムと呼ばれることもある)とレプリケーション・プログラムを含むことができる。2つのプログラムは、データをソース・テーブルからターゲット・テーブルにコピーする量と頻度が異なる場合がある。ロード・プログラムは、ソース・テーブルのソース・パーティションの内容全体を、ターゲット・テーブルの対応するターゲット・パーティションにコピーすることができる。ロード・プログラムを繰り返し実行することで、ソース・テーブル全体でこのコピー/ロードのプロセスを繰り返すことができる。例えば、このことにより、ソース・テーブルの新しいバージョンでターゲットを定期的に更新することができる。ロード・プログラムは、ソース・テーブルの各行のソース・パーティションIDを使用し、それをターゲット・テーブルにおいて、ロード・パーティションIDと呼ばれる、異なる、新しい、かつ一意なターゲット・パーティションIDにマッピングすることができる。ロード・プログラムは、ソース・パーティションIDとロード・パーティションIDとの間のマッピングを使用して、ソース・テーブルの行をそれぞれのターゲット・パーティションに割り当てることができる。ロード・パーティションIDが異なるため、ロード・プログラムの異なる実行によってロードされた行を容易に区別することができる。レプリケーション・プログラムは、ソース・データベース・システムのトランザクション・ログを検査することによって、ソース・テーブルからターゲット・テーブルへの個々の変更をレプリケートすることができる。レプリケーション・プログラムは、1:1のパーティションIDマッピングを適用することができる。例えば、ソース・パーティションID
【数2】
は、レプリケーション・パーティションID
【数3】
にマッピングされ、
【数4】
は
【数5】
に等しくなるようにマッピングされてもよいし、されなくてもよい。
【数6】
の場合、レプリケーション・プログラムは、レプリケーション・ターゲット・パーティションの新しいIDを計算する、または導出する必要がない場合がある。したがって、所与のソース・パーティションに対してレプリケーション・プログラムが実行されるときはいつでも、ソース・パーティションのレコードを同一ターゲット・パーティションにコピーすることができる。これを、レプリケーション・プログラムのデフォルトの動作モードと称することができる。レプリケーション・プログラムは、ソース・パーティションの変更されたレコードを、あるレプリケーション・パーティションIDを有する同一レプリケーション・ターゲット・パーティションにコピーすることができる。言い換えれば、同一ソース・パーティションIDを有する行は、複数回レプリケートされたとしても、同一パーティションにレプリケートされる可能性がある。
【0014】
しかしながら、ターゲット・テーブル内のデータ不整合を避けるために、ロード・プログラムは、データの新しいロードを実行するために特別にレプリケーション・プログラムによってレプリケーションされた行を取り扱ってもよく、これは、ターゲット・テーブルのレプリケーション・ターゲット・パーティションに対して、最終バルク・ロードの最後に割り当てられたロード・パーティションIDを割り当てるために更新プログラム(例えば、SQLステートメントのUPDATE)を実行することによって達成され得る。
【0015】
したがって、ソース・テーブルとターゲット・テーブルとの間の同期には、レプリケーション・プログラム、ロード・プログラム、および更新プログラムの3つのプログラムの実行が関与する。その結果、ソース・テーブルの少なくとも1つのソース・パーティションの内容が、ロード・パーティションIDとレプリケーション・パーティションIDをそれぞれ有する2つのターゲット・パーティションに記憶される可能性がある。ロード・プログラムの実行は、ソース・パーティション全体を、そのロード・パーティションIDを有するターゲット・パーティションにロードし、その後、そのソース・パーティションに対してレプリケーション・プログラムを実行して、ソース・パーティションのレコードを、レプリケーション・パーティションIDを有するターゲット・パーティションにレプリケートすることができる。
【0016】
したがって、現在の時点t
0において、各ソース・パーティションSP
1…SP
Nのレコードは、ターゲット・パーティションのうち少なくとも1つのターゲット・パーティションに記憶されている可能性がある。例えば、Kソース・パーティションSP
1…SP
Kの各ソース・パーティションは、それぞれレプリケーション・パーティションIDとロード・パーティションIDを有する2つのターゲット・パーティションに関連付けられる。ただし、K≦Nである。つまり、ロード・プログラムの実行に続いてレプリケーション・プログラムの実行が、これらKのソース・パーティションに対して行われる。例えば、各ソース・パーティションSP
i(ただしi=1,…K)は、Mターゲット・パーティションTP
1…TP
Mのレプリケーション(R)とロード(L)ターゲット・パーティション
【数7】
のペアに関連付けられている。下付きインデックスiはターゲット・パーティションに関連付けられるソース・パーティションを示し、v
0は、ターゲット・パーティションの現在の内容のバージョンを示す。したがって、ターゲット・テーブルは、M-2K(=N-K)の個々のロード・ターゲット・パーティションに加えて、Kペア
【数8】
で構成される可能性がある(K=Nであれば、M=2Kであることに留意されたい)。言い換えれば、ソース・テーブルのKソース・パーティションの現在の内容は、ターゲット・パーティション
【数9】
のそれぞれのペアに記憶され、Kソース・パーティションの各々のレコードがロード・プログラムとレプリケーション・プログラムによってターゲット・テーブルにコピーされたことを意味する。一方、残りのN-Kソース・パーティションの現在の内容は、それぞれのN-Kロード・ターゲット・パーティションに記憶され、これらのN-Kソース・パーティションでは、ロード・プログラムのみが実行されたことを意味する。したがって、現在の時点t
0では、Mターゲット・パーティションは、Nロード・ターゲット・パーティションとKレプリケーション・ターゲット・パーティションを含む。Nロード・ターゲット・パーティションの各々は、一意なロード・パーティションID
【数10】
を有し、これは現在の時点t
0を反映する。Kレプリケーション・ターゲット・パーティションの各々は、時間に依存しないレプリケーション・パーティションID
【数11】
を有する(バージョン・インデックスv
0は欠落している)。例えば、異なる時点、例えば、(例えば、t
-1)とt
0でソース・パーティションが変更されたため、)t
-1とt
0でソース・パーティションSP
iのレコードがレプリケーション・プログラムを使用してレプリケートされた場合、t
-1とt
0に同一レプリケーション・ターゲット・パーティションID、
【数12】
が使用される。ターゲット・テーブルへのアクセスは、ターゲット・テーブルの現在の内容を表現するクエリ・ビューをクエリすることによって実行することができる。クエリ・ビューは、アクセス可能なターゲット・テーブルのデータを表す。例えば、現在の時点t
0における現在のデータを示す。特に、クエリ・ビューは、ロード・パーティションIDとレプリケーション・パーティションIDの選択を使用することで、ターゲット・テーブルの最終バージョンを表現することができる。
【0017】
しかし、後の時点t
1で、ロード・プログラムを再度実行し、ソース・テーブルのソース・パーティションSP
1…SP
Nを、ターゲット・テーブルのそれぞれのロード・ターゲット・パーティション
【数13】
にロードしてもよい。これにより、ターゲット・テーブルの現在の内容が変更される可能性がある。つまり、バージョンv
1を有するソース・テーブルの新しい内容は、ターゲット・テーブルのロード・ターゲット・パーティション
【数14】
のみに存在する。この場合、クエリ・ビューは、N新しいロード・ターゲット・パーティションのみを含み、バージョンv
0の内容を除外するように、更新または変更されることがある。さらに、更新プログラムは、ソース・パーティションSP
1…SP
Kに関連付けられたレプリケーション・ターゲット・パーティション
【数15】
、例えば各ソース・パーティションSP
i(ただし、i=1,…K)に対して実行されてもよく、更新プログラムは、レプリケーション・ターゲット・パーティション
【数16】
のレプリケーション・パーティションID
【数17】
を、
【数18】
に関連付けられたロード・ターゲット・パーティション
【数19】
のロード・パーティションID
【数20】
に変更してもよい。しかし、ソース・パーティションをロードした後、(例えば、1つまたは複数のソース・パーティションでいくつかのレコードが変更される実施形態では)レプリケーション・プログラムを実行する必要があるかもしれない。この場合、更新プログラムとレプリケーション・プログラムの実行を最適化するという技術的な課題がある場合がある。本発明の主題は、レプリケーション・プログラムのデフォルトの動作モードと別の動作モード(第2のモード)とを切り替えることにより、更新プログラムの実行の推移に基づいてレプリケーション・プログラムの実行を可能にすることができる。これにより、ターゲット・テーブル内の正しいバージョンのデータへのアクセスと、データへのアクセス速度の向上とのバランスが取れる可能性がある。
【0018】
例えば、その時点t
1のロード・プログラムの実行後、Kのソース・パーティションSP
1…SP
Kの1つまたは複数のソース・パーティションSP
1…SP
Jの1つまたは複数のレコード(変更済レコードと呼ばれる)がソース・パーティションにおいて変更または挿入された場合、レプリケーション・プログラムは、このようなJソース・パーティションSP
1…SP
Jに対して実行することができる(ただし1≦J≦K)。そのために、更新プログラムの実行が終了したかどうかを判断することがある。更新プログラムの終了により、Kレプリケーション・ターゲット・パーティション
【数21】
が空になることがある。プログラムの実行が終了した場合、レプリケーション・プログラムを、ソース・パーティションSP
1…SP
Jの変更されたレコードをそれぞれID
【数22】
を持つそれぞれの(空の)レプリケーション・ターゲット・パーティション
【数23】
にコピーするためのデフォルトの動作モードに従って実行することができる。クエリ・ビューはさらに、前記Nの新しいロード・ターゲット・パーティションに加えて、Jレプリケーション・ターゲット・パーティション
【数24】
を含むように更新されることがある。しかし、更新プログラムが終了していない場合、第2の動作モードに従ってJソース・パーティションSP
1…SP
Jに対してレプリケーション・プログラムを実行し、Jソース・パーティションSP
1…SP
Jの変更されたレコードをそれぞれのロード・ターゲット・パーティション
【数25】
にコピーすることができる。このコピーは、本明細書で説明されるように、直接的または間接的に行うことができる。
【0019】
本発明の主題は、パーティションが完了する前後に同時に実行中のクエリに対して正しい結果を保証しながら、既に完全にロードされたパーティションを可視化することができる。レプリケーションのレイテンシが短縮される可能性がある。したがって、本発明の主題は、上記3つのプログラムの実行のタイミングに基づいて、同期の効率的な実行を可能にすることができる。
【0020】
一実施形態によれば、Jソース・パーティションSP
1…SP
Jのレコードをそれぞれのロード・ターゲット・パーティション
【数26】
にコピーするための、第2の動作モードに従ったレプリケーション・プログラムの実行は、ターゲット・テーブルとは異なるステージング・テーブルにレコードを記憶することを含む。クエリ・ビューは、新しいNロード・ターゲット・パーティションに加えて、ステージング・テーブルのレコードをさらに選択するように変更することができる。更新プログラムの実行終了後、ステージング・テーブルのレコードは、ロード・ターゲット・パーティション
【数27】
に移動することができる。
【0021】
一実施形態によれば、それぞれのロード・ターゲット・パーティション
【数28】
内のJソース・パーティションSP
1…SP
Jのレコードをコピーするために、第2の動作モードに従ってレプリケーション・プログラムを実行することは、レプリケーション・プログラムのデフォルトの動作モードから第2の動作モードに切り替えるためにトリガを実装することであって、トリガは、SQL INSTEAD OFトリガを含み、トリガは、更新プログラムが終了していないとの判定に応答して起動される、実装することを含む。例えば、更新プログラムが終了したと判定したことに応答して、トリガを削除してもよく、第2の動作モードに従ったレプリケーション・プログラムの実行が完了していない場合には、デフォルトの動作モードに従ってレプリケーション・プログラムの実行を完了してもよい。
【0022】
レプリケーション・プログラムは、レプリケーション・ビューに対して実行することができる。一例では、レプリケーション・ビューはクエリ・ビューとは別個である。一例では、レプリケーション・ビューは、レプリケーション・プログラムがクエリ・ビューに対して実行されるようなクエリ・ビューであってもよい。
【0023】
一実施形態によれば、クエリ・ビューを変更することは、第1のロード・パーティションIDおよび第1のレプリケーション・パーティションIDの選択を解除することをさらに含み、デフォルトの動作モードに従ってレプリケーション・プログラムを実行することは、最初に変更されたクエリ・ビューを使用するクエリが終了した後に実行される。
【0024】
一実施形態によると、ロード・パーティションIDはレプリケーション・パーティションIDより大きく、クエリ・ビューは、ロード・パーティションIDの最大ロード・パーティションIDより小さいIDを有するレコードの選択を含む。
【0025】
図1は、本発明の主題の一例によるデータ分析システム100のブロック図である。データ分析システム100は、本発明の主題の一例に従って、ソース・データベース・システム101とターゲット・データベース・システム103との間のデータ同期のために構成され得る。ソース・データベース・システム101は、例えば、オンライン・トランザクション処理(OLTP)システムとすることができる。ターゲット・データベース・システム103は、例えば、オンライン分析処理(OLAP)システムとすることができる。ソース・データベース・システム101およびターゲット・データベース・システム103は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク(WLAN)、無線ワイド・エリア・ネットワーク(WWAN)、パーソナル・エリア・ネットワーク(PAN)、仮想プライベート・ネットワーク(VPN)、イントラネットまたは他の適切なネットワーク・システムなどのネットワークを介して接続され得る。例えば、ソース・データベース・システム101とターゲット・データベース・システム103の間の通信は、TCP/IP通信レイヤを介して実行されることがある。
【0026】
ソース・データベース・システム101は、ソース・データベースの1つまたは複数のソース・テーブル105と、トランザクション・リカバリ・ログ106から構成される。ソース・テーブル105は、任意の数のデータベース・システムのリレーショナル・テーブルであってもよい。トランザクション・リカバリ・ログ106のエントリまたはログ・レコードは、ソース・データベース・システム101においてソース・テーブル105の行またはレコードへの変更を記述する。
図1は、ログ・レコード130の例示の内容を示す。ログ・レコード130には、タイムスタンプ、ログ・レコード・シーケンス番号(LRSN)、および属性変更を含めることができる。より具体的には、トランザクション・リカバリ・ログ106のログ・レコードは、例えば、(1)変更対象テーブル、(2)変更対象行のキー列の値、(3)変更された行のすべての列の新旧値、および(4)変更の原因となったトランザクション(作業単位)を定義する情報を含むことができる。定義により、挿入は新しいデータ・レコードであり、そのため古い値を持たない。削除変更では、新しいデータ・レコードは存在せず、古いデータ・レコードが存在するだけである。したがって、挿入された行のトランザクション・ログ・レコードには新しい列の値のみが含まれ、削除された行のトランザクション・ログ・レコードには古い列の値のみが含まれる可能性がある。更新された行のトランザクション・ログ・レコードには、すべての行列の新旧値が含まれる可能性がある。トランザクション・リカバリ・ログのログ・レコードの順序は、トランザクションの変更操作の順序を反映することがあり、トランザクション・コミット・レコードの順序は、トランザクションが完了した順序を反映することがある。トランザクション・ログ・レコードの行操作のタイプは、例えば、削除、挿入、または更新とすることができる。
【0027】
ソース・データベース・システム101は、ログ・リーダ104を含む。ログ・リーダ104は、トランザクション・リカバリ・ログ106のログ・レコードを読み取り、変更されたレコードをターゲット・データベース・システム103のレプリケーション・プログラム108に提供することができる。ログ・リーダ104は、増分更新ストラテジに基づいて、トランザクション・リカバリ・ログ106のターゲット・データベース・システム103へのログ・シッピングを実行するように構成され得る。このシッピングは、例えば、トランザクション・リカバリ・ログ106のログ・レコードから形成されたログ・レコードのストリームをレプリケーション・プログラム108に送ることによって実行される。シッピングされるログ・ストリームは、例えば、ストリームIDに関連付けられてもよい。ログ・レコードのストリームは、例えば、マージされたログ・レコードのストリームであってもよい。これにより、ターゲット・データベース・システムでのログ・レコードの効率的な処理を可能にすることができる。ターゲット・データベース・システム103は、ソース・データベース・システム101からログ・ストリームを受信するためのログ・ストリーミング・インターフェースを備えることができる。レプリケーション・プログラム108は、ログ・ストリーミング・インターフェースを介してログ・レコードのストリームを受信するように構成される場合がある。レプリケーション・プログラム108は、変更が発生したソース・テーブル105に対応するターゲット・テーブル113に、変更レコードに示された変更を適用することができる。
【0028】
別の例では、ソース・テーブル105のパーティション全体のバルク・ロードが実行されることがある。そのために、ターゲット・データベース・システム103は、ロードされるパーティションを受け取り、それをソース・テーブル105に対応するターゲット・テーブル113にロードするロード・プログラム110を含む。
【0029】
図2は、データ分析システムにおけるデータ同期のための方法のフローチャートである。説明の便宜上、
図2で説明される方法は、
図1に図示されたシステムに実装することができるが、この実装形態に限定されるものではない。
図2の方法は、例えば、ターゲット・データベース・システム103によって実行することができる。同期は、例えば、ソース・テーブルと対応するターゲット・テーブルを参照して説明することができる。ターゲット・テーブルの内容の推移を
図3A~
図3Gに示す。
図3Aは、ソース・テーブルとターゲット・テーブルの初期状態を示している。ソース・テーブルは、Nソース・パーティションSP
1…SP
Nを含む。ターゲット・テーブルは、Mターゲット・パーティションを含む。各ソース・パーティションSP
1…SP
Nのレコードは、ターゲット・パーティションのうち少なくとも1つのターゲット・パーティションに記憶される。例えば、Kソース・パーティションSP
1…SP
Kの各ソース・パーティションSP
i(ここでi=1,…K)は、Mターゲット・パーティションのレプリケーション(R)およびロード(L)ターゲット・パーティション
【数29】
のペアと関連付けられ、それぞれ
【数30】
および
【数31】
のIDを有する。すなわち、Kソース・パーティションSP
1…SP
Kのレコードは、まずロード・プログラム110を使用してロードされ、次に、Kソース・パーティションSP
1…SP
Kの変更されたレコードがレプリケーション・プログラム108を使用してレプリケートされた。残りのN-Kソース・パーティションはロード・プログラム110のみでロードされるため、これらのソース・パーティションにはロード・ターゲット・パーティションしか存在しない。このため、ロード・ターゲット・パーティションとレプリケーション・ターゲット・パーティションの内容は、最後の/最新のロード・プログラムの実行に続けてレプリケーション・プログラムが実行されたことを示す、バージョンv
0でインデックス付けされる。説明を簡単にするために、ターゲット・パーティションIDの間に以下の不等式を仮定する:すべてのiおよびjについて、i<jのとき
【数32】
、i<jのとき
【数33】
、かつ
【数34】
。この事例では、クエリ・ビューは、すべてのM(=N+K)ターゲット・パーティションを、WHERE句を使用して次のように表現することができる:
【数35】
ここで、IDはターゲット・パーティションのパーティションIDである。
【0030】
図3Aに示す初期状態の後、Nソース・パーティションSP
1…SP
Nのために、ステップ201でロード・プログラムを実行することができる。ロード・プログラムは、Nソース・パーティションSP
1…SP
Nを、それぞれID
【数36】
を有する対応する新しいロード・ターゲット・パーティション
【数37】
にロードすることができる。新しい内容(単にリロードされたパーティションとも呼ばれる)は、バージョンv
1でインデックス付けされる。
図3Bは、得られるターゲット・テーブルを示す。
図3Bは、ターゲット・テーブルの現行バージョン、ならびにターゲット・テーブルの以前のバージョンを示している。以前のバージョンの内容は、それぞれのソース・パーティションに破線矢印でリンクされ、現在の内容は、それぞれのソース・パーティションに実線矢印でリンクされている。しかし、
図3Aのターゲット・テーブルに対して定義されたクエリ・ビューEq(1)は、
図3Bに示すように、ターゲット・テーブルの現在のレコードを選択するように適合させる必要があるかもしれない。そのために、ステップ203でクエリ・ビューを変更して、ロード・ターゲット・パーティション
【数38】
のレコードを選択することができる。上記の例にならい、WHERE句を次のように変更することができる:
【数39】
。つまり、バージョンv
0を有する最終内容は選択解除され、バージョンv
1の内容が選択される。
【0031】
更新プログラムは、ID
【数40】
を有するレプリケーション・ターゲット・パーティションのレコードを、それぞれID
【数41】
を有するロード・ターゲット・パーティションに割り当てるために、ステップ205で実行することができる。これは、一貫性のないデータを記憶することを回避するために行われるが、デフォルト・モードに従うレプリケーション・プログラムは(実行された場合)、
【数42】
を有するこのようなパーティション中の新しいレコードをコピーする可能性があるからである。更新プログラムは、例えば、次のようなSQLのupdateステートメントを含む:それぞれ、UPDATE <table> SET
【数43】
ここで
【数44】
。更新プログラム実行終了後に得られるターゲット・テーブルを
図3Cに示す。この図では、例えば、ソース・パーティションSP
1に関連付けられたロード・ターゲット・パーティションは、内容
【数45】
と
【数46】
を含む。
【0032】
レプリケーション要求は、ステップ207で受け取ることができる。レプリケーション要求には、Kソース・パーティションSP1…SPKの1つまたは複数のソース・パーティションSP1…SPJの1つまたは複数の変更されたレコードが含まれる。ただし、変更されたまたは挿入されたものに1≦J≦Kが成り立つ。これには、このようなJソース・パーティションSP1…SPJにレプリケーション・プログラムを実行する必要がある場合がある。そのために、ステップ209は、更新プログラムの実行が終了したかどうかを判定すること(ステップ209)を含む。
【0033】
更新プログラムの実行が終了した場合、ステップ211において、レプリケーション・プログラムを、Jソース・パーティションSP
1…SP
Jの変更されたレコードを、それぞれID
【数47】
を持つそれぞれのレプリケーション・ターゲット・パーティションにコピーするためのデフォルトの動作モードに従って実行することができる。得られるターゲット・テーブルのステータスを
図3Dに示す。ソース・パーティションSP
i(ただし、i=1,..J)の変更されたレコードの内容は
【数48】
で示される。この場合も、式Eq(2)のクエリ・ビューは、
図3Dに示すように、ステップ213において、バージョン番号v
1で示されるターゲット・テーブルの現在の内容に変更または更新される可能性がある。変更は、ID
【数49】
の選択解除をキャンセルするために実施することができ、これによりクエリ・ビューは次のようになる:
【数50】
。
【0034】
クエリ・ビューは、例えば、レプリケーション・プログラムの実行の開始前に更新されることがある。レプリケーション・プログラムの実行は、式Eq(2)のクエリ・ビューに対してまだ実行中のクエリが完了した後に開始することができる。レプリケーション・プログラムは、例えば、変更されたレコードを、式Eq(3)のビューのクエリであるレプリケーション・ビューに挿入するためのinsertコマンドを含むことができる。
図3Dは、レプリケーション・プログラム終了後のターゲット・テーブルのステータスを示しており、レプリケーション・プログラムが開始される前に更新プログラムが終了している。
図3Cは、更新プログラムが終了し、レプリケーション・プログラムが開始する前のターゲット・テーブルのステータスを示している。
【0035】
更新プログラムの実行がまだ終了していない場合、ステップ215において、第2の動作モードに従ってレプリケーション・プログラムを実行し、それぞれJソース・パーティションSP
1…SP
Jの変更されたレコードを(直接的または間接的に)ID
【数51】
を有するロード・ターゲット・パーティションにコピーすることができる。しかし、Jソース・パーティションSP
1…SP
Jのレコードのレプリケーションは、更新プログラムが終了する前に終了することもあれば、終了しないこともある。
図3Eおよび
図3Fは、更新プログラムの終了までにレプリケーションが完了しなかった場合の、
図3Bのターゲット・テーブルのステータスを示している。
図3Eはターゲット・テーブルの中間状態を示し、
図3Fはターゲット・テーブルの最終状態を示す。
図3Eは、更新プログラム実行後および第2の動作モードに従ったレプリケーション実行後のターゲット・テーブルのステータスを示す。
図3Fは、更新プログラムの実行およびデフォルト動作モードと第2の動作モードの両方に従ったレプリケーションの実行が完了した後のターゲット・テーブルのステータスを示している。
図3Gは、更新プログラムの終了までにレプリケーションが完了しなかった場合の、ターゲット・テーブルのステータスを示している。
【0036】
例えば、第2の動作モードに従ったレプリケーション・プログラムの実行が終了していない状態で、更新プログラムが終了する場合、例えば、更新プログラムの終了前に、ターゲット・パーティションの一部(例えば、Fターゲット・パーティション
【数52】
)だけが、ID
【数53】
を有するそれぞれのロード・ターゲット・パーティションにコピーされた場合を考える。この場合、更新プログラムが完了すると、レプリケーション・プログラムはデフォルトの動作モードに戻され、ID
【数54】
を持つレプリケーション・ターゲット・パーティションにソース・パーティションSP
(F+1)…SP
Jの残りの変更レコードをコピーすることができる。得られるターゲット・テーブルを、
図3Fに示す。この場合、式Eq(2)のクエリ・ビューは、
図3Fのターゲット・テーブルのバージョンv
1のレコードを選択するために、Eq(3)のクエリ・ビューを取得するように更新することができ、デフォルトの動作モードに従ってレプリケーション・プログラムによって新たに挿入された行が見える。
【0037】
更新プログラムが終了する前に第2の動作モードに従ってレプリケーション・プログラムの実行が終了した場合、Jターゲット・パーティション
【数55】
はID
【数56】
を持つそれぞれのロード・ターゲット・パーティションにコピーされている。得られるターゲット・テーブルを、
図3Gに示す。この場合でも、Eq(2)のクエリ・ビューを使用することができるが、
図3Gのターゲット・テーブルのバージョンv
1のレコードを選択するためである。
【0038】
上述したように、レプリケーション・プログラムの実行は、式Eq(2)の(最初の)クエリ・ビューの変更を必要とする場合もあれば、必要としない場合もある。式Eq(2)のクエリ・ビューを適合させなければならない場合、レプリケーション・プログラムは、式Eq(2)のクエリ・ビューに対してまだ実行中のクエリがすべて完了した後にのみ開始することができる。
【0039】
図4は、第2の動作モードに従ってレプリケーション・プログラムを実行するための方法のフローチャートである。
図4の方法は、
図2のステップ215の例示の実装形態を提供する。説明のために、
図4で説明した方法は、
図1に図示されたシステムにおいて実装されるが、この実装形態に限定されない。
図4の方法は、例えば、ターゲット・データベース・システム103によって実行することができる。レプリケーション・ビューは、
図3Bのターゲット・テーブルに対して以下のように定義することができる:
CREATE VIEW <replication-view> AS
SELECT * FROM <target-table> WHERE
【数57】
AND ID NOT IN
【数58】
レプリケーション・ビューは、式Eq(2)のクエリ・ビューを含む。これらは別個に提供されてもよい。なぜなら、レプリケーション・ビューは、レプリケーション・プログラムの実行のために(例えば、本方法で定義されるトリガを使用して)さらに適合されるかもしれないが、通常のクエリはその適合を必要としないため、クエリ・ビューに対して実行することができるからである。
【0040】
レプリケーション・プログラムは、変更済レコードをレプリケーション・ビューに挿入するためのinsertコマンドを含んでもよい。例えば、insertコマンドは、レプリケーション・ビューに対する次のようなSQLのINSERTステートメントである:
INSERT INTO <replication-view>
【数59】
VALUES
【数60】
このステートメントでは、レプリケーション・ターゲット・パーティションの名前と、挿入する値を指定する。これらは、それぞれソース・パーティションID
【数61】
を有するソース・パーティションSP
1…SP
Jの変更済レコードである。デフォルトの動作モードまたは第2の動作モードに従ったレプリケーション・プログラムの実行は、insertコマンドの実行を含む。レプリケーション・ビューは、デフォルトの動作モードと第2の動作モードとで異なるように適合される。
【0041】
本方法はさらに、デフォルトの動作モードと第2の動作モードとの切り替えを可能にすることができる。そのために、ステップ401でレプリケーション・ビューに対して一時的なINSTEAD OFトリガなどのトリガを定義することができる。トリガは、レプリケーション・ビューに関連付けられ、更新プログラムが終了していない間にレプリケーション・プログラムが開始されると起動するデータベース・オブジェクトとすることができる。トリガが必要なのは、更新プログラムがまだ完了していない間だけとなり得る。更新プログラムが終了してコミットされ次第、トリガはドロップすることができる。したがって、長期的にパフォーマンスに悪影響を及ぼすことはない。さらに、クエリに対するパフォーマンスへの影響はない場合がある。トリガは、クエリに使用されなくてもよいレプリケーション固有のビューにのみ存在するからである。INSTEAD OFトリガは、例えば次のように定義することができる:
CREATE TRIGGER <trigger-name> INSTEADOF INSERT ON <replication-view>
REFERENCING NEW AS n
FOR EACH ROW
SET n.partitionID = CASE n.partitionID WHEN
【数62】
THEN
【数63】
ELSE n.partitionID END, where i=1…J
【0042】
ステップ403におけるレプリケーション・プログラムの実行は、レプリケーション・ビューに対して定義されたinsertコマンドを実行することを含むことができる。更新プログラムがまだ終了していない間に、トリガを使用して第2の動作モードに従ってレプリケーション・プログラムを実行してもよい。ターゲット・データベース・システムは、insertコマンド、例えばSQLのINSERTステートメントなどを受け取ることができる。ターゲット・データベース・システムは、insertコマンドを解析し、何らかの内部表現にコンパイルすることがある。このフェーズの間、ターゲット・データベース・システムはレプリケーション・ビューの存在をチェックすることがある。ターゲット・データベース・システムは、例えば、insertコマンドを実行するユーザが必要な権限を持っているかどうかをさらにチェックすることができる。加えて、ターゲット・データベース・システムは、レプリケーション・ビューに対するトリガについて知ることができる。したがって、トリガはステートメントの内部表現にコンパイルされる。特に、このステートメントの内部表現へのコンパイルは、トリガの上記追加的なSETステートメントを含めることにつながる場合がある。その後、内部表現が処理されると、挿入される値が最初に取り出され、次にSETステートメント(元々はトリガから)が処理され、最後にターゲット・テーブル、つまりレプリケーション・ビューが構築されるベース・テーブルに値が挿入される。したがって、第2の動作モードでは、レプリケーション・プログラムはID
【数64】
を持つパーティションを使用し続ける。しかし、このトリガは、事実上セマンティクスを変更し、
【数65】
をそれぞれ
【数66】
に置き換え、Jのソース・パーティションSP
1…SP
Jの変更済レコードをそれぞれID
【数67】
を持つロード・ターゲット・パーティションに、直接コピーする。しかし、レプリケーション・プログラムはその変更に気づかない。ターゲット・データベース・システムはそれをトランスペアレントに処理する。この方法では、時刻t
1における部分的なリロードで使用されたマッピング済パーティションID
【数68】
を使用する。パーティションID
【数69】
を使用したレプリケーションによって挿入された行は、後処理を必要としなくてもよいという大きな利点がある。しかし、
【数70】
とは異なる何らかの他の一意なターゲット・パーティションIDを使用することも可能である。単に、ターゲット・パーティションIDが、部分的なリロードの前に見えてはならないことが要求される場合がある。部分的なリロードの前に開始したクエリは、部分的なリロードの終了後にレプリケーション・プログラムが生成する行を突然見ることはない。
【0043】
図5は、第2の動作モードに従ってレプリケーション・プログラムを実行するための方法のフローチャートである。
図5の方法は、
図2のステップ215の例示の実装形態を提供する。説明のために、
図5で説明した方法は、
図1に図示されたシステムにおいて実装されるが、この実装形態に限定されない。
図5の方法は、例えば、ターゲット・データベース・システム103によって実行することができる。レプリケーション・ビューは、
図3Bで示したようにターゲット・テーブルに対して以下のように定義することができる:
CREATE VIEW <replication-view> AS
SELECT * FROM <target-table>
WHERE
【数71】
AND ID NOT IN
【数72】
【0044】
図5の方法は、
図4の方法の代替手法を説明する。レプリケーション・ビューに対してトリガは使用されない。その代わりに、ステップ501では、それぞれJソース・パーティションSP
1…SP
Jの変更済レコードを、それぞれステージング・テーブルを介してID
【数73】
を持つロード・ターゲット・パーティションに、(間接的に)コピーできるようにするための別個のテーブル(ステージング・テーブルと呼ばれる)が提供される。
【0045】
ステップ503では、レプリケーション・ビューの定義を、以下のようにステージング・テーブルをカバーするように変更することができる:
CREATE VIEW <replication-view> AS
SELECT * FROM <target-table>
WHERE
【数74】
AND ID NOT IN
【数75】
UNION ALL
SELECT * FROM <staging-table>
【0046】
ステージング・テーブルは、リロードされたばかりのパーティションに対して新しくレプリケートされた行をすべて保持するために使用することができる。ソース・パーティションID
【数76】
の新しいレプリケートされた行はすべて、そのステージング・テーブルに置くことができる。変更されたレプリケーション・ビューに変更済レコードを挿入するために、insertコマンド(例えば、INSERTステートメント)を定義することができる。第2の動作モードに従ったレプリケーション・プログラムの実行は、insertコマンドの実行を含む。
図3および
図4の以前の方法と同様に、レプリケーション・プログラムは、デフォルトの動作モードと第2の動作モードの間で異なるように振る舞うことがない。ソース・パーティションのコピーは、レプリケーション・プログラムにとって完全にトランスペアレントである。異なる振る舞いは、ターゲット・データベース・システム内にある。ターゲット・データベース・システムは、レプリケーション・ビューがどのように定義されているかを知っている。このレプリケーション・ビューの定義から、パーティションID
【数77】
を持つ行はすべてステージング・テーブルに記憶されることが導き出される。したがって、レプリケーション・プログラムのINSERTステートメントの内部コンパイル表現は、ステージング・テーブルをターゲットとして使用する。
【0047】
式Eq(2)のクエリ・ビューも、レプリケーション・ビューと同じように、ステージング・テーブルをカバーするように適合させることができる。これにより、新しくレプリケートされた行を新しいクエリで利用できるようになる場合がある。ビューの定義により、データベース・システムはパーティションID
【数78】
を持つすべての行がステージング・テーブルにあり、それ以外の行は通常のテーブルにあると判断することができる。その情報は、ステップ505でレプリケーション・ビューに対してINSERTステートメントが実行されるときに利用することができる。例えば、データベース・システムは、ソース・パーティションID
【数79】
を持つ変更済レコードをステージング・テーブル自体に挿入する。これは、レプリケーション・プロセスにとっては完全にトランスペアレントであり得る。
【0048】
更新プログラムが完了した後、通常のレプリケーション実施とデフォルトの動作モードをリストアするために、ステージング・テーブルの使用を段階的に停止することができる。そのためには、ステージング・テーブルのすべての行をターゲット・テーブルに移動させる必要がある場合がある。INSERT/DELETEステートメントは組み合わせて使用することができる。なぜなら、(複数のSQLステートメントを用いる)他のすべての手法は、同時に実行されるクエリに対して不正確な結果をもたらす可能性があるからである。
INSERT INTO <target-table>
SELECT CASE ID WHEN
【数80】
THEN
【数81】
ELSE ID END,*, where i=1…K
FROM OLD TABLE (DELETE FROM<staging-table>)
【0049】
説明したINSERT/DELETEによるデータ移動は、移動した行に関し、これらはレプリケーション・ビューのWHERE句によってフィルタリングされるため、パーティションID
【数82】
を使用しない可能性があることに留意されたい。このデータ移動と同時に、レプリケーションによって新しい行が作成される可能性がある。したがって、上記の組み合わせたINSERT/DELETEステートメントのうちINSERTステートメントは、数回繰り返さなければならないことがある。しかし、最終的には、最終行を移動するために、テーブルのレプリケーションを一時的に中断する必要があり得る。代替として、通常のテーブルのunion-all-legの「NOT IN
【数83】
」を除去して、クエリ・ビュー定義を変更することもできる。これにより、パーティションID
【数84】
または
【数85】
を持つ行がどこに挿入されるべきか曖昧になることがあり、そのためINSTEAD OFトリガが、通常テーブルとステージング・テーブルの両方に対してすべてのDELETEを実行しつつ、すべてのINSERTを通常テーブルに向ける必要がある場合がある。
【0050】
図6は、本開示に関わる方法ステップの少なくとも一部を実装するのに適した一般的なコンピュータ化されたシステム600を表している。
【0051】
本明細書で説明される方法は、少なくとも部分的には非対話的であり、サーバや組み込みシステムなどのコンピュータ化されたシステムによって自動化されることを諒解されたい。しかし、例示的な実施形態では、本明細書で説明される方法は、(部分的に)対話的なシステムで実装することができる。これらの方法はさらに、ソフトウェア612、622(ファームウェア622を含む)、ハードウェア(プロセッサ)605、またはそれらの組合せで実装することができる。例示的な実施形態では、本明細書で説明される方法は、実行可能なプログラムとしてソフトウェアで実装され、パーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどの特殊または汎用デジタル・コンピュータによって実行される。したがって、最も一般的なシステム600は、汎用コンピュータ601を含む。
【0052】
例示的な実施形態では、ハードウェア・アーキテクチャの観点から、
図6に示すように、コンピュータ601は、プロセッサ605、メモリ・コントローラ615に結合されたメモリ(主メモリ)610、およびローカル入出力コントローラ635を介して通信可能に結合された1つまたは複数の入力または出力(I/O)デバイス(または周辺機器)10、645あるいはその両方を含む。入出力コントローラ635は、当技術分野で知られているように、1つもしくは複数のバスまたは他の有線もしくは無線接続とすることができるが、これに限定されない。入出力コントローラ635は、通信を可能にするために、コントローラ、バッファ(キャッシュ)、ドライバ、リピータ、および受信機など、簡単のために省略される追加の要素を有することができる。さらに、ローカル・インターフェースは、前述のコンポーネント間の適切な通信を可能にするために、アドレス、制御、またはデータ接続あるいはその組合せを含むことができる。本明細書で説明されるように、I/Oデバイス10、645は、一般に、当該技術分野で既知の一般化された暗号カードまたはスマート・カードを含むことができる。
【0053】
プロセッサ605は、ソフトウェア、特にメモリ610に記憶されたソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ605は、カスタム・メイドまたは市販のプロセッサ、中央処理装置(CPU)、コンピュータ601に関連する複数のプロセッサのうちの補助プロセッサ、半導体ベースのマイクロプロセッサ(マイクロチップまたはチップセットの形態)、または一般にソフトウェア命令を実行するための任意のデバイスとすることができる。プロセッサ605は、例えばマルチコア・プロセッサであってもよい。
【0054】
メモリ610は、揮発性メモリ素子(例えば、ランダム・アクセス・メモリ(DRAM、SRAM、SDRAMなどのRAM))および不揮発性メモリ素子(例えば、ROM、消去可能プログラマブル読み取り専用メモリ(EPROM)、電子的消去可能プログラマブル読み取り専用メモリ(EEPROM)、プログラマブル読み取り専用メモリ(PROM)のいずれか1つまたはその組合せを含むことができる。メモリ610は、様々なコンポーネントが互いに離れた場所にあるが、プロセッサ605によってアクセス可能な分散アーキテクチャを有することができることに留意されたい。
【0055】
メモリ610内のソフトウェアは、1つまたは複数の別個のプログラムを含むことができ、その各々は、論理機能、特に本発明の実施形態に関与する機能を実装するための実行可能命令の順序付けられた列挙を含む。
図6の例では、メモリ610内のソフトウェアは、例えばデータベース管理システムなどのデータベースを管理する命令612を含む。
【0056】
メモリ610内のソフトウェアには、通常、適切なオペレーティング・システム(OS)411も含まれる。OS611は、可能なものとしては本明細書で説明される方法を実装するためのソフトウェア612など、他のコンピュータ・プログラムの実行を基本的に制御する。
【0057】
本明細書で説明される方法は、ソース・プログラム、実行可能プログラム(オブジェクト・コード)、スクリプト、または実行される命令612のセットからなる他の任意のエンティティの形態とすることができる。ソース・プログラムの場合、OS611に関して適切に動作するように、コンパイラ、アセンブラ、インタープリタなどを介してプログラムを翻訳する必要があるが、これらはメモリ610内に含まれてもよいし、含まれなくてもよい。さらに、方法は、データのクラスとメソッドを有するオブジェクト指向プログラミング言語、あるいはルーチン、サブルーチン、もしくは関数またはその組合せを有する手続き型プログラミング言語として記述することができる。
【0058】
例示的な実施形態では、従来のキーボード650およびマウス655を入出力コントローラ635に結合することができる。I/Oデバイス645などの他の出力デバイスには、例えば、プリンタ、スキャナ、マイクロフォンなどの入力デバイスが含まれるが、これらに限定されない。最後に、I/Oデバイス10、645は、入力と出力の両方を通信するデバイス、例えば、(他のファイル、デバイス、システム、またはネットワークにアクセスするための)ネットワーク・インターフェース・カード(NIC)もしくは(他のファイル、デバイス、システム、またはネットワークにアクセスするための)変調器/復調器、高周波(RF)または他の送受信機、電話インターフェース、ブリッジ、ルータなどをさらに含むことができるが、これらに限定されない。I/Oデバイス10、645は、当該技術分野で既知の一般的な暗号カードまたはスマート・カードであり得る。システム600は、ディスプレイ630に結合されたディスプレイ・コントローラ625をさらに含むことができる。例示的な実施形態では、システム600は、ネットワーク665に結合するためのネットワーク・インターフェースをさらに含むことができる。ネットワーク665は、ブロードバンド接続を介してコンピュータ601と任意の外部サーバ、クライアントなどとの間で通信するためのIPベースのネットワークとすることができる。ネットワーク665は、コンピュータ601と外部システム30との間でデータを送受信し、これらのシステムは、本明細書で説明される方法のステップの一部またはすべてを実行するために関与することができる。例示的な実施形態では、ネットワーク665は、サービス・プロバイダによって運用される管理IPネットワークであり得る。ネットワーク665は、例えば、WiFi、WiMaxなどの無線プロトコルおよび技術を使用して、無線方式で実装することができる。ネットワーク665は、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、または他の同様のタイプのネットワーク環境などのパケット交換ネットワークとすることもできる。ネットワーク665は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク(WLAN)、無線ワイド・エリア・ネットワーク(WWAN)、パーソナル・エリア・ネットワーク(PAN)、仮想プライベート・ネットワーク(VPN)、イントラネット、または他の適切なネットワーク・システムであってよく、信号を送受信するための機器を含む。
【0059】
コンピュータ601がPC、ワークステーション、インテリジェント・デバイスなどである場合、メモリ610内のソフトウェアは、基本入力出力システム(BIOS)をさらに含むことができる。BIOSは、起動時にハードウェアを初期化してテストし、OS611を開始し、ハードウェア・デバイス間のデータの転送をサポートする、基本的なソフトウェア・ルーチンのセットである。BIOSはROMに記憶され、コンピュータ601が起動したときにBIOSを実行できるようになっている。
【0060】
コンピュータ601が動作しているとき、プロセッサ605は、メモリ610内に記憶されたソフトウェア612を実行し、メモリ610との間でデータを通信し、ソフトウェアに従ってコンピュータ601の動作を全般的に制御するように構成される。本明細書で説明される方法およびOS611は、その全体または一部、典型的には後者が、プロセッサ605によって読み取られ、場合によってはプロセッサ605内でバッファリングされ、その後実行される。
【0061】
図6に示されるように、本明細書で説明されるシステムおよび方法がソフトウェア612に実装される場合、方法は、任意のコンピュータ関連システムもしくは方法による、またはそれと関連した使用のために、ストレージ620などの任意のコンピュータ可読媒体に記憶することができる。ストレージ620は、HDDストレージなどのディスク・ストレージを含むことができる。例えば、本方法を実装するプログラム・コードは、1つまたは複数のコンピュータ可読記憶媒体上に存在し得る。システム600は、例えば、ターゲット・データベース・システム103またはソース・データベース・システム101を含む。本コンピュータ・プログラム・コード/本方法は、例えば、1つまたは複数のプロセッサ、特にソース・データベース・システムとターゲット・データベース・システムのような異なるシステムのプロセッサ上で実行/遂行することができる。1つまたは複数のプロセッサは、プログラム・コード/方法の要素を命令として受け取ることができる。
【0062】
本発明は、あらゆる可能な技術的詳細レベルの統合において、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、本発明の態様をプロセッサに遂行させるためのコンピュータ可読プログラム命令を有する1つまたは複数のコンピュータ可読記憶媒体を含むことができる。本明細書で使用される場合、「プロセッサ」は、プログラムもしくは機械実行可能命令、またはコンピュータ実行可能コードを実行できる電子部品を包含する。プロセッサは、例えばマルチコア・プロセッサであってもよい。プロセッサは、単一のコンピュータ・システム内の、または複数のコンピュータ・システム間に分散されたプロセッサの集合を指すこともある。コンピュータ実行可能コードは、同一コンピューティング・デバイス内にある複数のプロセッサによって実行されてもよいし、複数のコンピューティング・デバイスに分散して実行されてもよい。
【0063】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持および記憶できる有形のデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、またはこれらの任意の適切な組合せとすることができるが、これらに限定されるものではない。コンピュータ可読記憶媒体のより具体的な例の非網羅的な列挙としては、以下が挙げられる:ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピ・ディスク、命令が記録されたパンチカードまたは溝に刻まれた構造などの機械的にエンコードされたデバイス、および前述のあらゆる好適な組合せ。本明細書において使用される場合、コンピュータ可読記憶媒体は、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を介して伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を介して伝送される電気的信号など、一過性の信号そのものであると解釈されてはならない。
【0064】
本明細書において説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個別のコンピューティング/処理デバイスに、あるいは、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはその組合せなどのネットワークを介して、外部のコンピュータまたは外部のストレージ・デバイスに、ダウンロードすることができる。ネットワークは、銅の伝送ケーブル、光学伝送ファイバ、無線伝送、ルータ、ファイヤウォール、スイッチ、ゲートウェイ・コンピュータまたはエッジ・サーバあるいはその組合せを備えることができる。それぞれのコンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、個別のコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0065】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の設定データ、あるいはスモールトーク(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語などの手続き型プログラミング言語もしくは類似するプログラミング言語、を含む1つまたは複数のプログラミング言語のあらゆる組合せで記述された、ソース・コードまたはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、すべてユーザのコンピュータ上で、一部はユーザのコンピュータ上でスタンドアロンのソフトウェア・パッケージとして、一部はユーザのコンピュータ上で一部はリモート・コンピュータ上で、またはすべてリモート・コンピュータ上もしくはサーバ上で、実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、または接続は(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部のコンピュータに対してなされてもよい。いくつかの実施形態において、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して電子回路を個別化することができる。
【0066】
本発明の態様は、本明細書では、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら説明される。フローチャート図またはブロック図あるいはその両方のそれぞれのブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実装されることが理解されよう。
【0067】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/作用を実装する手段を作成すべく、コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を作るものであってよい。これらのコンピュータ可読プログラム命令はまた、命令を記憶して有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実装するための命令を含む製造物品を備えるべく、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに特定のやり方で機能するように指示するものであってもよい。
【0068】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイスで実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実装するように、コンピュータ実装処理を作るべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【0069】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能、および動作を図示している。この点において、フローチャートまたはブロック図のそれぞれのブロックは、指定される論理機能を実装するための1つまたは複数の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表現することができる。一部の代替的な実装形態において、ブロックで示される機能は図面で示した順とは異なって発生してもよい。例えば、連続して示される2つのブロックは、実際には1つのステップとして遂行されてもよく、同時に、実質的に同時に、部分的もしくは全体的に時間的に重なるやり方で実行されてもよく、またはブロックは関与する機能によっては、時に逆の順で実行されてもよい。ブロック図またはフローチャート図あるいはその両方のそれぞれのブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せは、指定される機能もしくは作用を実施する、または特殊目的ハードウェアとコンピュータ命令との組合せを実行する、特殊目的ハードウェア・ベースのシステムによって実装されることにも留意されたい。
【手続補正書】
【提出日】2024-05-23
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ソース・データベース・システムとターゲット・データベース・システムとの間のデータ同期のためのコンピュータ
の情報処理による方法であって、前記方法が、
第1のターゲット・テーブルに記憶された、第1のソース・テーブルの最終バージョンへアクセスすることを可能にする前記ターゲット・データベース・システムのクエリ・ビューを識別することであって、前記クエリ・ビューが前記第1のターゲット・テーブルのレコードを選択するように構成され、前記第1のターゲット・テーブルが、第1のロード・パーティションIDを持つ第1のロード・ターゲット・パーティションと、第1のレプリケーション・パーティションIDを持つ第1のレプリケーション・ターゲット・パーティションとを有する、前記識別することと、
前記第1のソース・テーブルの第1のソース・パーティションの現行バージョンのためのロード・プログラムを実行することであって、前記ロード・プログラムを実行することが、前記第1のソース・パーティションを前記第1のターゲット・テーブルの第2のロード・ターゲット・パーティションにロードすることを含み、前記第2のロード・ターゲット・パーティションが第2のロード・パーティションIDを有する、前記実行することと、
前記第2のロード・パーティションIDを有する前記第1のターゲット・テーブルのレコードを選択するために前記クエリ・ビューを変更することと、
前記第1のレプリケーション・ターゲット・パーティションのレコードを前記第1のロード・ターゲット・パーティションに割り当てるための更新プログラムを実行することと、
前記第1のソース・テーブルの前記第1のソース・パーティションの1つまたは複数の現在のレコードのレプリケーション要求を受信したことに応答して、前記更新プログラムの前記実行が終了したかどうかを判定することと、
少なくとも部分的に、前記更新プログラムの前記実行が終了したかどうかを判定することに基づいて、レプリケーション・プログラムの動作モードを選択することと、
前記選択された動作モードに従って前記レプリケーション・プログラムを実行することと、
前記第1のレプリケーション・ターゲット・パーティションの前記レコードをさらに選択するために、前記クエリ・ビューを変更することとを含む、
方法。
【請求項2】
前記レプリケーション・プログラムの前記動作モードを選択することが、前記更新プログラムの前記実行が終了したとの判定に応答して、前記レコードを前記第1のレプリケーション・ターゲット・パーティションにコピーするデフォルトの動作モードを選択することを含む、請求項1に記載の
方法。
【請求項3】
前記レプリケーション・プログラムが、前記デフォルトの動作モードに従って
ソース・パーティションの変更済レコードをコピーすることと、
前記ソース・パーティションを1つまたは複数のロード・ターゲット・パーティションおよびレプリケーション・ターゲット・パーティションと関連付けることとを行うように構成される、請求項2に記載の
方法。
【請求項4】
前記ターゲット・データベース・システムが前記ソース・データベース・システムの前記第1のソース・テーブルに関連付けられた前記第1のターゲット・テーブルを含み、前記第1のソース・テーブルが少なくとも1つのソース・パーティションを含み、前記ソース・パーティションの現行バージョンが前記第1のロード・ターゲット・パーティションに記憶され、前記第1のターゲット・テーブルの前記第1のレプリケーション・ターゲット・パーティションが前記ロード・プログラムと前記レプリケーション・プログラムをそれぞれ使用し、前記第1のロード・ターゲット・パーティションが一意な第1のロード・パーティションIDおよび一意な第1のレプリケーション・パーティションIDを有する、請求項
1に記載の
方法。
【請求項5】
前記クエリ・ビューを含むレプリケーション・ビューを提供することであって、前記レプリケーション・プログラムが、前記レコードを挿入するための前記レプリケーション・ビューに対するinsertコマンドを含む、前記提供することをさらに含み、前記デフォルトの動作モードに従って前記レプリケーション・プログラムを実行することが、前記レプリケーション・ビューを変更することによって実行される、請求項
2に記載の
方法。
【請求項6】
前記レプリケーション・プログラムの前記動作モードを選択することが、前記更新プログラムが終了していないとの判定に応答して、前記レコードを前記第1のターゲット・テーブルの所与のターゲット・パーティションにコピーするために代替の動作モードを選択することを含む、請求項
1に記載の
方法。
【請求項7】
前記所与のパーティションが、前記第2のロード・ターゲット・パーティションである、請求項6に記載の
方法。
【請求項8】
前記レコードを前記所与のターゲット・パーティションにコピーするために前記代替の動作モードに従って前記レプリケーション・プログラムを実行することが、
前記レコードを、前記第1のターゲット・テーブルとは異なるステージング・テーブルに記憶することと、
前記ステージング・テーブルの前記レコードをさらに選択するために前記クエリ・ビューを変更することとを含む、請求項
6に記載の
方法。
【請求項9】
前記更新プログラムが終了したことを検証することと、
前記ステージング・テーブルを前記第1のターゲット・テーブルの所与の前記パーティションに移動することとをさらに含む、請求項
8に記載の
方法。
【請求項10】
前記所与のパーティションが前記第2のロード・パーティションまたは前記第1のロード・ターゲット・パーティションあるいはその両方と異なっており、前記方法が、前記所与のパーティションの前記レコードをさらに選択するために前記クエリ・ビューを変更することをさらに含む、請求項
6に記載の
方法。
【請求項11】
前記レコードを前記第2のロード・ターゲット・パーティションにコピーするために前記代替の動作モードに従って前記レプリケーション・プログラムを実行することが、
前記レプリケーション・プログラムのデフォルトの動作モードから前記代替の動作モードに切り替えるためにトリガを実装することであって、前記トリガが、前記レコードの前記第1のレプリケーション・ターゲット・パーティションへの前記コピーをスキップして、前記レコードを前記第2のロード・ターゲット・パーティションにコピーするための前記トリガにおいて定義された別のコマンドを実行する、SQL INSTEAD OFトリガを含み、前記トリガが、前記更新プログラムが終了していないとの判定に応答して起動される、前記実装することを含む、請求項
6に記載の
方法。
【請求項12】
前記更新プログラムが終了したことを検証することと、
前記トリガを削除することと、
前記デフォルトの動作モードに従って前記レプリケーション・プログラムの前記実行を完了することとをさらに含む、請求項11に記載の
方法。
【請求項13】
前記クエリ・ビューを変更することが、前記第1のロード・パーティションIDおよび前記第1のレプリケーション・パーティションIDの選択を解除することをさらに含み、前記選択された動作モードに従って前記レプリケーション・プログラムを実行することが、
最初に変更されたクエリ・ビューを使用するクエリが終了した後に実行される、請求項
1に記載の
方法。
【請求項14】
前記クエリ・ビューが、前記ロード・パーティションIDの最大ロード・パーティションIDより小さいIDを有するレコードの選択を含む、請求項
1に記載の
方法。
【請求項15】
前記ロード・プログラムが、
ソース・データベース・システムのソース・テーブルのソース・パーティションの1つまたは複数の別個のバージョンを、ターゲット・データベース・システムの対応するターゲット・テーブルのそれぞれ別個のターゲット・パーティションにロードすることであって、前記それぞれ別個のターゲット・パーティションが一意なロード・パーティションIDを有する、前記ロードすることを行うように構成される、請求項
1に記載の
方法。
【請求項16】
請求項1~15の何れか1項に記載の方法を、コンピュータに実行させる、コンピュータ・プログラム。
【請求項17】
請求項16に記載の前記コンピュータ・プログラムを、コンピュータ可読記憶媒体に記憶した、記憶媒体。
【請求項18】
請求項1~15の何れか1項に記載の方法を、コンピュータ・ハードウェアによって実行する、コンピュータ・システム。
【国際調査報告】