【问题标题】:How to lock records in Oracle while doing some validation如何在进行某些验证时锁定 Oracle 中的记录
【发布时间】:2014-03-24 07:57:37
【问题描述】:

我有一个 bash 脚本,每 5 分钟运行一次 Java 应用程序。 Java 应用程序从Oracle 数据库中的满足特定条件的表中获取记录。 我必须对Resultset 中返回的每条记录进行多次验证,如果当前记录通过验证,我将在ArrayList 中添加特定记录。 最后,当所有记录都经过验证后,对这些记录进行批量更新。

问题在于验证需要时间,并且到那时会添加新记录。 因此,有时前一个脚本尚未完成执行,而第二个脚本正在运行。我想要的是锁定当前未更新的记录,以便另一个脚本不会从数据库中获取它们。

我能想到的最好的办法是在表中添加一个状态列。

  • 状态 0 - 应用程序尚未处理
  • 状态 1 - 处理中
  • 状态 2 - 已处理

Java 应用程序将获取状态为 0 的记录,将它们设置为 1,然后执行验证。最后经过验证(成功与否),状态设置为 2。

你能想出一个更好的选择吗,因为它看起来有点“笨拙”。

【问题讨论】:

    标签: java sql oracle


    【解决方案1】:

    您可以选择批次记录FOR UPDATE,这将只锁定这些行并防止另一个会话获得对它们的锁定。

    SELECT mycol
      FROM mytable
     WHERE ...
       FOR UPDATE
    

    【讨论】:

    • 更新是解决方案,如果该过程需要时间,其他用户将等待提交。
    • 您也可以考虑应对表并在副本上工作。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多