【问题标题】:Locks for SQL Server [closed]SQL Server 的锁 [关闭]
【发布时间】:2013-12-10 11:21:27
【问题描述】:

考虑一个场景,当我有两个 Java 应用程序 A 和 .Net 应用程序 B 时,哪个用户是 SQL 服务器的数据库? A 和 B 都试图更新同时具有 ID 和 Name 两列的表 Product。会发生什么,我们如何避免这种情况。

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

请提出建议。

【问题讨论】:

  • 这是一个有趣的问题,但它的范围太广了。请进行一些调查/编码/实验,如果遇到任何问题,请尝试制定更具体的问题。

标签: sql .net sql-server tsql locking


【解决方案1】:

通常你会想要同步这个 应用程序代码中的访问类型。

我遇到过很多这样的情况,让数据库 处理这样的比赛场景/条件不是一个好的选择。

在您的情况下,您可以创建第三个应用程序 C,它位于 在 A 和 B(一侧)和 DB(另一侧)之间。 然后在 C 中,您可以构建对访问的细粒度控制 到数据库。

【讨论】:

    【解决方案2】:

    超时是指死锁,SQL Server 会杀死“较弱”的作业(抛出错误并回滚事务)。

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

    peter sugestion 是一个不错的方法,但如果您无法在应用程序级别创建公共入口点,您仍然可以通过使用复制、消息代理、创建 stag 表等在 RDBMS 或数据库级别完成。

    我建议其他有类似问题的人阅读书籍,因为它是一个非常广泛的主题,您必须缩小范围以找到最适合您需求的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多