浏览弹性作业

已完成

许多 DBA 熟悉 Azure 自动化的一个原因在于,Azure SQL 数据库最初缺少计划作业的功能。

使用弹性作业功能,你将能够以一次性作业的形式对服务器或数据库集运行 T-SQL 脚本集,或者使用已定义的计划。 弹性作业的工作方式与 SQL Server 代理作业的工作方式类似,不同之处在于它们只限于执行 T-SQL。 作业适用于 Azure SQL 数据库的所有层。 SQL 代理作业继续用于 SQL Server 中的任务自动化,同时还包含在 Azure SQL 托管实例中。

弹性作业体系结构图的屏幕截图。

若要配置弹性作业,需要具备专门用于管理作业的作业代理和数据库。 作业数据库的推荐服务层为 S1 或更高级别。最佳服务层取决于执行的作业数量和这些作业的频率。

让我们回顾一下弹性作业的组成部分:

  • 弹性作业代理 - 用于运行和管理作业的 Azure 资源。
  • 作业数据库 - 专门用于管理作业的数据库。
  • 目标组 - 将在其中运行作业的服务器、弹性池和单一数据库的集合。
  • 作业 - 组成作业步骤的一个或多个 T-SQL 脚本。

如果服务器或弹性池是目标,则应在服务器或池的主服务器数据库中创建凭据,以便作业代理可以枚举其中的数据库。 对于单个数据库,只需要数据库凭据。 凭据应该具有执行作业步骤所需的最低权限。

弹性作业代理创建页的屏幕截图。

可以通过Azure 门户创建弹性作业代理。 在“弹性作业代理”页上,确保为代理提供名称,并为作业数据库指定 SQL 数据库。

可以使用 PowerShell 或 T-SQL创建目标组。 以下代码片段创建了 MyServerGroup 目标组,其中包括执行时服务器上存在的所有数据库。 此代码片段假定以前提供了变量 $jobAgent 和变量 $targetServerName

# create MyServerGroup target group
$serverGroup = $jobAgent | New-AzSqlElasticJobTargetGroup -Name 'MyServerGroup'

$serverGroup | Add-AzSqlElasticJobTarget -ServerName $targetServerName -RefreshCredentialName $masterCred.CredentialName

下面的代码片段创建了一个弹性作业,并使用 PowerShell 添加了作业步骤。 步骤 1 负责创建 MyTable 表(如果存在)。

Write-Output "Creating a new job..."
$jobName = "MyFirstElasticJob"
$job = $jobAgent | New-AzSqlElasticJob -Name $jobName -RunOnce

Write-Output "Creating job steps for $($jobName) job..."
$sqlText1 = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('MyTable')) CREATE TABLE [dbo].[MyTable]([Id] [int] NOT NULL);"

$job | Add-AzSqlElasticJobStep -Name "Step1" -TargetGroupName $serverGroup.TargetGroupName -CredentialName $jobCred.CredentialName -CommandText $sqlText1

如上所述,弹性作业执行的 T-SQL 脚本应是幂等的,这意味如果(由于意外或作业失败而)多次运行作业,运行不会失败或产生意外结果。 你应该能够在没有失败的情况下多次运行同一脚本。

最后,使用 PowerShell 运行弹性作业 MyFirstElasticJob。

Write-Output "Start the job..."
$jobExecution = $job | Start-AzSqlElasticJob
$jobExecution

用例场景

弹性作业可用于以下场景:

  • 自动化管理任务以按特定计划运行
  • 部署架构更改
  • 数据移动
  • 为报告或其他目的收集和汇总数据
  • 从 Azure Blob 存储加载数据
  • 配置作业,以便定期(例如,在非高峰时段)对一系列数据库执行作业
  • 对大量数据库(例如遥测收集)进行数据处理。 然后,结果将编译到单个目标表以供进一步分析。