Compartir vía


Configuración de SQL Server habilitado por Azure Arc

Se aplica a:SQL Server

Cada servidor habilitado para Azure Arc incluye un conjunto de propiedades que se aplican a todas las instancias de SQL Server instaladas en ese servidor. Puede configurar estas propiedades después de instalar la extensión de Azure para SQL Server en la máquina. Sin embargo, las propiedades solo surten efecto si se instala una instancia o instancias de SQL Server. En el Azure Portal, la hoja de información general de SQL Server habilitada para Arc reflejará cómo afecta la configuración de SQL Server a una instancia determinada.

Requisitos previos

Registro de proveedores de recursos

Para registrar los proveedores de recursos, utilice uno de los métodos siguientes:

  1. Seleccione Suscripciones.
  2. Elija una suscripción
  3. En Configuración, seleccione Proveedores de recursos.
  4. Busque Microsoft.AzureArcData y Microsoft.HybridCompute, y seleccione Registrar.

Modifique Configuración De SQL Server

Puede usar Azure Portal, PowerShell o la CLI para cambiar todos o algunos conjuntos de configuración en un servidor específico habilitado para Arc al estado deseado.

Para modificar la configuración de SQL Server para un ámbito mayor, como un grupo de recursos, una suscripción o varias suscripciones con un solo comando, consulte el modify-license-type.ps1 script de PowerShell. Está publicado como un ejemplo de SQL Server de código abierto e incluye las instrucciones paso a paso.

Sugerencia

Ejecute el script desde Azure Cloud Shell porque:

  • Tiene los módulos de Azure PowerShell necesarios preinstalados.
  • Le autentica automáticamente.

Para más información, consulte Ejecución del script mediante Cloud Shell.

Hay dos maneras de configurar el host de SQL Server en Azure Portal.

  • Abra la página de información general del servidor habilitado para Arc y seleccione Configuración de SQL Server como se muestra.

    Captura de pantalla de SQL Server habilitado por Azure Arc en Azure Portal.

    Or

  • Abra la página de información general de SQL Server habilitada para Arc y seleccione Propiedades. En Configuración de SQL Server, seleccione la configuración que necesita modificar:

    • Tipo de licencia
    • Suscripción a ESU
    • Actualizaciones automatizadas

    Captura de pantalla de configuración de la instancia de SQL Server en Azure Portal.

Configuración de la propiedad Tipo de licencia

Elija uno de los tipos de licencia. Consulte Tipos de licencia para ver sus descripciones.

Uso de una licencia de núcleo físico

Active esta casilla si está configurando una máquina virtual y está utilizando la ventaja de virtualización ilimitada para la concesión de licencias del software de SQL Server o de la suscripción de SQL. Establecerá la propiedad UsePhysicalCoreLicense de configuración del host en True. Si se selecciona, la licencia de núcleo físico tiene prioridad y los costes de software de SQL Server se anularán.

Importante

Si la licencia de núcleo físico está configurada con un plan de facturación de pago por uso, el tipo de licencia seleccionado se debe establecer como de pago por uso. Esto no generará cargos adicionales en el nivel de máquina virtual, pero garantizará que las licencias y la facturación no interrumpidas se produzcan en caso de desactivación o eliminación de la licencia de núcleo físico.

Suscripción a actualizaciones de seguridad extendidas

Las Actualizaciones de seguridad ampliada (ESU) están disponibles para instancias de SQL Server calificadas que usan licencia con Software Assurance o pago por uso como tipo de licencia. Seleccione Suscripción a actualizaciones de seguridad extendidas. La suscripción se activará después de hacer clic en Guardar.

Nota:

  • Para activar una suscripción de ESU, el tipo de licencia debe establecerse en Pago por uso o Licencia con Software Assurance. Si se configura como Solo licencia, las opciones Actualizaciones de seguridad ampliada se deshabilitarán.
  • Si el ESU está habilitado, el Tipo de licencia no se puede cambiar a LicenseOnly hasta que se cancele la suscripción de ESU.

Uso de la licencia de ESU de núcleo físico

Active esta casilla si va a configurar una máquina virtual y usa la ventaja de virtualización ilimitada al habilitar la suscripción de ESU. Establece UseEsuPhysicalCoreLicense en true. Si se selecciona, la licencia de núcleo físico tiene prioridad y los cargos de ESU de SQL Server en el nivel de máquina virtual se anularán.

Anulación de la suscripción a Actualizaciones de seguridad extendidas

Puede cancelar las actualizaciones de seguridad extendidas habilitadas por Azure Arc en cualquier momento. La cancelación detiene inmediatamente los cargos de las ESU. Seleccione Cancelar suscripción a Actualizaciones de seguridad extendidas. La suscripción se finalizará después de hacer clic en Guardar.

Adición a la lista de instancias excluidas

Puede excluir determinadas instancias de las operaciones de incorporación a gran escala controladas por Azure Policy o por procesos de incorporación automática. Para excluir instancias específicas de estas operaciones, añada los nombres de instancia a la lista Omitir instancias. Para más información sobre las opciones de incorporación a escala, consulta Opciones de implementación alternativas para SQL Server habilitado por Azure Arc.

Precaución

Las instancias de SQL Server que usan pago por uso (PAYG) no se pueden excluir.

Guarde el archivo de configuración actualizado

Después de comprobar el tipo de licencia, la configuración de ESU y cualquier instancia que se vaya a excluir, seleccione Guardar para aplicar los cambios.

Importante

La ventaja de virtualización ilimitada para el software de SQL Server o la suscripción de ESU de SQL Server no se admite en la infraestructura de los proveedores enumerados. Si ejecuta SQL Server en la máquina virtual de un proveedor enumerado y selecciona esta opción, se omitirá la intención y se le cobrará por los núcleos virtuales de la máquina virtual. Consulte Proveedores enumerados para obtener más información.

Suscripción a Actualizaciones de Seguridad ampliada a gran escala mediante Azure Policy

Puede activar la suscripción de ESU en varias máquinas habilitadas para Arc mediante una definición de directiva de Azure denominada Suscripción de instancias aptas de SQL Server habilitadas para Arc a actualizaciones de seguridad ampliada. Al crear una asignación de esta definición de directiva a un ámbito de su elección, habilita ESU en todas las máquinas habilitadas para Arc que tengan instalada la extensión de Azure para SQL Server. Si alguna de estas máquinas tiene una instancia de SQL Server apta, la suscripción de ESU se activa inmediatamente.

Siga estos pasos para activar esta directiva:

  1. Vaya a Azure Policy en Azure Portal y elija Definiciones.
  2. Busque Suscripción de instancias aptas de SQL Server habilitadas para Arc a actualizaciones de seguridad ampliada y haga clic con el botón derecho en la directiva.
  3. Seleccione Asignar directiva.
  4. Seleccione una suscripción y, opcionalmente, un grupo de recursos como ámbito.
  5. Asegúrese de que el Cumplimiento de directivas esté establecido en Habilitado.
  6. En la pestaña Parámetros, establezca el valor de Habilitar las actualizaciones de seguridad ampliadas en True.
  7. En la pestaña Corrección:
    1. Seleccione Crear tarea de corrección para que esta directiva se aplique a los recursos existentes. Si no está seleccionada, la directiva solo se aplica a los recursos recién creados.
    2. Elija Creación de una entidad administrada y seleccione Identidad administrada asignada por el sistema (recomendada) o Identidad administrada asignada por el usuario, que tiene permisos de Implementación de la extensión de Azure para SQL Server y de Lector.
    3. Seleccione la ubicación de la identidad.
  8. Seleccione Revisar + crear.
  9. Seleccione Crear.

Consulte Configuración de SQL Server

Puede usar Azure Resource Graph para consultar el conjunto de configuración de SQL Server dentro de un ámbito seleccionado. Vea los ejemplos siguientes:

Recuento por tipo de licencia

En este ejemplo se devuelve el recuento por tipo de licencia.

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)

Identificación de instancias en las que el tipo de licencia no está definido

Esta consulta devuelve una lista de instancias en las que el tipo de licencia es 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

Lista de los detalles de configuración de cada instancia de SQL Server

Esta consulta identifica muchos detalles sobre cada instancia, incluido el tipo de licencia, la configuración de ESU y las características habilitadas.

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

Enumeración de servidores habilitados para Arc con instancias de SQL Server

Esta consulta identifica los servidores habilitados para Azure Arc con las instancias de SQL Server que se han detectado.

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

Esta consulta devuelve servidores habilitados para Azure Arc que tienen instancias de SQL Server, pero la extensión de SQL Server de Arc no está instalada. Esta consulta se aplica solo a servidores de 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

Para ver más ejemplos de consultas de Azure Resource Graph, consulte Ejemplos de consultas de inicio de Resource Graph.

Enumeración de instancias de SQL Server habilitadas para Arc suscritas a ESU

En el ejemplo siguiente se muestra cómo puede ver todas las instancias de SQL Server 2012 (11.x) aptas y su estado de suscripción de 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

Enumeración de servidores habilitados para Arc en los que se hospeda una instancia de SQL Server facturable

Esta consulta identifica las máquinas (virtuales o físicas) que hospedan instancias de SQL Server facturables o que necesitan una licencia para el software de SQL Server. Proporciona los detalles de la configuración de SQL Server, incluido el tipo de licencia, la configuración de ESU, el tamaño en núcleos virtuales o físicos, y otros parámetros pertinentes.

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

Administración de la ventaja de virtualización ilimitada para SQL Server

Para habilitar la virtualización ilimitada, SQL Server habilitado por Azure Arc admite un tipo de recurso especial: SQLServerLicense. Este recurso permite conceder licencias a muchas máquinas virtuales con las instancias de SQL Server instaladas. Para obtener más información sobre el modelo de licencias, consulte Licencias de instancias de SQL Server con virtualización ilimitada.

Requisitos previos

El rol RBAC incluye los siguientes permisos:

  • 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

Crear licencia de SQL Server

Para crear el recurso de licencia de SQL Server, utilice uno de los métodos siguientes:

  1. Seleccionar Azure Arc
  2. En Data Services, seleccione Licencias de SQL Server
  3. Seleccione +Crear.
  4. Seleccione la licencia de núcleo físico de SQL Server
  5. Complete el asistente para la instalación

Actualización del recurso de licencia de SQL Server

Para cambiar la propiedad de licencia de SQL Server, por ejemplo, actívela en una fecha posterior y utilice uno de los métodos siguientes:

  1. Seleccionar Azure Arc
  2. En Data Services, seleccione Licencias de SQL Server
  3. Seleccione la licencia en cuestión.
  4. Seleccione Configurar en Administración
  5. Realice los cambios y seleccione Aplicar.

Administración de recursos en el ámbito de la licencia de núcleo físico

Puede administrar los recursos en el ámbito de una licencia de núcleo físico de SQL Server específica mediante los pasos siguientes:

  1. Seleccionar Azure Arc
  2. En Data Services, seleccione Licencias de SQL Server
  3. Seleccione la licencia en cuestión.
  4. Seleccione Recursos en el ámbito en Administración.

Si los recursos específicos no están configurados para usar esta licencia (la columna Aplicar licencia de núcleo físico muestra "NO"), puede cambiarlo:

  1. Seleccione los recursos específicos en la lista.
  2. Seleccione la pestaña Aplicar licencia.
  3. Lea el aviso de declinación de responsabilidades y seleccione Confirmar.

Enumeración de servidores habilitados para Arc en el ámbito de la licencia de SQL Server

En esta consulta se enumeran todos los servidores habilitados para Azure Arc en el ámbito de la licencia y las propiedades pertinentes de cada uno.

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

Administración de la ventaja de virtualización ilimitada para la suscripción de ESU de SQL Server

A fin de habilitar la virtualización ilimitada para la suscripción de ESU, SQL Server habilitado por Azure Arc admite un tipo de recurso especial: SQLServerLicense. Este recurso permite habilitar una suscripción de ESU para un conjunto de hosts físicos con un número ilimitado de máquinas virtuales que ejecutan las instancias de SQL Server fuera de soporte técnico. Para obtener más información sobre el modelo de licencias, consulte Licencias de instancias de SQL Server con virtualización ilimitada.

Requisitos previos

El rol RBAC incluye los siguientes permisos:

  • 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

Creación del recurso de licencia de SQL Server

Para crear el recurso de licencia de ESU de SQL Server, use uno de los métodos siguientes:

  1. Seleccionar Azure Arc
  2. En Servicios de datos, seleccione Licencias de ESU de SQL Server
  3. Seleccione +Crear
  4. Complete el asistente para la instalación

Actualización del recurso de licencia de de ESU de SQL Server

Para cambiar las propiedades de licencia de ESU de SQL Server, por ejemplo, para terminar la suscripción, use uno de los métodos siguientes:

  1. Seleccionar Azure Arc
  2. En Servicios de datos, seleccione Licencias de ESU de SQL Server
  3. Seleccione la licencia en cuestión.
  4. Seleccione Configurar en Administración
  5. Realice los cambios y seleccione Aplicar.

Administración de recursos en el ámbito de la licencia de núcleo físico de ESU

Puede administrar los recursos en el ámbito de una licencia de ESU de SQL Server específica mediante los pasos siguientes:

  1. Seleccionar Azure Arc
  2. En Servicios de datos, seleccione Licencias de ESU de SQL Server
  3. Seleccione la licencia en cuestión.
  4. Seleccione Recursos en el ámbito en Administración.

En esta vista solo se mostrarán las máquinas conectadas en el ámbito que hospedan una instancia de SQL Server fuera del servicio con la versión que coincide con la de la licencia de ESU de núcleo físico que administra. Si los recursos específicos no están configurados para usar esta licencia (en la columna Aplicar licencia de núcleo físico se muestra "NO"), puede cambiarlo:

  1. Seleccione los recursos específicos en la lista.
  2. Seleccione la pestaña Suscribirse a ESU para suscribirse o Cancelar la suscripción de ESU para cancelar la suscripción.
  3. Lea el aviso de declinación de responsabilidades y seleccione Confirmar.

Enumeración de servidores habilitados para Arc en el ámbito de la licencia de ESU de SQL Server

En esta consulta se enumeran todos los servidores habilitados para Azure Arc en el ámbito de la licencia y las propiedades pertinentes de cada uno.

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