我要求应用程序与模式连接(Say A),模式A有权访问另一模式的表(Say B)。当我试图通过应用程序在Schema B中的集群环境中插入记录时,序列无法正常工作。它有一个按顺序定义的增量,但有时它会在第二次或第三次插入时产生高值,有时它会在第5次或第6次插入时产生较少的值。
但是当我改变序列并给出NO Cache选项然后工作正常。但是这个解决方案给了我开销问题。
答案 0 :(得分:0)
这就是序列的工作原理。每次访问缓存序列时,会话将从序列中获取n个数字,并且可以随时使用它们,直到会话关闭。无法控制广告订单。
任何连接多个会话的系统都是这种情况(连接池,集群环境,连接到同一数据库的多个胖客户端)。
让我们假设以下顺序:
CREATE SEQUENCE test_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
会话1调用test_seq.nextval并接收数字1到10
会话2调用test.seq.nextval并接收数字11到20
会话1插入三条记录
会话2插入两条记录
会话1插入一条记录
生成的广告订单将为
1
2
3
11
12
4
如果您需要记录ID以匹配插入顺序,则可以使用自Oracle 12c以来的标识列 一般情况下,最好不要为主键列指定任何特殊含义,并且最好通过时间戳列跟踪插入顺序。