Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server的锁_Sql_.net_Sql Server_Tsql_Locking - Fatal编程技术网

SQL Server的锁

SQL Server的锁,sql,.net,sql-server,tsql,locking,Sql,.net,Sql Server,Tsql,Locking,考虑一个场景,当我在Java中有两个应用程序a,在.Net中有两个应用程序B,哪个用户使用SQL server数据库?A和B都试图更新一个表产品,该表产品同时具有ID和名称两列。将会发生什么,我们如何避免这种情况 请注意,产品表有大量数据,A不能等待B完成其任务,然后启动,等待时间将非常长,在这种情况下,B会抛出超时错误 请建议。通常您会希望同步此操作 应用程序代码中的访问类型 我遇到过很多这样的情况,让DB 处理这样的竞争场景/条件不是一个好的选择 在您的情况下,您可以创建第三个应用程序C,它

考虑一个场景,当我在Java中有两个应用程序a,在.Net中有两个应用程序B,哪个用户使用SQL server数据库?A和B都试图更新一个表产品,该表产品同时具有ID和名称两列。将会发生什么,我们如何避免这种情况

请注意,产品表有大量数据,A不能等待B完成其任务,然后启动,等待时间将非常长,在这种情况下,B会抛出超时错误


请建议。

通常您会希望同步此操作 应用程序代码中的访问类型

我遇到过很多这样的情况,让DB 处理这样的竞争场景/条件不是一个好的选择

在您的情况下,您可以创建第三个应用程序C,它位于 在A和B(一侧)和DB(另一侧)之间。 然后在C中,您可以构建对访问的细粒度控制
对于DB来说,超时意味着死锁,SQL Server将终止“较弱”的作业(抛出错误并回滚事务)

解决方案取决于您的场景。如果您可以忍受脏读和其他异常,那么您可以调整到限制较少的隔离级别(但这不太可能)

peter sugestion是一个很好的方法,但是如果您无法在应用程序级别创建公共入口点,那么您仍然可以在RDBMS或DB级别通过使用复制、message broker、创建stag表等来创建


我建议任何有类似问题的人都去读书,因为这是一个非常宽泛的话题,你必须缩小范围,找到最适合你需要的解决方案。

这是一个有趣的问题,但它太宽泛了。如果您遇到任何问题,请进行一些调查/编码/实验,并尝试提出更具体的问题。