首页 > Linux操作系统 > Linux操作系统 > 关于rac上sequence的值
在rac上sequence的值可能从不同的人查到的差别很大,重要原因是cache。
取一次值就给对应的实例分配了对应的cache size 的值段。
另外一个实例去取就从下一个cache size 的值段开始。
这几天在调整SEQ_TEST_ID就遇到了类似的情况,结果是调整了一个节点的nextval(通过select SEQ_TEST_ID.nextval),
另外一个节点的nextval还很少。如果用暴力一点的方式就不会(alter sequence):
以下是测试环境的测试:
1 在节点2操作:
SQL> create sequence SEQ_TEST_ID
2 minvalue 1
3 maxvalue 99999999
4 start with 1
5 increment by 1
6 cache 20
7 cycle;
Sequence created.
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
1
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
rac2
2 在节点1操作:
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
21
SQL>
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
rac1
SQL>
3 在节点2操作:
SQL> DECLARE
2 row_num NUMBER := 0;
3 BEGIN
4 FOR i IN 1..20 LOOP
5 select seq_TEST_id.nextval into row_num from dual;
6 END LOOP;
7
8 END;
9 /
PL/SQL procedure successfully completed.
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
42
SQL>
4 在节点1操作:
SQL>
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
22
5 在节点1操作:
SQL> alter sequence SEQ_TEST_ID increment by 24 nocache;
select SEQ_TEST_ID.nextval from dual;
Sequence altered.
SQL>
NEXTVAL
----------
84
SQL> alter sequence SEQ_TEST_ID increment by 1 cache 20;
Sequence altered.
SQL>
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
85
6 在节点2操作:
SQL> select SEQ_TEST_ID.nextval from dual;
NEXTVAL
----------
105
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758322/viewspace-694933/ ,如需转载,请注明出处,否则将追究法律责任。