弹性作业代理在逻辑应用程序中的作业立即超时

Elastic job agent immediately times out on a job in a Logic App

为了 运行 在 Logic App 上进行相当冗长的 SQL 查询,我将其保存为数据库中的存储过程,然后创建作业和步骤以 运行 存储过程作为以及我工作的所有者和目标群体。我在 Elastic Job Agent 上看到了我的工作、证书和目标群体,我创建它是为了让我的工作正常运行。

当我 运行 直接在数据库上查询时,它 运行 成功并花费了大约 28 分钟。

我 运行 我的逻辑应用程序上的作业。这意味着我不直接 运行 查询,而是 运行 将存储过程作为步骤创建的作业。

但是当我在 Elastic Job Agent 中查看结果时,我注意到它立即超时。查询似乎没有执行。我知道这一点,因为在查询开始时我清空了一个 table 并且我没有看到发生这种情况。

正如我提到的,Logic 应用程序非常简单,它只是 运行 完成这项工作。

我做这一切的原因是逻辑应用程序对冗长的 SQL 查询有超时问题。但是现在我在 Elastic Job Agent 上的超时甚至比 Logic App 的 2 分钟限制还要快。

更新:

当我查看创建凭据的步骤时,我意识到我可能忽略了这一步:Credentials for running jobs

这是否意味着我应该为我的工作创建一个单独的数据库?我们正在处理的只有一个数据库,它与包含我的 tables.

的数据库相同

更新 2:

我创建的弹性作业代理将我的数据库指定为作业数据库。所以一切显然都在同一个数据库上。

您似乎不需要为Azure Elastic Job创建单独的数据库,也许您在创建Azure Elastic Job时忽略了一些东西。

可以参考我的创建过程sql:

use master;
CREATE LOGIN masteruser WITH PASSWORD='qazwsx!1111';
CREATE LOGIN jobuser WITH PASSWORD='qazwsx!1111';

 

use master;
CREATE USER masteruser FROM LOGIN masteruser;

 

use gongdb;
CREATE USER masteruser FROM LOGIN masteruser;

 

use gongdb;
CREATE USER jobuser FROM LOGIN jobuser;

GRANT CREATE TABLE TO jobuser;

EXEC sp_addrolemember 'db_owner', 'jobuser';

use gongdb;
-- Create a db master key if one does not already exist, using your own password.  
CREATE MASTER KEY ENCRYPTION BY PASSWORD='qazwsx!1111';  

 


-- Create a database scoped credential. 
CREATE DATABASE SCOPED CREDENTIAL jobuser

WITH IDENTITY = 'jobuser',

SECRET = 'qazwsx!1111';

 


CREATE DATABASE SCOPED CREDENTIAL masteruser

WITH IDENTITY = 'masteruser',

SECRET = 'qazwsx!1111';

 

SELECT * FROM sys.database_scoped_credentials

 

EXEC jobs.sp_add_target_group 'DemoGroup';

 

SELECT * FROM jobs.target_groups WHERE target_group_name='DemoGroup';

 

EXEC jobs.sp_add_target_group_member 'DemoGroup',
@target_type = 'SqlServer',
@refresh_credential_name='masteruser', --credential required to refresh the databases in server
@server_name='<server>.database.windows.net'
GO

 

EXEC jobs.sp_add_job @job_name='CreateTableTest', @description='Create Table Test'

 


EXEC jobs.sp_add_jobstep @job_name='CreateTableTest',
@command=N'IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id(''Test''))
CREATE TABLE [dbo].[Test]([TestId] [int] NOT NULL);',
@credential_name='jobuser',
@target_group_name='DemoGroup'

 

SELECT * FROM jobs.jobs

 


SELECT js.* FROM jobs.jobsteps js
JOIN jobs.jobs j
  ON j.job_id = js.job_id AND j.job_version = js.job_version

 

exec jobs.sp_start_job 'CreateTableTest';
SELECT * FROM jobs.job_executions WHERE is_active = 1 ORDER BY start_time DESC

===================更新=====================

当您创建一个 Azure Elastic Job 时,您将只指定一个数据库作为您的作业数据库。

目标数据库是您需要访问的数据库。例如,如果您在 gongdb 中执行 table 创建操作,则您的目标数据库是 gongdb.

为了Azure Elastic Job访问目标数据库,您需要为目标数据库创建USER,然后创建访问所需的凭据。

之所以需要master db,是因为master db是权限更高的系统数据库。目标数据库的 USER 必须由 master 创建。

在我提供的SQL中,作业数据库和目标数据库都是gongdb,这可能会让你产生误解。