当前位置:主页 >> Oracle >> 正文
oracle序列讲解
阅读:1726 输入:2014-05-06 09:30:10
create sequence payInfo_seq--序列名为:payInfo_seq
start with 1
increment by 1
minvalue 1
maxvalue 99999
nocache
nocycle

建好以后,这样使用:

insert into payinfo values(payInfo_seq.nextval,'hello','yourmother');

其中,cache n  / nocache  --其中n代表一个整数,默认值为20

如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的Sequence就会丢失。举个例子:比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。

如果指定NOCACHE值,Oracle就不会预先在内存里面存放Sequence,当然这也就可以避免数据库不正常down掉的sequence丢失。不过会产生一些问题:创建nocache   sequence在高并发访问时,容易导致row cache lock等待事件,主要原因是每次获取nextval时都需要修改rowcache中的字典信息。使用nocache  sequence,还会导致如下问题:

由于每次修改字典信息都需要commit,可能导致log file sync等待,nocache sequence在RAC环境下,会对基于sequence生成的列创建的索引造成实例间大量索引块争用基于以上问题,避免创建nocache sequence。