Java 从两台服务器并发访问同一个表
我正在使用preparedStatements从JavaJ2EE访问SQLServer2005表。jar部署在两台服务器上并并行运行。 程序如下:Java 从两台服务器并发访问同一个表,java,sql,sql-server-2005,concurrency,Java,Sql,Sql Server 2005,Concurrency,我正在使用preparedStatements从JavaJ2EE访问SQLServer2005表。jar部署在两台服务器上并并行运行。 程序如下: 从事件表中选择新用户事件 处理它们(向用户和其他用户发送电子邮件) 从事件表中删除已处理的事件(如果未执行步骤2,则确定不应执行删除) 在某些情况下,用户会收到两封电子邮件(每台服务器一封),因为这两封选择在delete语句之前同时执行。 我对表没有管理员权限,只是从java应用程序访问它 如何在第一次选择时锁定表,并在删除后解锁表? 您是否看到了另
您是否看到了另一种解决方案?如果您以事务方式接收工作,则只有一台服务器可以接收它:
set transaction isolation level repeatable read
update top 1 tbl
set ProcessingOnServer = HOST_NAME()
from YourWorkTable tbl
where ProcessingOnServer is null
and Done = 0
现在,您可以选择详细信息,知道工作项已安全分配给您:
select *
from YourWorkTable tbl
where ProcessingOnServer = HOST_NAME()
and Done = 0
函数host\u name()
返回客户端名称,但如果您认为这样更安全,可以从客户端应用程序传入主机名
我们通常会添加一个时间戳,这样您就可以检查处理项目所用时间过长的服务器。您的服务器是群集配置中的两个节点,还是同时访问同一数据库的两个独立应用程序?