加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用序列在表中插入值时,oracle 11.2.0.1.0和oracle 11.2.0.2.0

发布时间:2020-12-12 13:13:50 所属栏目:百科 来源:网络整理
导读:在Oracle 11.2.0.1.0中: 1)我创建了一个表. 创建表m1(标识号(5,2),版本号(5,主键(id)); 2)我创建了一个序列. CREATE SEQUENCE m1_id_sq; 3)我将值插入表中. 插入m1(id,version)值(m1_id_sq.nextval,1); 4)输出. id版本 ————- 2 1 *我理解id = 2的原因是
在Oracle 11.2.0.1.0中:

1)我创建了一个表.

创建表m1(标识号(5,2),版本号(5,主键(id));

2)我创建了一个序列.

CREATE SEQUENCE m1_id_sq;

3)我将值插入表中.

插入m1(id,version)值(m1_id_sq.nextval,1);

4)输出.

id版本

————-

2 1

*我理解id = 2的原因是由于从11.2.0.1.0开始引入的deferred_segment_creation功能.

*我在oracle中创建了一个用户实例,并运行了上述三个命令.不是作为主人.

现在我按照相同的步骤

在Oracle 11.2.0.2.0中,

但我得到的输出是,

id版本

————-

1 1

请解释为什么oracle 11.2.0.2.0中的id = 1,而oracle 11.2.0.1.0中的id = 2.十分感谢!

解决方法

问题可能是由于NOORDER是Oracle Sequences的默认设置,尤其是在运行RAC环境时.

http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm

我已经了解了使用Sequences,如果我想保证它们是顺序的,我通常必须在创建序列时添加以下关键字:

CREATE SEQUENCE m1_id_sq ORDER NOCACHE;

编辑以参考上述评论:

正如Alex Poole在上述评论中指出的那样:

“This shouldn’t really matter anyway – you’ll get gaps in sequences
for other reasons so you shouldn’t rely on it starting with 1”

NOORDER是序列的默认值解释了这个问题.

Alex Poole还提到了一个已知问题:Oracle Note 1050193.1(需要Oracle支持帐户)与deferred_segment_creation = TRUE相关的问题

ThinkJet还引用了以下文章:

> http://orawin.info/blog/2010/04/25/new-features-new-defaults-new-side-effects/
http://orawin.info/blog/2011/11/17/new-defaults-old-side-effects/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读