配置已启用 Azure Arc 的 SQL Server

适用于:SQL Server

每个已启用 Azure Arc 的服务器都包含一组应用于该服务器中安装的所有 SQL Server 实例的属性。 在计算机上安装 SQL Server 的 Azure 扩展后,可以配置这些属性。 但只有安装了一个或多个 SQL Server 实例时,这些属性才会生效。 在 Azure 门户中,已启用 Azure Arc 的 SQL Server 的“概述”页面介绍了 SQL Server 配置对特定实例产生的影响。

Azure 门户 SQL Server 配置允许执行以下管理任务:

  1. 配置 SQL Server 许可证类型
  2. 订阅扩展安全更新
  3. 从载入到 Azure Arc 中排除 SQL Server 实例

先决条件

  • 你至少在组织创建的其中一个 Azure 订阅中拥有参与者角色。 了解如何创建新的计费订阅
  • 对于将在其中注册 SQL Server 实例的资源组,你拥有参与者角色。 有关详细信息,请参阅托管的 Azure 资源组
  • 在用于 SQL Server 即用即付计费的每个订阅中都注册了 Microsoft.AzureArcDataMicrosoft.HybridCompute 资源提供程序。

若要注册资源提供程序,请使用以下方法之一:

  1. 选择订阅
  2. 选择自己的订阅
  3. 在“设置”下,选择“资源提供程序
  4. 搜索 Microsoft.AzureArcDataMicrosoft.HybridCompute,并选择“注册

许可证类型

适用于:SQL Server

SQL Server 许可证类型标识特定虚拟机或物理服务器上 SQL Server 实例的许可证类型。 它包括使用即用即付计费直接通过 Microsoft Azure 支付 SQL 软件使用费用的选项。

安装 SQL Server 的 Azure 扩展时,许可证类型是必需参数,每个受支持的加入方法都包含许可证类型选项。 它允许使用 Azure Resource Graph 跟踪 SQL Server 许可证清单。 还可以在“成本管理 + 计费”门户中跟踪软件的使用情况。

为方便起见,每个已启用 Arc 的 SQL Server 资源的概述页面会显示主机许可证类型下的许可证类型。

注意

SQL Server 2022 (16.x) 允许你在安装过程中选择许可证类型,包括即用即付计费选项。 请参阅通过安装向导安装 SQL Server 的 Azure 扩展

支持以下许可证类型:

许可证类型 长说明 简短说明
即用即付 标准版或企业版,通过 Microsoft Azure 按即用即付计费 即用即付
已付 具有软件保障或 SQL 订阅的标准版或企业版许可证 具有软件保障的许可证
LicenseOnly 仅支持无软件保障的开发人员版、评估版、Express 版、Web 版、标准版或企业版许可证 仅限许可证
  • PAYG:通过 Microsoft Azure 根据 SQL Server 软件使用情况付费。 请参阅 SQL Server 价格和许可

    重要

    借助 Azure Arc 启用的 SQL Server 即用即付 (PAYG) 功能,可以通过基于订阅的方式灵活访问 SQL Server。 使用 PAYG 的 SQL Server 实例的服务器必须持续连接到 Azure。 使用内置的复原能力可以容忍长达 30 天的间歇性连接中断。 连接中断 30 天后,PAYG 订阅将过期。 请注意,一旦订阅过期,则无权使用该软件。

  • PaidLicenseOnly:使用现有许可协议。 使用情况意味着你已拥有必要的许可证。 在这些情况下,将使用免费计量向你报告软件使用情况。 可以在“成本管理 + 计费”门户中分析使用情况,以确保你具有足够的已安装 SQL Server 实例的许可证。

下表标识了根据许可证类型启用的功能:

功能 仅限许可证1 具有软件保障
或 SQL 订阅的许可证
即用即付
连接到 Azure
SQL Server 清单
最佳做法评估
迁移评估(预览版)
详细的数据库清单
Microsoft Entra ID 身份验证
Microsoft Defender for Cloud
通过 Microsoft Purview 进行治理
自动备份到本地存储(预览版)
时间点还原(预览版)
自动修补
故障转移群集实例(预览版)
Always On 可用性组(预览版)
监视(预览)
使用最低特权操作(预览版)

1 仅限许可证包括开发人员版、Express 版、Web 版或评估版 SQL Server 实例以及使用 Server/CAL 许可证的实例。

SQL Server 软件计费

许可证类型的值指示你是否已拥有 SQL Server 许可证,或者更喜欢使用即用即付方法为其付费。 如果已有许可证或使用免费的 SQL Server 版本,将使用免费计量报告软件使用情况。 如果选择即用即付方法,将使用非零即用即付计量。

计费粒度为一小时。 即用即付费用根据 SQL Server 版本以及托管服务器在该小时内的大小计算。 如果 SQL Server 实例安装在物理服务器上,则大小以核心为单位;如果 SQL Server 实例安装在虚拟机上,则以逻辑核心 (vCore) 为单位。 在同一 OS 上安装多个 SQL Server 实例时,适用以下规则:

  • 对于主机的完整大小,每个 OS 只能获得一个实例的许可,但核心大小最小。 有关详细信息,请参阅 SQL Server 许可指南。 下列规则适用:

  • 具有最高版本的实例定义所需的许可证。

  • 如果安装了同一版本的两个或更多个实例,则按字母顺序对第一个实例计费。

  • 主机许可证类型和获胜的 SQL Server 版本的组合定义了每小时将发送哪些计费计量。

下表显示了用于不同许可证类型和 SQL Server 版本的计量 SKU:

安装的版本 Projected 版本 许可证类型 AG 副本 计量 SKU
Enterprise Core Enterprise 即用即付 Ent 版本 - PAYG
Enterprise Core Enterprise 已付 Ent 版本 - AHB
Enterprise Core Enterprise LicenseOnly 是或否 Ent 版本 - 仅限许可证
Enterprise Core Enterprise PAYG 或付费 Ent 版本 - DR 副本
企业版 1 企业版 即用即付 Ent 版本 - PAYG
企业版 1 企业版 已付 Ent 版本 - AHB
企业版 1 企业版 LicenseOnly 是或否 Ent 版本 - 仅限许可证
企业版 1 企业版 PAYG 或付费 Ent 版本 - DR 副本
Standard Standard 即用即付 Std 版本 - PAYG
Standard Standard 已付 Std 版本 - AHB
Standard Standard LicenseOnly Std 版本 - 仅限许可证
Standard Standard PAYG 或付费 Std 版本 - DR 副本
计算 计算 LicenseOnly 是或否 Eval 版本
开发人员 开发人员 LicenseOnly 是或否 Dev 版本
Web Web LicenseOnly 不适用 Web 版本
Express Express LicenseOnly 不适用 Express 版本

1 安装企业版后,它指示使用服务器/CAL 许可模型。 由于转换为基于核心的许可模型不需要升级到 Enterprise Core,因此我们将此版本视为 Enterprise Core。 未转换为基于核心的模型并使用 Server/CAL 许可证的实例必须将许可证类型设置为 LicenseOnly。

除了计费差异之外,许可证类型还决定了已启用 Arc 的 SQL Server 可以使用哪些功能。 当选择 LicenseOnly 许可证类型时,不包括以下功能:

  • 故障转移服务器的许可权益。 适用于 SQL Server 的 Azure 扩展支持免费故障转移服务器。 具体而言,扩展将:

    • 自动检测实例是否托管可用性组中的副本
    • 使用单独的计量报告使用情况。

    若要获得此权益,副本必须是完全被动的。 其所有数据库都必须属于同一组。 如果一个或多个数据库不属于该组,则会将实例视为已激活,并根据其版本计费。 请阅读 SQL Server 许可指南,了解详细信息。

  • 详细的数据库清单。 可以在 Azure 门户中管理 SQL 数据库清单。 有关详细信息,请参阅查看数据库

  • 管理 Azure 中 SQL Server 的自动更新。

  • 最佳做法评估。 通过定期扫描 SQL Server 配置来生成最佳做法报告和建议。 请参阅配置 SQL Server 实例以进行最佳做法评估

订阅扩展安全更新

扩展安全更新程序 (ESU) 适用于将具有软件保障或即用即付的许可证作为许可证类型的合格 SQL Server 实例。 如果许可证类型为仅限许可证,则将禁用激活 ESU 订阅的选项。 请参阅 SQL Server 的扩展安全更新程序

注意

如果启用了 ESU,则在取消 ESU 订阅之前,许可证类型无法更改为 LicenseOnly

排除实例

可以从 Azure 策略驱动的大规模加入操作或自动加入流程中排除某些实例。 要从这些操作中排除特定实例,请将实例名称添加到“跳过实例”列表中。 有关大规模加入选项的详细信息,请参阅已启用 Azure Arc 的 SQL Server 的备用部署选项

注意

不能排除使用即用即付 (PAYG) 付费模式的 SQL Server 实例。

修改 SQL Server 配置

可以使用 Azure 门户、PowerShell 或 CLI 将特定的已启用 Arc 的服务器上的所有或某些配置设置更改为所需状态。

若要使用单个命令修改较大范围(例如资源组、订阅或多个订阅)的 SQL Server 配置,请使用修改 SQL Server 配置 PowerShell 脚本。 它作为开放源代码 SQL Server 示例发布,并包含分步说明。

提示

从 Azure Cloud shell 运行脚本,因为它预安装了所需的 Azure PowerShell 模块,并且会自动进行身份验证。 有关详细信息,请参阅使用 Cloud Shell 运行脚本

可通过两种方式在 Azure 门户 中配置 SQL Server 主机。

  • 打开已启用 Arc 的服务器概述页,然后选择“SQL Server 配置”,如下所示。

    Screenshot of the SQL Server enabled by Azure Arc in Azure portal.

  • 打开已启用 Arc 的 SQL Server 概述页,然后选择“属性”。 在“SQL Server 配置”下,选择需要修改的设置:

    • 许可证类型
    • ESU 订阅
    • 自动修补

    Screenshot of Azure portal SQL Server instance configuration.

设置许可证类型属性

选择一种许可证类型。 有关说明,请参阅许可证类型

设置扩展安全更新程序属性

可以启用或禁用 ESU。 此设置是可选的,仅适用于 SQL Server 的限定版本。 要了解更多信息,请参阅什么是 SQL Server 的扩展安全更新程序?

注意

若要激活 ESU 订阅,许可证类型必须设置为即用即付或具有软件保障的许可证。 如果仅将其设置为“仅限许可证”,则会禁用扩展的安全更新程序选项。

添加到“排除实例”列表

如果要从 Azure 策略或自动加入流程驱动的大规模加入操作中排除特定实例,请在“跳过实例”下添加这些实例。 此设置是可选的。

保存更新的配置

验证许可证类型、ESU 设置以及要排除的任何实例后,选择“保存”以应用更改。

查询 SQL Server 配置

可以使用 Azure Resource Graph 查询所选范围内的 SQL Server 配置设置。 请参阅以下示例。

按许可证类型计数

此示例将按许可证类型返回计数。

resources
| where type == "microsoft.hybridcompute/machines/extensions"
| where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
| extend licenseType = iff(properties.settings.LicenseType == '', 'Configuration needed', properties.settings.LicenseType)
| summarize count() by tostring(licenseType)

标识许可证类型未定义的实例

此查询将返回许可证类型为 null 的实例列表。

resources
| where type == "microsoft.hybridcompute/machines/extensions"
| where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
| where isnull(properties.settings.LicenseType)
| project ['id'], resourceGroup, subscriptionId

列出每个 SQL Server 实例的配置详细信息

此查询标识有关每个实例的许多详细信息,包括许可证类型、ESU 设置和启用的功能。

resources
| where type == "microsoft.hybridcompute/machines"| where properties.detectedProperties.mssqldiscovered == "true"| extend machineIdHasSQLServerDiscovered = id
| project name, machineIdHasSQLServerDiscovered, resourceGroup, subscriptionId
| join kind= leftouter (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"    | where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
    | extend machineIdHasSQLServerExtensionInstalled = iff(id contains "/extensions/WindowsAgent.SqlServer" or id contains "/extensions/LinuxAgent.SqlServer", substring(id, 0, indexof(id, "/extensions/")), "")
    | project Extension_State = properties.provisioningState,
    License_Type = properties.settings.LicenseType,
    ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), iff(properties.settings.enableExtendedSecurityUpdates == true,"enabled","disabled"), ""),
    Extension_Version = properties.instanceView.typeHandlerVersion,
    Excluded_instances = properties.ExcludedSqlInstances,
    Purview = iff(notnull(properties.settings.ExternalPolicyBasedAuthorization),"enabled",""),
    Entra = iff(notnull(properties.settings.AzureAD),"enabled",""),
    BPA = iff(notnull(properties.settings.AssessmentSettings),"enabled",""),
    machineIdHasSQLServerExtensionInstalled)on $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled
| where isnotempty(machineIdHasSQLServerExtensionInstalled)
| project-away machineIdHasSQLServerDiscovered, machineIdHasSQLServerExtensionInstalled

使用 SQL Server 的实例列出已启用 Arc 的服务器

此查询会标识已启用 Azure Arc 的服务器,其中发现有 SQL Server 实例。

resources
| where type == "microsoft.hybridcompute/machines"
| where properties.detectedProperties.mssqldiscovered == "true"
//| summarize count()

此查询会返回已启用 Azure Arc 的服务器,这些服务器具有 SQL Server 实例,但未安装 Arc SQL Server 扩展。 此查询仅适用于 Windows 服务器。

resources
| where type == "microsoft.hybridcompute/machines"
| where properties.detectedProperties.mssqldiscovered == "true"
| project machineIdHasSQLServerDiscovered = id
| join kind= leftouter (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"
    | where properties.type == "WindowsAgent.SqlServer"
    | project machineIdHasSQLServerExtensionInstalled = substring(id, 0, indexof(id, "/extensions/WindowsAgent.SqlServer")))
on $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled
| where isempty(machineIdHasSQLServerExtensionInstalled)
| project machineIdHasSQLServerDiscoveredButNotTheExtension = machineIdHasSQLServerDiscovered

有关 Azure Resource Graph 查询的更多示例,请参阅入门级 Resource Graph 查询