sql-server - 弹性作业代理在逻辑应用程序中执行作业时立即超时

标签 sql-server azure azure-logic-apps job-scheduling

为了在逻辑应用程序上运行相当长的 SQL 查询,我将其保存为数据库中的存储过程,然后创建作业和步骤来运行存储过程以及作业的所有者和目标组。我在为让我的作业正常运行而创建的弹性作业代理上看到了我的作业、凭据和目标组。

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

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

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

正如我所提到的,逻辑应用程序非常简单,它只运行此作业。 enter image description here

我这样做的原因是因为逻辑应用程序对于冗长的 SQL 查询存在超时问题。但现在我在 Elastic Job Agent 上遇到超时,甚至比逻辑应用程序的 2 分钟限制还要快。

更新:

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

这是否意味着我应该为我的作业创建一个单独的数据库?我们只处理一个数据库,它与包含我的表的数据库相同。

更新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 弹性作业时,您只需指定一个数据库作为作业数据库。

enter image description here

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

enter image description here

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

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

enter image description here

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

关于sql-server - 弹性作业代理在逻辑应用程序中执行作业时立即超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65296252/

相关文章:

SQL - 选择已结束最近契约(Contract)但还有其他契约(Contract)未结的员工

c# - 无法在 C# Azure 函数中使用 Nuget 包

azure - 从 Azure 文件存储获取文件内容和特殊字符

XML 上的 SQL 迭代

sql-server - 如果链接表中没有匹配的值,如何显示零值

sql - 通过链接服务器从 SQL Azure RLS 数据库查询数据

c# - Windows Azure : length of blob remains 0

python - 消费计划下的 Azure 逻辑应用程序可以调用具有 VNet 集成的应用程序服务计划下的 azure 函数吗

azure - 是否有标准逻辑应用程序的管理 API?

sql-server - SSIS 中的 OData 源组件未连接