STORE属性の設定
CREATE ACTIVE STANDBY PAIR
文、ALTER ACTIVE STANDBY PAIR
文、CREATE REPLICATION
文およびALTER REPLICATION
文のSTORE
属性句は、RETURNサービス、圧縮、タイムアウト、永続コミット動作および表定義チェックのオプション動作を設定するために使用されます。
クラシック・レプリケーション・スキームでは、競合レポートを表レベルで定義することもできます。
ノート:
このマニュアル内の「RETURNサービスの使用」、および『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE ACTIVE STANDBY PAIRとCREATE REPLICATIONを参照してください。
クラシック・レプリケーション・スキームを使用している場合、FAILTHRESHOLD
およびTIMEOUT
属性は、特定のクラシック・レプリケーション・スキーム定義に対して固有に設定できます。つまり、レプリケート・データベースごとに異なるクラシック・レプリケーション・スキーム定義を適用している場合、これらの属性は個別に設定できます。これは他の属性には適用されず、他の属性は、すべてのクラシック・レプリケーション・スキーム定義で同じである必要があります。たとえば、1つのクラシック・レプリケーション・スキームにPORT
属性を設定すると、すべてのクラシック・レプリケーション・スキームにその設定が適用されます。STORE
句を使用してFAILTHRESHOLD
属性を設定するクラシック・レプリケーション・スキームの例は、「クラシック・レプリケーション・スキームでのRETURNサービスの使用」を参照してください。
ノート:
ALTER ACTIVE STANDBY PAIR
を使用してSTORE
属性のいずれかを変更する場合は、「アクティブ・スタンバイ・ペアに対するその他の変更」で説明されている手順に従う必要があります。
次の各項では、いくつかのSTORE
属性について説明します。
レプリケートされた表の列定義オプション
レプリケーション・スキームに含まれるレプリケート表の列の定義は、必ずしも同一である必要はありません。
-
TABLE DEFINITION CHECKING
値がEXACT
に設定されている場合、列の定義は、アクティブ・データベースとスタンバイ・データベースの間で同一である必要があります。この属性は、物理構造が同一の表のレプリケーションを可能にします。 -
TABLE DEFINITION CHECKING
値がRELAXED
(デフォルト)に設定されている場合、レプリケート表の列の定義は、同一である必要はありません。RELAXED
属性を使用する場合、レプリケート表に同じキー定義、列数、列名および列のデータ型が必要です。表定義チェックが、スタンバイ・データベースで発生します。アクティブ・データベースとスタンバイ・データベースの両方に対してこの属性を
RELAXED
に設定しても、スタンバイ・データベースのみにこの属性値を設定した場合と同じ効果となります。
ノート:
『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE ACTIVE STANDBY PAIRまたはCREATE REPLICATIONを参照してください。
TABLE DEFINITION CHECKING RELAXED
属性では、両方のマスター・データベースで表の物理的構造が同じである必要はありません。たとえば、表の列の順序が異なっていたり、表のパーティション数が異なる場合は、データをレプリケートできるのは、RELAXED
属性を使用した場合です。このため、列を追加または削除して表を変更する場合、RELAXED
属性を使用する必要があります。『Oracle TimesTen In-Memory Database SQLリファレンス』のALTER TABLEに示されているとおり、表の変更時に列を追加すると、さらにパーティションが作成されます。列を削除しても、自動的に領域が解放されることはありません。表を変更するDML文は、マスターで実行された後、スタンバイ・データベースおよびサブスクライバにレプリケートされるようにすることをお薦めします。
異なる物理構造を補っている場合、RELAXED
設定によってパフォーマンスがわずかに低下する可能性があります。表の物理構造が同じ場合は、パフォーマンスへの影響はありません。ttMigrate -r -relaxedUpgrade
(表定義チェックがRELAXED
に設定されたデータベースでのみ有効)を使用して、表のすべての追加パーティションを1つのパーティションに結合し、削除された列によって発生した余分な領域をなくすことによって、パフォーマンスの問題(異なる物理構造、追加のパーティションまたは余分な領域によるもの)は排除できます。レプリケーション・スキームに含まれるすべてのデータベースでこれを行うと、結果として物理構造が同じになるため、パフォーマンスを最大にすることができます。
ノート:
『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』の表のパーティション数の確認を参照してください。
TABLE DEFINITION CHECKING
のEXACT
およびRELAXED
属性のパフォーマンスに関する考慮事項は、「レプリケートされる表を変更するときのパフォーマンスの考慮事項」を参照してください。
表定義チェックを確実にRELAXED
に設定するには、アクティブ・データベースまたはマスター・データベースでレプリケーション・エージェントを停止した後、ALTER ACTIVE STANDBY PAIR
文またはALTER REPLICATION
文を実行して、表定義チェックをRELAXED
に設定します。最後に、ttRepAdmin -duplicate
コマンドを使用して、これらの変更をスタンバイ・データベースとサブスクライバにロールアウトします。『Oracle TimesTen In-Memory Database SQLリファレンス』のALTER ACTIVE STANDBY PAIRおよびALTER REPLICATIONを参照してください。
次の項では、表定義チェックをRELAXEDに設定する例を示します。
アクティブ・スタンバイ・ペアの表定義チェックをRELAXEDに設定
この例では、アクティブ・スタンバイ・ペア・レプリケーション・スキームで同一の複数の表をレプリケートする方法を実際に示します。この例では、TABLE DEFINITION CHECKING
属性をEXACT
に設定します。
-
master1
データベースに表t1
を作成します。CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c INT);
-
アクティブ・スタンバイ・ペアのレプリケーション・スキームを作成します。
master2
スタンバイ・データベースに対して、TABLE DEFINITION CHECKING
をEXACT
に設定します。Command> CREATE ACTIVE STANDBY PAIR master1, master2 STORE master2 TABLE DEFINITION CHECKING EXACT;
-
残りのステップを実行してアクティブ・データベースをスタンバイ・データベースに複製し、レプリケーション・エージェントを両方のデータベースで起動して、アクティブ・データベースの状態を設定します(スタート・ガイドを参照)。
次は、表定義チェックが正確に有効になっていることを確認します。
アクティブ・スタンバイ・ペアのレプリケーション・スキームの表定義チェックをrelaxedに変更できます。まず、アクティブ・データベースを変更する前に、アクティブ・データベースのレプリケーション・エージェントを停止します。次のようにすると、dsn1
アクティブ・データベースが変更されるため、表定義チェックはRELAXEDに設定されます。
ALTER ACTIVE STANDBY PAIR ALTER STORE master1 SET TABLE DEFINITION CHECKING RELAXED;
処理が完了したら、複製を使用して変更をスタンバイ・データベースにロールアウトします。最後に、複製によってサブスクライバに変更がロールアウトされます。
表定義チェックをRELAXEDに設定したクラシック・レプリケーション・スキームの例
この例では、クラシック・レプリケーション・スキームで同一の複数の表をレプリケートする方法を実際に示します。この例では、TABLE DEFINITION CHECKING
属性をEXACT
に設定します。
-
dsn1
データベースに表t1
を作成します。CREATE TABLE ttuser.t1 (a INT PRIMARY KEY, b INT, c INT);
-
ttuser.t1
表をdsn2
データベースに、dsn1
データベースの表と完全に同じに作成します。 -
レプリケーション・スキーム
ttuser.rep1
を作成します。サブスクライバdsn2
で、TABLE DEFINITION CHECKING
をEXACT
に設定します。CREATE REPLICATION ttuser.rep1 ELEMENT e1 TABLE ttuser.t1 MASTER dsn1 SUBSCRIBER dsn2 STORE dsn2 TABLE DEFINITION CHECKING EXACT;
-
両方のデータベースのレプリケーション・エージェントを起動します。
dsn1
のttuser.t1
に行を1つ挿入します。Command> INSERT INTO ttuser.t1 VALUES (4,5,6); 1 row inserted.
-
dsn2
のttuser.t1
の結果を確認します。Command> SELECT * FROM ttuser.t1; < 4, 5, 6> 1 row found.
次の例では、クラシック・レプリケーション・スキームで異なる位置に列がある表をレプリケートします。この例では、TABLE DEFINITION CHECKING
属性をRELAXED
に設定します。
-
dsn1
データベースに表t1
を作成します。CREATE TABLE ttuser.t1 (a INT PRIMARY KEY, b INT, c INT);
-
dsn1
データベースのttuser.t1
の列とは異なる順番の列を持つ表ttuser.t1
をdsn2
データベースに作成します。両方の表で列名およびデータ型が同じであり、両方の表でa
が主キーであることに注意します。CREATE TABLE ttuser.t1 (c INT, a INT PRIMARY KEY, b INT);
-
レプリケーション・スキーム
ttuser.rep1
を作成します。サブスクライバdsn2
で、TABLE DEFINITION CHECKING
をRELAXED
に設定します。CREATE REPLICATION ttuser.rep1 ELEMENT e1 TABLE ttuser.t1 MASTER dsn1 SUBSCRIBER dsn2 STORE dsn2 TABLE DEFINITION CHECKING RELAXED;
-
両方のデータベースのレプリケーション・エージェントを起動します。
dsn1
のttuser.t1
に行を1つ挿入します。Command> INSERT INTO ttuser.t1 VALUES (4,5,6); 1 row inserted.
-
dsn2
のttuser.t1
の結果を確認します。Command> SELECT * FROM ttuser.t1; < 5, 6, 4 > 1 row found.
次の例では、クラシック・レプリケーション・スキームでパーティションの数が異なる表をレプリケートします。表を変更して列を追加すると、その後その新しい列を削除しても、表のパーティション数は増加します。TABLE DEFINITION CHECKING
をRELAXED
に設定すると、パーティションの数が異なる表をレプリケートできます。
クラシック・レプリケーション・スキームの表定義チェックをRELAXEDに変更できます。まず、マスター・データベースのレプリケーション・スキームを変更する前に、マスター・データベースのレプリケーション・エージェントを停止します。次の例では、dsn1
マスター・データベースを変更して、表定義チェックをRELAXEDに設定します。
ALTER REPLICATION reppart ALTER STORE dsn1 SET TABLE DEFINITION CHECKING RELAXED;
処理が完了したら、複製を使用して変更をスタンバイ・マスターにロールアウトします。最後に、複製によってサブスクライバに変更がロールアウトされます。
レプリケートの通信量の圧縮
低帯域幅のネットワークを介してレプリケーションを行う場合、または大量のデータのレプリケーションを行う場合は、レプリケーションに必要な帯域幅の量を減らすCOMPRESS TRAFFIC
属性を設定できます。
COMPRESS TRAFFIC
属性を使用すると、CREATE ACTIVE STANDBY PAIR
文、ALTER ACTIVE STANDBY PAIR
文、CREATE REPLICATION
文またはALTER REPLICATION
文のSTORE
パラメータで指定されたデータベースからレプリケートされたデータが圧縮されます。TimesTenでは、他のデータベースからの通信量は圧縮されません。
圧縮アルゴリズムは速度に関しては最適化されますが、COMPRESS TRAFFIC
属性を有効にすると、レプリケーションのスループットおよび待機時間に影響を与えます。
たとえば、アクティブ・データベースdsn1
からのレプリケートの通信量は圧縮し、スタンバイ・データベースdsn2
からのレプリケートの通信量は圧縮しない場合、CREATE ACTIVE STANDBY PAIR
文は次のようになります。
CREATE ACTIVE STANDBY PAIR dsn1 ON "host1", dsn2 ON "host2" SUBSCRIBER dsn3 ON "host3" STORE dsn1 ON "host1" COMPRESS TRAFFIC ON;
アクティブ・データベースdsn1
とスタンバイ・データベースdsn2
の両方からレプリケートされた通信量を圧縮するには、次を使用します。
CREATE ACTIVE STANDBY PAIR dsn1 ON "host1", dsn2 ON "host2" SUBSCRIBER dsn3 ON "host3" STORE dsn1 ON "host1" COMPRESS TRAFFIC ON STORE dsn2 ON "host2" COMPRESS TRAFFIC ON;
クラシック・レプリケーション・スキーム内の1つのデータベースdsn1
からレプリケートされた通信量のみを圧縮し、他のデータベース(dsn2
など)からレプリケートされた通信量は圧縮しないで残すことができます。次のようにCREATE REPLICATION
文を使用します。
CREATE REPLICATION repscheme ELEMENT d1 DATASTORE MASTER dsn1 ON host1 SUBSCRIBER dsn2 ON host2 ELEMENT d2 DATASTORE MASTER dsn2 ON host2 SUBSCRIBER dsn1 ON host1 STORE dsn1 ON host1 COMPRESS TRAFFIC ON;
クラシック・レプリケーション・スキームのdsn1
データベースとdsn2
データベース間のレプリケートの通信量を圧縮するには、次を使用します。
CREATE REPLICATION scheme ELEMENT d1 DATASTORE MASTER dsn1 ON host1 SUBSCRIBER dsn2 ON host2 ELEMENT d2 DATASTORE MASTER dsn2 ON host2 SUBSCRIBER dsn1 ON host1 STORE dsn1 ON host1 COMPRESS TRAFFIC ON STORE dsn2 ON host2 COMPRESS TRAFFIC ON;
ポート割当て
CREATE ACTIVE STANDBY PAIR
文およびCREATE REPLICATION
文のSTORE
属性に対するPORT
パラメータは、別のデータベースから更新をリスニングするためにデータベースにより使用されるポート番号を設定します。
-
アクティブ・スタンバイ・ペアでは、スタンバイ・データベースは、アクティブ・データベースからの更新をリスニングします。読取り専用サブスクライバは、スタンバイ・データベースからの更新をリスニングします。
-
クラシック・レプリケーション・スキームでは、サブスクライバは、マスター・データベースからの更新をリスニングします。1つのクラシック・レプリケーション・スキームに
PORT
属性を設定すると、すべてのクラシック・レプリケーション・スキームにその設定が適用されます。
静的ポートの割当てをお薦めします。PORT
属性を設定しない場合、TimesTenデーモンが動的にポートを選択します。ポートがレプリケーション・エージェントに動的に割り当てられる場合は、TimesTenデーモンのポートも一致させる必要があります。
ノート:
オンラインによるアップグレードを行う場合は、静的ポートを割り当てる必要があります。
ポートを静的に割り当てる場合は、STORE
属性に完全なホスト名、DSNおよびポートを指定する必要があります。
アクティブ・スタンバイ・ペアに静的ポートを割り当てる例
CREATE ACTIVE STANDBY PAIR dsn1 ON "host1", dsn2 ON "host2" SUBSCRIBER dsn3 ON "host3" STORE dsn1 ON "host1" PORT 16080 STORE dsn2 ON "host2" PORT 16083 STORE dsn3 ON "host3" PORT 16084;
クラシック・レプリケーション・スキームに静的ポートを割り当てる例
CREATE REPLICATION repscheme ELEMENT el1 TABLE ttuser.tab MASTER dsn1 ON host1 SUBSCRIBER dsn2 ON host2 ELEMENT el2 TABLE ttuser.tab MASTER dsn2 ON host2 SUBSCRIBER dsn1 ON host1 STORE dsn1 ON host1 PORT 16080 STORE dsn2 ON host2 PORT 16083;
リモート・レプリケーション・エージェントからの応答の待機タイムアウトの設定
TIMEOUT
STORE属性は、レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大秒数を設定します。
大規模なトランザクションがある場合は、デフォルトのタイムアウト(120秒)を使用することをお薦めします。レプリケーション・エージェントは、リモート・レプリケーション・エージェントからの応答の遅延の原因となる可能性のある大規模なトランザクションに対応するために、トランザクションのサイズに基づいてタイムアウトをスケーリングします。ユーザーがTIMEOUT
を60秒以下に設定している場合、レプリケーション・エージェントによる自動スケーリングは無効になっています。
ノート:
何度もタイムアウトが発生し、エラー・ログに多数のトランスミッタおよびレシーバ・スレッドの再開始が記録されていた場合は、レプリケーション・エージェントが現在のタイムアウト値でスケーリングできるよりもトランザクションが大きい可能性があります。トランザクションに対してレプリケーションを進行できるようになるまで、タイムアウト値を増やしてください。
次の例では、マスター・データベースがrep1
およびrep2
であるアクティブ・スタンバイ・ペアを作成します。サブスクライバrep3
が1つあります。レプリケーションのタイプはRETURN RECEIPT
です。また、この文では、PORT
およびTIMEOUT
属性をマスター・データベースに対して設定します。アクティブ・マスターとスタンバイ・マスターの両方で、TIMEOUT
属性は80秒に設定されます。
CREATE ACTIVE STANDBY PAIR rep1, rep2 RETURN RECEIPT SUBSCRIBER rep3 STORE rep1 PORT 21000 TIMEOUT 80 STORE rep2 PORT 22000 TIMEOUT 80;
トランザクション・ログ障害しきい値の設定
しきい値を設定でき、この値を超えると、使用可能なトランザクション・ログ領域を使い果たす前に、使用不可能なデータベースがfailed
状態に設定されます。
-
アクティブ・スタンバイ・ペアでは、トランザクション・ログのしきい値を超えると、使用可能なトランザクション・ログ領域を使い果たす前に、使用不可能なスタンバイ・データベースまたは読取り専用サブスクライバが
failed
状態に設定されます。CREATE ACTIVE STANDBY PAIR
文またはALTER ACTIVE STANDBY PAIR
文のSTORE
句にFAILTHRESHOLD
値を指定して、トランザクション・ログのしきい値を設定します。アクティブ・データベースは、スタンバイ・データベースまたは読取り専用サブスクライバ・データベースを
failed
状態に設定すると、障害が発生したデータベースのすべてのデータをトランザクション・ログから削除し、障害が発生したデータベースにメッセージを送信します。アクティブ・レプリケーション・エージェントが障害の発生したデータベースのレプリケーション・エージェントと通信できる場合、メッセージはすぐに送信されます。そうでない場合、メッセージは接続の再開時に送信されます。 -
クラシック・レプリケーション・スキームでは、トランザクション・ログのしきい値を超えると、使用可能なトランザクション・ログ領域を使い果たす前に、使用不可能なサブスクライバが
failed
状態に設定されます。CREATE REPLICATION
文またはALTER REPLICATION
文のSTORE
句にFAILTHRESHOLD
値を指定して、トランザクション・ログのしきい値を設定します。例については、「クラシック・レプリケーション・スキームでのRETURNサービスの使用」を参照してください。マスター・データベースは、サブスクライバ・データベースを
failed
状態に設定すると、障害が発生したサブスクライバのすべてのデータをトランザクション・ログから削除し、障害が発生したサブスクライバ・データベースにメッセージを送信します。マスター・レプリケーション・エージェントでサブスクライバ・レプリケーション・エージェントと通信できる場合、メッセージはすぐに送信されます。そうでない場合、メッセージは接続の再開時に送信されます。ただし、サブスクライバは、双方向レプリケーションの場合または他のサブスクライバに更新を伝播するように構成されている場合、マスターからメッセージを受信すると、レプリケーションの状態が損なわれたために、それ以上更新を送信しません。
デフォルトのしきい値は0(ゼロ)で、「制限なし」を意味します。トランザクション・ログ障害しきい値の詳細は、「ロギング用の接続属性の設定」を参照してください。
障害が発生したデータベースに接続中のアプリケーションは、データベースがレプリケーション・ピアによってfailed
とマークされたことを示すtt_ErrReplicationInvalid
(8025)警告を受信します。データベースにその障害状態が通知されると、アクティブ・データベースまたはマスター・データベースでのその状態はfailed
からstop
に変更されます。
ノート:
データベースの状態の詳細は、表11-1を参照してください。
アプリケーションでは、ODBCのSQLGetInfo
関数を使用して、アプリケーションが接続されているデータベースがfailed
状態に設定されているかどうかを確認できます(「サブスクライバの障害」を参照)。
競合への対応としてのクラシック・レプリケーションの一時停止と再開
クラシック・レプリケーションでは、CONFLICT REPORTING SUSPEND
属性を使用して、1秒当たりのレプリケーション競合数を表レベルで指定できます。競合数がこの数に到達すると、競合レポート処理が一時停止されます。また、CONFLICT REPORTING RESUME
属性を使用して、競合レポート処理が再開する1秒当たりのレプリケーション競合数を指定できます。
レプリケーション競合の解消を参照してください。