Coordinador de transacciones distribuidas (DTC) para Azure SQL Managed Instance.

Se aplica a: Azure SQL Managed Instance

En este artículo se proporciona información general sobre el Coordinador de transacciones distribuidas (DTC) para Azure SQL Managed Instance. Puede usar DTC para ejecutar transacciones distribuidas en entornos mixtos, incluidos instancias administradas, instancias de SQL Server, otros sistemas de administración de bases de datos relacionales (RDBMS), aplicaciones personalizadas y otros participantes de transacciones hospedados en cualquier entorno que pueda establecer la conectividad de red con Azure.

Escenarios

Puede habilitar DTC para Azure SQL Managed Instance permite ejecutar transacciones distribuidas en varios entornos que pueden establecer la conectividad de red con Azure. DTC para SQL Managed Instance se administra, lo que significa que Azure se encarga de la administración y el mantenimiento, como el registro, el almacenamiento, la disponibilidad de DTC y las redes. Además del aspecto administrado, DTC para SQL Managed Instance es el mismo servicio de Windows DTC que admite transacciones distribuidas tradicionales para SQL Server.

DTC para SQL Managed Instance desbloquea una amplia gama de tecnologías y escenarios, incluidos XA, .NET, T-SQL, COM+, ODBC y JDBC.

Para ejecutar transacciones distribuidas, complete estas tareas:

  1. Configure DTC.
  2. Habilite la conectividad de red entre participantes.
  3. Configure los valores de DNS.

Nota

En el caso de las transacciones distribuidas de T-SQL o .NET entre bases de datos hospedadas solo por instancias administradas, se recomienda que use compatibilidad nativa con transacciones distribuidas.

Requisitos

Para cambiar la configuración de DTC, debe contar con permisos de escritura en el recurso Microsoft.Sql/managedInstances/dtc. Para ver la configuración de DTC, debe contar con permisos de lectura en el recurso Microsoft.Sql/managedInstances/dtc.

Configurar DTC

Puede configurar DTC con Azure Portal, Azure PowerShell y la CLI.

Para configurar DTC mediante Azure Portal:

  1. En Azure Portal, diríjase a su instancia administrada.

  2. En el menú de la izquierda, en Configuración, seleccione Coordinador de transacciones distribuidas.

    Captura de pantalla que muestra la opción de menú resaltada, el panel Coordinador de transacciones distribuidas para SQL Managed Instance, y la pestaña Conceptos básicos.

  3. En la pestaña Conceptos básicos, establezca Coordinador de transacciones distribuidas en Habilitado.

  4. En la pestaña Seguridad, permita transacciones entrantes o salientes y habilite XA o SNA LU.

  5. En la pestaña Redes, especifique DNS de DTC y obtenga información para configurar DNS externo y redes.

Conectividad de red

Para usar DTC, todos los participantes de la transacción deben tener una conexión de red a Azure. Dado que las instancias administradas siempre se implementan en una red virtual dedicada en Azure, debe conectar el entorno externo a la red virtual de la instancia administrada. En este contexto, externo hace referencia a cualquier objeto o proceso que no sea la instancia administrada. Si el recurso externo también usa una red virtual en Azure, puede usar el emparejamiento de red virtual. De lo contrario, establezca la conectividad mediante su método preferido, como una conexión VPN de punto a sitio, Azure ExpressRoute u otra tecnología de conectividad de red que satisfaga sus necesidades empresariales.

El puerto 135 debe permitir tanto la comunicación entrante como saliente, el rango de puertos 14000-15000 debe permitir la comunicación entrante, y 49152-65535 debe permitir la comunicación saliente, tanto en el grupo de seguridad de red de la Virtual Network para la instancia administrada como en cualquier servidor de seguridad que esté configurado en el entorno externo.

Configuración de DNS

DTC se basa en el nombre NetBIOS de un participante de la transacción para la comunicación mutua. Dado que el protocolo NetBIOS no es compatible con las redes de Azure y los nombres NetBIOS no se pueden resolver en entornos mixtos, DTC para instancia administrada se basa en servidores de nombres DNS para la resolución de nombres de host. Los hosts DTC de instancia administrada se registran automáticamente con el servidor de Azure DNS. Debe registrar hosts DTC externos con un servidor DNS. La instancia administrada y el entorno externo también deben intercambiar sufijos DNS.

En el diagrama siguiente se muestra la resolución de nombres en entornos mixtos:

Diagrama que muestra la resolución de nombres en entornos mixtos al usar DTC.

Nota:

No es necesario configurar las opciones de DNS si planea usar DTC solo para transacciones XA.

Para intercambiar sufijos DNS:

  1. En Azure Portal, diríjase a su instancia administrada.

  2. En el menú de la izquierda, en Configuración, seleccione Coordinador de transacciones distribuidas. Seleccione la pestaña Redes.

    Captura de pantalla que muestra la pestaña Redes del panel DTC de la instancia administrada en Azure Portal y Nuevo sufijo DNS externo resaltado.

  3. En Configuración de DNS, seleccione Nuevo sufijo DNS externo. Escriba el sufijo DNS para el entorno externo, como dnszone1.com.

  4. Copie el valor del sufijo DNS del host DTC. A continuación, use el comando Set-DnsClientGlobalSetting -SuffixSearchList $list de PowerShell en el entorno externo para establecer el sufijo DNS del host DTC. Por ejemplo, si el sufijo es abc1111111.database.windows.net, defina el parámetro $list para obtener la configuración de DNS existente. A continuación, anexe el sufijo a él tal como se muestra en el ejemplo siguiente:

    $list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net"
    Set-DnsClientGlobalSetting -SuffixSearchList $list
    

Comprobar la conectividad de red

Una vez configuradas las redes y DNS, ejecuteTest-NetConnection (TNC) entre los puntos de conexión DTC de la instancia administrada y el host DTC externo.

Para probar la conexión, actualice primero los valores configurables por el usuario. A continuación, use el siguiente script de PowerShell en el entorno externo para identificar el nombre de dominio completo (FQDN) de la instancia administrada del host DTC. Este es un ejemplo:

# =============================================================== 
# Get DTC settings 
# =============================================================== 
# User-configurable values 
# 

$SubscriptionId = "a1a1a1a1-8372-1d28-a111-1a2a31a1a1a1" 
$RgName = "my-resource-group" 
$MIName = "my-instance-name" 

# =============================================================== 
# 

$startMoveUri = "https://management.azure.com/subscriptions/" + $SubscriptionId + "/resourceGroups/" + $RgName + "/providers/Microsoft.Sql/managedInstances/" + $MIName + "/dtc/current?api-version=2022-05-01-preview" 
Write-Host "Sign in to Azure subscription $SubscriptionID ..." 
Select-AzSubscription -SubscriptionName $SubscriptionID 
$azContext = Get-AzContext 
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile 
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile) 
Write-Host "Getting authentication token for REST API call ..." 
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId) 
$authHeader = @{'Content-Type'='application/json';'Authorization'='Bearer ' + $token.AccessToken} 


# Invoke API call to start the operation 
# 

Write-Host "Starting API call..." 
$startMoveResp = Invoke-WebRequest -Method Get -Headers $authHeader -Uri $startMoveUri 
Write-Host "Response:" $startMoveResp 

# End 
# =============================================================== 

La salida JSON tendrá un aspecto similar al FQDN de ejemplo siguiente:

chn000000000000.zcn111111111.database.windows.net

Donde:

  • chn000000000000 es el nombre NetBIOS del host DTC de instancia administrada.
  • zcn111111111.database.windows.net es el sufijo DNS.

A continuación, ejecute un TNC en el FQDN y el nombre de NetBIOS del host DTC de la instancia administrada en el puerto 135. En el ejemplo siguiente, la primera entrada comprueba la conectividad de red. La segunda entrada comprueba que la configuración de DNS es correcta.

tnc chn000000000000.zcn111111111.database.windows.net -Port 135 
tnc chn000000000000 -Port 135 

Si la conectividad y los sufijos DNS están configurados correctamente, aparecerá la salida TcpTestSucceeded: True.

En la instancia administrada, cree un trabajo del Agente SQL para ejecutar el comando de PowerShell de TNC para probar la conectividad con el host externo.

Por ejemplo, si el FQDN del host externo es host10.dnszone1.com, ejecute la siguiente prueba a través del trabajo del Agente SQL:

tnc host10.dnszone1.com -Port 135 
tnc host10 -Port 135 

Limitaciones

Tenga en cuenta las siguientes limitaciones al usar DTC con SQL Managed Instance:

  • No se admite la ejecución de transacciones de T-SQL distribuidas entre SQL Managed Instance y un sistema de administración de bases de datos relacionales de terceros. SQL Managed Instance no admite servidores vinculados que tengan RDBMS de terceros. Por el contrario, se admite la ejecución de transacciones de T-SQL distribuidas entre instancias administradas y SQL Server y otros productos basados en SQL Server.
  • Los nombres de host del entorno externo no pueden tener más de 15 caracteres.
  • Las transacciones distribuidas a Azure SQL Database no se admiten con DTC.
  • Para la autenticación, DTC solo admite la opción Sin autenticación. Las opciones de autenticación mutua y autenticación de llamada entrante no están disponibles. Dado que DTC intercambia solo mensajes de sincronización y no datos de usuario, y puesto que se comunica únicamente con la red virtual, esta limitación no es un riesgo de seguridad.

Administración de transacciones

Para ver las estadísticas de las transacciones distribuidas, consulte sys.dm_tran_distributed_transaction_stats.

Puede restablecer el registro DTC con el procedimiento almacenado sp_reset_dtc_log.

Las transacciones distribuidas se pueden administrar con el procedimiento almacenado sys.sp_manage_distributed_transaction.

Pasos siguientes

Para obtener compatibilidad con transacciones distribuidas de instancia administrada nativa, consulte Transacciones elásticas.