【每日一摩斯】-【序列】-续-RAC and Sequences (853652.1)

简介: 一个简单的sequence有什么可以说的呢?如果再这样认为就大错特错了。。。也许以下几点高人们都很清楚,但至少对于我来说,之前是陌生的,或者说是忽略的。

一个简单的sequence有什么可以说的呢?如果再这样认为就大错特错了。。。


也许以下几点高人们都很清楚,但至少对于我来说,之前是陌生的,或者说是忽略的。

1、CREATE SEQUENCE seq;,不带任何参数,那么默认建立的SQL语句是:

-- Create sequence 
create sequence SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 21
increment by 1
cache 20;

这里显示的start with是21,increment by是1,cache是20。

黄勇大师的解释是“Looks like the reverse-engineered sequence definition takes "start with" (1 by default) as "start with" value before the sequence is ever used, but takes "increment by" x "cache" + "start with" after it's used once or a few times.”

序列在未使用之前,序列使用"start with(默认是1)"作为起始点,在使用一次或几次之后,序列就会用"increment by "x" cache和"start with"来计数与取值了。


2、序列的定义,包括从dba_sequences中看到的内容,都是存储在Shared Pool的Data Dictionary中。


3、官方未公布的sys.v$_sequences表也会记录一些关于sequence的信息,这些都是从Shared Pool中获得的。


4、dba_sequences中的last_number字段,指高水位线,或者更准确地应该叫存储于Shared Pool中最大的序列值。


5、使用cache的序列,可能会出现断层,原因就是cache的值被purge了。像flush shared pool这种操作就可能purge缓存cache。例如当Shared Pool满了,新的对象(例如SQL)又来了,此时旧的对象就会被aged out,或者使用的ASSM,buffer cache需要更多的SGA空间,因此shrink了Shared Pool。

序列出现断层的原因可能有:

ROLLBACK。

PMON进程执行清理。

元数据置换出row cache(也就是Data Dictionary)。

实例关闭。


示例:

SQL> create sequence seq_1;
Sequence created.

SQL> select seq_1.currval from dual;
select seq_1.currval from dual
       *
ERROR at line 1:
ORA-08002: sequence SEQ_1.CURRVAL is not yet defined in this session

SQL> select seq_1.nextval from dual;
   NEXTVAL
----------
         1
SQL> select seq_1.nextval from dual;
   NEXTVAL
----------
         2
...
SQL> select seq_1.nextval from dual;
   NEXTVAL
----------
        20
SQL> SELECT last_number FROM dba_sequences WHERE sequence_name='SEQ_1';
LAST_NUMBER
-----------
         21

目录
相关文章
|
存储 缓存 关系型数据库
【每日一摩斯】-RAC and Sequences (853652.1)
序列有四种组合: a. CACHE + NOORDER b. CACHE + ORDER c. NOCACHE + NOORDER d. NOCACHE + ORDER 即使在单例配置下,当有大量的sequence需要产生的时候,性能压力和存储sequence值的行锁定代价相关。
1009 0
|
3月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
75 2
|
3月前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
|
4月前
|
存储 负载均衡 Oracle
|
4月前
|
存储 Oracle 关系型数据库
|
6月前
|
存储 Oracle 关系型数据库
Oracle RAC:数据库集群的舞动乐章
【4月更文挑战第19天】Oracle RAC是Oracle提供的高可用性数据库解决方案,允许多个实例共享同一数据库,确保业务连续性和数据完整性。通过集群件和全局缓存服务实现服务器间的协调和通信。RAC提供高可用性,通过故障转移应对故障,同时提升性能,多个实例并行处理请求。作为数据管理员,理解RAC的架构和管理至关重要,以发挥其在数据管理中的最大价值。
|
6月前
|
Oracle 关系型数据库
oracle rac 手工安装补丁,不适用auto
oracle rac 手工安装补丁,不适用auto
70 3
|
6月前
|
存储 运维 Oracle
Oracle系列十八:Oracle RAC
Oracle系列十八:Oracle RAC
|
6月前
|
Oracle 关系型数据库
oracle Hanganalyze no RAC
oracle Hanganalyze no RAC
42 0