CREATE SEQUENCE文は、一意な整数を生成し複数のユーザで使用するための、順序番号ジェネレータを新しく作成します。CREATE SEQUENCE文を使用して、順序の初期値、増分値、最大値、最小値、および順序のサイクルを指定できます。
TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。
[INCREMENT BY IncrementValue]
CREATE SEQUENCEには、次のパラメータがあります。
SQL文でSEQUENCE値を参照するには、CURRVALとNEXTVALを使用します。
レプリケーションでは循環する順序がサポートされません。
データ・ストア・レベルのレプリケーション要素を持つレプリケーション・ストアに順序が作成されている場合、その順序は、デフォルトではスキームに含まれません。順序をスキームに追加するには、レプリケーションに関連するストアごとにALTER REPLICATION文を実行して、SEQUENCE ELEMENTを追加する必要があります。
順序をレプリケートする目的は、レプリケート表に移入する際に使用された可能性がある順序の値を、表の内容に正しく反映することです。したがって、順序の更新は、順序の更新後にレプリケート表の更新が発生する場合、または順序がレプリケート表の更新に使用された場合にのみレプリケートされます。
たとえば、SELECT s.nextval from SYS.DUALといった順序値の増分を伴う、順序に対する操作は、レプリケート表が更新されるまでレプリケートされません。このため、こうした順序の更新は、レプリケート表がその後に更新されるまでログからパージされないという影響があります。したがって、このような順序の更新のみがログの末尾にある場合には、ttRepSubscriberWaitおよびttRepAdmin -waitが失敗することになります。
リンク障害が発生した後、蓄積されたログを再実行することでレプリケーションを復旧できる場合、特に対応する必要はありません。
ただし、ある一定の期間障害ノードが停止していた場合、ttRepAdmin -duplicateコマンドを使用して、残ったノードのトランザクションから障害ノードのデータ・ストアを再生成する必要があります。これは、順序は障害回復時にロールバックされないためです。この場合、ttRepAdmin -duplicateコマンドはノードからノードにSEQUENCEの定義をコピーします。
たとえば、データ・ストアDB1のある順序が1から開始し1000000まで増加し、データ・ストアDB2では順序が100001から開始し200000まで増加するとします。各順序が1つ以上の表の列の値を生成するために使用される場合、各ノードはそれぞれの順序の範囲で表の行の列に値を割り当てます。
データ・ストアDB1が無効で、ttRepAdmin -duplicateコマンドを実行してデータ・ストアDB1を既存のデータ・ストアDB2から複製する必要があるとします。両方のノードはSEQUENCE値を100001から200000の間で出力します。これを回避するには、ttRepAdmin -duplicateコマンドを実行した後、アプリケーションを開始する前にフェイルオーバー・スクリプトで最初に順序をDROPしてから、重複を生成しない範囲で順序を再度CREATEする必要があります。
レプリケートされた設定でこの方法を使用すると、SEQUENCEを使用して値の一意性を確保することができます。ただし、キー値の密集度や一定の連続した増加は保証されていません。
最大値に達した場合、CREATE SEQUENCEのCYCLEオプションの値によって、SEQUENCEはサイクルする(開始値に戻る)か、エラー文を生成します。
この例では、tab1は表内に1行のデータを持ち、CYCLEが使用されているとします。
CREATE SEQUENCE s1 MINVALUE 2 MAXVALUE 4 CYCLE; SELECT s1.NEXTVAL FROM tab1; /* Returns the value of 2; */ SELECT s1.NEXTVAL FROM tab1; /* Returns the value of 3; */ SELECT s1.NEXTVAL FROM tab1; /* Returns the value of 4; */最大値に達した後、最小値から昇順でサイクルを開始します。
SELECT s1.NEXTVAL FROM tab1; /* Returns the value of 2; */
順序を作成して順序番号を生成するには、次の文を使用します。
UPDATE SET句で順序を使用するには、次の文を使用します。
問合せで順序を使用するには、次の文を使用します。