我oracle2台节点的RAC环境,某个Sequence我已经设置了order, cache20。为什么生成的数据,先生成的值反而大,后生成的小,如何解决这个问题?难道order属性不起作用的?
解决方案 »
- sqldeveloper运行时总提示 enter the full pathname for java.exe
- Oracle存储过程的测试问题
- oracle备份bat文件怎么写
- oracle 9i 同时锁表???
- 请问ORACLE FROM插入数据提示某列长度不够,如何知道是哪个列?
- oracle 语句的问题请大家来帮忙?
- 【求助】EXP/IMP出现乱码【非超级子集关系字符集间转换】
- 请教关于ora01653错误的解决方法
- ORA-28009:connection to sys should be sa sysdba or sysoper.....
- 用PB和Oracle开发厂里的无纸化办公系统,请问用什么版本搭配最好?
- 问个oracle脏数据问题,求大牛帮我理清下思路,没头绪阿
- 关于使用sql语句实现插入4000字符到CLOB字段的方式
minvalue 1
maxvalue 9999999999999999999999999999
start with 30335946
increment by 1
cache 20
order;
下面是我在表中看到的结果:30324126 2012/12/1 8:13:16
30324128 2012/12/1 8:13:18
30324127 2012/12/1 8:13:23照理第二行的这条数据比第三行早插入,应该获得较小的sequence,现在却是较大的?
再一堆操作
最后插入数据
insert into xx (id, updatetime) values (null, sysdate)
在表上有一个trigger用于获取sequence.nextval插入。会有什么问题吗?
那么第一个请求发送时由node2处理,给了21,第二个请求由node1处理,给了1,就会出现我上面的情况。这是我的猜测,但我不知道order这个参数是如何保证上面情况不发生的?
order保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,10给A并不能保证你的想法。
1 就是order+cache
2 nocache
而楼主用了第一种方式,我猜测有可能是cache过小,而调用nextval时会持有SV锁,造成先调用会话等待后反而比后调用的小---空了我验证下
30324127 2012/12/1 8:13:23这两行是否在同一个节点上插入的?
因为你这个时间是sysdate。检查下两个节点的时间是否完全一致?
修改为 nocache试试