クラシック・レプリケーション・スキームの構文の例
この項の例では、様々なクラシック・レプリケーション・スキームの構成方法を示します。
単一クラシック・サブスクライバ・スキーム
次の例では、クラシック・レプリケーション・スキーム内の単一の表をレプリケートします。この例は、単一のマスターおよびサブスクライバの単方向レプリケーション・スキームを示しています。
2つのデータベースが別々のホストsystem1およびsystem2に配置されています。RETURN RECEIPTサービスを使用して、マスター・データベースのttuser.tab表に対してコミットしたすべてのトランザクションがサブスクライバで受信されることを確認します。
CREATE REPLICATION repscheme
ELEMENT e TABLE ttuser.tab
MASTER masterds ON "system1"
SUBSCRIBER subscriberds ON "system2"
RETURN RECEIPT;次の例では、データベース全体をレプリケートします。示されているスキームは、単一のマスターおよびサブスクライバの単方向レプリケーション・スキームです。2つのデータベースが別々のホストserver1およびserver2に配置されています。マスター・データベースmasterdsは、そのすべての内容をサブスクライバ・データベースsubscriberdsにレプリケートします。
CREATE REPLICATION repscheme
ELEMENT e DATASTORE
MASTER masterds ON "server1"
SUBSCRIBER subscriberds ON "server2";複数サブスクライバのクラシック・レプリケーション・スキーム
プロパゲータ・データベースを使用するクラシック・レプリケーション・スキームの例は、「伝播スキーム」を参照してください。
この例では、2つのサブスクライバにレプリケートします。この例では、server2にあるsubscriber1dsおよびserver3にあるsubscriber2dsという2つのサブスクライバ・データベースにttuser.tab表をレプリケートするマスター・データベースmasterdsを設定します。クラシック・レプリケーション・スキームの名前はtwosubscribersです。レプリケーション要素の名前はeです。
CREATE REPLICATION twosubscribers
ELEMENT e TABLE ttuser.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2",
subscriber2ds ON "server3";この例では、RETURN RECEIPT属性およびSTOREパラメータを使用して、2つのサブスクライバにレプリケートします。RETURN RECEIPTで、両方のデータベースに対するRETURN RECEIPTサービスを有効にします。STOREパラメータで、FAILTHRESHOLD値を10に設定し、サブスクライバで障害が発生したとみなされるまでmasterdsに累積可能な、サブスクライバに対するトランザクション・ログ・ファイルの最大数を指定します。
CREATE REPLICATION twosubscribers
ELEMENT e TABLE ttuser.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2",
subscriber2ds ON "server3"
RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;この例では、subscriber2dsという1つのサブスクライバに対してのみRETURN RECEIPTを有効にします。subscriber1ds定義の末尾のカンマは不要です。
CREATE REPLICATION twosubscribers
ELEMENT e TABLE ttuser.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2"
SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;この例は、サブスクライバに対して異なるRETURNサービスを有効にする方法を示しています。この例では、RETURN RECEIPT BY REQUESTをsubscriber1dsに、RETURN RECEIPTをsubscriber2dsに適用します。このクラシック・レプリケーション・スキームでは、subscriber1dsにアクセスするアプリケーションは、ttRepSyncSetプロシージャを使用して、トランザクションに対してRETURNサービスを有効にする必要があります。一方、subscriber2dsは無条件に、すべてのトランザクションに対してRETURNサービスを提供します。
CREATE REPLICATION twosubscribers
ELEMENT e TABLE ttuser.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriberds1 ON "server2" RETURN RECEIPT BY REQUEST
SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT
STORE masterds FAILTHRESHOLD 10;異なる複数のサブスクライバへの表のレプリケーション
クラシック・レプリケーション・スキームは、4つの表をレプリケートするcentraldsという名前のマスター・データベースを設定します。ttuser.tab1およびttuser.tab2は、サブスクライバbackup1dsにレプリケートされます。ttuser.tab3およびttuser.tab4は、backup2dsにレプリケートされます。マスター・データベースはfinanceサーバーにあります。両方のサブスクライバがサーバーbackupsystemに配置されています。
CREATE REPLICATION twobackups ELEMENT a TABLE ttuser.tab1 MASTER centralds ON "finance" SUBSCRIBER backup1ds ON "backupsystem" ELEMENT b TABLE ttuser.tab2 MASTER centralds ON "finance" SUBSCRIBER backup1ds ON "backupsystem" ELEMENT d TABLE ttuser.tab3 MASTER centralds ON "finance" SUBSCRIBER backup2ds ON "backupsystem" ELEMENT d TABLE ttuser.tab4 MASTER centralds ON "finance" SUBSCRIBER backup2ds ON "backupsystem";
伝播スキーム
マスター・データベースによって表に対する更新がプロパゲータに送信され、プロパゲータによってその変更内容が2つのサブスクライバに転送されます。
マスター・データベースはホストfinanceのcentraldsです。プロパゲータ・データベースはホストnethandlerのpropdsです。サブスクライバは、backupsystem1のbackup1dsおよびbackupsystem2のbackup2dsです。
クラシック・レプリケーション・スキームには2つの要素があります。要素aでは、centraldsのtab表に対する変更がプロパゲータ・データベースpropdsにレプリケートされます。要素bでは、propdsで受信したtab表への変更が2つのサブスクライバbackup1dsおよびbackup2dsにレプリケートされます。
CREATE REPLICATION propagator
ELEMENT a TABLE ttuser.tab
MASTER centralds ON "finance"
SUBSCRIBER propds ON "nethandler"
ELEMENT b TABLE ttuser.tab
PROPAGATOR propds ON "nethandler"
SUBSCRIBER backup1ds ON "backupsystem1",
backup2ds ON "backupsystem2";双方向の分割ワークロード・スキーム
例では、westcoastホストのwestdsおよびeastcoastホストのeastdsという2つのデータベースがあります。顧客は2つの表で表され、西地区の顧客のデータはwaccounts、東地区の顧客のデータはeaccountsに収められます。westdsデータベースは、waccounts表を更新してeastdsデータベースにレプリケートします。eaccounts表は、eastdsデータベースによって所有され、westdsデータベースにレプリケートされます。RETURN RECEIPT属性は、RETURN RECEIPTサービスを有効にして、いずれのマスター表のトランザクションもそれらのサブスクライバによって受信されることを保証します。
CREATE REPLICATION r1 ELEMENT elem_waccounts TABLE ttuser.waccounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" RETURN RECEIPT ELEMENT elem_eaccounts TABLE ttuser.eaccounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" RETURN RECEIPT;
双方向の分散ワークロード・スキーム
eastdsまたはwestdsのいずれかのデータベースでttuser.accounts表を更新できる一般ワークロードの双方向クラシック・レプリケーション・スキーム。各データベースは、accounts表に対してマスターおよびサブスクライバの両方になります。
ノート:
RETURN TWOSAFE戻りサービスを構成して双方向の分散ワークロード・レプリケーション・スキームを使用しないでください。
CREATE REPLICATION r1 ELEMENT elem_accounts_1 TABLE ttuser.accounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_accounts_2 TABLE ttuser.accounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast";
要素をこの手法でレプリケートする場合、アプリケーションでは、各データベースへの書込みを調整して、同じデータに同時に更新が行われないようにする必要があります。更新競合を管理するには、BINARY(8)型のタイムスタンプ列をレプリケート表に含め、CREATE REPLICATION文にCHECK CONFLICTS句を含めてタイムスタンプ比較を有効にします。レプリケーション競合の解消を参照してください。
次の例は、更新競合を管理する方法を示しています。tstampタイムスタンプ列は、ttuser.accounts表に含まれています。CREATE REPLICATION文は、CHECK CONFLICTS句が含まれるように変更されています。
CREATE TABLE ttuser.accounts (custname VARCHAR2(30) NOT NULL,
address VARCHAR2(80),
curbalance DEC(15,2),
tstamp BINARY(8),
PRIMARY KEY (custname));
CREATE REPLICATION r1
ELEMENT elem_accounts_1 TABLE ttuser.accounts
CHECK CONFLICTS BY ROW TIMESTAMP
COLUMN tstamp
UPDATE BY SYSTEM
ON EXCEPTION ROLLBACK WORK
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast"
ELEMENT elem_accounts_2 TABLE ttuser.accounts
CHECK CONFLICTS BY ROW TIMESTAMP
COLUMN tstamp
UPDATE BY SYSTEM
ON EXCEPTION ROLLBACK WORK
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast";