レプリケーション要素の定義

クラシック・レプリケーション・スキームは、1つ以上のELEMENT記述で構成されます。ELEMENT記述には、要素の名前、そのタイプ(DATASTORETABLEまたはSEQUENCE)、更新が行われるマスター・データベース、更新がレプリケートされるサブスクライバ・データベースが含まれます。

ノート:

キャッシュ・グループがあるデータベースをレプリケートする場合は、「キャッシュ・グループがあるアクティブ・スタンバイ・ペアの管理」を参照してください。

要素の制限は、次のとおりです。

  • 特定のオブジェクト(表、順序またはデータベース)を複数の要素記述に含めないでください。

  • マスターおよびプロパゲータの両方の役割に同じ要素を定義しないでください。

  • 要素には、現在のホスト上のデータベースがマスター、サブスクライバまたはプロパゲータのいずれかとして含まれている必要があります。

  • 要素名は、レプリケーション・スキーム内で一意である必要があります。

複数サブスクライバ・スキームで要素を定義するための正しい方法については、「複数サブスクライバのクラシック・レプリケーション・スキーム」を参照してください。要素を伝播するための正しい方法については、「伝播スキーム」を参照してください。

後でALTER REPLICATION文を使用して要素の削除または変更を行う場合は、スキーム内の各要素の名前を使用して要素を識別できます。

既存のレプリケーション・スキームに表、順序およびデータベースを追加できます。クラシック・レプリケーション・スキームの変更を参照してください。レプリケーション・スキームから表または順序を除外した後に、そのレプリケーション・スキームの一部であるデータベースから表または順序を削除できます。「クラシック・レプリケーション・スキームからの表または順序の削除」を参照してください。

この項の後半では、次の内容について説明します。

DATASTORE要素の定義

DATASTORE要素を定義することで、マスター・データベースの内容全体をサブスクライバにレプリケートできます。

マスター・データベース(masterds)のすべての内容をサブスクライバ・データベース(subscriberds)にレプリケートする場合、ELEMENT記述(ds1)は次のようになります。

ELEMENT ds1 DATASTORE
  MASTER masterds ON "system1"
  SUBSCRIBER subscriberds ON "system2"

データベース・ホストは、hostnameオペレーティング・システム・コマンドから返されるホスト名で識別してください。ホスト名は二重引用符で囲むことをお薦めします。

ノート:

一時データベースはレプリケートできません。

CREATE REPLICATION文のEXCLUDE TABLE句およびEXCLUDE SEQUENCE句を使用すると、DATASTORE要素からの特定の表および順序の除外を選択できます。EXCLUDE句を使用すると、EXCLUDE句で指定されたオブジェクトを除くデータベース全体が、要素内のすべてのサブスクライバにレプリケートされます。1つの要素記述で使用できるEXCLUDE TABLE句およびEXCLUDE SEQUENCE句はそれぞれ1つのみです。たとえば、この要素記述では2つの表および1つの順序が除外されます。

ELEMENT ds1 DATASTORE
  MASTER masterds ON "system1"
  SUBSCRIBER subscriberds ON "system2"
  EXCLUDE TABLE ttuser.tab1, ttuser.tab2
  EXCLUDE SEQUENCE ttuser.seq1

CREATE REPLICATION文のINCLUDE TABLE句およびINCLUDE SEQUENCE句を使用すると、データベースへの特定の表および順序のみの挿入を選択できます。INCLUDE句を使用すると、INCLUDE句で指定されたオブジェクトのみが、要素内の各サブスクライバにレプリケートされます。1つの要素記述で使用できるINCLUDE TABLE句およびINCLUDE SEQUENCE句はそれぞれ1つのみです。たとえば、この要素記述では1つの表および2つの順序が挿入されます。

ELEMENT ds1 DATASTORE
  MASTER masterds ON "system1"
  SUBSCRIBER subscriberds ON "system2"
  INCLUDE TABLE ttuser.tab3
  INCLUDE SEQUENCE ttuser.seq2, ttuser.seq3

表要素の定義

マスター・データベースからサブスクライバ・データベースに表をレプリケートできます。

ttuser.tab1およびttuser.tab2を、(masterdsという名前でホストsystem1に配置されている)マスター・データベースから、(subscriberdsという名前でホストsystem2に配置されている)サブスクライバ・データベースにレプリケートする場合、ELEMENT記述(名前はaおよびb)は次のようになります。

ELEMENT a TABLE ttuser.tab1
  MASTER masterds ON "system1"
 SUBSCRIBER subscriberds ON "system2"
ELEMENT b TABLE ttuser.tab2
  MASTER masterds ON "system1"
  SUBSCRIBER subscriberds ON "system2"

クラシック・レプリケーション・スキームでの表の要件については、「クラシック・レプリケーション・スキームの制限事項および表要件」を参照してください。

クラシック・レプリケーション・スキーム内の外部キーで関連付けられている表のレプリケート

クラシック・レプリケーション・スキームでは、外部キーで互いに関連付けられている表は、すべての表をレプリケートするか一部の表のみをレプリケートするかを選択できます。

これを行うには、各マスターおよびサブスクライバに、表および外部キー関係を作成します。その後、各マスターおよびサブスクライバでALTER REPLICATION ADD ELEMENT文を使用して、表をレプリケーション・スキームに追加します。

ただし、外部キー関係がON DELETE CASCADEを使用して構成されている場合は、すべての表をレプリケーション・スキームを作成する前に作成する必要があります。その後、CREATE REPLICATION文を使用してすべての表を含むようにレプリケーション・スキームを構成しますが、その際、DATASTORE要素(どの表も除外しない)、または関連付けられているすべての表に対してTABLE要素のいずれかを使用します。

ALTER REPLICATION文を使用してレプリケーション・スキームを作成した後に、ON DELETE CASCADEで構成された外部キーで関連付けられている表をレプリケーション・スキームに追加することはできません。かわりに、レプリケーション・スキームを削除し、ON DELETE CASCADEで構成された外部キーで関連付けられている新しい表を作成してから、関連するすべての表を含む新しいレプリケーション・スキームを作成します。

ON DELETE CASCADEで構成された外部キーを持つ表をレプリケートする場合は、サブスクライバ上の対応する外部キーもON DELETE CASCADEで構成されている必要があります。また、その表に対して外部キーで関連付けられている他のすべての表もレプリケートする必要があります。この要件によって、マスター・データベースでカスケード削除を実行した場合にサブスクライバ表で競合が発生しなくなります。

TimesTen Classicでは、カスケード削除が単一の操作としてレプリケートされ、親表で行が削除された場合に子表で発生する個々の行削除はサブスクライバにレプリケートされません。そのため、親表で削除された外部キーの値を含む行がサブスクライバ・データベースの子表に存在する場合は、その行がマスター・データベースの子表に存在していなかった場合でも削除されます。

順序のレプリケート

順序は、レプリケーション・スキームから除外したり、CYCLE属性が指定されていないかぎり、レプリケートされます。

順序のレプリケーションは、アクティブ・データベースで順序が更新されるたびに、スタンバイ・データベースで順序番号の範囲を予約することによって最適化されます。順序番号の範囲を予約すると、トランザクション・ログの更新回数を減らすことができます。順序番号の範囲はキャッシュと呼ばれます。アクティブ・データベースでの順序の更新のレプリケートは、順序の更新後にレプリケート・トランザクションが実行される場合、または順序の更新がレプリケート・トランザクションで使用される場合にのみ実行されます。

MINVALUEが1で、INCREMENTが1、デフォルトのCacheが20の順序my.seqについて考えてみます。my.seq.NEXTVALを初めて使用すると、マスター・データベースの順序の現在値は2に変更され、新しい現在値21(20+1)がサブスクライバにレプリケートされます。マスター・データベースのmy.seq.NEXTVALへの次の19回の参照では、サブスクライバ・データベースの現在値21がマスターの現在値より大きいため、新しい現在値のレプリケートは行われません。my.seq.NEXTVALへの21回目の参照では、前回レプリケートされたサブスクライバの現在値21が、この時点でマスターの現在値22より小さくなるため、新しい現在値41(21+20)がサブスクライバ・データベースに送信されます。

順序のレプリケーションには、次の制限があります。

  • CYCLE属性が指定された順序はレプリケートできません。

  • レプリケートされる順序の定義は、各ピア・データベースで同じである必要があります。

  • 順序では、競合の検出は実行されません。RETURN TWOSAFEサービスを使用せずに、双方向レプリケーション構成で両方のデータベースの順序を更新すると、両方の順序によって同じNEXTVALが返される可能性があります。

いずれかのピアで更新が行われる双方向レプリケーション・スキームで順序を使用する必要がある場合は、競合を回避するために、各データベースで、異なるMINVALUEおよびMAXVALUE属性が指定された、レプリケートされない順序をかわりに使用できます。たとえば、MINVALUEが1でMAXVALUEが100の順序my.seqをデータベースDS1に作成し、MINVALUEが101でMAXVALUEが200の同じ順序をDS2に作成するとします。この場合、DS1およびDS2を双方向レプリケーション・スキームで構成すると、順序my.seqを使用して、いずれのデータベースに対しても順序値が競合しないことを保証して更新を行うことができます。この構成でttRepAdmin -duplicateを使用して障害からリカバリする場合は、複製操作を実行した後で順序を削除し、新しいMINVALUEおよびMAXVALUEを指定して順序を再作成する必要があることに注意してください。

SELECT my.seq.NEXTVAL FROM sys.dualなどの順序に対する操作では、順序値は増加しますが、レプリケートされる表でのトランザクションをその後に行うまでレプリケートは実行されません。この動作には、レプリケートされる表でのトランザクションをその後に行うまでこれらの順序の更新がログからパージされないという副作用があります。このため、これらの順序の更新のみがログの末尾に存在する場合は、ttRepSubscriberWaitおよびttRepAdmin -waitで障害が発生します。

順序ttuser.seqを、(masterdsという名前でホストsystem1に配置されている)マスター・データベースから、(subscriberdsという名前でホストsystem2に配置されている)サブスクライバ・データベースにレプリケートする場合、要素記述(名前はa)は次のようになります。

ELEMENT a SEQUENCE ttuser.seq
  MASTER masterds ON "system1"
  SUBSCRIBER subscriberds ON "system2"

レプリケートされたデータベースでのビューおよびマテリアライズド・ビュー

マテリアライズド・ビューは、ディテール表と呼ばれる1つ以上のTimesTen表から選択されたデータのサマリーです。マテリアライズド・ビューは直接レプリケートできませんが、マテリアライズド・ビューの基礎となるディテール表は通常のTimesTen表の場合と同じ方法でレプリケートできます。

マスター・データベースおよびサブスクライバ・データベースのディテール表は、マテリアライズド・ビューで参照できます。ただし、TimesTen Classicレプリケーションでは、レプリケート対象のディテール表の構造がマスターおよびサブスクライバの両方で同じかどうかのみが検証されます。マテリアライズド・ビューが各データベースで同じである必要はありません。

マテリアライズド・ビューまたは非マテリアライズド・ビューがDATASTORE要素として含まれているデータベース全体をレプリケートする場合は、ビューに関連付けられているディテール表のみがレプリケートされます。ビュー自体はレプリケートされません。一致するビューは、サブスクライバ・データベースで定義できますが、必須ではありません。ディテール表がレプリケートされると、TimesTen Classicはそれに対応するビューを自動的に更新します。

マテリアライズド・ビューが更新されたときに、オーバーフローまたはアンダーフロー状態が発生するように指定されている場合、レプリケート対象の表に定義されたマテリアライズド・ビューで、レプリケーション障害または非一貫性が発生する場合があります。