5

在 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。太谢谢了!

4

1 回答 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 (requires an Oracle Support account) 与一个问题相关deferred_segment_creation=TRUE

ThinkJet 还参考了以下文章:

于 2013-10-04T16:12:28.480 回答