创建、配置和管理弹性作业(预览版)

适用于:Azure SQL 数据库

本文介绍为 Azure SQL 数据库创建、配置和管理弹性作业所需的步骤。 可以在 Azure 门户中使用 T-SQL、PowerShell 和 REST API 完成其中的许多步骤。 弹性作业可以跨多个数据库并行运行一个或多个 Transact-SQL (T-SQL) 脚本。 有关详细信息,请详细了解 Azure SQL 数据库中的作业自动化概念,或详细了解 Azure SQL 数据库中的弹性作业

注意

弹性作业处于预览版中。 当前为预览版的功能是根据补充使用条款提供的,请查看适用于预览版的 Azure 功能的法律条款。 Azure SQL 数据库提供预览版,让你有机会在功能正式发布 (GA) 之前对其进行评估并与产品小组分享反馈

创建和配置弹性作业代理

  1. 使用 DTU 购买模型创建或标识空的 S1 或更高级别的 Azure SQL 数据库。 该数据库应与作业代理位于同一服务器中。 该数据库在弹性作业代理创建期间将用作作业数据库。 可以通过 Azure 门户、Azure CLI、Azure CLI (sql up) 或 PowerShell 创建单个数据库

  2. 在 Azure 门户中或使用 PowerShell 创建弹性作业代理

    在 Azure 门户中创建弹性作业代理的说明如下:

    1. 在 Azure 门户中,搜索弹性作业代理。 选择“创建”开始预配新的弹性作业代理资源。 或者,点击此链接在 Azure 门户中创建弹性作业代理
    2. 提供弹性作业代理名称
    3. 选择用于代理的订阅资源组。 如有必要,创建新的资源组。 弹性作业可以将其他资源组、订阅中的数据库,甚至是其他 Azure 区域中的数据库作为目标。
    4. 选择 Azure SQL 数据库逻辑服务器作为弹性作业代理服务器。
    5. 选择逻辑服务器中的作业数据库作为弹性作业代理数据库。 通过某些验证可确保数据库是合适的。
    6. 在“服务层级”下,选择“JA 100”
    7. 选择“下一步:标识”
    8. 作业代理对目标服务器/数据库进行身份验证的方法有两种:与用户分配的托管标识 (UMI) 配合使用的 Microsoft Entra 身份验证或数据库范围的凭据。
      1. 在弹性作业代理预配流程之外创建 UMI,或使用现有 UMI。 选择“添加用户分配的托管标识”。 选择 UMI。 选择“添加”
      2. 若要使用数据库范围的凭据,请参阅本教程后面的步骤
    9. 选择“下一步:标记”
    10. 考虑使用 Azure 标记。 例如,“所有者”或“创建者”标记用于标识资源的创建者,“环境”标记用于标识该资源是否处于“生产”、“开发”等状态。有关详细信息,请参阅制定 Azure 资源的命名和标记策略
    11. 选择“查看 + 创建”
    12. 在“查看 + 创建”页面上验证你选择的新的弹性作业代理,然后选择“创建”
    13. 需要执行进一步的步骤才能对目标服务器/数据库进行身份验证。 继续执行本教程文章的以下部分中的步骤。

创建作业代理身份验证

弹性作业代理必须能够对每个目标服务器或数据库进行身份验证。 在本部分中,我们将介绍弹性作业代理对目标组中的服务器/数据库进行身份验证所需的步骤。

弹性作业代理对目标进行身份验证时有两个选项:

将 Microsoft Entra 身份验证与用户分配的托管标识 (UMI) 配合使用

Microsoft Entra(以前称为 Azure Active Directory)身份验证与用户分配的托管标识 (UMI) 配合使用。 这是推荐的身份验证方法。

  1. 在所有作业目标逻辑服务器/数据库和作业输出逻辑服务器上启用 Microsoft Entra(以前称为 Azure Active Directory)身份验证。
  2. 创建一个新的用户分配的托管标识 (UMI) 或使用现有 UMI。
    • 可以通过 Azure 门户、Azure CLI、PowerShell、资源管理器 或 REST API 创建新的 UMI
  3. 将 UMI 分配给已创建的弹性作业代理。
    • 建议在创建弹性作业代理时分配 UMI,请参阅创建和配置弹性作业代理中的步骤。 在 Azure 门户中创建作业代理时,在“标识”选项卡中,将标识分配给弹性作业代理。
    • 若要更新现有弹性作业代理以使用 UMI,请在弹性作业代理的 Azure 门户页面上,导航到资源菜单中的“安全”菜单下的“标识”。 选择 UMI 并将其分配给弹性作业代理。
    • 使用 New-AzSqlElasticJobAgentSet-AzSqlElasticJobAgent PowerShell cmdlet 创建或更新弹性作业代理时,请使用参数:-IdentityType UserAssigned -IdentityID <identity resource path>。 例如:
      $parameters = @{
          Name = '<job agent name>'
          ResourceGroupName = '<Resource_Group_Name>'
          IdentityType = 'UserAssigned'
          IdentityID = '/subscriptions/fa58cf66-caaf-4ba9-875d-f1234/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UMI name here>'
      }
      Set-AzSqlElasticJobAgent @parameters
      
    • REST API 还可用于创建或更新弹性作业代理
  4. 创建目标组并添加作业的目标。 使用 PowerShell 定义目标组和目标(需对其运行作业的数据库)使用 T-SQL 定义目标组和目标
  5. 在每个目标服务器/数据库中,使用 T-SQL 或 PowerShell 创建映射到 UMI 或数据库范围凭据的包含用户:
    1. 使用 T-SQL 创建作业身份验证
    2. 使用 PowerShell 创建作业身份验证
  6. 在输出数据库中,创建 UMI 作业用户并向该用户分配权限。 连接到输出数据库,并为名为 jobuserUMI 的用户运行以下示例脚本:
    CREATE USER [jobuserUMI] FROM EXTERNAL PROVIDER; 
    GO 
    
  7. 如果在 the @output_table_name argument 中的 sp_add_jobstep 调用中指定了输出参数,则必须向作业代理 UMI 或数据库范围的凭据授予 CREATE TABLE 和 INSERT 数据到该输出表的权限。
    GRANT CREATE TABLE TO [job_user];
    GRANT SELECT,INSERT,UPDATE,DELETE ON [dbo].[output_table_name] TO job_user;
    
  8. 在每个目标服务器/数据库中,授予数据库用户执行作业脚本所需的权限。 这些权限因 T-SQL 查询的要求而异。

使用数据库范围的凭据

可以在作业数据库中和每个目标服务器/数据库中使用数据库范围的凭据进行身份验证。 过去,数据库范围的凭据是弹性作业可用的唯一选项。

注意

如果将 UMI 分配给作业代理,则不会使用 SQL 身份验证来连接到其目标。 作业代理仅使用 Microsoft Entra 身份验证和 UMI 连接到其所有目标数据库。

  1. 作业数据库中创建数据库范围的凭据。
    1. 使用 PowerShell 创建数据库范围的凭据
    2. 使用 T-SQL 创建数据库范围的凭据
  2. 使用 PowerShell 定义目标组(需对其运行作业的数据库)使用 T-SQL 定义目标
  3. 在要在其中运行作业的每个目标数据库中创建作业代理登录名/用户。 每个目标服务器/数据库的登录名/用户必须采用与作业用户的数据库范围凭据的标识相同的名称,并采用与作业用户的数据库范围凭据相同的密码。
    1. 使用 PowerShell 将凭据和用户添加到每个目标数据库
    2. 有关添加用户的详细信息,请参阅使用登录名和用户帐户授权服务器和数据库访问
  4. 在输出数据库中,创建作业用户并向该用户分配权限。
    1. 连接托管输出数据库的逻辑服务器的 master 数据库。 如果尚不存在,请创建 SQL 身份验证登录名,需采用与作业用户的数据库范围凭据的标识相同的名称,并采用与作业用户的数据库范围凭据相同的密码。
      CREATE LOGIN [job_user] WITH PASSWORD '<same_password_as_database-scoped_credential>'
      GO 
      
    2. 连接到输出数据库,并为名为 job_user 的用户运行以下示例脚本:
      CREATE USER [job_user] FROM LOGIN [job_user]; 
      GO 
      
    3. 如果在 @output_table_name 参数 中的 sp_add_jobstep 调用中指定了输出参数,则必须向作业代理 UMI 或数据库范围的凭据授予 CREATE TABLE 和 INSERT 数据到该输出表的权限。
      GRANT CREATE TABLE TO [job_user];
      GRANT SELECT,INSERT,UPDATE,DELETE ON [dbo].[output_table_name] TO job_user;
      
  5. 在每个目标服务器/数据库中,授予数据库用户执行作业脚本所需的权限。 这些权限因 T-SQL 查询的要求而异。

创建、运行和管理作业

  1. 使用 PowerShell 创建作业使用 T-SQL 创建作业
  2. 向每个弹性作业添加步骤。 必须为每个作业步骤选择一个目标组。 使用 PowerShell 添加作业步骤使用 T-SQL 添加作业步骤
  3. 使用 PowerShell 运行作业使用 T-SQL 运行作业
  4. 使用 Azure 门户监视作业执行状态,使用 PowerShell 监视作业使用 T-SQL 监视作业

配置 Azure SQL 弹性作业专用终结点

每个目标服务器均可通过服务托管的专用终结点来访问,该终结点由 Azure 创建和管理,并专门用于弹性作业。 通过创建弹性作业专用终结点,可建立弹性作业与目标服务器之间的专用链接。 配置后,弹性作业代理与目标服务器之间的所有通信都将通过专用终结点进行。

配置过程非常简单。 必须为每个所需的目标服务器和作业输出服务器创建专用终结点,才能启用此通信。

  1. 在“弹性作业代理”导航菜单中的“安全”下,选择“专用终结点”
  2. 选择“添加服务器并创建专用终结点”
  3. “创建专用终结点”窗口随即打开。
    1. 可以在 Azure 中的任何位置,从任何订阅中选择目标服务器。
    2. 在该订阅中选择目标 Azure SQL 数据库的逻辑服务器。
    3. 提供“专用终结点名称”
  4. 选择“创建专用终结点”。 部署需要几分钟时间才能完成。 很快,“专用终结点”页面上的“连接状态”将显示“挂起”
  5. 在 Azure 门户中,导航到 Azure SQL 数据库的逻辑服务器。
  6. 作为该目标 Azure SQL 数据库逻辑服务器的管理员,在“安全”下的“SQL Server”导航菜单中,选择“网络”
  7. 选择“专用访问”
  8. 批准待处理的专用终结点请求。
  9. “专用终结点”页面上的“连接状态”将显示“已批准”。 现在,作业代理与该目标 Azure SQL 数据库逻辑服务器中的任何数据库或弹性池之间的任何通信都将通过服务托管的专用终结点进行。
  10. 作为该目标 Azure SQL 数据库逻辑服务器的管理员,在“安全”下的“SQL Server”导航菜单中,选择“网络”。 用于弹性作业时,无需启用公共访问

使用 Azure Monitor 配置作业代理警报

在弹性作业代理资源上配置 Azure Monitor 警报,以便收到关于作业执行状态的通知。 例如,可以通过用户配置的操作组通知作业失败/成功。

可以使用 Azure 门户、PowerShell 或 REST API 创建弹性作业代理警报。

使用 Azure 门户创建作业代理警报

使用 Azure 门户、Azure CLI、PowerShell 和 REST API 创建 Azure Monitor 警报规则。 弹性作业的警报规则的工作方式与其他警报规则(例如 Azure SQL 数据库)类似。

要继续使用 Azure 门户:

  1. 在弹性作业代理的 Azure 门户资源菜单上,转到“监视”菜单,然后选择“警报”
  2. 在“为此资源设置警报规则”提示符下,选择“创建警报规则”
  3. 在“创建警报规则”页面上,“选择信号”页面随即打开。 选择弹性作业指标:“弹性作业执行失败”、“弹性作业执行成功”或“弹性作业执行超时”Screenshot from the Azure portal showing the Create an alert rule page.
  4. 在“警报逻辑”下,将“阈值”、“聚合类型”、“运算符”和“单位”留为默认值。
  5. 将“阈值”设置为 0。 将其他设置留为默认值。
  6. 在成本预览中查看估算成本。
  7. 选择“下一步:操作”
  8. 选择“创建操作组”或选择现有操作组。
    1. 在 Azure 门户中创建 Azure Monitor 警报操作组 以设置通知设置,例如,通过电子邮件向管理员或开发人员通知失败。
    2. 测试“警报操作组”
  9. 选择“下一步:详细信息”
  10. 将“订阅”和“资源组”作为“项目详细信息”提供。
  11. 提供警报通信的“警报规则详细信息”。 提供“警报规则名称”
  12. 选择“标记”并提供元数据,例如此警报的创建者环境
  13. 选择“查看 + 创建”。 选择“创建”。 警报规则可能需要几分钟时间才能显示在 Azure 门户中。
  14. 或者,使用 Azure 门户、Azure CLI 或 PowerShell 创建 Azure Monitor 警报处理规则。 使用警报处理规则来确定触发警报时会发生什么,例如禁止通知或向某些类型的警报应用特定操作。

调整作业代理

默认情况下,在 JA100 层创建作业代理,最多可并发执行 100 个弹性作业。 启动服务级别更改是一项异步操作,经过短暂的预配延迟后新的服务级别将可供使用。

如果需要并发执行超过 100 个弹性作业代理,可以使用更高的服务级别,请参阅并发容量层。 目前可以通过 Azure 门户、PowerShell 或 REST API 更改作业代理的服务级别。

若超出并发作业的服务级别,在启动的作业超过服务级别的并发作业限制之前,将创建队列延迟。

使用 Azure 门户调整弹性作业代理

  1. 在 Azure 门户中,导航到“弹性作业代理”页。
  2. 选择“定价层”或从上下文菜单中选择“纵向扩展/缩减”
  3. 从“服务层”下拉列表中选择新的服务层。
  4. 查看成本卡片。
  5. 选择更新

使用 PowerShell 调整弹性作业代理

Set-AzSqlElasticJobAgent-ServiceObjective 可选参数可用于指定新的服务目标。 例如:

$parameters = @{
    Name = '<job agent name>'
    ResourceGroupName = '<Resource_Group_Name>'
    ServiceObjective = 'JA200'
}
Set-AzSqlElasticJobAgent @parameters

使用 REST API 调整弹性作业代理

可以使用作业代理 REST API 调整作业代理。 例如:

{ 
"id": "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/group1/providers/Microsoft.Sql/servers/server1/jobAgents/agent1", 
"name": "agent1", 
"type": "Microsoft.Sql/servers/jobAgents", 
"location": "chinanorth3", 
"sku": {
"name": "JA100  ", 
"capacity": 100 
}, 
"properties": {  
"databaseId": "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/group1/providers/Microsoft.Sql/servers/server1/databases/db1"
}  
}