共用方式為


設定透過 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 執行個體將在該資源群組中註冊。 如需詳細資訊,請參閱受控的 Azure 資源群組

  • Microsoft.AzureArcDataMicrosoft.HybridCompute 資源提供者會在您針對 SQL Server 隨用隨付計費使用的每個訂閱中註冊。

註冊資源提供者

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

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

修改 SQL Server 設定

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

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

提示

從 Azure Cloud Shell 執行指令碼,因為:

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

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

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

  • 開啟已啟用 Arc 的伺服器概觀頁面,然後選取 [SQL Server 設定],如下所示。

    Azure 入口網站中 Azure Arc 啟用之 SQL Server 的螢幕擷取畫面。

    Or

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

    • 授權類型
    • ESU 訂用帳戶
    • 自動更新

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

設定授權類型屬性

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

使用實體核心授權

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

重要

如果將實體核心授權設定為隨用隨付計費方案,則選取的授權類型應設定為隨用隨付。 這不會在 VM 層級觸發額外費用,但會在 P 核心授權取消啟用或刪除時確保授權和計費不中斷。

訂閱延伸安全性修補程式

延伸安全性修補程式 (ESU) 適用於使用授權搭配軟體保證或隨用隨付作為授權類型的合格 SQL Server 執行個體。 選取 [訂閱延伸安全性修補程式]。 按下 [儲存] 之後,將會啟用此訂用帳戶。

注意

  • 若要啟用 ESU 訂用帳戶,授權類型必須設定為「隨用隨付」或「具有軟體保證的授權」。 如果設定為 [僅限授權],則會停用 [延伸安全更新] 選項。
  • 如果開啟 ESU,則授權類型在 ESU 訂用帳戶取消之前無法變更為 LicenseOnly

使用實體核心 ESU 授權

如果您正在設定虛擬機器,並且在啟用 ESU 訂用帳戶時使用無限制虛擬化權益,則請選取此核取方塊。 其會將 UseEsuPhysicalCoreLicense 設為 true。 如果選取此項,則 P 核心授權的優先順序較高,且 VM 層級的 SQL Server ESU 的費用會變成空值。

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

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

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

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

警告

無法使用隨用隨付 (PAYG) 的 SQL Server 執行個體。

儲存更新的設定

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

重要

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

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

您可以使用名為為符合條件已啟用 Arc 的 SQL Server 執行個體訂閱延伸安全性修補程式的 Azure 原則定義,在多台啟用 Arc 的機器上啟動 ESU 訂用帳戶。 當您建立此原則定義的指派到您選擇的範圍時,它會在已安裝適用於 SQL Server 的 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

列出具有 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 查詢範例

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

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

resources
| where type == 'microsoft.azurearcdata/sqlserverinstances'
| extend Version = properties.version
| extend Edition = properties.edition
| extend containerId = tolower(tostring (properties.containerResourceId))
| where Version contains "2012"
| 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"), ""), Extension_Version = properties.instanceView.typeHandlerVersion
)
on $left.machineId == $right.machineIdHasSQLServerExtensionInstalled
| project-away machineId, containerId, machineIdHasSQLServerExtensionInstalled

列出裝載可計費 SQL Server 執行個體的已啟用 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 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 Arc
            (
            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'
            | where sqlStatus =~ "Connected"
            | 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
            , Model = tostring(properties.detectedProperties.model)
            , Manufacturer = tostring(properties.detectedProperties.manufacturer)
            , License_Type = tostring(properties1.settings.LicenseType)
            , OS = tostring(properties.osName)
            , Uses_UV = tostring(properties1.settings.UsePhysicalCoreLicense.IsApplied)
            , Cores = tostring(billableCores)
            , Version = sqlVersion
            | project-away machineID
            | order by Edition, 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 授權範圍內啟用了 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 執行個體

必要條件

您的 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 授權範圍內啟用了 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