複製 は、複数の場所にある定義済みデータ集合を保守するためのプロセスです。 これには、特定の変更内容をある場所 (ソース) から別の場所 (ターゲット) にコピーしたり、それら 2 つの場所にあるデータを同期化したりすることが関係しています。 ソースおよびターゲットの場所としては、分散ネットワーク内の同じマシンまたは異なるマシン上にある論理サーバー (DB2 データベース、DB2 (OS/390 版) サブシステム、 またはデータ共用グループなど) が可能です。
データ複製のための IBM 製品にはいくつかのものがあります。 本書が主な対象とする製品 −DB2 DataPropagator− は、関係データ用の複製製品です。 この製品を使うと、任意の DB2 リレーショナル・データベース間の変更を複製できます。 また、他の IBM 製品 (DB2 DataJoiner および IMS DataPropagator など) または IBM 以外の製品 (Microsoft SQL Server や Sybase SQL Server など) と併用することにより、 ますます増えていくデータベース製品 (リレーショナル・データベースと非リレーショナル・データベースの両方) 相互間のデータ複製にも使用できます。
必要とされる複製環境は、データを更新するタイミングとトランザクションの処理方法によって異なります。 複製構成要素の場所を選択して、複製環境の効率を最大限に高めることができます。
第 2 章に進んで複製環境を設計し始める前に、この章を読んで、DB2 複製構成要素とその関連概念をよく理解しておいてください。
DB2 DataPropagator は、管理インターフェース、変更収集メカニズム、および変更適用プログラムの 3 つの主要な構成要素で構成されています。
ここでは、複製要求を管理する制御表や複製構成要素 (管理インターフェース、変更収集メカニズム、変更適用プログラム) が含まれる論理サーバーについて説明し、 さらに主な構成要素とその相互間の通信方法について説明します。
複製構成要素は制御表を使用することによって、相互に通信したり、 複製タスク (ソースおよびターゲットの管理、変更の収集、変更の複製、 複製された変更数と未複製の変更数などの追跡) を管理したりします。
変更収集メカニズムでは、制御表として登録表、作業単位表、枝取り制御表、枝取りロック表、クリティカル・セクション表、ウォーム・スタート表、チューニング・パラメーター表、 および変更データ表を使用します。 その他のプラットフォーム固有の制御表については、 表の構造を参照してください。
変更適用プログラムでは、制御表として適用追跡表、クリティカル・セクション表、枝取り制御表、枝取りロック表、登録表、サブスクリプション・セット表、サブスクリプション・ステートメント表、 サブスクリプション・イベント表、サブスクリプション・ターゲット・メンバー表、サブスクリプション列表、作業単位表、および変更データ表を使用します。
すべての複製構成要素は 1 つの論理サーバー上にあります。 本書で言及する論理サーバーとはデータベース のことであり、クライアント / サーバーという意味でのサーバーのことではありません。 OS/390 オペレーティング・システムの場合、 論理サーバーはサブシステム またはデータ共用グループ (単一データベース・カタログのドメイン) に相当します。 論理サーバーには、以下の 3 種類があります。
変更適用プログラムは、ネットワーク内の論理サーバーのいずれかに置くことができます。 このプログラムは分散 DB2 テクノロジーを使って、制御サーバー、ソース・サーバー、およびターゲット・サーバーに接続します。
各変更適用プログラムはそれぞれ 1 つの制御サーバーに関連付けられ、変更適用プログラムの開始時にはその制御サーバーを指定します。 複数の変更適用プログラムで 1 つの制御サーバーを共用することができます。
管理インターフェースは、複製基準を保管する制御表を作成するために使用します。 ユーザー・インターフェースとして、 DB2 コントロール・センターと DataJoiner 複製管理 (DJRA) の 2 つがあります。
DB2 コントロール・センターは、DB2 サーバー間のデータ複製を管理するためのデータベース管理ツールです。 このツールを使用すれば、ターゲット・コピー情報を指定する際に、ターゲット表および制御表の作成など、たくさんの初期設定機能が自動化されます。
コントロール・センターを使えば、以下の複製管理作業を実行できます。
DataJoiner 複製管理 (DJRA) ツールは、さまざまな複製管理作業を実行するために使用できるデータベース管理ツールです。 このツールは DB2 相互間の複製に使用できますが、複製環境に IBM 以外のデータベースが含まれる場合には必ずこれを使用してください。
DJRA を使うと、以下の管理作業を実行することができます。
DB2 データ複製ソリューションは、データを収集するために以下のようなさまざまなメカニズムを提供します。
以下において、収集プログラムおよび収集トリガーについて説明します。 Microsoft Access および Microsoft Jet データベースで変更を複製する方法については、DB2 DataPropagator for Microsoft Jet の使用を参照してください。
ソースが DB2 表の場合、ソースに加えられた変更を収集するのは収集プログラムです。 収集プログラムは、データベース・ログ 8 を使って、ソース・データベースに加えられた変更を収集し、 それらの変更を一時的に表に保管します。
収集プログラムはソース・サーバーで実行されます。 一般にこのプログラムは継続的に実行されますが、ユーティリティーの実行中または複製ソースの変更中には停止することができます。
収集プログラムの使用法については、操作を参照してください。
ソース表が非 IBM データベース (Teradata、Microsoft Access、 および Microsoft Jet を除く) にある場合、 ソースに加えられた変更を収集するのは収集トリガーです。 収集トリガーは、特定のデータベース・イベント (UPDATE、INSERT、DELETE) が発生した場合に起動されます。
DJRA は収集トリガーを自動的に作成します。 それらのトリガーは、定義済み複製ソースとして定義されている表に加えられた変更を収集して、 その変更を一時的に表に保管します。
変更適用プログラムはソース表またはソース視点からデータを直接読み、ターゲット表に初期データを入れます。 ソース表が IBM 以外のデータベースにある場合、 変更適用プログラムはニックネームを使ってデータを読みます。 変更をコピーする場合、変更適用プログラムは、 表に一時的に保管されている変更済みデータを読んで、変更をターゲット表に適用します。
変更適用プログラムは一般にターゲット・サーバーで実行されますが、 ソース、制御、およびターゲット・サーバーと接続できる、ネットワーク内の任意のサーバーでも実行できます。 複数の変更適用プログラム・インスタンスを、同じまたは異なるサーバーで実行することができます。 各変更適用プログラムは、同じ許可を使用して実行したり、異なる許可を使用して実行したり、 変更適用プログラムのグループの一部として実行したりできます (グループ内の各変更適用プログラムが同じ許可 (ユーザー ID) を使用して実行される場合)。
変更適用プログラムはそれぞれ 1 つの制御サーバーに関連付けられます。 このサーバーには、サブスクリプション・セットの定義を収めた制御表が入っています。 制御表は、変更適用プログラムの複数のインスタンスによって共用できます。 たとえば、ソース・サーバーが 1 つ、ターゲット・サーバーが 2 つある場合、 それぞれのターゲット・サーバーで別々の変更適用プログラムを実行することができます。 これらの 2 つの変更適用プログラムのインスタンスは、制御表を共有できます。 その制御表には、それぞれのインスタンスに関連した特定の情報が収められることになります。
変更適用プログラムの使用法については、管理を参照してください。
複製構成要素は互いに独立しているので、制御表に保管される情報に応じて相互に通信します。 収集プログラム、変更適用プログラム、および収集トリガーは、複製の進行状況を示すように制御表を更新して、変更の進行を調整します。
複製構成要素の通信方法は、ソース・サーバーが DB2 サーバーか非 IBM サーバーかによって違います。 DB2 サーバー間での複製の場合、収集プログラムは、サーバーのログ またはジャーナル を読むことによって、 ソース表内のデータに加えられた変更を収集します。 その後、収集プログラムは変更を変更データ (CD) 表という表に挿入します。 非 IBM ソースの場合、収集トリガーが変更を収集し、整合した変更データ (CCD) 表に保管します。
変更適用プログラムがデータをターゲット・データベースにコピーするたびに、ターゲット・データベースの内容にはソース・データベースに加えられた変更が反映されます。 変更適用プログラムは、変更適用プログラムが最後に実行された後に累積されたトランザクションを適用して処理を実行します。 また、変更適用プログラムは各ターゲットに加えた最後の更新を記録します。
収集プログラムは一部の制御表を使うことによって、ソース・データベースに加えられた変更を示し、 変更適用プログラムはそれらの制御表の値を使ってターゲット・データベースにコピーする必要がある情報を検出します。
重要: 収集プログラムは、変更適用プログラムから収集の指示を受けない限り、情報を収集しません。 また、変更適用プログラムは、複製ソースおよびそれに関連するサブスクリプション・セットが定義されるまで、収集プログラムに変更収集開始の指示を出しません。 構成要素が相互に通信して変更を複製するために実行されるべき手順については、初期複製の実行を参照してください。
以下に示すプロセスは、変更適用プログラムと収集プログラムがデータ保全性を保つために、一般的な 複製シナリオに従って通信する方法について説明したものです。
ソース・データベースからデータを収集する
データをターゲット・データベースに適用する
表の枝取り
IBM 以外のソース表を複製ソースとして定義した場合、 DJRA は DB2 DataJoiner により、そのソース表に収集トリガーを作成します。 ソース表には、DELETE、UPDATE、INSERT の 3 種類のトリガーが作成されます。 また、枝取り制御表と登録同期表には UPDATE トリガーが作成されます。 変更適用プログラムはこれらの制御表を使って、ターゲット・データベースにコピーする必要がある情報を検出します。
以下に示すプロセスは、収集トリガーと変更適用プログラムがデータ保全性を保つために、一般的な 複製シナリオに従って通信する方法について説明したものです。
ソースからデータを収集する
データをターゲットに適用する
表の枝取り
ここでは、DB2 データ複製の重要な概念をいくつか紹介します。 全体を概観するには、この部分を全部読んでください。
複製ソース とは、データのコピー元となるユーザー表 または視点です。 データを複製するには、その前に複製ソースを定義して、変更収集メカニズムが使用する情報を記述しておかなければなりません。 複製ソースを定義する場合は、複製する列を指定し、更新を UPDATE 操作として扱うか、 それとも DELETE および INSERT 操作として扱うかを決定しなければなりません。 更新を扱う方法の詳細については、複製論理区分化キーのサポートを使用できるようにするを参照してください。 さらに、次の点を決定する必要があります。
変更後イメージ 列には、データ列の値が更新された後のソース表内のデータ列の値が入っています。 変更前イメージ 列には、データ列の値が更新される前のソース表内のデータ列の値が入っています。 複製ソースを定義する場合は、変更後イメージだけ、または変更後イメージと変更前イメージの両方を収集するように指定できます。 どちらを選ぶかは、データを使用する方法、および使用している表のタイプによって決まります。
アプリケーションで監査またはロールバック機能が求められる場合は、変更前イメージ列が役立ちます。 それらの列を使用する方法にはいくつかの制約事項が適用されます。それらについては後述します (変更前イメージおよび変更後イメージの複製)。
変更適用プログラムは、全最新表示のみと差分最新表示のいずれかによって、ソースからターゲットにデータをコピーします。
全最新表示のみ のコピーの場合、変更適用プログラムは以下のタスクを実行します。
差分最新表示コピー の場合、変更適用プログラムは変更されたデータだけをターゲット表にコピーします。
対立検出 は、随時更新複製の構成だけに関係するものです。 対立検出とは、同じ複製サイクル中にソース表とターゲット表で同じ行が更新されたどうかを検出するプロセスです。 変更適用プログラムは標準対立検出 を使うことによって、すでに CD 表に取り込まれた行内の対立を検索します。 また、拡張対立検出 を使うことによって、 ターゲット表をすべてロックし、 対立の有無をチェックする時に見過ごされる変更がないようにします。 行レプリカ対立検出 は、DataPropagator for Microsoft Jet によって保守される表にのみ適用されます。 その場合、対立はトランザクション単位ではなく行単位で検出されます。
複製ソースからデータを複製するには、変更を複製するターゲットと複製ソースを関連付ける必要があります。 この情報は、サブスクリプション・セットとサブスクリプション・セット・メンバーを使って定義します。 ここで指定する情報はさまざまな複製制御表に保管されます。
サブスクリプション・セット には、複製サブスクリプションの属性が入っています。 サブスクリプション・セットを作成する場合は、以下の属性を定義します。
サブスクリプション・セットでは、ターゲット表または視点ごとに 1 つのサブスクリプション・セット・メンバー を指定する必要があります。 サブスクリプション・セット・メンバーを作成する場合は、以下の属性を定義します。
サブスクリプション・セットにより、複製中にすべてのサブスクリプション・セット・メンバーがどれも同じように処理されることが保証されます。 つまり、変更はすべてのターゲットに適用されるか、まったく適用されないかのどちらかです。 サブスクリプション・セット内のサブスクリプション・セット・メンバーすべてに関して変更されたデータは、指定されたターゲット表に対し、単一トランザクションとして複製されます。 サブスクリプション・セットにより、セット中のターゲット表がターゲット・サーバーに対して 1 つのトランザクションで処理されるので、パフォーマンスが最適化されます。 サブスクリプション・セットは参照保全も保ちます。
個々のサブスクリプション・セットは 1 つの変更適用プログラムによって処理されますが、それぞれの変更適用プログラムはたくさんのサブスクリプション・セットを処理できます。 サブスクリプション・セットとサブスクリプション・セット・メンバーの関係を 図 1 に示します。
図 1. サブスクリプション・セットとサブスクリプション・セット・メンバー. サブスクリプション・セットとサブスクリプション・セット・メンバーの関係を示す例。
![]() |
変更適用修飾子 は、変更適用プログラムと 1 つまたは複数のサブスクリプション・セットを関連付けます。 サブスクリプション・セットを定義する場合は、変更適用修飾子の値として大文字小文字が区別されるストリングを指定します。 10
複数の変更適用修飾子を指定すれば、単一ユーザー ID から変更適用プログラムの複数のインスタンスを実行できます。 変更適用修飾子は、変更適用プログラムのインスタンスの作業負荷を定義する制御サーバーでレコードを識別するのに使用されます。 一方、ユーザー ID は許可目的だけで使用されます。 たとえば、2 つのソース・データベースから自分のコンピューター上のターゲット表にデータを複製したいとします。 ソース表 A のデータは全最新表示コピーを使ってターゲット表 A に複製され、ソース表 B のデータは差分最新表示コピーを使ってターゲット表 B に複製されます。 2 つのサブスクリプション・セット (表 A に 1 セットと表 B に 1 セット) を定義し、別個の変更適用修飾子を使うことによって、変更適用プログラムの 2 つのインスタンスにおいて、 異なる時期にデータがコピーされるようにします。 1 つの変更適用修飾子を使用して、両方のサブスクリプション・セットを定義することもできます。
ソース表のサブセットだけを複製したり、簡単な視点を使ってソース表からターゲット表にデータを再構造化したり、さらに複雑な結合と共用体を使用したりしたいと思う場合があります。
ソース表全体を複製しないで、ソース表から特定の列や行を複製することができます。 このプロセスは表区分 ともいいますが、本書では列サブセット化 および行サブセット化 と呼ぶことにします。
ソースからすべての列のサブセットだけを複製したい場合は、列サブセット化を使用します。 たとえば、ソース内の一部の列がラージ・オブジェクト (LOB) のように非常に大きい場合や、いくつかの列データ・タイプが目的のターゲット表でサポートされていない場合は、列サブセット化が適切です。
ソース表から行の一部だけを複製する場合は、行サブセット化を使用します。 たとえば、複数の地方事務所にデータを複製する場合、その特定の地方事務所に関係のあるレコードだけを複製することができます。 行をサブセット化するには、サブスクリプション・セット・メンバーの定義時に WHERE 文節を使用します。
データウェアハウジングのシナリオで、ターゲット表のデータを簡単に照会できるようにコピーを再構造化したい場合には簡単な視点が役に立ちます。
たとえば、データベースに履歴書表と写真表が両方ともあるとします。 人事部は、すべての従業員の履歴書と写真の入った 1 つの表を必要としています。 この場合、履歴書表と写真表の両方が入った 1 つの視点を作成し、 この視点を複製ソースとして定義できます。そして、 この視点から人事部データベースのターゲット行にデータを複製するためのサブスクリプション・セットを作成できます。
視点は、他の表の中の関係する列を取り上げる場合にも役立ちます。 サブスクリプション・セット・メンバーの述部の中で、他の表の列を参照できます。 こうすると、更新を該当するターゲット・サイトにルーティングするのが容易になります。
既存のソース表の結合または共用体である内容を使ってターゲット表を作成および保守することができます。
以下のタイプの結合を使用することができます。
結合と共用体を使えば、次のような方法でデータを操作できます。
サブスクリプション・セット・メンバーを定義する場合は、使用するターゲット表のタイプを指定する必要があります。 以下のタイプの表を使用することができます。
以下において、ターゲット表の各タイプごとに固有の特性について説明します。
ユーザー・コピー表は、複製ソースの複製制御列を追加しない読み取り専用コピーです。 これらの表は通常のソース表に似ており、複製の出発点として使用できます。 ターゲット表としては、ごく一般的なタイプです。
時刻表は、複製ソースの読み取り専用コピーにタイム・スタンプ列を追加したものです。 タイム・スタンプ列は、当初はヌルです。 変更が複製されると、更新がなされた時刻を示す値が追加されます。 変更の時刻を記録したい場合は、これらの表タイプを使用します。
集約表は、SQL 列関数 (SUM や AVG など) を使用する読み取り専用表で、ソース表の内容全体またはソース表データに加えられた最近の変更に関する要約データを計算します。 集約表には時間の経過に伴って行が追加されていきます。 集約表には、基礎集約表と変更集約表の 2 種類があります。
基礎集約表 は、ソース表の内容を要約します。 基礎集約表は、ソース表の状態を定期的に追跡する場合に使用します。 たとえば、月ごとの平均顧客数を知りたいとします。 ソース表に顧客ごとの行があれば、月ごとにソース表の行数を平均し、 結果を基礎集約表に保管することができます。
基礎集約表には、変化に関する情報は記録されません。 たとえば、平均顧客数が 1 月は 500 人で、2 月も 500 人であったとします。 しかし、2 月中、既存の顧客を 2 人失い、新しい顧客を 2 人得たとします。 基礎集約表からは、両月の平均顧客数が同じであったことは分かるものの、 2 月中に生じた変化については分かりません。 変化を追跡する場合は、変更集約表を使用してください。
変更集約表 は、ソース表の内容ではなく、制御表の変更データを処理します。 時間の経過に伴う変化 (UPDATE、INSERT、および DELETE 操作) を追跡する場合は、 変更集約表を使用してください。 たとえば、毎月新たに獲得した顧客の数 (INSERTS) と、 失った既存の顧客の数 (DELETES) を知りたいとします。 この場合、ソース表の行に加えられた変更の数を月ごとに数えて、 その数を変更集約表に保管することができます。
この表には、コミットされたトランザクションからのデータが入っています。 また、ターゲット表が INSERT、DELETE、 または UPDATE 操作によって変更されたかどうかを示す標識も入っています。 この表には、データの新しい値と古い値を両方入れることができます。 各タイプの CCD 表 (ローカルとリモート、完全と不完全、圧縮と非圧縮、内部と外部) は、 それぞれ用途が異なります。 それぞれのタイプ、用途、および定義の方法については、 CCD 表の属性に説明されています。 それぞれのタイプの CCD 表は、以下の方法でデータを収集および操作するために使用できます。
アプリケーションから直接更新できるのは、これらのターゲット表だけです。 レプリカおよび行レプリカに加えられた変更は、それに関連するソース表に複製されます。次に、そのソース表は変更を他のレプリカに複製します。 レプリカは DB2 データベースでのみサポートされています。 行レプリカ表 は、DB2 DataPropagator for Microsoft Jet 用の特殊なタイプのレプリカ表です。 随時更新複製にはレプリカ表タイプを使用してください。
ユーザー表 をターゲットとして実際に指定することはありませんが、 随時更新複製においては、関連するレプリカまたは行レプリカのターゲットは自動的にユーザー表になります。 ユーザー表はレプリカの親 で、そのコピーは従属レプリカ です。 対立が検出されない場合、レプリカの親は従属レプリカから更新を受け取り、変更を他の従属レプリカに複製します。 レプリカの親は 1 次データ・ソースです。 対立が検出された場合は、レプリカの親の内容が優先されます。 一般に、アプリケーションは従属レプリカ表にアクセスしますが、レプリカが利用不能の場合はユーザー表が入ったサーバーに接続します。
同期複製 は、連続的に更新を送達します。 ソース・データに変更が加えられると、その変更は一時的に保管され、 後でターゲットに転送されます。 変更は、ターゲット・データベースに変更が複製された後に初めてソース・データベースにコミットされます。 何らかの理由で変更をターゲット・データベースに複製できない場合、ソース・データベースに変更は加えられません。 このタイプの複製はリアルタイム複製 とも呼ばれます。 アプリケーションで同期更新が求められる場合は、本書に記された製品を使わずに、単一の分散トランザクションで表を更新できるようにアプリケーションをコーディングしてください。
非同期複製 は、段階的に更新を送達します。 ソース・データに変更が加えられると、その変更は事前に設定された間隔で一時的に保管され、後でターゲット・データベースに転送されます。 この間隔は、一定の時間単位 (秒、分、時間) として指定したり、事前に記述されたイベント (真夜中その他の時刻) として表現したりできます。 ターゲット・データベースに変更を加えることができない場合 (たとえばターゲット・データベースがダウンしている場合やネットワークがダウンしている場合)、 変更はソースに変更が加えられた順番で保管され、後で適用されます。 このタイプの複製には、同期複製よりも多くの利点があります。 つまり、ネットワーク・リソースの活用効率が優れており、データベースの競合が少なく、ターゲット・データベースに到達する前にデータを拡張する機会があります。
DB2 DataPropagator は非同期複製を実行します。したがって、ソースに加えられた変更はすぐにはターゲットに反映されません。 変更をターゲットに適用する頻度を制御するには、時間間隔、イベント、またはその両方を指定します。 不定期接続のクライアントがある環境の場合は、要求時に (オンデマンド) データを複製できます。
これは、複製のタイミングを制御する最も簡単な方法です。 間隔タイミング を使用するには、変更適用プログラムでターゲットへのデータ複製を開始する日付と時刻を選択し、データ複製の頻度を示す時間間隔を設定します。 変更適用プログラムが停止すると、その時間間隔が経過するまでプログラムは再開されません。 時間間隔は一定の時間 (1 分〜1 年) として指定したり、連続として指定したりすることもできます。 連続時間間隔 とは、変更適用プログラムが複製サイクルを次々に開始して、その間隔に数秒の遅延しかない (遅延は開始パラメーターで制御可能) という意味です。 指定する間隔はおよその目安です。 変更適用プログラムが実際に使用する間隔は、変更適用プログラムが複製しなければならない更新数、およびリソース (つまり、データベース表、表スペース) の可用性によって異なります。
これは、複製のタイミングを制御するためのもっと精密な方法です。 イベント・タイミング を使用するには、 サブスクリプション・セットの定義時にイベントの名前を指定し、 そのイベントを処理する時刻を設定します。 オプションとして、期間の終わりの時刻を設定することができます。 つまり、変更適用プログラムはこの時刻を過ぎてコミットされたトランザクションを複製せず、その複製を将来の日付まで延期します。
イベント・タイミングの情報を、自分で、 あるいは作成するアプリケーションから指定する必要があります。 この情報はサブスクリプション・イベント表に保管されます。 変更適用プログラムはサブスクリプション・イベント表を検索し、イベント名、それに関連する時刻、および期間の終わりに関する情報を調べます。
ASNSAT コマンドを使用すると、 データをオンデマンドで複製できます。 このコマンドは、変更適用プログラムを開始し、 必要な場合には収集プログラムも開始します。 各プログラムは、複製の 1 サイクルで自分が果たすべき役割を終えると、 自動的に終了します。 このコマンドがサポートされるのは、 Windows 32 ビット・オペレーティング・システムにおいてです。 呼び出しパラメーターについては、オンデマンドの複製 (Windows 32 ビット・オペレーティング・システムのみ)に説明されています。
ASNSAT は、不定期接続システムを含む複製構成でも使用されます。 詳細については、DB2 ユニバーサル・データベース サテライト管理 手引きおよび解説書 を参照してください。