共用方式為


設定 Azure Arc 啟用的 SQL Server

適用於:SQL Server

每個 Azure Arc 啟用的伺服器都包含一組屬性,這些屬性會套用至安裝在該伺服器中的所有 SQL Server 執行個體。 在電腦上安裝適用於 SQL Server 的 Azure 延伸模組之後,您可以設定這些屬性。 不過,只有在已安裝 SQL Server 執行個體時,屬性才會生效。 在 Azure 入口網站中,Azure Arc 啟用的 SQL Server 的 [概觀] 窗格會反映 SQL Server 設定如何影響特定執行個體。

必要條件

註冊資源提供者

若要註冊資源提供者,請使用下列任一方法:

  1. 選取 訂用帳戶
  2. 選擇您的訂用帳戶。
  3. 在 [設定] 下,選取 [資源提供者]。
  4. 搜尋 Microsoft.AzureArcDataMicrosoft.HybridCompute,然後選取 [註冊]。

修改 SQL Server 設定

您可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI,將特定已啟用 Azure Arc 之伺服器上的所有或部分組態設定變更為所需的狀態。

如要以單一命令為更大的範圍 (例如資源群組、訂用帳戶或多個訂用帳戶) 修改 SQL Server 設定,請使用修改 modify-license-type.ps1 PowerShell 指令碼。 其會發佈為開放原始碼 SQL Server 範例,並包含逐步指示。

建議在 Azure Cloud Shell 中執行指令碼,因為:

  • 其已預安裝必要的 Azure PowerShell 模組。
  • 它會自動驗證您的身分。

如需詳細資料,請參閱使用 Cloud Shell 執行指令碼

在 Azure 入口網站中有兩種方式可設定 SQL Server 主機:

  • 開啟 Azure Arc 啟用之 SQL Server 的 [概觀] 窗格,然後選取 [SQL Server 設定]

    Azure 入口網站中 Azure Arc 啟用之 SQL Server 的 [概觀] 窗格螢幕擷取畫面。

  • 開啟 Azure Arc 啟用的 SQL Server [概觀] 頁面,然後選取 [屬性]。 在 [SQL Server 設定] 下,選取需要修改的設定:

    • 授權類型
    • ESU 訂用帳戶
    • 自動修補

    Azure 入口網站中 SQL Server 執行個體組態區域的螢幕擷取畫面。

設定授權類型屬性

選擇其中一種授權類型。 如需說明,請參閱授權類型

使用實體核心授權

如果您正在設定虛擬機器 (VM) 並且正在使用無限制虛擬化權益來授權 SQL Server 軟體或 SQL 訂用帳戶,則請選取 [使用實體核心授權] 核取方塊。 它會將主機組態屬性 UsePhysicalCoreLicense 設為 True。 如果選取此核取方塊,則實體核心 (P 核心) 授權的優先順序較高,且 SQL Server 軟體成本會變成空值。

重要

如果 P 核心授權設定為隨用隨付計費方案,則選取的 [授權類型] 值應設定為 [隨用隨付]。 此選擇不會在 VM 層級觸發額外費用,但會在 P 核心授權停用或刪除時確保授權和計費不中斷。

訂閱延伸安全性修補程式

您可訂閱個別主機的延伸安全性修補程式 (ESU)。 若要符合 ESU 訂用帳戶的資格,主機的授權類型必須設定為隨用隨付具有軟體保證的授權。 此選項可讓您在主機是虛擬機器時使用 vCPU (V 核心) 進行訂閱,或當主機是不使用虛擬機器而執行的實體伺服器時,使用實體核心進行訂閱。

選取 [訂閱延伸安全性修補程式]。 它會將主機組態屬性 EnableExtendedSecurityUpdates 設為 True。 選取 [儲存] 之後,會啟用此訂用帳戶。

如需 ESU 授權選項的詳細資訊,請參閱在實際執行環境中訂閱延伸安全性修補程式

注意

不同於 p 核心 ESU 授權,在訂閱主機的 ESU 時,您不需要定義每部機器的可計費的核心數目。 適用於 SQL Server 的 Azure 延伸模組會偵測主機的大小、主機的類型 (虛擬或實體) 以及 SQL Server 版本。 延伸模組會根據這些參數計費。

啟用 ESU 後,在取消 ESU 訂用帳戶之前,您無法將主機的 [授權類型] 值變更為 [僅限授權]

使用實體核心 ESU 授權

如果您正在設定虛擬機器,並且在啟用 ESU 訂用帳戶時使用無限制虛擬化權益,則請選取 [使用實體核心 ESU 授權] 核取方塊。 其會將 UseEsuPhysicalCoreLicense 設為 true

如果選取該核取方塊,則 P 核心授權的優先順序較高,且 VM 層級的 SQL Server ESU 的費用會變成空值。

取消訂閱延伸安全性修補程式

您可以隨時取消由 Azure Arc 啟用的延伸安全性修補程式。 取消後會立即停止 ESU 費用。 選取 [取消訂閱延伸安全性修補程式]。 選取 [儲存] 之後,訂用帳戶會結束。

新增至已排除的執行個體清單

您可以將特定執行個體從由 Azure 原則或自動上線程式驅動的大規模上線作業中排除。 若要從這些作業中排除特定執行個體,請將執行個體名稱新增至 [略過執行個體] 清單。 如需大規模上線選項的詳細資訊,請參閱透過 Azure Arc 啟用的 SQL Server 的替代部署選項

注意

您無法排除使用隨用隨付計費的 SQL Server 執行個體。

儲存更新的設定

在確認授權類型、ESU 設定和要排除的任何執行個體之後,請選取 [儲存] 以套用變更。

重要

列出的提供者的基礎結構不支援 SQL Server 軟體或 SQL Server ESU 訂用帳戶的無限制虛擬化權益。 如果您在列出的提供者的 VM 中執行 SQL Server,並選取此選項,系統將會忽略您的意圖,而且您將需為 VM 的 V 核心付費。

使用 Azure 原則大規模訂閱延伸安全性修補程式

使用名為針對符合條件的 Arc 所啟用的 SQL Server 執行個體訂閱延伸安全性修補程式的 Azure 原則定義,在多台 Azure Arc 所啟用的機器上啟動 ESU 訂用帳戶。

當您建立此原則定義的指派到您選擇的範圍時,它會在已安裝適用於 SQL Server 的 Azure 延伸模組之所有 Azure Arc 啟用的機器上啟用 ESU。 如果其中任何機器具有合格的 SQL Server 執行個體,ESU 訂用帳戶會立即啟動。

使用下列步驟來啟用此原則:

  1. 在 Azure 入口網站中,轉至 [Azure 原則],然後選取 [定義]。

  2. 搜尋為符合條件 Arc 啟用的 SQL Server 執行個體訂閱延伸安全性修補程式,然後以滑鼠右鍵按一下該原則。

  3. 選取 [指派原則]

  4. 選取訂用帳戶,並選擇性選取資源群組作為範圍。

  5. 確定原則強制執行設定為 [已啟用]

  6. 在 [參數] 索引標籤上,將 [啟用擴充安全性更新] 的值設定為 True

  7. 於 [補救] 索引標籤:

    1. 選擇 [建立補救工作],以便將此原則套用到現有資源。 如果不選取此選項,則原則只會套用至新建立的資源。
    2. 選取 [建立受控識別],然後選取 [系統指派的受控識別] (建議) 或 [使用者指派的受控識別],其具有適用於 SQL Server 的 Azure 延伸模組讀者權限。
    3. 選取身分識別的位置。
  8. 選取 [檢閱 + 建立] 。

  9. 選取 建立

查詢 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

列出 Azure Arc 啟用的伺服器及 SQL Server 執行個體

此查詢會識別 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 查詢範例

列出訂閱 ESU 之 Azure Arc 所啟用的 SQL Server 執行個體

下列範例展示如何檢視所有符合條件的 SQL Server 2012 (11.x) 或 SQL Server 2014 (12.x) 執行個體及其 ESU 訂用帳戶狀態:

resources
| where type == 'microsoft.azurearcdata/sqlserverinstances'
| extend Version = properties.version
| extend Edition = properties.edition
| extend containerId = tolower(tostring (properties.containerResourceId))
| where Version in ("SQL Server 2012", "SQL Server 2014")
| where Edition in ("Enterprise", "Standard")
| where isnotempty(containerId)
| project containerId, SQL_instance = name, Version, Edition
| join kind=inner (
    resources
    | where type == "microsoft.hybridcompute/machines"
    | extend machineId = tolower(tostring(id))
    | project machineId, Machine_name = name
)
on $left.containerId == $right.machineId
| join kind=inner (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"
    | where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
    | extend machineIdHasSQLServerExtensionInstalled = tolower(iff(id contains "/extensions/WindowsAgent.SqlServer" or id contains "/extensions/LinuxAgent.SqlServer", substring(id, 0, indexof(id, "/extensions/")), ""))
    | project machineIdHasSQLServerExtensionInstalled,
     Extension_State = properties.provisioningState, 
     License_Type = properties.settings.LicenseType, 
     ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), iff(properties.settings.enableExtendedSecurityUpdates == 'true',"ENABLED","disabled"), "disabled"),
     Extension_Version = properties.instanceView.typeHandlerVersion
)
on $left.machineId == $right.machineIdHasSQLServerExtensionInstalled
| project-away machineId, containerId, machineIdHasSQLServerExtensionInstalled

列出裝載可計費 SQL Server 執行個體的 Azure Arc 所啟用的伺服器

此查詢會識別裝載 SQL Server 實例且可計費或需要 SQL Server 軟體授權的連線機器(虛擬或實體)。 其會提供 SQL Server 組態的詳細資料,包括授權類型、ESU 設定、V 核心或 P 核心的大小和其他相關參數。

resources
| where type =~ 'Microsoft.HybridCompute/machines'
| extend status = tostring(properties.status)
| where status =~ 'Connected'
| extend machineID = tolower(id)
| extend VMbyManufacturer = toboolean(iff(properties.detectedProperties.manufacturer in (
        "VMware",
        "QEMU",
        "Amazon EC2",
        "OpenStack",
        "Hetzner",
        "Mission Critical Cloud",
        "DigitalOcean",
        "UpCloud",
        "oVirt",
        "Alibaba",
        "KubeVirt",
        "Parallels",
        "XEN"
    ), 1, 0))
| extend VMbyModel = toboolean(iff(properties.detectedProperties.model in (
        "OpenStack",
        "Droplet",
        "oVirt",
        "Hypervisor",
        "Virtual",
        "BHYVE",
        "KVM"
    ), 1, 0))
| extend GoogleVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Google") and (properties.detectedProperties.model =~ "Google Compute Engine"), 1, 0))
| extend NutanixVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Nutanix") and (properties.detectedProperties.model =~ "AHV"), 1, 0))
| extend MicrosoftVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Microsoft Corporation") and (properties.detectedProperties.model =~ "Virtual Machine"), 1, 0))
| extend billableCores = iff(VMbyManufacturer or VMbyModel or GoogleVM or NutanixVM or MicrosoftVM, properties.detectedProperties.logicalCoreCount, properties.detectedProperties.coreCount)
| join kind = leftouter // Join the extension
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend extMachineID = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.extMachineID
        | join kind = inner       // Join SQL Server instances
            (
            resources
            | where type =~ 'microsoft.azurearcdata/sqlserverinstances'
            | extend sqlVersion = tostring(properties.version)
            | extend sqlEdition = tostring(properties.edition)
            | extend is_Enterprise = toint(iff(sqlEdition == "Enterprise", 1, 0))
            | extend sqlStatus = tostring(properties.status)
            | extend licenseType = tostring(properties.licenseType)
            | where sqlEdition in ('Enterprise', 'Standard')
            | where licenseType !~ 'HADR'
            | extend ArcServer = tolower(tostring(properties.containerResourceId))
            | order by sqlEdition
            )
            on $left.machineID == $right.ArcServer
            | where isnotnull(extensionId)
            | summarize Edition = iff(sum(is_Enterprise) > 0, "Enterprise", "Standard") by machineID
            , name
            , resourceGroup
            , subscriptionId
            , Status = tostring(properties.status)
            , Model = tostring(properties.detectedProperties.model)
            , Manufacturer = tostring(properties.detectedProperties.manufacturer)
            , License_Type = tostring(properties1.settings.LicenseType)
            , ESU = iff(notnull(properties1.settings.enableExtendedSecurityUpdates), iff(properties1.settings.enableExtendedSecurityUpdates == true,"enabled","not enabled"), "not enabled")
            , OS = tostring(properties.osName)
            , Uses_UV = tostring(properties1.settings.UsePhysicalCoreLicense.IsApplied)
            , Cores = tostring(billableCores)
            , Version = sqlVersion
            | summarize by name, subscriptionId, resourceGroup, Model, Manufacturer, License_Type, ESU, OS, Cores, Status
            | project Name = name, Model, Manufacturer, OperatingSystem = OS, Status, HostLicenseType = License_Type, ESU, BillableCores = Cores, SubscriptionID = subscriptionId, ResourceGroup = resourceGroup
            | order by Name asc

管理 SQL Server 的無限制虛擬化權益

若要啟用無限制虛擬化,Azure Arc 啟用的 SQL Server 支援特殊的資源類型:SQLServerLicense。 可使用此資源透過已安裝的 SQL Server 執行個體來授權許多虛擬機器。 如需授權模型的詳細資訊,請參閱使用無限制虛擬化來授權 SQL Server 執行個體

必要條件

您的角色型存取控制 (RBAC) 角色包含下列權限:

  • Microsoft.AzureArcData/SqlLicenses/read
  • Microsoft.AzureArcData/SqlLicenses/write
  • Microsoft.Management/managementGroups/read
  • Microsoft.Resources/subscriptions/read
  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Support/supporttickets/write

建立 SQL Server 授權

若要建立 SQL Server 授權資源,請使用下列方法之一:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下,選取 [SQL Server 授權]。
  3. 選取 [+建立]
  4. 選取 [SQL Server 實體核心授權]。
  5. 完成建立精靈。

更新 SQL Server 授權資源

若要變更 SQL Server 授權屬性 (例如在稍後啟用它),請使用下列方法之一:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下,選取 [SQL Server 授權]。
  3. 選取授權。
  4. 選取 [管理] 底下的 [設定]。
  5. 進行變更並選取 [套用]。

管理 P 核心授權範圍內的資源

您可以按照下列步驟來管理特定 SQL Server 實體核心授權範圍內的資源:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下,選取 [SQL Server 授權]。
  3. 選取授權。
  4. 在 [管理] 底下選取 [範圍中的資源]。

如果未將特定資源設定為使用此授權 ([套用實體核心授權] 資料行會顯示 [否]),則您可以變更:

  1. 選取清單中的特定資源。
  2. 選取 [套用授權]。
  3. 閱讀免責聲明,然後選取 [確認]。

列出 SQL Server 授權範圍內 Azure Arc 啟用的伺服器

此查詢會列出授權範圍內 Azure Arc 啟用的所有伺服器,以及每個伺服器的相關屬性:

resources
        | where type =~ 'Microsoft.HybridCompute/machines'
        | where ('${scopeType}'!= 'Subscription' or subscriptionId == '${subscription}')
        | where ('${scopeType}' != 'ResourceGroup' or (resourceGroup == '${resourceGroup.toLowerCase()}' and subscriptionId == '${subscription}'))
        | extend status = tostring(properties.status)
        | where status =~ 'Connected'
        | join kind = leftouter
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend machineId = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.machineId
        | where isnotnull(extensionId)
        | project id, name, properties.status, resourceGroup, subscriptionId, Model = properties.detectedProperties.model, Manufacturer = properties.detectedProperties.manufacturer, kind, OSE = properties.osName, License_applied = properties1.settings.UsePhysicalCoreLicense.IsApplied
        |order by name asc

管理 SQL Server ESU 訂用帳戶的無限制虛擬化權益

若要啟用 ESU 訂用帳戶的無限制虛擬化,由 Azure Arc 啟用的 SQL Server 會支援特殊的資源類型:SQLServerEsuLicense。 可以使用此資源為一組實體主機啟用 ESU 訂用帳戶,其中數量無限制的虛擬機器會執行不受支援的 SQL Server 執行個體。 如需授權模型的詳細資料,請參閱搭配使用實體核心與無限制虛擬化來訂閱 SQL Server ESU

必要條件

您的 RBAC 角色包括下列權限:

  • Microsoft.AzureArcData/SqlLicenses/read
  • Microsoft.AzureArcData/SqlLicenses/write
  • Microsoft.Management/managementGroups/read
  • Microsoft.Resources/subscriptions/read
  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Support/supporttickets/write

建立 SQL Server ESU 授權資源

若要建立 SQL Server ESU 授權資源,請使用下列方法之一:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下選取 [SQL Server ESU 授權]。
  3. 選取 [+建立]
  4. 完成建立精靈。

更新 SQL Server ESU 授權資源

若要變更 SQL Server ESU 授權屬性 (例如中止訂用帳戶),請使用下列其中一個方法:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下選取 [SQL Server ESU 授權]。
  3. 選取授權。
  4. 選取 [管理] 底下的 [設定]。
  5. 進行變更並選取 [套用]。

管理 ESU P 核心授權範圍內的資源

可以使用下列步驟,管理特定 SQL Server ESU 授權範圍內的資源:

  1. 選取 Azure Arc
  2. 在 [資料服務] 底下選取 [SQL Server ESU 授權]。
  3. 選取授權。
  4. 在 [管理] 底下選取 [範圍中的資源]。

此檢視只會在裝載中止服務之 SQL Server 執行個體的範圍中顯示連線的機器,其版本符合您所管理之 P 核心 ESU 授權的版本。 如果未將特定資源設定為使用此授權 ([已套用實體核心授權] 資料行會顯示 [否]),則您可以變更:

  1. 選取清單中的特定資源。
  2. 選取 [訂閱 ESU] 索引標籤即可訂閱,或選取 [從 ESU 取消訂閱] 即可取消訂閱。
  3. 閱讀免責聲明,然後選取 [確認]。

列出 SQL Server ESU 授權範圍內 Azure Arc 啟用的伺服器

此查詢會列出授權範圍內 Azure Arc 啟用的所有伺服器,以及每個伺服器的相關屬性:

resources
        | where type =~ 'Microsoft.HybridCompute/machines'
        | where ('${scopeType}'!= 'Subscription' or subscriptionId == '${subscription}')
        | where ('${scopeType}' != 'ResourceGroup' or (resourceGroup == '${resourceGroup.toLowerCase()}' and subscriptionId == '${subscription}'))
        | extend status = tostring(properties.status)
        | where status =~ 'Connected'
        | join kind = leftouter
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend machineId = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.machineId
        | where isnotnull(extensionId)
        | project id, name, properties.status, resourceGroup, subscriptionId, Model = properties.detectedProperties.model, Manufacturer = properties.detectedProperties.manufacturer, kind, OSE = properties.osName, License_applied = properties1.settings.UseEsuPhysicalCoreLicense.IsApplied
        |order by name asc