天天看點

Oracle rac使用序列需要注意的地方

首先一個序列的定義如下

-- 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某一列的時候,如果這個列是通過序列插入的,得到的順序并不一定是插入的順序哦。

繼續閱讀