首先一個序列的定義如下
-- Create sequence
create sequence SEQ1
minvalue 1
maxvalue 999999999999999999999999999
start with 1000
increment by 1
cache 20;
你認為依次執行select SEQ1.nextval from dual獲得的值一定是有序的嗎?
你認為最晚執行select SEQ1.nextval from dual獲得的值一定是最大的嗎?
如果這個oracle是單機的,答案是肯定的。
但是在RAC多節點環境下,就不對了。
下面的内容摘自網上,是被人測試的資料:--------------------------------------------------------------------
create sequence TX_SEND_SEQ_ACC
minvalue 1
maxvalue 999999999999999999999999999
start with 673560
increment by 1
cache 20;
RAC1取序列
SQL> select tx_send_seq_acc.nextval from dual;
NEXTVAL
----------
673560
SQL> select tx_send_seq_acc.nextval from dual;
NEXTVAL
----------
673561
RAC2取序列
SQL> select tx_send_seq_acc.nextval from dual;
NEXTVAL
----------
673580
SQL> select tx_send_seq_acc.nextval from dual;
NEXTVAL
----------
673581
由此可見兩個節點的序列的最後一個值确實會不同,每個節點會預先占用20個序号,配置設定完後再開始下一段編号,這樣會存在跳号問題,經大量資料測試,序列并不會重複生成,不存在重号問題。
----------------------------------------------------------------------------------------------------
是以你order by某一列的時候,如果這個列是通過序列插入的,得到的順序并不一定是插入的順序哦。