我看到了很多关于避免阻塞的信息。但我的情况是,我需要阻塞。
我们有一张表,两个独立进程将使用它进行通信。这些进程将在随机时间运行,并使用此控制表来了解另一个进程是否正在忙碌。由于两个进程不能同时忙碌,因此需要控制表。
每个作业在运行时都会检查控制表...并基于该数据决定是否可以运行,如果可以,则会更新控制表记录。
问题在于,如果两个进程同时运行,不清楚它们是否会执行以下不希望的操作(按照精确顺序):
- Proc A 读取控制表(表格显示可以进行)
- Proc B 读取控制表(表格显示可以进行)
- Proc A 更新控制表(表格现在显示“Proc A正在忙碌”)
- Proc B 更新控制表(表格现在显示“Proc B正在忙碌”)
<- 在这种情况下,两个进程都认为它们成功地更新了控制表并开始了它们的主要流程(这不是我们想要的)
我想要的是让Proc B被阻止从控制表中进行选择(而不仅是更新)。这样,当Proc B的查询最终起作用时,它将看到已更新的“忙碌”值,而不是被Proc A更改之前存在的值。
我们正在使用SQL Server 2008 R2。我查看了可串行化隔离,但似乎不够强大。
就价值而言,我们正在尝试使用JDBC实现这一点...使用conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
我们理解为最高级别的隔离,但我仍然可以在另一个窗口中运行选择。
我100%确定这绝不是一个独特的问题....有人有任何建议使其正常工作吗?