Oracle Sequence不生成连续数字

时间:2013-06-18 09:59:57

标签: oracle plsql oracle11g sequence

我在oracle中有一个序列将用作SYSID。序列不是以有序的方式生成,意味着它正在跳过数字,然后它继续。

以下是我的序列

CREATE SEQUENCE leaveform_seq 
MINVALUE 1 MAXVALUE 999999999999999999999999999 
INCREMENT BY 1 START WITH 1560
CACHE 20 ORDER NOCYCLE;

序列的任何替代方案?

3 个答案:

答案 0 :(得分:6)

Oracle序列是保证系列唯一数字的生成器,它在多用户环境中表现良好并可扩展。性能和可扩展性的折衷是该系列中偶尔存在差距。

很难找到一个用例,这种差距对组织来说真的很重要。虽然人们对他们陷入不必要的狂热是非常普遍的。


序列有替代品吗?当然,我们总是可以自由编写自己的代码。根据您的业务需求,它可能非常简单,也可能相当复杂。

要记住的重要事项是性能和可伸缩性。通过选择不使用序列,你不可避免地牺牲了两者。但是编写自己的系列生成器提供了一个真正搞砸的机会。

因此,了解其含义,并确保您的老板完全卖出这个想法。

答案 1 :(得分:4)

是的,这就是他们的工作方式。序列不能保证给出无间隙的数字列表,部分原因是使用序列值的事务的回滚不会将值返回到可用列表,部分原因是序列缓存。

对于没有意义的id,这应该不是问题。

这里有一个长期的讨论:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:530735152441

答案 2 :(得分:0)

如果您设置CACHE 1而不是CACHE 20,则差距会缩小