。接続を失っても効果はありません。しかし、それ自体でシーケンス値を増やすことはありません。それは何
は、シーケンスに定義ので、次の時間を変更し、後続のすべての時間、nextval
は、生成された番号ではなく、それが以前に設定したものは何でもより10でインクリメントされますと呼ばれている(デフォルトは1)。
ので、迅速なデモとして:
CREATE SEQUENCE myCounter;
Sequence MYCOUNTER created.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
1
SELECT myCounter.nextval from dual;
NEXTVAL
----------
2
SELECT myCounter.nextval from dual;
NEXTVAL
----------
3
ので、シーケンスは、デフォルトで、1ずつインクリメントされます。あなたはそれを変更した後に続いて、代わりに1の10によるnextval
増加への各呼び出し:
ALTER SEQUENCE myCounter INCREMENT BY 10;
Sequence MYCOUNTER altered.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
13
SELECT myCounter.nextval from dual;
NEXTVAL
----------
23
alter
自体は使い切るか、10個の値をスキップしていなかった - そう最初nextval
は23ではなく13それを持っているでしょう定義を変更しただけです。
ドキュメントは、あなたがロールバックする場合は、あなたが再び発生した以前に発行された番号のいずれかを取得しないことを言っている参照してください:
ROLLBACK;
Rollback complete.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
33
あなたは再び33、いない23を取得します。値は発行され、ロールバックやコミットに関わらず、別の
nextval
コールから取得するために、自分のものを含め、他のセッションでは使用できなくなります。 (シーケンスが
cycle
に設定されていると、最終的に再発行されることがありますが、デフォルトでは無効になります)。
シーケンスの生成はgaplessではなく、ロールバックの処理方法とキャッシュメカニズムの仕組みの両方のためではありません。この数字は、必ずしも順番に厳密に発行されるわけではありません.RAC環境では、各ノードに独自のキャッシュがあり、その中から割り当てます。