Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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. Entre ellas se incluyen instancias administradas de SQL, 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, como XA, .NET, T-SQL, COM+, ODBC y JDBC.
Para ejecutar transacciones distribuidas, complete estas tareas:
- Configurar DTC.
- Habilite la conectividad de red entre participantes.
- 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 de SQL, se recomienda usar compatibilidad nativa con transacciones distribuidas.
Requisitos
Para cambiar la configuración de DTC, debe tener permisos de escritura para el Microsoft.Sql/managedInstances/dtc recurso. Para ver la configuración de DTC, debe tener permisos de lectura para el Microsoft.Sql/managedInstances/dtc recurso.
El puerto 135 debe permitir la comunicación entrante y saliente, el intervalo de puertos 14000-15000 debe permitir la entrada y 49152-65535 debe permitir la comunicación saliente en el grupo de seguridad de red virtual para la instancia administrada de SQL y cualquier firewall configurado en el entorno externo.
Configurar DTC
Puede configurar DTC con Azure Portal, Azure PowerShell y la CLI de Azure.
Para configurar DTC mediante Azure Portal, siga estos pasos:
En el portal de Azure, vaya a su instancia administrada de SQL.
En Configuración, seleccione Coordinador de transacciones distribuidas.
En la pestaña Conceptos básicos, establezca Coordinador de transacciones distribuidas en Habilitado.
En la pestaña Seguridad, permita transacciones entrantes o salientes y habilite XA o SNA LU.
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 de SQL siempre se implementan en una red virtual dedicada en Azure, debe conectar el entorno externo a la red virtual de la instancia administrada de SQL. En este contexto, external hace referencia a cualquier objeto o proceso que no sea la instancia administrada de SQL. 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 la comunicación entrante y saliente, el intervalo de puertos 14000-15000 debe permitir la entrada y 49152-65535 debe permitir la comunicación saliente en el grupo de seguridad de red virtual para la instancia administrada de SQL y cualquier firewall 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 las redes de Azure no admiten el protocolo NetBIOS y los nombres NetBIOS no se pueden resolver en entornos mixtos, DTC para una instancia administrada de SQL se basa en servidores de nombres DNS para la resolución de nombres de host. Los hosts DTC de instancia administrada de SQL se registran automáticamente con el servidor DNS de Azure. Debe registrar hosts DTC externos con un servidor DNS. La instancia administrada de SQL y el entorno externo también deben intercambiar sufijos DNS.
En el diagrama siguiente se muestra la resolución de nombres en entornos mixtos:
Nota
No es necesario configurar las opciones de DNS si planea usar DTC solo para transacciones XA.
Para intercambiar sufijos DNS:
En el portal de Azure, dirígete a tu instancia administrada de SQL.
En Configuración, seleccione Coordinador de transacciones distribuidas y seleccione la pestaña Redes .
En Configuración de DNS, seleccione Nuevo sufijo DNS externo. Escriba el sufijo DNS para el entorno externo, como
dnszone1.com.Copie el valor del sufijo DNS del host DTC. A continuación, use el comando
Set-DnsClientGlobalSetting -SuffixSearchList $listde PowerShell en el entorno externo para establecer el sufijo DNS del host DTC. Por ejemplo, si el sufijo esabc1111111.database.windows.net, defina el parámetro$listpara 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
Después de configurar las redes y DNS, ejecute Test-NetConnection (TNC) entre los puntos de conexión DTC de la instancia administrada de SQL 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 de SQL del host DTC. Este es un ejemplo:
# ===============================================================
# Get DTC settings
# ===============================================================
# User-configurable values
#
$SubscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$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:
-
chn000000000000es el nombre NetBIOS del host DTC de la instancia de SQL administrada. -
zcn111111111.database.windows.netes el sufijo DNS.
A continuación, ejecute un TNC tanto en el FQDN como en el nombre NetBIOS del host DTC de la instancia administrada de SQL 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 de SQL, cree un trabajo del Agente SQL para ejecutar el comando TNC de PowerShell y probar la conectividad con tu 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 RDBMS 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 de SQL y SQL Server y otros productos basados en SQL Server.
- Los nombres de host en entornos externos 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.