クラシック・レプリケーション・スキームの構文の例
この項の例では、様々なクラシック・レプリケーション・スキームの構成方法を示します。
単一クラシック・サブスクライバ・スキーム
次の例では、クラシック・レプリケーション・スキーム内の単一の表をレプリケートします。この例は、単一のマスターおよびサブスクライバの単方向レプリケーション・スキームを示しています。
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";