阻止选择查询的行,直到更新查询完成其工作

时间:2013-08-13 13:02:09

标签: hibernate oracle11g

我在Oracle中遇到了一个奇怪的情况。一个客户端试图获取具有权限选项“select for update”的少量记录(行将被锁定直到事务完成)。在第一个客户端提交事务之前,另一个客户端也可以尝试访问具有只读权限的行。是否有可能阻止第二个客户端的行被第一个客户端阻塞,直到事务提交为止。请指导我。 提前致谢。

1 个答案:

答案 0 :(得分:0)

在Oracle中,读者永远不会阻止作家和作家从不阻止读者。因此,无论更新过程在做什么,另一个会话总是能够读取行的当前提交状态。

如果要阻止读取行,则需要编写一些额外的锁定逻辑。读者也可以使用或不使用SELECT ... FOR UPDATE执行WAIT,以便在作者的事务提交之前阻止它。您还可以使用不同的表构建锁定逻辑。您可以构建一些逻辑,其中编写器更新另一个表中的行,指示更新过程正在进行中,并且所有读取器进程都可以读取该行。