2011-05-29 139 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)