oracle如何处理集群环境中的并发?

时间:2015-01-30 19:32:27

标签: oracle concurrency

我必须实现一个数据库解决方案,其中在群集环境中处理争用。有一种情况是,如果余额低于100美元,有多个用户同时尝试访问银行账户并存入资金,我怎样才能确保没有存入额外的钱?基本上,这个查询应该触发: -

update acct set balance=balance+25 where acct_no=x ;

由于数据库是群集的,因此帐户最终会被多次存入。 我正在寻找纯粹基于oracle的解决方案。

2 个答案:

答案 0 :(得分:1)

群集对于试图阻止您担心/看到的场景的系统无关紧要,而这种场景正在锁定。

根据支票(账户少于100美元),看看情景用户A然后用户B尝试进行更新: 如果检查和更新都在同一事务中完成,则锁定将阻止用户B进行检查,UNTIL用户A已完成检查和实际插入。换句话说,用户B将发现检查失败,并且不会执行询问的操作。

当用户说“同时”时,你应该知道计算机不知道这个概念,因为所有事务都是顺序的,无论毫秒是一样的。看看重做日志中保存的ID,只有一个计数器。交易X和Y在彼此之前或之后完成,从不在同一时间完成。

答案 1 :(得分:0)

这听起来不对...当Oracle锁定一行进行更新时,锁应该跨越所有节点。你所描述的听起来不对。您使用的是哪个版本的Oracle,是否可以提供有关您正在做什么的分步示例?

Oracle 11 doc: http://docs.oracle.com/cd/B28359_01/server.111/b28318/consist.htm#CNCPT020