自动执行数据库任务以实现可伸缩性

已完成 100 XP

使用 SQL Server 中的自动化时,通常使用 SQL 代理来计划作业以实现自动化目的。 尽管在 Azure 虚拟机上运行的 Azure SQL 托管实例和 SQL Server 仍具有该选项,但 Azure SQL 数据库没有,因此可能需要使用替代的自动化方法来实现类似的结果。

Azure 自动化

Azure 自动化允许流程自动化、配置管理、与 Azure 平台选项(例如基于角色的访问控制和Microsoft Entra ID)完全集成,并且可以管理 Azure 和本地资源。

使用 Azure 自动化,可以轻松控制 Azure 和本地 VM 中的资源。 例如,可以使用混合 Runbook 自动执行启动 VM、运行 SQL Server 备份和关闭 VM 等任务,使其经济高效高效。

另一个常见的方案是将 Azure 自动化用于定期维护操作,例如清除过时的或旧数据,或重新编制 SQL 数据库索引。

组件

Azure 自动化 支持自动化和配置管理活动。 我们将重点介绍自动化组件,但也可以使用 Azure 自动化来管理服务器更新和配置。

组件 说明
Runbook Runbook 是 Azure 自动化中的执行单元。 Runbook 定义为三种类型之一:基于 PowerShell、PowerShell 脚本或 Python 脚本的图形 Runbook。 PowerShell Runbook 通常用于管理 Azure SQL 资源。
模块 Azure 自动化为 Runbook 中正在执行的 PowerShell 或 Python 代码定义执行上下文。 若要执行代码,你需要导入支持模块。 例如,如果需要运行 Get-AzSqlDatabase PowerShell cmdlet,则需要将 Az.SQL PowerShell 模块导入自动化帐户。
凭据 凭据存储 Runbook 或配置可在运行时使用的敏感信息。
时间表 计划链接到 Runbook,并在特定时间触发 Runbook。

若要详细了解可用于管理 Azure SQL 数据库和 Azure SQL 托管实例资源的 Azure CLI 和 PowerShell 命令,请参阅以下链接:适用于 Azure SQL 的 powerShell 模块,以及适用于 Azure SQL 的 Azure CLI

弹性作业

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

这种限制意味着 DBA 必须找到替代解决方案来有效处理这些基本任务。 Azure 自动化在此方案中成为一个有价值的工具,提供创建和管理计划作业、自动执行数据库迁移过程和执行日常维护任务的方法。

建筑

弹性作业 功能允许将一组 T-SQL 脚本作为一次性作业或使用定义的计划针对服务器或数据库集合运行。 弹性作业的工作方式与 SQL Server 代理作业的工作方式类似,不同之处在于它们只限于执行 T-SQL。 作业适用于 Azure SQL 数据库的所有层。

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

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

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

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

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

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

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

以下 PowerShell 脚本创建名为 myFirstElasticJob 的弹性作业, 为其添加作业步骤,并执行 SQL 命令以在数据库中不存在时创建表。

PowerShell
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

最后,运行 MyFirstElasticJob 弹性作业。

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

用例场景

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

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

将 SQL 代理作业迁移到弹性作业

虽然可以创建自己的脚本,以便将 SQL 代理作业迁移到弹性作业,但有一个更方便的选项可用。 存在可下载脚本,可帮助 将现有 SQL 代理作业复制到弹性作业

该脚本是一种工具,可自动转换这些作业的过程,从而节省在新环境中手动重新创建作业所需的时间和精力。

该文件是包含脚本和相关文档的压缩文件夹。 若要使用它,需要下载该文件,并按照说明进行作。

输入说明中列出的所有参数后,将显示作业列表。 然后,该脚本将单独创建处于禁用状态的每个作业,假设它尚不存在。 创建作业后,将使用相同的 ID、命令文本、重试尝试和初始重试间隔秒添加这些步骤。 链接到作业步骤的数据库将是目标组。 如果目标组不存在,将自动创建它。 此副本不包括计划、警报和通知。

将 SQL 代理作业迁移到 Azure 上的 SQL 代理

将作业从本地 SQL Server 迁移到虚拟机上运行的 Azure SQL 托管实例或 SQL Server 的过程遵循了大多数 DBA 应该熟悉的过程。

在我们的方案中,假设我们已将本地 SQL Server 迁移到 Azure SQL 托管实例。 我们需要迁移和调整多个 SQL 代理作业,使其在 Azure 环境中无缝运行。

  • 评估依赖项: 标识要迁移的 SQL 代理作业。 列出作业依赖的任何依赖项,例如链接服务器、凭据和数据库

  • 编写 SQL 代理作业脚本: 将 SQL Server 上的 SQL 代理作业脚本编写为 SQL 脚本。 为此,可以在 SQL Server Management Studio(SSMS)中右键单击该作业,然后选择 “脚本作业为”->“创建到”->“新建查询编辑器窗口”。

  • 修改作业依赖项: 查看 SQL 脚本,并修改由于迁移而可能已更改的任何作业依赖项。 例如,如果作业引用本地服务器上的链接服务器或文件路径,请更新它以匹配新环境。

  • Azure SQL MI 作业创建: 打开 SSMS 或 Azure Data Studio 并连接到 Azure SQL 托管实例。 使用之前生成的脚本创建新的 SQL 代理作业。

  • 在 Azure SQL MI 上创建依赖项: 如果 SQL 代理作业依赖于链接的服务器或凭据,请在 Azure SQL MI 环境中创建它们。 确保它们与本地 SQL Server 中的配置匹配。

  • 计划作业: 使用 SQL Server 代理在 Azure SQL MI 中设置作业计划。 可以创建新计划并将其链接到作业。

  • 测试: 在 Azure SQL MI 环境中彻底测试 SQL 代理作业,以确保其按预期运行。 检查本地 SQL Server 与 Azure SQL MI 之间存在差异而可能出现的任何错误或问题。

  • 监视和维护: 监视作业的性能,并确保它继续满足 Azure SQL MI 环境中的要求。 根据需要调整任何配置或计划。


下一单元: 练习:为 Azure SQL 数据库配置异地复制

上一篇 下一步