7

Oracle シーケンスを作成しました。

シーケンス seq_acteurs を作成し、1 ずつインクリメントします。

Acteurs通常、シーケンスは 1 ずつインクリメントする必要がありますが、テーブルに挿入すると、シーケンスsは 50 ずつインクリメントされます。それは論理的ではないようです。これはなぜですか?

どんな助けでも大歓迎です。

4

3 に答える 3

4

シーケンス番号は、必要なときに一度に 1 つずつ取得されるわけではありません。通常、DB は一定数のシーケンス番号をメモリにキャッシュします。キャッシュされたシーケンスがすべて使い果たされると、DB はシーケンス番号の新しいブロックをキャッシュにフェッチします。キャッシュに未使用の番号が残っている間に何らかの理由で DB がクラッシュした場合、シーケンス番号にギャップが生じる可能性があります。

于 2011-05-29T19:06:26.267 に答える
3

シーケンスは、ギャップのない数列を生成することを保証するものではありません。

を指定することでギャップを最小限に抑えることができますがnocache、これでもギャップのないシーケンスが保証されるわけではなく、リソースの競合が発生する可能性があります。

ドキュメントからの例:

CREATE SEQUENCE Customers_seqは、1つのNOCACHENOCYCLEによる1000の増分で開始します。

于 2011-05-29T19:00:49.787 に答える
3

エンティティクラスにこれを追加すると、1 増加します

allocationSize=1

これは例です:

@SequenceGenerator(name = "ECP_EVALUACION_SEQ", sequenceName = "SCORTN.ECP_EVALUACION_SEQ",allocationSize=1)
于 2016-10-24T15:56:40.193 に答える