序列递增步长由1改为50

8
我创建了一个Oracle序列:

CREATE SEQUENCE seq_acteurs START WITH 1 INCREMENT BY 1;

通常情况下,序列应该每次增加1,但是当插入Acteurs表时,序列s会增加50!这似乎不合逻辑。为什么会这样呢?
非常感谢您的帮助。

你是在问什么原因会导致一个序列增加50,而通常它只增加1? - Gabe
为什么需要无间隔序列? - oluies
我的回答对您的问题有所帮助吗?谢谢。 - Basanth Roy
3个回答

4

当您需要时,序列号不会逐个获取。通常,数据库会在内存中缓存一定数量的序列号。当所有缓存的序列号都被使用后,数据库会将一个新的序列号块提取到缓存中。如果数据库在缓存仍有未使用的序列号时崩溃,则序列号可能存在间隙。


如果在事务中使用序列号进行回滚,则序列号将消失。 - oluies
我不确定,但从我看到的情况来看,每次增加50。当我添加第一条记录时,序列会将其设置为50作为ID,当我添加第二条记录时,序列会将其设置为100,然后是150、200等,总是以50递增。 - cascadox

3
在您的实体类中添加以下内容,将增加1:
allocationSize=1

这是一个例子:

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

3

序列不能保证生成不间断的数字序列。

您可以通过指定nocache来最小化间隔,但这仍然不能保证不间断的序列,并可能会创建资源争用。

以下是来自文档的示例:

CREATE SEQUENCE customers_seq START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE;


当情况需要时,使用nocache没有任何问题。否则Oracle不会实现它。 - Jeffrey Kemp
好的,但是你能告诉我如何使用“nochache”吗?非常感谢你的时间。 - cascadox
抱歉回复晚了,感谢您的时间。我尝试了您的代码,但问题仍然存在...这次仍然每次增加50,序列从50000开始,然后是50050,50100等。 - cascadox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接