我读到Oracle维护行版本来处理并发。我想在非常大的实时数据库上运行更新查询,但此更新作业必须更改该行的最新版本。有没有办法通过SQL更新最新版本的行?
这可能通过PL/SQL或简单的SQL?
编辑下面**
让我清楚的情况下,我们面临着一个非常大的数据库在现实生活中的问题。我们的客户是一家知名的手机服务提供商。
我们的数据库有一个表格,用于管理客户手机帐户上剩余的当前余额记录。在表格的其他列中,一列存储完成的再充值量,另一列存储剩余的当前有效余额。
我们有两个独立的PL/SQL脚本。客户为手机充值并更新余额时,会自动触发一个脚本。
第二个脚本是关于从客户帐户中扣除某些费用。这是一项批量工作,因为它适用于所有客户。该脚本计划在一天的特定时间间隔内运行。当此脚本运行时,它会在内存中加载50,000条记录,更新某些列并执行批量更新回到表格。
问题发生的事情是这样的:
一位顾客,他的ID是101,联系他在当地商店买东西,他的手机充电。他支付金额。但直到他的手机即将充电时,第二个脚本的预定时间才开始了第二个脚本。第二个脚本在内存中加载了50,000个客户的记录。在这个内存记录中,也是这个客户的记录之一。
直到第二个脚本的批量更新完成时,第一个脚本成功为客户的帐户充值。
现在发生了什么是实际的表,列:“CurrentAccountBalance”被更新为150,但其第二脚本工作过客户的旧的平衡,即在内存中的记录,100
第二个脚本必须从列中扣除10:“CurrentAccountBalance”。根据实际工作,当客户的“CurrentAccountBalance”应为140时,此问题使他的余额为90.
现在该如何处理这个问题。
你说的是闪回,Oracle的临时访问? – 2010-11-01 18:13:25
编号纯SQL更新语句。 – RKh 2010-11-01 18:17:13
您正试图查看来自其他会话的未提交数据?然后在提交之前更新它!? – 2010-11-01 18:25:35