代码之家  ›  专栏  ›  技术社区  ›  Ian Ringrose

如何判断客户端进程是否已停止?

  •  0
  • Ian Ringrose  · 技术社区  · 14 年前

    背景

    我们有一个工作进程,它从SqlServer中的一个表中读取作业,然后将结果写回其他表。一台或多台计算机运行一个或多个工作进程。

    我们需要一个系统,如果工作进程或它正在运行的机器出现故障,该系统就会分离。(由于工作进程以任何其他方式失败,因此无法与数据库对话是一个糟糕的问题。)

    我想到的选择。

    使用数据库锁:

    • 在工作进程中启动事务并锁定行(或应用程序锁)
    • 如果工作进程因任何原因中止,SQL Server将中止事务并移除锁。

    使用看门狗计时器:

    • 在表中为每个工作进程设置一行
    • 工作进程经常更新行中的最后一次OK列
    • 如果列长时间没有更新,则工作进程将停止。
    • 使用SqlServer UST time,避免了每台机器上不同时间的问题。

    还有其他的选择我没想过吗?

    你认为以上选项有什么问题?


    如果您介意,我们的工作进程是用.NET编写的,运行在Windows服务器上。我们不需要将解决方案移植到其他数据库供应商;我们只需要支持Sql Server 2005和2008

    1 回复  |  直到 14 年前
        1
  •  0
  •   Andomar    14 年前

    我们就是这么做的,就像一个魔咒。有点专业,你认为使用服务器时间之前,我们了解到,只有在冬季转换;)

    Kerberos要求活动目录域中的所有计算机都具有相同的UTC概念。只要在SQL中使用getutcdate(),我就不会有任何问题。