使用序列在表中插入值时,oracle 11.2.0.1.0和oracle 11.2.0.2.0
在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在上述评论中指出的那样:
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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |