我的软件针对单个数据库在多台机器上运行。
我希望每天在软件中执行一项任务 - 例如。在中午。
我怎样才能确保这个任务是:
- 每天只执行一次,
- 无论当天哪台机器/用户碰巧运行该软件,都执行,并且
- 没有与软件的任何其他实例同时执行?
我的软件针对单个数据库在多台机器上运行。
我希望每天在软件中执行一项任务 - 例如。在中午。
我怎样才能确保这个任务是:
在客户端这样做的问题是您的用户可能一天都不会运行该软件,或者他们可能在运行过程中遭受硬件故障(例如断电),从而导致永久锁定行。你不能保证任务的完整性,你甚至不能保证任务会运行。
如果您需要确保无论用户每天实际使用您的软件如何,它都能运行,这适用于数据库服务器上的计划任务(适用于Windows和Linux / UNIX )。
创建执行任务的可执行文件,然后创建计划任务以每天运行它。这样,只要数据库机器启动,您就有一个始终运行的实例,并且您不必担心跨客户端跟踪作业执行。
好的,所以您现在说由于公司规则,您无法在数据库框上运行计划任务。这是我要使用的方案:
重要的部分是“作业开始时间”字段,它允许客户端检查作业是否在很久以前(例如 3 小时)开始但从未完成,因此可以重试或提醒用户,具体取决于进度值.
您可以在数据库中使用具有单行的表。使用事务来锁定包含最后更新日期的行。
每 X 分钟:
使用 SQL Server 的示例
如果您在事务中运行它,它将锁定其他客户端的行
UPDATE Test WITH (ROWLOCK)
SET UpdateDate = yourDate
WHERE PrimaryKey = yourkey