如何判断客户端进程是否已经死亡?

时间:2010-11-02 14:53:17

标签: sql-server client-server

背景

我们有工作进程从SqlServer中的表读取“作业”,然后将结果写回其他表。一台或多台机器运行一个或多个工作进程。 单个SqlSever数据库(有时是集群的)是我们世界的中心,因此很可能是解决方案应该存在的地方。

如果工作进程或运行的计算机出现故障,我们需要一个分离的系统。 (由于工作进程以任何其他方式失败,因此无法与数据库通信是错误的。)

如果需要,工作进程可以在处理作业时保持对SQL Server的连接和事务处理。

我提出的选项。

使用数据库锁:

  • 在工作进程中启动事务并锁定行(或应用程序锁定)
  • 如果行仍处于锁定状态,我们知道工作进程正常
  • 如果工作进程因任何原因中止,SQL Server将中止事务并删除锁定。

使用看门狗定时器:

  • 表中的每个工作进程都有一行
  • 工作进程通常
  • 更新行中的“上次OK”列
  • 如果列长时间未更新,则工作进程已停止。
  • 使用SqlServer UST时间,以避免每台机器上的不同时间出现问题。

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

您对上述选项有何疑问?


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

1 个答案:

答案 0 :(得分:0)

我们这样做,就像一个魅力。您认为事先使用服务器时间的专业人员,我们只有在冬季转换后才知道;)

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