この項で説明する例では、様々なレプリケーション・スキームの設定方法を示します。これらの例は、わかりやすくするために簡略化されています。これらの例は、より複雑なレプリケーション・スキームを作成するための出発点として使用できます。
次のスキームについて説明します。
例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";