2011-05-29 52 views
3

我創建了一個Oracle序列:序列增加50而不是1

創建序列seq_acteurs以1遞增1開始;

正常情況下,序列必須加1,但是當插入到Acteurs表中時,序列s增加了50!這似乎不合邏輯。這是爲什麼?

任何幫助將大大降低。

+0

你問,是什麼引發時,通常是遞增的順序由50增加1? – Gabe 2011-05-29 18:47:19

+0

爲什麼你需要一個無間隙序列? – oluies 2011-05-29 19:00:56

+0

我的答案有點解決了你的問題嗎? Thx – 2011-05-31 13:33:30

回答

2

序列不保證它們生成一個無間隙序列的數字。

您可以通過指定nocache來儘量減少差距,但這仍不能保證無間隙序列,並且可能會產生資源爭用。從documentation

實施例:

CREATE SEQUENCE customers_seq START WITH 1000 遞增1個 NOCACHE NOCYCLE;

+0

當情況表明它使用nocache時沒有任何問題。否則Oracle不會實現它。 – 2011-05-30 02:52:57

+0

好,但你能告訴我如何使用「nochache」?感謝你的時間很多 – cascadox 2011-05-30 22:03:17

+0

對不起,爲你的時間,謝謝你的時間,我嘗試了你的代碼,但仍然是同樣的問題...仍然增加了50這次序列開始從50000然後50050然後50100等 – cascadox 2011-06-02 21:42:24

3

當您需要它們時,不會一次提取一個序列號。最後,DB在內存中緩存一定數量的序列號。當緩存的序列全部用完時,DB將新的序列號塊取入緩存。現在,如果數據庫由於某種原因崩潰,而緩存仍有一些未使用的數字,那麼序列號可能會有一些空白。

+0

如果有一個使用seqno事務回滾,序列號消失 – oluies 2011-05-29 19:39:41

+0

我不知道,但從我看到它總是增加50當我添加第一個記錄序列給它50作爲id,當我添加第二個序列給它100然後150然後200等等總是遞增50 – cascadox 2011-05-29 19:50:07

0

在實體類添加此,將於1

allocationSize=1 

這種增加是一個例子:

@SequenceGenerator(name = "ECP_EVALUACION_SEQ", sequenceName = "SCORTN.ECP_EVALUACION_SEQ",allocationSize=1)