首页 > 解决方案 > 将弹性作业进程 ID 传递给目标数据库

问题描述

我正在使用 Azure Elastic Job 进行 SQL 维护活动,例如重建索引、清除数据等。

因此,对于多个作业运行,我想在我的目标数据库中跟踪这些操作。我想根据弹性工作流程 ID 跟踪它们。

无论如何我们可以通过存储过程捕获弹性作业进程ID并将其发送到目标数据库。

请注意,我已经创建了我的工作,以每小时和每周定期运行。

标签: sql-serverazureelasticsearchjobs

解决方案


Azure 弹性作业流程详细信息存储在jobs.job_executions

SELECT * FROM jobs.job_executions 

在此处输入图像描述

我们不能使用存储过程或直接查询跨数据库获取结果,我们需要配置数据库的弹性查询以将弹性作业代理表数据获取到目标数据库表。

您将需要配置以下步骤(使用示例语法):

  1. 创建主密钥

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master_key_password>'; 
    
  2. 创建数据库范围的凭据

    CREATE DATABASE SCOPED CREDENTIAL ABC 
    WITH IDENTITY = '<username>', 
    SECRET = '<password>'; 
    
  3. 创建外部数据源

    CREATE EXTERNAL DATA SOURCE DatasourceName WITH 
    (LOCATION = '<server_name>.database.windows.net', 
    DATABASE_NAME = 'TargetDB’, 
    CREDENTIAL = ABC, 
    ) ; 
    
  4. 创建外部表

    CREATE EXTERNAL TABLE [dbo].[job_executions] 
    ( [job_execution_id] nvarchar(256), 
      [Job_name] [nvarchar](256) NOT NULL,  
      …) 
     WITH 
    ( DATA_SOURCE = DatasourceName 
    ) ;
    

定义外部数据源和外部表后,您可以查询代理数据库表并使用目标数据库中的数据。

更多详情,请访问跨数据库查询


推荐阅读