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.十分感谢!
解决方法
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/