1oracle 自增长 2Oracle Sequence中Cache与NoCache的区别
来源:互联网 发布:现货电子交易软件 编辑:程序博客网 时间:2024/06/05 16:02
一、oracle 自增长
ORACLE是不能用IDENTITY,可以用SEQUENCE
oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
由于oracle是序列型的,所以不是在建表的时候递增的,可以用以下方法:
针对S_Depart创建的sequence如下:1、先建表:create table mytable0813(id int not null,name varchar(256))2、创建一个SEQUENCE create sequence SEQ_D minvalue 1 maxvalue 99999999 start with 21 increment by 1 cache 20;
补充问题: Oracle Sequence中Cache与NoCache的区别 (放最后)
3、在向表插数据时插入自增列 insert into mytable0813 values(SEQ_D,'字段值',...) 例如:insert into mytable0813(id,name)values(SEQ_D.Nextval,'12345');
二、Oracle Sequence中Cache与NoCache的区别
Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache,下面来讲一下两者的区别:
先来看下创建sequence的语句:
create sequence SEQ_ID minvalue 1 maxvalue 99999999 start with 1 increment by 1 cache n / nocache --其中n代表一个整数,默认值为20order;
如果指定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。
再来看看sequence相关保护机制:row cache lock:在调用sequence.nextval情况下需要修改数据字典时发生,对应row cache lock事件SQ lock:在内存缓存(并非rowcache)上获取sequence.nextval时发生,对应enq:SQ-contention事件SV lock:RAC环境下获取cache+order属性的sequence.nextval时发生,对应DFS lock handle事件
什么情况下使用cache什么时间上使用nocache?
我个人感觉应该尽量使用cache,因为现在的数据库很多都是在高并发的情况下运行的,首先这样可以搞性能,并且也不会产生row cache lock等待事件。可能有些人会担心数据库不正常的down掉会产生序列号间断,但这也是很少的情况。当然如果你的业务要求是绝不能产生间断的序列号,那就要使用nochache了。
转自
oracle中有identity列吗?怎么实现自增长?_yuzhili_新浪博客http://blog.sina.com.cn/s/blog_62b080970100o5h6.html
Oracle Sequence中Cache与NoCache的区别 - 学而时习之 - 博客频道 - CSDN.NEThttp://blog.csdn.net/duanning397/article/details/7670302
- 1oracle 自增长 2Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle中Cache跟noCache的区别
- Oracle Sequence Nocache
- ORACLE Sequence 自增长
- oracle中sequence trigger 及构造自增长字段
- oracle中创建表主键id依据sequence自增长
- oracle中创建表主键id依据sequence自增长
- Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache
- ORACLE SEQUENCE的简单介绍(自增长字段)(转)
- ORACLE SEQUENCE的简单介绍(自增长字段)
- 解决oracle自增长sequence失效的问题
- ORACLE SEQUENCE的简单介绍(自增长字段)
- 解决oracle自增长sequence失效的问题
- Oracle 的 自增长
- java 内省以及介绍beanutils使用
- Ajax and php 1.4
- usrlocallib usrlib的区别
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
- HDU1166-敌兵布阵,线段数模板题~~
- 1oracle 自增长 2Oracle Sequence中Cache与NoCache的区别
- 获取winformGridView中选择的行列
- leetcode-338-Counting Bits
- CodeForces 217AIce Skating(DFS)
- java数据结构排序之希尔排序实现
- 命令行无法输入中文
- 【C/C++】知识回顾2
- Qt学习之给QPushButton添加菜单CustomContextMenu方法
- Linux 内存不足