Azure Arc 지원 SQL Server 구성

적용 대상:SQL Server

각 Azure Arc 지원 서버에는 해당 서버에 설치된 모든 SQL Server 인스턴스에 적용되는 속성 세트가 포함되어 있습니다. SQL Server용 Azure 확장이 컴퓨터에 설치된 후 이러한 속성을 구성할 수 있습니다. 그러나 이 속성은 하나 이상의 SQL Server 인스턴스가 설치된 경우에만 적용됩니다. Azure Portal의 Azure Arc 지원 SQL Server 개요에서 SQL Server 구성이 특정 인스턴스에 미치는 영향을 반영합니다.

Azure Portal SQL Server 구성을 사용하면 다음 관리 작업을 수행할 수 있습니다.

  1. Azure Arc 지원 SQL Server의 라이선스 및 청구 관리
  2. 확장 보안 업데이트 속성 설정
  3. 인스턴스 제외 목록에 추가

필수 조건

리소스 공급자 등록

리소스 공급자를 등록하려면 다음 방법 중 하나를 사용합니다.

  1. 구독을 선택합니다.
  2. 구독 선택
  3. 설정 아래에서 리소스 공급자를 선택합니다.
  4. Microsoft.AzureArcDataMicrosoft.HybridCompute를 검색하고 등록을 선택합니다

SQL Server 구성 수정

Azure Portal, PowerShell 또는 CLI를 사용하여 특정 Arc 지원 서버의 구성 설정을 모두 또는 일부 원하는 상태로 변경할 수 있습니다.

단일 명령으로 리소스 그룹, 구독 또는 여러 구독과 같은 더 큰 범위에 대한 SQL Server 구성을 수정하려면 modify-license-type.ps1 PowerShell 스크립트를 사용합니다. 이는 오픈 소스 SQL Server 샘플로 게시되며 단계별 지침을 포함합니다.

다음과 같은 이유로 Azure Cloud Shell에서 스크립트를 실행합니다.

  • 필수 Azure PowerShell 모듈이 미리 설치되어 있습니다.
  • 사용자를 자동으로 인증합니다.

자세한 내용은 Cloud Shell을 사용하여 스크립트 실행을 참조하세요.

Azure Portal에서 SQL Server 호스트를 구성하는 방법에는 두 가지가 있습니다.

  • Arc 지원 서버 개요 페이지를 열고 표시된 대로 SQL Server 구성을 선택합니다.

    Azure Portal의 Azure Arc 지원 SQL Server 스크린샷.

    또는

  • Arc 지원 SQL Server 개요 페이지를 열고 속성을 선택합니다. SQL Server 구성에서 수정해야 하는 설정을 선택합니다.

    • 라이선스 유형
    • ESU 구독
    • 업데이트 자동화

    Azure Portal SQL Server 인스턴스 구성 스크린샷.

라이선스 유형 속성 설정

라이선스 유형 중 하나를 선택합니다. 설명은 라이선스 유형을 참조하세요.

확장 보안 업데이트 속성 설정

ESU(확장 보안 업데이트)는 라이선스를 Software Assurance 또는 종량제 라이선스 유형으로 사용하는 적격한 SQL Server 인스턴스에 사용할 수 있습니다. 라이선스 유형이 라이선스 전용인 경우 ESU 구독을 활성화하는 옵션을 사용할 수 없습니다. SQL Server의 연장 보안 업데이트란 무엇입니까?를 참조하세요.

참고 항목

  • ESU 구독을 활성화하려면 라이선스 유형을 종량제 또는 Software Assurance 라이선스로 설정해야 합니다. 라이선스 전용으로 설정된 경우 확장 보안 업데이트 옵션이 비활성화됩니다.
  • ESU를 사용하는 경우 ESU 구독이 취소될 때까지 라이선스 유형LicenseOnly로 변경할 수 없습니다.

물리적 코어 라이선스 적용

가상 머신을 구성하고 SQL Server 소프트웨어 라이선스 또는 SQL 구독에 대한 무제한 가상화 혜택을 사용하는 경우 이 확인란을 선택합니다. 이 옵션을 선택하면 P 코어가 우선적으로 적용되고 이 VM과 관련된 SQL Server 소프트웨어 비용 또는 ESU 비용이 무효화됩니다.

Important

  1. 나열된 공급자의 인프라에서 실행되는 VM에는 UV 혜택이 지원되지 않습니다. 이러한 VM에 이 옵션을 선택하면 이 의도가 무시되고 VM의 V 코어에 대한 요금이 청구됩니다. 자세한 내용은 나열된 공급자를 참조하세요.
  2. 위의 제한 사항이 적용되지 않는 VM을 구성하는 경우 선택한 라이선스 유형이 P 코어 라이선스 리소스에 구성된 청구 플랜과 일치하는지 확인합니다.

인스턴스 제외 목록에 추가

Azure 정책 또는 자동 온보딩 프로세스에 의해 구동되는 대규모 온보딩 작업에서 특정 인스턴스를 제외할 수 있습니다. 이러한 작업에서 특정 인스턴스를 제외하려면 인스턴스 이름을 인스턴스 건너뛰기 목록에 추가합니다.. 대규모 온보딩 옵션에 대한 자세한 내용은 Azure Arc 지원 SQL Server에 대한 대체 배포 옵션을 참조하세요.

주의

PAYG(종량제)를 사용하는 SQL Server 인스턴스는 제외할 수 없습니다.

업데이트된 구성 저장

라이선스 유형, 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 지원 서버 나열

이 쿼리는 SQL Server 인스턴스가 검색된 Azure Arc 지원 서버를 식별합니다.

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

이 쿼리는 SQL Server 인스턴스가 있지만 Arc SQL Server 확장이 설치되지 않은 Azure Arc 지원 서버를 반환합니다. 이 섹션의 내용은 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 쿼리 샘플을 참조하세요.

무제한 가상화 관리

무제한 가상화를 사용하도록 설정하기 위해 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. Data Services에서 SQL Server 라이선스 선택
  3. +만들기를 선택합니다.
  4. SQL Server 물리적 코어 라이선스 선택
  5. 만들기 마법사 완료

SQL Server 라이선스 속성 변경

SQL Server 라이선스 속성을 변경하려면(예: 나중에 활성화) 아래 방법 중 하나를 사용합니다.

  1. Azure Arc 선택
  2. Data Services에서 SQL Server 라이선스 선택
  3. 문제의 라이선스 선택
  4. 관리에서 구성 선택
  5. 변경하고 적용 선택

범위에서 리소스 관리

다음 단계를 사용하여 특정 SQL Server 물리적 코어 라이선스 범위에서 리소스를 관리할 수 있습니다.

  1. Azure Arc 선택
  2. Data Services에서 SQL Server 라이선스 선택
  3. 문제의 라이선스 선택
  4. 관리범위에서 리소스 선택

특정 리소스가 이 라이선스를 사용하도록 구성되지 않은 경우(물리적 코어 라이선스 적용 열에 "NO"가 표시됨) 다음을 변경할 수 있습니다.

  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