アクティブ・スタンバイ・ペア内の順序のレプリケート
順序は、アクティブ・スタンバイ・ペアから除外したり、CYCLE
属性が指定されていないかぎり、レプリケートされます。
「レプリケーションに対するデータベース・オブジェクトの包含または除外」を参照してください。
順序のレプリケーションは、アクティブ・データベースで順序が更新されるたびに、スタンバイ・データベースで順序番号の範囲を予約することによって最適化されます。順序番号の範囲を予約すると、トランザクション・ログの更新回数を減らすことができます。順序番号の範囲はキャッシュと呼ばれます。アクティブ・データベースでの順序の更新のレプリケートは、順序の更新後にレプリケート・トランザクションが実行される場合、または順序の更新がレプリケート・トランザクションで使用される場合にのみ実行されます。
MINVALUE
が1で、INCREMENT
が1、デフォルトのCache
が20の順序my.sequence
について考えてみます。my.sequence.NEXTVAL
を初めて参照すると、アクティブ・データベースの順序の現在値は2に変更され、新しい現在値21(20+1)がスタンバイ・データベースにレプリケートされます。アクティブ・データベースのmy.seq.NEXTVAL
への次の19回の参照では、スタンバイ・データベースの現在値21がアクティブ・データベースの現在値より大きいため、新しい現在値のレプリケートは行われません。my.seq.NEXTVAL
への21回目の参照では、前回レプリケートされたスタンバイ・データベースの現在値21が、この時点でアクティブ・データベースの現在値22より小さくなるため、新しい現在値41(21+20)がスタンバイ・データベースに送信されます。
SELECT my.seq.NEXTVAL FROM sys.dual
などの順序に対する操作では、順序値は増加しますが、レプリケートされる表でのトランザクションをその後に行うまでレプリケートは実行されません。この動作には、レプリケートされる表でのトランザクションをその後に行うまでこれらの順序の更新がログからパージされないという副作用があります。このため、これらの順序の更新のみがログの末尾に存在する場合は、ttRepSubscriberWait
およびttRepAdmin
-wait
で障害が発生します。