oracle 序列
2012-06-27 09:57
106 查看
序列经常用了,但是很快就忘记了,今天通过网上或者自己知道的一些,总结了一下,在这写一下,为了自己以后复习。
1.序列是什么
序列SEQUENCE 是解决并发和性能问题,避免发生重复值。它是一个原子事物,取了值就已经生成一个不可再重复的数据,保证每个请求生成唯一的值。
2.序列的特征
(1) 序列会按自动递增或者递减生成一个唯一的号,它是整型。
(2) 序列是共享对象,不同的会话可以去读取该SEQUENCE.
(3)它可以代替应用代码中实现唯一值的序列号。
(4)可以将序列的一部分值预分配到内从,这样就能更快的访问SEQUENCE.
3.序列的语法
I NCREMENT BY N 是增长频率N,表示每次增长多少,序列之间的间隔,序列器最终的值不能小于0.
START WITH N 表示从N开始,指定生成的第一个序列。
MAXVALUE N|NOMAXVALUE 表示最大值N|表示默认最大值,也就是10^27
CYCLE|NOCYLE 表示循环,当你到最大值时就又进行一次循环|表示没有循环
CACHE N|NOCACHE 表示有你每次在内存中存放了N个SEQUENCE|
4.举例创建序列
?
创建好了sequence,可以在user_sequences 中看到sequence的信息
序列的两个值
a.nextval 返回下一个值
b.currval 返回当前的值
注:currval必须区nextval后才会有值,否则没有值。
它们两个使用的地方
a.非子查询的select语句中
b.insert语句中查询的select列表
c.insert 语句的values中
d.update set字句中
不允许出现的地方
a.视图的select的列表
b.有distinct限制的select列表。
c.带有group by,having,order by的select语句中
d.delete,update操作可更新视图中,不允许出现。
e.default 表达式中
cache的一些问题
cache里可以存放一些序列,但是因为cache数字在内存中,那就可能有丢失的风险,比如回滚事物,删除一些序列号,系统奔溃,被别的共享池对象挤出去,这样就会造成GAP。
举例子:如上面创建的序列,那么它的cache是20
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
1
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
2
SQL> alter system flush shared_pool;
System altered
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
21
可以看出来,如果刷新内存那么就会造成序列的不连续,也就是会出现GAP,用exec dbms_shared_pool.keep('my_sequence','q')可以把数据保存在内存中,防止数据的丢失。
当然cache在rac中用到的作用是相对比较大的,在序列这块调优时,经常会会用到。
这都是最简单的,但有时还真想不起来,希望大家的批评。这都是为了督促自己学习,不然学过的都忘了
1.序列是什么
序列SEQUENCE 是解决并发和性能问题,避免发生重复值。它是一个原子事物,取了值就已经生成一个不可再重复的数据,保证每个请求生成唯一的值。
2.序列的特征
(1) 序列会按自动递增或者递减生成一个唯一的号,它是整型。
(2) 序列是共享对象,不同的会话可以去读取该SEQUENCE.
(3)它可以代替应用代码中实现唯一值的序列号。
(4)可以将序列的一部分值预分配到内从,这样就能更快的访问SEQUENCE.
3.序列的语法
I NCREMENT BY N 是增长频率N,表示每次增长多少,序列之间的间隔,序列器最终的值不能小于0.
START WITH N 表示从N开始,指定生成的第一个序列。
MAXVALUE N|NOMAXVALUE 表示最大值N|表示默认最大值,也就是10^27
CYCLE|NOCYLE 表示循环,当你到最大值时就又进行一次循环|表示没有循环
CACHE N|NOCACHE 表示有你每次在内存中存放了N个SEQUENCE|
4.举例创建序列
?
序列的两个值
a.nextval 返回下一个值
b.currval 返回当前的值
注:currval必须区nextval后才会有值,否则没有值。
它们两个使用的地方
a.非子查询的select语句中
b.insert语句中查询的select列表
c.insert 语句的values中
d.update set字句中
不允许出现的地方
a.视图的select的列表
b.有distinct限制的select列表。
c.带有group by,having,order by的select语句中
d.delete,update操作可更新视图中,不允许出现。
e.default 表达式中
cache的一些问题
cache里可以存放一些序列,但是因为cache数字在内存中,那就可能有丢失的风险,比如回滚事物,删除一些序列号,系统奔溃,被别的共享池对象挤出去,这样就会造成GAP。
举例子:如上面创建的序列,那么它的cache是20
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
1
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
2
SQL> alter system flush shared_pool;
System altered
SQL> select my_sequence.nextval from dual;
NEXTVAL
----------
21
可以看出来,如果刷新内存那么就会造成序列的不连续,也就是会出现GAP,用exec dbms_shared_pool.keep('my_sequence','q')可以把数据保存在内存中,防止数据的丢失。
当然cache在rac中用到的作用是相对比较大的,在序列这块调优时,经常会会用到。
这都是最简单的,但有时还真想不起来,希望大家的批评。这都是为了督促自己学习,不然学过的都忘了
相关文章推荐
- Oracle序列(Sequence)创建、使用、修改、删除
- Oracle重置序列(不删除重建方式)
- Oracle事务、视图、序列
- oracle 序列
- Oracle创建序列及循环自增取值问题
- Oracle序列(Sequence)创建、使用、修改、删除
- oracle序列详解
- Oracle序列的(Sequence)使用
- 使用pl/sql在oracle中新建表和对应序列
- oracle 简单序列 自增 实例
- ArcSDE性能优化-对于SDE 库更改 Oracle 序列的高速缓存大小
- oracle 数据库模式对象,索引,序列,同义词,查看用户拥有的表,聚簇,数据库链接
- oracle中的序列
- 关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例
- 琪露诺也能看懂的Oracle 主键值的序列自动生成与分配
- oracle序列循环
- mybatis实现oracle批量插入,带序列(记录一下)
- Oracle之序列(主键自增)
- Oracle中序列的使用
- oracle序列