日期:2014-05-17  浏览次数:20984 次

RAC中的Sequence为何不按顺序递增?
我oracle2台节点的RAC环境,某个Sequence我已经设置了order, cache20。

为什么生成的数据,先生成的值反而大,后生成的小,如何解决这个问题?

难道order属性不起作用的?

------解决方案--------------------

order保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,10给A

并不能保证你的想法。

引用:
cache20的话,在node1和node2上分别保存了20个id,假设node1是1-20,node2是21-40
那么第一个请求发送时由node2处理,给了21,第二个请求由node1处理,给了1,就会出现我上面的情况。

这是我的猜测,但我不知道order这个参数是如何保证上面情况不发生的?

------解决方案--------------------
节点间要共享seq  本来2种方式可以解决楼主所说
1  就是order+cache
2  nocache
而楼主用了第一种方式,我猜测有可能是cache过小,而调用nextval时会持有SV锁,造成先调用会话等待后反而比后调用的小---空了我验证下