2009-08-05 10 views
1

私はEJB3、JBoss AS 4.2.1およびOracle 10gを使用しています。私がASに配備するたびにシーケンスが壊れてしまうのです。例:私がヒキガエルからのシーケンスを見ているとき、最後の値は41ですが、新しいエントリに設定されている実際のIDは1050です。 この問題に関する既知のバグはありますか?おかげさまで Oracle Broken Sequence

答えて

4

シーケンスはギャップフリーではありません! これはバグではありません。

参照:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:513022131111

+1

非常にゆっくりインクリメントするシーケンスの場合(たとえば、 )、NOCACHEを設定してもパフォーマンスには影響しません。 –

+1

しかしギャップフリーのシーケンスはまだ保証されません。 – RussellH

1

メモリから、Oracleはそれゆえより高速なアクセス、ギャップのためのシーケンス番号をキャッシュします。その期待される行動。

ALTER SEQUENCEコマンドを実行すると、カウンタを正しい値にリセットできます。

+1

私は1050 *が「正しい」値であると主張します。シーケンスと自動生成されたキー値を使用する場合は、「使用するIDを新しい行に一意であることを教えてください、それは私が知る必要がある」ということだけです。言い換えれば、あなたがどこにいても気にしなければ、決して失われません。 –

0

お返事いただきありがとうございます。私の問題は、エンティティのデフォルトのallocationSizeのために発生しました。 allocationSizeのデフォルト値は50です。つまり、jbossアプリケーションは、50個のエンティティの作成ごとにoracle dbを要求しています。 Oracleのシーケンスのキャッシュ値は20です。つまり、データベースに1000レコードを挿入すると、シーケンスはnextVal 20を増加させます。