oracle 11.2.0.1.0 和 oracle 11.2.0.2.0 在使用序列向表中插入值时的区别

问题描述 投票:0回答:1

在 Oracle 11.2.0.1.0 中:

1)我创建了一个表。

create table m1(id number(5,2), version number(5,2), primary key (id));

2)我创建了一个序列。

CREATE SEQUENCE m1_id_sq;

3)我将值插入表中。

insert into m1(id, version) values (m1_id_sq.nextval, 1);

4)输出。

id
version

-------------

2
1

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

*我在oracle中创建了一个用户实例,我运行了以上三个命令。不如当师父。

现在我按照同样的步骤

在 Oracle 11.2.0.2.0 中,

但是我得到的输出是,

id
version

-------------

1
1

请解释为什么在 oracle 11.2.0.2.0 中 id=1 而在 oracle 11.2.0.1.0 中 id=2。万分感谢!

oracle oracle11g oracle11gr2
1个回答
1
投票

问题可能是由于 NOORDER 是 Oracle 序列的默认设置,特别是如果您运行的是 RAC 环境。

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

我了解到,对于序列,如果我想保证它们是连续的,我通常必须在创建序列时添加以下关键字:

CREATE SEQUENCE m1_id_sq ORDER NOCACHE;

编辑参考以上评论:

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

“无论如何这都不重要 - 你会在序列中出现空白 出于其他原因,所以你不应该依赖它以 1"

开头

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

Alex Poole 还指出了一个已知问题:Oracle Note 1050193.1(需要 Oracle 支持帐户)与

deferred_segment_creation=TRUE
.

相关的问题

ThinkJet 还参考了以下文章,这些文章表明 Oracle 的早期版本在序列和延迟段方面存在一些问题:

https://web.archive.org/web/20150914162717/http://orawin.info/blog/2010/04/25/new-features-new-defaults-new-side-effects/

https://web.archive.org/web/20151004175547/http://orawin.info/blog/2011/11/17/new-defaults-old-side-effects/

© www.soinside.com 2019 - 2024. All rights reserved.