【发布时间】:2013-09-05 14:13:20
【问题描述】:
在 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) 输出。
idversion
-------------
21
*我知道 id=2 的原因是由于从 11.2.0.1.0 开始引入的 deferred_segment_creation 功能。
*我在 oracle 中创建了一个用户实例,并运行了上述三个命令。不像大师。
现在我按照相同的步骤进行操作
在 Oracle 11.2.0.2.0 中,
但我得到的输出是,
idversion
-------------
11
请解释为什么在 oracle 11.2.0.2.0 中 id=1 而在 oracle 11.2.0.1.0 中 id=2。万分感谢!
【问题讨论】:
-
I understand the reason for id=2 is due to deferred_segment_creation你为什么这么认为? -
表和序列不相关 - 没有依赖关系,除非间接通过触发器,您在此处没有。 Ansd 序列没有段。如图所示,您背靠背运行了三个语句,中间没有任何内容 - 例如,在 11.2.0.1 的情况下,您没有执行
insert、rollback、insert? -
Note 1050193.1 确实说这是预期的延迟段创建。这并不表明行为在以后的版本中发生了变化,但我没有看到它在 11.2.0.3 中以 2 开头,
deferred_segment_creation=TRUE所以它似乎已被“修复”。无论如何,这并不重要 - 由于其他原因,您会在序列中出现间隙,因此您不应该从 1 开始依赖它。 -
@Murali - 您需要一个 Oracle 支持帐户才能看到它;如果您有,请登录 support.oracle.com,然后搜索该号码。我认为大卫是对的。这似乎表明这是预期的行为,但它显然已更改,并且注释指的是未发布的错误 - 如果他们已修复该错误,那么它似乎不会在任何地方得到承认,所以我认为您不会得到明确的答案。
标签: oracle oracle11g oracle11gr2