如何使用外部 launcher.exe 独占启动 SQL 用户定义过程,无需事务?

How to launch SQL user defined procedure exclusively, without transaction, using external launcher.exe?

我正在将较旧的应用程序从内部部署的“老旧”SQL 服务器迁移到 Azure SQL。到目前为止,还不错。

旧的解决方案使用 Job Agent 来启动 usp_data_pump 以从第 3 方数据库获取一些数据。第一个 运行(让我的数据库为空)大约需要 30 分钟。由于添加了优化,接下来的 运行 秒需要大约 5 秒,而其他数据库中监视的数据没有变化。这可能需要更多时间,但是——由于数据的创建方式——它仍然需要几秒钟。但是,在某些情况下,我的数据库内容可能会被“重置”(用户操作),然后可能会再次花费 30 分钟左右的时间。

我需要每 5 分钟抽取一次数据以获得微小的变化。

由于 Azure SQL 没有作业代理,我决定使用附近的 Azure Windows 服务器及其标准调度程序每 5 分钟执行一次 launcher.exe连接到 Azure SQL 服务器,执行 usp_data_pump 存储过程并停止。然而,当调度器起作用时,它运行是“永远”的。

我不确定会发生什么。第一个想法是 launcher.exe 在前一个尚未完成任务的 5 分钟后再次启动。但是,在计划任务的“设置”选项卡中设置了选项...

Do not start new instance

首先,如何实现usp_data_pump过程的周期性独占执行。交易不得在内部使用。

Azure SQL 数据库为我们提供了两个自动作业 SQL Azure MI 代理和 Azure SQL 数据库的弹性作业 您可以使用弹性作业来执行存储过程。

参考此文档:Automate management tasks using elastic jobs:

  • 您可以创建和安排可以定期执行的弹性作业 针对一个或多个 Azure SQL 数据库执行到 运行 Transact-SQL (T-SQL)查询和执行维护任务。

Elastic Job 代理是免费的。作业数据库的收费标准与 Azure SQL 数据库中的任何数据库相同。

HTH.