为Oracle数据表的时间列建立Unique index后发生的
2009-06-11 14:26
183 查看
在为oracle数据做优化的过程中,遇到了一个很奇异的现象,也是自己的一个不留神吧,在为其中一个表的一个时间字段添加索引的时候,误将该字段的聚集索引定义成了一个unique,大家都知道,就算是聚集索引,其内容也是允许重复的,但是如果添加了unique的话,就不能允许任何相同值的存在了。
继续描述,然后在执行系统的一个批量操作的时候出现了比较怪异的问题,我们的系统可以允许同时发送多份公文条目,但是,经过测试发现,会出现随机的发送失败,而且很难找出问题发生地规律,于是,我开始跟踪代码,查看问题的所在,当自己把一些关键部分添加完断点之后,一步一步的调试情况下,问题居然无法重现!?
但是一旦去掉断点,问题就会重现,经过异常抛出的线索,在不能单步调试的情况下,发现居然是在执行插入操作的时候发生地异常,提示错误大致意思为:插入的数据违反了表中的索引XXX的唯一约束,仔细一看,原来为了查询的方便而为创建时间列createtime添加的索引居然包含unique的约束条件!
这一下,一切都明白了,之所以问题发生没有固定规律,以及在单步调试下不会重现的原因。但同时也发现一个问题,即对于oracle来讲,我们循环执行的数据库事务,有可能不是按照我们循环的次序进行执行的,数据库可能会对这种类似批量的事务进行优化处理,这也是导致问题不一致的一点原因吧。
继续描述,然后在执行系统的一个批量操作的时候出现了比较怪异的问题,我们的系统可以允许同时发送多份公文条目,但是,经过测试发现,会出现随机的发送失败,而且很难找出问题发生地规律,于是,我开始跟踪代码,查看问题的所在,当自己把一些关键部分添加完断点之后,一步一步的调试情况下,问题居然无法重现!?
但是一旦去掉断点,问题就会重现,经过异常抛出的线索,在不能单步调试的情况下,发现居然是在执行插入操作的时候发生地异常,提示错误大致意思为:插入的数据违反了表中的索引XXX的唯一约束,仔细一看,原来为了查询的方便而为创建时间列createtime添加的索引居然包含unique的约束条件!
这一下,一切都明白了,之所以问题发生没有固定规律,以及在单步调试下不会重现的原因。但同时也发现一个问题,即对于oracle来讲,我们循环执行的数据库事务,有可能不是按照我们循环的次序进行执行的,数据库可能会对这种类似批量的事务进行优化处理,这也是导致问题不一致的一点原因吧。
相关文章推荐
- 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成
- Oracle-07-数据类型例子&查询当前系统时间&创建表语法
- ORACLE 建立数据文件WriteWebShell
- 在数据库中(Oracle),根据时间查询数据: to_date()和to_char()函数
- oracle 记录每一条数据最后更新的时间(ora_rowscn)
- ORACLE 取24小时并且时间与数据相对应
- oracle回滚表数据到指定时间
- oracle 11g linux 建立表空间 用户 授权 数据导入 导出
- Oracle时间类型数据为0的Bug
- 用DECS建立DOMINO与ORACLE的数据连接
- 关于Oracle数据中日期时间的操作
- oracle表数据量大时建立索引,需要加上online参数
- 关于response.getWriter()写回数据的实际发生时间点
- oracle插入返回主键&&根据时间获取最新的一条数据
- oracle数据表插入时间
- ORACLE 按时间戳来恢复数据
- oracle数据获取当前自然周,当前周的起始和结束时间
- oracle 数据类型---日期和时间
- 查看数据最后修改时间,建立时间
- oracle数据查询时间