11gR2向表插入序列值跳值问题(deferred segment 新特性带来的糟糕体验)
来源:互联网 发布:java都要掌握什么技术 编辑:程序博客网 时间:2024/05/16 19:40
我们知道序列是和当前会话有关联的,譬如:
12:20:53 OE@orcl> CREATE SEQUENCE empseq12:21:01 2 START WITH 10012:21:01 3 INCREMENT BY 112:21:01 4 ORDER NOCYCLE;序列已创建。已用时间: 00: 00: 00.0312:21:01 OE@orcl>12:21:01 OE@orcl> SELECT empseq.CURRVAL FROM dual;SELECT empseq.CURRVAL FROM dual *第 1 行出现错误:ORA-08002: 序列 EMPSEQ.CURRVAL 尚未在此会话中定义已用时间: 00: 00: 00.0312:21:19 OE@orcl> SELECT empseq.nextval FROM dual; NEXTVAL---------- 100第一次必须先NEXTVAL一下得到当前值
,然后在同一个会话下你再使用此序列就没问题了。
在11gR2 oracle使用了一个deferred segment新技术,也就是创建表的时候,不会立即创建,而是延时到插入值的时候才开始创建,这样带来的好处是,建表速度快,而且不占资源,但是却带来一些问题,譬如我们将要讨论的插入序列问题。
如下:
11:48:58 CRY@orcl> create sequence seq_tt;序列已创建。已用时间: 00: 00: 00.0311:49:09 CRY@orcl> create table test(id number,ss varchar2(100));表已创建。已用时间: 00: 00: 00.0111:49:17 CRY@orcl> select seq_tt.nextval from dual; NEXTVAL---------- 1已用时间: 00: 00: 00.0011:49:28 CRY@orcl> insert into test values(seq_tt.nextval,'test test');已创建 1 行。已用时间: 00: 00: 00.0411:49:36 CRY@orcl> select * from test; ID SS---------- ------------------------------------------------------------ 3 test test
很糟糕的,序列seq_tt跳过了2,直接把3插入到了表中。
我们来取消deferred segment这个特性再来试试(注意:11gr2中此值默认为TRUE的)
alter session set deferred_segment_creation=false;(使用此语句来取消延迟段创建特性)
13:08:25 CRY@orcl> create sequence seq_tt;序列已创建。已用时间: 00: 00: 00.0113:09:09 CRY@orcl> create table test(id number,ss varchar2(100));表已创建。已用时间: 00: 00: 00.2013:09:12 CRY@orcl> insert into test values(seq_tt.nextval,'test test');已创建 1 行。已用时间: 00: 00: 00.0113:09:19 CRY@orcl> select * from test; ID SS---------- --------------------------------------------------------------------- 1 test test
当我们取消延时创建表之后,序列插入正常了。
- 11gR2向表插入序列值跳值问题(deferred segment 新特性带来的糟糕体验)
- 11gR2游标共享新特性带来的一些问题以及_cursor_features_enabled、_cursor_obsolete_threshold和106001 event
- 11gR2游标共享新特性带来的一些问题以及_cursor_features_enabled、_cursor_obsolete_threshold和106001 event
- Oracle 11g R2 新特性:Deferred Segment Generation
- 11gr2 deferred segment and exp/imp
- 新特性的副产品--从11g的DEFERRED SEGMENT CREATION说起
- Oracle 11gR2 deferred segment creation 与 exp/imp 说明
- Oracle 11gR2 deferred segment creation 与 exp/imp 说明
- 11GR2新特性(转)
- Oracle 11g的Deferred Segment Creation
- 11gR2 oracle restart特性体验
- 在11gR2中可能惹祸的新特性
- VS2013带来的"新特性"
- Oracle 11gR2 RAC 新特性说明
- Oracle 11gR2 RAC 新特性说明
- Oracle 11gR2 RAC 新特性说明
- Oracle 11gR2 RAC 新特性说明
- Oracle 11gR2 新特性 概述
- The method onClick(View) of type new View.OnClickListener(){} must override a superclass
- Android 4.2软件列表
- BugNet使用指南二
- C#全能速查宝典
- QtSDK 1.2.1 offline下载
- 11gR2向表插入序列值跳值问题(deferred segment 新特性带来的糟糕体验)
- 从单片机初学者迈向单片机工程师前传----写给初学者的话
- 开源文献管理工具JabRef的使用
- 抓取web页面
- 交叉测试
- 哈佛结构&冯·诺依曼结构
- gcc找不到pkg-config
- C#字符分隔方法Regex.Split(类似Java中的StringTokenizer)
- mintty MSYS