Distributed Transaction Coordinator (DTC) pour Azure SQL Managed Instance.
S’applique à : Azure SQL Managed Instance
Cet article fournit une vue d'ensemble de Distributed Transaction Coordinator (DTC) pour Azure SQL Managed Instance. Vous pouvez utiliser DTC pour exécuter des transactions distribuées dans des environnements mixtes, notamment entre des instances managées, des instances SQL Server, d’autres systèmes de gestion de base de données relationnelles (SGBDR), des applications personnalisées et d’autres participants aux transactions hébergés dans tout environnement capable d’établir une connectivité réseau à Azure.
Scénarios
Vous pouvez activer DTC pour Azure SQL Managed Instance afin d’exécuter des transactions distribuées dans plusieurs environnements qui peuvent établir une connectivité réseau à Azure. DTC pour SQL Managed Instance est managé, ce qui signifie qu’Azure prend en charge la gestion et la maintenance, comme la journalisation, le stockage, la disponibilité DTC et la mise en réseau. Outre l’aspect managé, DTC pour SQL Managed Instance est le même service Windows DTC qui prend en charge les transactions distribuées traditionnelles pour SQL Server.
DTC pour SQL Managed Instance permet de tirer parti d’un large éventail de technologies et de scénarios, notamment XA, .NET, T-SQL, COM+, ODBC et JDBC.
Pour exécuter des transactions distribuées, procédez comme suit :
- Configurez DTC.
- Activez la connectivité réseau entre les participants.
- Configurez les paramètres DNS.
Notes
Pour les transactions distribuées T-SQL ou .NET entre des bases de données qui sont hébergées uniquement par des instances managées, nous vous recommandons d’utiliser la prise en charge native des transactions distribuées.
Configuration requise
Pour modifier les paramètres DTC, vous devez disposer d’autorisations en écriture pour la ressource Microsoft.Sql/managedInstances/dtc
. Pour voir les paramètres DTC, vous devez disposer d’autorisations en lecture pour la ressource Microsoft.Sql/managedInstances/dtc
.
Configurer DTC
Vous pouvez configurer DTC avec le portail Azure, Azure PowerShell et CLI.
Pour configurer DTC avec le portail Azure :
Accédez à votre instance managée dans le portail Azure.
Dans le menu de gauche, sous Paramètres, sélectionnez Distributed Transaction Coordinator.
Sous l’onglet Informations de base, définissez Distributed Transaction Coordinator sur Activé.
Sous l’onglet Sécurité, autorisez les transactions entrantes ou sortantes, et activez l’unité logique (LU) XA ou SNA.
Sous l’onglet Mise en réseau, spécifiez le DNS DTC et obtenez les informations permettant de configurer le DNS externe et la mise en réseau.
Connectivité réseau
Pour utiliser DTC, tous les participants à la transaction doivent disposer d’une connexion réseau à Azure. Étant donné que les instances managées sont toujours déployées sur un réseau virtuel dédié dans Azure, vous devez connecter votre environnement externe au réseau virtuel de votre instance managée. Dans ce contexte, le terme externe fait référence à tout objet ou processus qui n’est pas votre instance managée. Si votre ressource externe utilise également un réseau virtuel dans Azure, vous pouvez utiliser le peering de réseaux virtuels. Sinon, établissez la connectivité en utilisant la méthode de votre choix, comme un VPN point à site, Azure ExpressRoute ou une autre technologie de connectivité réseau qui répond aux besoins de votre entreprise.
Le port 135 doit autoriser les communications entrantes et sortantes, la plage de ports 14000-15000 doit autoriser les communications entrantes, et 49152-65535 doit autoriser les communications sortantes, à la fois dans le groupe de sécurité réseau du Managed Instance et dans tout pare-feu configuré dans l'environnement externe.
Paramètres DNS
DTC s’appuie sur le nom NetBIOS d’un participant à la transaction pour la communication mutuelle. Étant donné que le protocole NetBIOS n’est pas pris en charge par les réseaux Azure et que les noms NetBIOS ne peuvent pas être résolus dans des environnements mixtes, DTC pour une instance managée s’appuie sur des serveurs de noms DNS pour la résolution des noms d’hôtes. Les hôtes DTC d’instance managée sont automatiquement inscrits auprès du serveur Azure DNS. Vous devez inscrire les hôtes DTC externes auprès d’un serveur DNS. L’instance managée et l’environnement externe doivent aussi échanger des suffixes DNS.
Le diagramme suivant montre la résolution de noms dans des environnements mixtes :
Remarque
Vous n’avez pas besoin de configurer les paramètres DNS si vous envisagez d’utiliser DTC uniquement pour des transactions XA.
Pour échanger des suffixes DNS :
Accédez à votre instance managée dans le portail Azure.
Dans le menu de gauche, sous Paramètres, sélectionnez Distributed Transaction Coordinator. Sélectionnez l’onglet Réseau.
Dans Configuration DNS, sélectionnez Nouveau suffixe DNS externe. Saisissez le suffixe DNS pour votre environnement externe, par exemple
dnszone1.com
.Copiez la valeur du suffixe DNS de l’hôte DTC. Utilisez ensuite la commande PowerShell
Set-DnsClientGlobalSetting -SuffixSearchList $list
sur votre environnement externe pour définir le suffixe DNS de l’hôte DTC. Par exemple, si votre suffixe estabc1111111.database.windows.net
, définissez votre paramètre$list
pour obtenir les paramètres DNS existants. Ensuite, ajoutez-y votre suffixe, comme indiqué dans l’exemple suivant :$list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net" Set-DnsClientGlobalSetting -SuffixSearchList $list
Testez la connectivité réseau
Une fois le réseau et le DNS configurés, exécutez Test-NetConnection (TNC) entre les points de terminaison DTC de votre instance managée et l’hôte DTC externe.
Pour tester la connexion, commencez par mettre à jour les valeurs configurables par l’utilisateur. Ensuite, utilisez le script PowerShell suivant sur l’environnement externe pour identifier le nom de domaine complet (FQDN) de l’instance managée de l’hôte DTC. Voici un exemple :
# ===============================================================
# 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 sortie JSON ressemble à l’exemple FQDN suivant :
chn000000000000.zcn111111111.database.windows.net
Où :
chn000000000000
est le nom NetBIOS de l’hôte DTC de l’instance managée.zcn111111111.database.windows.net
est le suffixe DNS.
Ensuite, exécutez un test TNC sur le nom de domaine complet et le nom NetBIOS de l’hôte DTC de l’instance managée sur le port 135. Dans l’exemple suivant, la première entrée vérifie la connectivité réseau. La deuxième entrée vérifie que les paramètres DNS sont corrects.
tnc chn000000000000.zcn111111111.database.windows.net -Port 135
tnc chn000000000000 -Port 135
Si la connectivité et les suffixes DNS sont configurés correctement, la sortie TcpTestSucceeded : True s’affiche.
Du côté de l’instance managée, créez un travail SQL Agent pour exécuter la commande PowerShell TNC afin de tester la connectivité à votre hôte externe.
Par exemple, si le nom de domaine complet de votre hôte externe est host10.dnszone1.com
, exécutez le test suivant par le biais de votre travail SQL Agent :
tnc host10.dnszone1.com -Port 135
tnc host10 -Port 135
Limites
Tenez compte des limitations suivantes lorsque vous utilisez DTC avec SQL Managed Instance :
- L’exécution de transactions T-SQL distribuées entre SQL Managed Instance et un SGBDR tiers n’est pas prise en charge. SQL Managed Instance ne prend pas en charge les serveurs liés qui ont des SGBDR tiers. À l’inverse, l’exécution de transactions T-SQL distribuées entre des instances managées et SQL Server et d’autres produits basés sur SQL Server est prise en charge.
- Les noms d’hôtes dans un environnement externe ne peuvent pas comporter plus de 15 caractères.
- Les transactions distribuées vers Azure SQL Database ne sont pas prises en charge avec DTC.
- Pour l’authentification, DTC prend uniquement en charge l’option Aucune authentification. Les options Authentification mutuelle et Appelant entrant ne sont pas disponibles. Étant donné que DTC échange uniquement des messages de synchronisation et non des données utilisateur, et qu’il communique uniquement avec le réseau virtuel, cette limitation ne constitue pas un risque pour la sécurité.
Gérer les transactions
Pour afficher les statistiques des transactions distribuées, consultez sys.dm_tran_distributed_transaction_stats.
Vous pouvez réinitialiser le journal DTC avec la procédure stockée sp_reset_dtc_log.
Les transactions distribuées peuvent être gérées avec la procédure stockée sys.sp_manage_distributed_transaction.
Étapes suivantes
Pour la prise en charge native des transactions distribuées d’instance managée, consultez Transactions élastiques.