Oracle シーケンスを作成しました。
シーケンス seq_acteurs を作成し、1 ずつインクリメントします。
Acteurs
通常、シーケンスは 1 ずつインクリメントする必要がありますが、テーブルに挿入すると、シーケンスs
は 50 ずつインクリメントされます。それは論理的ではないようです。これはなぜですか?
どんな助けでも大歓迎です。
Oracle シーケンスを作成しました。
シーケンス seq_acteurs を作成し、1 ずつインクリメントします。
Acteurs
通常、シーケンスは 1 ずつインクリメントする必要がありますが、テーブルに挿入すると、シーケンスs
は 50 ずつインクリメントされます。それは論理的ではないようです。これはなぜですか?
どんな助けでも大歓迎です。
シーケンス番号は、必要なときに一度に 1 つずつ取得されるわけではありません。通常、DB は一定数のシーケンス番号をメモリにキャッシュします。キャッシュされたシーケンスがすべて使い果たされると、DB はシーケンス番号の新しいブロックをキャッシュにフェッチします。キャッシュに未使用の番号が残っている間に何らかの理由で DB がクラッシュした場合、シーケンス番号にギャップが生じる可能性があります。
シーケンスは、ギャップのない数列を生成することを保証するものではありません。
を指定することでギャップを最小限に抑えることができますがnocache
、これでもギャップのないシーケンスが保証されるわけではなく、リソースの競合が発生する可能性があります。
ドキュメントからの例:
CREATE SEQUENCE Customers_seqは、1つのNOCACHENOCYCLEによる1000の増分で開始します。
エンティティクラスにこれを追加すると、1 増加します
allocationSize=1
これは例です:
@SequenceGenerator(name = "ECP_EVALUACION_SEQ", sequenceName = "SCORTN.ECP_EVALUACION_SEQ",allocationSize=1)