Home  >  Article  >  Database  >  Oracle读一致性导致的问题

Oracle读一致性导致的问题

WBOY
WBOYOriginal
2016-06-07 16:56:06898browse

为了提高事务处理的速度,oracle采用了读一致性机制。就是当一个会话更新数据后未提交时,其它会话读取到更新前的结果。这大

  为了提高事务处理的速度,,Oracle采用了读一致性机制。就是当一个会话更新数据后未提交时,其它会话读取到更新前的结果。这大大提高数据并发的效率,但某些特定条件下会产生错误的结果。

  下面的例子进行说明。

  先像表test(A number(10,2))插入1行记录100

  session1:

  update test set A=(select A+1 from test)

  session2:

  update test set A=(select A+1 from test)

  当会话1提交后再执行会话2时,得到得结果是102

  当会话1执行后未提交,会话2就已经执行,得到得结果是101,并不是102。这是因为oracle为了提供数据的并发访问速度,在一个会话更新数据后未提交时,另一个会话select 到的将是第一个会话更新前的数据

  单多个会话并发时,会产生不确定得结果,这不是我们想看到的。在并发系统开发时应多注意此类问题,并多测试。

  上面的两个会话可以改成以下做法,保证数据的准确更新

  session1:

  update test set A=A+1

  session2:

  update test set A=A+1

  其它的例子就不多说,当所要的处理结果与数据库本身的机制有冲突时,需尝试其它的实现方法

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Oracle 安装脚本Next article:查询与修改Oracle字符集