龙空技术网

详解Oracle序列(Sequence)创建、使用、修改及删除

波波说运维 1005

前言:

此时我们对“oracle怎么操作”大体比较珍视,看官们都想要知道一些“oracle怎么操作”的相关文章。那么小编同时在网上网罗了一些有关“oracle怎么操作””的相关内容,希望看官们能喜欢,小伙伴们快快来学习一下吧!

概述

所谓序列,在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序的数据列的值都不重复。序列(Sequence)是用来生成连续的整数数据的对象,常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。

语法结构:创建序列

CREATE SEQUENCE sequence_name[START WITH num][INCREMENT BY increment][MAXVALUE num|NOMAXVALUE][MINVALUE num|NOMINVALUE][CYCLE|NOCYCLE][CACHE num|NOCACHE]

语法解析:

① START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。

② INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。

③ MAXVALUE:指最大值。

④ NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。

⑤ MINVALUE:指最小值。

⑥ NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。

⑦ CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。

⑧ NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。

⑨ CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。

⑩ NOCACHE:不预先在内存中生成序列号。

实例:创建序列

需求:创建一个从1开始,默认最大值,每次增长1的序列,要求NOCYCLE,缓存中有30个预先分配好的序列号。

实现:

SQL> CREATE SEQUENCE MYSEQ  MINVALUE 1  START WITH 1  NOMAXVALUE  INCREMENT BY 1  NOCYCLE  CACHE 30  /

序列创建之后,可以通过序列对象的CURRVAL和NEXTVAL两个“伪列”分别访问该序列的当前值和下一个值。

实例:序列使用

SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;SQL> SELECT MYSEQ.CURRVAL FROM DUAL;
实例:序列修改和删除

使用ALTER SEQUENCE可以修改序列,在修改序列时有如下限制:

1. 不能修改序列的初始值。

2. 最小值不能大于当前值。

3. 最大值不能小于当前值。

使用DROP SEQUENCE命令可以删除一个序列对象。

SQL> ALTER SEQUENCE MYSEQ  MAXVALUE 10000  MINVALUE -300  /SQL> DROP SEQUENCE MYSEQ;

在RAC环境中,序列的Cache问题可能会对性能有着决定性的影响,缺省的序列Cache值为20,这对RAC环境远远不够。如果存在序列号使用的竞争,就可能在数据库中看到明显的队列等待:enq: SQ - contention

在RAC情况下,可以将使用频繁的序列Cache值增加到10000,或者更高到50000,这些值在客户的环境中都有采用。基本上cache 大于20的时候性能基本可以接受,最好设置100以上,nocache的时候性能确实很差,最大相差20倍.

后面会分享更多DBA方面的内容,感兴趣的朋友可以关注一下~

标签: #oracle怎么操作 #oracle保存响应文件格式 #oracle怎么生成一列 #oracle修改序列cache值