Oracle数据库作为两个独立web应用程序的单个同步点

Oracle数据库作为两个独立web应用程序的单个同步点,oracle,concurrency,Oracle,Concurrency,我正在考虑使用Oracle数据库来同步不同服务器上两个或多个web应用程序的并发操作。数据库是这些应用程序的共同基础结构元素 两个或多个应用程序很有可能在调用cron的同一时刻尝试执行相同的操作。我想使用数据库让一个应用程序决定它将是做这项工作的应用程序,而其他应用程序根本不会做这项工作 一般的想法是使用节点ID执行一个对所有连接可见的原子选择/插入。只有与select返回的第一个插入节点ID具有相同ID的节点才能执行此工作 有人向我建议,这里可以使用merge语句。然而,在做了一些研究之后,我

我正在考虑使用Oracle数据库来同步不同服务器上两个或多个web应用程序的并发操作。数据库是这些应用程序的共同基础结构元素

两个或多个应用程序很有可能在调用cron的同一时刻尝试执行相同的操作。我想使用数据库让一个应用程序决定它将是做这项工作的应用程序,而其他应用程序根本不会做这项工作

一般的想法是使用节点ID执行一个对所有连接可见的原子选择/插入。只有与select返回的第一个插入节点ID具有相同ID的节点才能执行此工作

有人向我建议,这里可以使用merge语句。然而,在做了一些研究之后,我发现一个讨论表明

另一个选项是锁定表。根据定义,只有一个节点能够锁定服务器并进行插入,然后选择。移除锁后,其他实例将看到插入的值,并且不会执行工作

你会考虑其他什么解决方案吗?我不赞成使用随机延迟的变通方法,甚至不赞成使用oracle异常通知节点它不应该执行该工作。我更喜欢干净的解决方案。

我最终选择了SELECT FOR UPDATE。它按预期工作。重要的是要记住,在进行所需更新后立即提交事务,这样其他节点就不会挂起等待值。

dbms_lock包将完全执行您想要的操作。这只是甲骨文自身用于其操作的锁的包装。我不会用其他任何方式。