この項で説明する例では、様々なレプリケーション・スキームの設定方法を示します。これらの例は、わかりやすくするために簡略化されています。これらの例は、より複雑なレプリケーション・スキームを作成するための出発点として使用できます。
次のスキームについて説明します。
例3.3のスキームは、「クイック・スタート」で説明されている単一のマスターおよびサブスクライバの単方向レプリケーション・スキームに基づいています。ただし、この例では、2つのデータ・ストアが別々のホストsystem1およびsystem2に配置されています。また、RETURN RECEIPTサービスを使用して、マスター・データ・ストアのrepl.tab表に対してコミットしたすべてのトランザクションがサブスクライバで受信されることを確認します(「RETURN RECEIPTレプリケーション」を参照)。
CREATE REPLICATION repl.repscheme
ELEMENT e TABLE repl.tab
MASTER masterds ON "system1"
SUBSCRIBER subscriberds ON "system2"
RETURN RECEIPT;
例3.16に示すスキームでは、server2上のsubscriberdsというサブスクライバ・データ・ストアに内容全体(tab1からtab7まで)をレプリケートするMASTERDSというマスター・データ・ストアを設定します。
CREATE REPLICATION repl.repscheme
ELEMENT e DATASTORE
MASTER masterds ON "server1"
SUBSCRIBER subscriberds ON "server2";
最大128のサブスクライバ・データ・ストアを含むレプリケーション・スキームを作成できます。
図3.9に、2つのサブスクライバ・データ・ストアにレプリケートされる表(repl.tab)を持つマスター・データ・ストアを示します。
この例では、server2にあるsubscriber1dsおよびserver3にあるsubscriber2dsという2つのサブスクライバ・データ・ストアにrepl.tab表をレプリケートするマスター・データ・ストアmasterdsを設定します。レプリケーション・スキームの名前はrepl.twosubscribersです。レプリケーション要素の名前はeです。
CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2",
subscriber2ds ON "server3";
この例では、例3.17の基本的な例を使用し、それにRETURN RECEIPT属性およびSTOREパラメータを追加します。RETURN RECEIPTで、両方のデータ・ストアに対するRETURN RECEIPTサービスを有効にします。STOREパラメータで、FAILTHRESHOLD値を10に設定し、サブスクライバで障害が発生したとみなされるまでmasterdsに累積可能な、サブスクライバに対するログ・ファイルの最大数を指定します。
CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2",
subscriber2ds ON "server3"
RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;
この例では、subscriber2dsに対してのみRETURN RECEIPTを有効にする方法を示します(subsciber1ds定義の末尾のカンマは不要です)。
CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2"
SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;
この例では、RETURN RECEIPT BY REQUESTをsubscriber1dsに、RETURN RECEIPTをsubscriber2dsに適用する方法を示します。このスキームでは、subscriber1dsにアクセスするアプリケーションでttRepSyncSetプロシージャを使用してトランザクションのRETURNサービスを有効にする必要があります。一方、subscriber2dsでは、すべてのトランザクションにRETURNサービスが無条件に提供されます。
CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriberds1 ON "server2" RETURN RECEIPT BY REQUEST
SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;
例3.21の選択レプリケーション・スキームでは、4つの表にレプリケートするマスター・データ・ストアcentraldsを設定します。tab1およびtab2はサブスクライバbackup1dsにレプリケートされ、tab3およびtab4はbackup2dsにレプリケートされます。マスター・データ・ストアはfinanceサーバーにあります。両方のサブスクライバがサーバーbackupsystemに配置されています。
CREATE REPLICATION repl.twobackups
ELEMENT a TABLE tab1
MASTER centralds ON "finance"
SUBSCRIBER backup1ds ON "backupsystem"
ELEMENT b TABLE tab2
MASTER centralds ON "finance"
SUBSCRIBER backup1ds ON "backupsystem"
ELEMENT d TABLE tab3
MASTER centralds ON "finance"
SUBSCRIBER backup2ds ON "backupsystem"
ELEMENT d TABLE tab4
MASTER centralds ON "finance"
SUBSCRIBER backup2ds ON "backupsystem";
例3.22に、マスター・データ・ストアからプロパゲータへの単方向レプリケーション・スキームを示します。プロパゲータは、2つのサブスクライバに変更を転送します。ELEMENT aでは、repl.tab表がfinanceマシンのcentraldsデータ・ストアで更新され、nethandlerマシンのpropdsプロパゲータ・データ・ストアにレプリケートされます。ELEMENT bでは、propdsで受信したrepl.tab表への変更が、マシンbackupsystem1およびbackupsystem2の2つのサブスクライバbackup1dsおよびbackup2dsにそれぞれレプリケートされます。
例3.23の設定もほぼ同じですが、使用するレプリケーション・スキームは1つではなく2つです。
repl.tab表のレプリケーションは、同じスキームでは別々の要素名(aおよびb)で記述する必要がありますが、個別のスキームを使用すると、同じ要素名(a)で記述できます。
CREATE REPLICATION repl.propagator
ELEMENT a TABLE repl.tab
MASTER centralds ON "finance"
SUBSCRIBER propds ON "nethandler"
ELEMENT b TABLE repl.tab
PROPAGATOR propds ON "nethandler"
SUBSCRIBER backup1ds ON "backupsystem1",
backup2ds ON "backupsystem2";
CREATE REPLICATION repl.propagator
ELEMENT a TABLE repl.tab
MASTER centralds ON "finance"
SUBSCRIBER propds ON "nethandler";
CREATE REPLICATION repl.propagator2
ELEMENT a TABLE repl.tab
PROPAGATOR propds ON "nethandler"
SUBSCRIBER backup1ds ON "backupsystem1",
backup2ds ON "backupsystem2";
図3.12に、2つのデータ・ストア(westcoastホストのwestdsおよびeastcoastホストのeastds)に対する分割ワークロードの双方向レプリケーション・スキームを示します。顧客は2つの表で表されます。西地区の顧客のデータはwaccounts、東地区の顧客のデータはeaccountsに収められます。westdsデータ・ストアは、waccounts表を更新してeastdsデータ・ストアにレプリケートします。eaccounts表は、eastdsデータ・ストアによって所有され、westdsデータ・ストアにレプリケートされます。RETURN RECEIPT属性は、RETURN RECEIPTサービスを有効にして、いずれのマスター表のトランザクションもそれらのサブスクライバによって受信されることを保証します。
例3.25は同じ構成ですが、r1、r2という別々のレプリケーション・スキームを使用しています。
CREATE REPLICATION repl.r1
ELEMENT elem_waccounts TABLE repl.waccounts
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast" RETURN RECEIPT
ELEMENT elem_eaccounts TABLE repl.eaccounts
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast" RETURN RECEIPT;
CREATE REPLICATION repl.r1
ELEMENT elem_waccounts TABLE repl.waccounts
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast" RETURN RECEIPT;
CREATE REPLICATION repl.r2
ELEMENT elem_eaccounts TABLE repl.eaccounts
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast" RETURN RECEIPT;
例3.13に、eastdsまたはwestdsのいずれかのデータ・ストアでaccounts表を更新できる一般ワークロードの双方向レプリケーション・スキームを示します。各データ・ストアは、accounts表に対してマスターおよびサブスクライバの両方になります。
要素をこの手法でレプリケートする場合、アプリケーションでは、各データ・ストアへの書込みを調整して、同じデータに同時に更新が行われないようにする必要があります。更新競合を管理するために、BINARY(8)型のタイムスタンプ列(例3.27のtstamp列など)を表に含め、例8.2のレプリケーション・スキームを使用してタイムスタンプ比較を有効にできます。
更新競合の管理方法の詳細は、「レプリケーション競合の検出および解消」を参照してください。
CREATE REPLICATION repl.r1
ELEMENT elem_accounts_1 TABLE repl.accounts
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast"
ELEMENT elem_accounts_2 TABLE repl.accounts
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast";
CREATE TABLE repl.accounts (custname VARCHAR2(30) NOT NULL,
address VARCHAR2(80),
curbalance DEC(15,2),
tstamp BINARY(8),
PRIMARY KEY (custname));
図3.14に、Oracleを実行しているデータベース・サーバーおよびTimesTenを実行している2つのアプリケーション・サーバー(server1およびserver2)を示します。例3.29のTargetCustomersキャッシュ・グループは、server1で稼働しているmasterdsデータ・ストアからserver2で稼動しているsubscriberdsデータ・ストアの例3.30のTargetCustomersキャッシュ・グループに単方向でレプリケートされます。
| 注意: | この例では、レプリケーション・スキームの定義がキャッシュ・グループの定義の前に示されていますが、レプリケーション・スキームを適用する前に、これらのキャッシュ・グループをそれぞれのデータ・ストアに作成する必要があります。 |
この例では、読取り専用キャッシュ・グループTargetCustomersを別の読取り専用キャッシュ・グループにレプリケートするスキームを示します。
CREATE REPLICATION repl.reptargetcustomers
ELEMENT root TABLE repl.customer
MASTER masterds ON "server1"
SUBSCRIBER subscriberds ON "server2"
ELEMENT childorders TABLE repl.orders
MASTER masterds ON "server1"
SUBSCRIBER subscriberds ON "server2"
ELEMENT childorderdetails TABLE repl.orderdetails
MASTER masterds ON "server1"
SUBSCRIBER SUBSCRIBERDS ON "SERVER2"
ELEMENT childinterests TABLE repl.interests
MASTER masterds ON "server1"
SUBSCRIBER subscriberds ON "server2";
この例では、AUTOREFRESH STATE ONを指定したキャッシュ・グループのレプリケーションを示します。
CREATE READONLY CACHE GROUP TargetCustomers
AUTOREFRESH INTERVAL 240 MINUTES
FROM
customer(custid NUMBER NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip NUMBER,
region CHAR(10),
PRIMARY KEY (custid)),
orders(orderid NUMBER NOT NULL,
custid NUMBER NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (custid) REFERENCES customer(custid)),
orderdetails(orderid NUMBER NOT NULL,
itemid NUMBER NOT NULL,
quantity NUMBER NOT NULL,
PRIMARY KEY (orderid, itemid),
FOREIGN KEY (orderid) REFERENCES orders(orderid)),
INTERESTS(custid NUMBER NOT NULL,
interest NUMBER NOT NULL,
PRIMARY KEY (custid, interest),
FOREIGN KEY (custid) REFERENCES customer(custid));
この例では、AUTOREFRESH STATE OFFを指定したキャッシュ・グループのレプリケーションを示します。
CREATE READONLY CACHE GROUP TargetCustomers
AUTOREFRESH STATE OFF
FROM
customer(custid NUMBER NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip NUMBER,
region CHAR(10),
PRIMARY KEY (custid)),
orders(orderid NUMBER NOT NULL,
custid NUMBER NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (custid) REFERENCES customer(custid)),
orderdetails(orderid NUMBER NOT NULL,
itemid NUMBER NOT NULL,
quantity NUMBER NOT NULL,
PRIMARY KEY (orderid, itemid),
FOREIGN KEY (orderid) REFERENCES orders(orderid)),
interests(custid NUMBER NOT NULL,
interest NUMBER NOT NULL,
PRIMARY KEY (custid, interest),
FOREIGN KEY (custid) REFERENCES customer(custid));
図3.15に、アクティブ・スタンバイ・ペアを示します。
アクティブ・スタンバイ・ペアでは、2つのデータ・ストアがマスターとして定義されます。1つは、アクティブ・マスター・データ・ストアで、もう1つはスタンバイ・マスター・データ・ストアです。アクティブ・マスター・データ・ストアは直接更新されます。スタンバイ・マスター・データ・ストアは、アクティブ・マスター・データ・ストアから更新を受信し、変更を最大で62の読取り専用サブスクライバ・データ・ストアに伝播します。
例3.31では、rep1とrep2がマスター・データ・ストアとして指定され、rep3とrep4がサブスクライバ・データ・ストアとして指定されています。レプリケーション・モードは、RETURN RECEIPTです。
| 注意: | アクティブ・スタンバイ・ペアを作成するには、CREATE ACTIVE STANDBY PAIR文を使用します。アクティブ・スタンバイ・ペアの設定方法の詳細は、「アクティブ・スタンバイ・ペアの設定」を参照してください。 |
CREATE ACTIVE STANDBY PAIR rep1 on "node1", rep2 on "node2"
RETURN RECEIPT
SUBSCRIBER rep3 ON "node3", rep4 ON "node4";