Koordynator transakcji rozproszonych (DTC) dla usługi Azure SQL Managed Instance
Dotyczy: Azure SQL Managed Instance
Ten artykuł zawiera omówienie koordynatora transakcji rozproszonych (DTC) dla usługi Azure SQL Managed Instance. Za pomocą usługi DTC można uruchamiać transakcje rozproszone w środowiskach mieszanych, w tym między wystąpieniami zarządzanymi, wystąpieniami programu SQL Server, innymi systemami zarządzania relacyjnymi bazami danych (RDBMS), aplikacjami niestandardowymi i innymi uczestnikami transakcji hostowanymi w dowolnym środowisku, które mogą ustanowić łączność sieciową z platformą Azure.
Scenariusze
Możesz włączyć usługę DTC dla usługi Azure SQL Managed Instance do uruchamiania transakcji rozproszonych w wielu środowiskach, które mogą ustanowić łączność sieciową z platformą Azure. Usługa DTC dla usługi SQL Managed Instance jest zarządzana, co oznacza, że platforma Azure zajmuje się zarządzaniem i konserwacją, na przykład rejestrowaniem, magazynem, dostępnością dtC i siecią. Oprócz aspektu zarządzanego usługa DTC dla usługi SQL Managed Instance jest tą samą usługą systemu Windows DTC, która obsługuje tradycyjne transakcje rozproszone dla programu SQL Server.
Usługa DTC dla usługi SQL Managed Instance odblokowuje szeroką gamę technologii i scenariuszy, w tym XA, .NET, T-SQL, COM+, ODBC i JDBC.
Aby uruchomić transakcje rozproszone, wykonaj następujące zadania:
- Skonfiguruj usługę DTC.
- Włącz łączność sieciową między uczestnikami.
- Skonfiguruj ustawienia systemu DNS.
Uwaga
W przypadku transakcji rozproszonych T-SQL lub .NET w bazach danych hostowanych tylko przez wystąpienia zarządzane zalecamy używanie natywnej obsługi transakcji rozproszonych.
Wymagania
Aby zmienić ustawienia usługi DTC, musisz mieć uprawnienia do zapisu dla Microsoft.Sql/managedInstances/dtc
zasobu. Aby wyświetlić ustawienia usługi DTC, musisz mieć uprawnienia do odczytu dla Microsoft.Sql/managedInstances/dtc
zasobu.
Konfigurowanie usługi DTC
Usługę DTC można skonfigurować za pomocą witryny Azure Portal, programu Azure PowerShell i interfejsu wiersza polecenia.
Aby skonfigurować usługę DTC przy użyciu witryny Azure Portal:
W witrynie Azure Portal przejdź do wystąpienia zarządzanego.
W menu po lewej stronie w obszarze Ustawienia wybierz pozycję Koordynator transakcji rozproszonych.
Na karcie Podstawy ustaw opcję Koordynator transakcji rozproszonych na włączone.
Na karcie Zabezpieczenia zezwól na przychodzące lub wychodzące transakcje i włącz XA lub SNA LU.
Na karcie Sieć określ dns usługi DTC i uzyskaj informacje na temat konfigurowania zewnętrznego systemu DNS i sieci.
Łączność sieciowa
Aby korzystać z usługi DTC, wszyscy uczestnicy transakcji muszą mieć połączenie sieciowe z platformą Azure. Ponieważ wystąpienia zarządzane są zawsze wdrażane w dedykowanej sieci wirtualnej na platformie Azure, należy połączyć środowisko zewnętrzne z siecią wirtualną wystąpienia zarządzanego. W tym kontekście zewnętrzne odwołuje się do dowolnego obiektu lub procesu, który nie jest wystąpieniem zarządzanym. Jeśli zasób zewnętrzny używa również sieci wirtualnej na platformie Azure, możesz użyć komunikacji równorzędnej sieci wirtualnych. W przeciwnym razie ustanów łączność przy użyciu preferowanej metody, takiej jak sieć VPN typu punkt-lokacja, usługa Azure ExpressRoute lub inna technologia łączności sieciowej, która spełnia Twoje potrzeby biznesowe.
Port 135 musi zezwalać zarówno na komunikację przychodzącą, jak i wychodzącą, zakres portów 14000–15000 musi zezwalać na ruch przychodzący, a 49152-65535 musi zezwalać na komunikację wychodzącą zarówno w grupie zabezpieczeń sieci wirtualnej dla wystąpienia zarządzanego, jak i w dowolnej zaporze skonfigurowanej w środowisku zewnętrznym.
Ustawienia DNS
DtC opiera się na nazwie NetBIOS uczestnika transakcji do wzajemnej komunikacji. Ponieważ protokół NetBIOS nie jest obsługiwany przez sieć platformy Azure, a nazwy NetBIOS nie można rozpoznać w środowiskach mieszanych, usługa DTC dla wystąpienia zarządzanego opiera się na serwerach nazw DNS na potrzeby rozpoznawania nazw hostów. Hosty DTC wystąpienia zarządzanego są automatycznie rejestrowane na serwerze Usługi Azure DNS. Należy zarejestrować zewnętrzne hosty DTC na serwerze DNS. Wystąpienie zarządzane i środowisko zewnętrzne również muszą wymieniać sufiksy DNS.
Na poniższym diagramie przedstawiono rozpoznawanie nazw w różnych środowiskach:
Uwaga
Nie musisz konfigurować ustawień DNS, jeśli planujesz używać usługi DTC tylko dla transakcji XA.
Aby wymienić sufiksy DNS:
W witrynie Azure Portal przejdź do wystąpienia zarządzanego.
W menu po lewej stronie w obszarze Ustawienia wybierz pozycję Koordynator transakcji rozproszonych. Wybierz kartę Sieć.
W konfiguracji DNS wybierz pozycję Nowy zewnętrzny sufiks DNS. Wprowadź sufiks DNS dla środowiska zewnętrznego, na przykład
dnszone1.com
.Skopiuj wartość sufiksu DNS hosta DTC. Następnie użyj polecenia
Set-DnsClientGlobalSetting -SuffixSearchList $list
programu PowerShell w środowisku zewnętrznym, aby ustawić sufiks DNS hosta DTC. Jeśli na przykład sufiks toabc1111111.database.windows.net
, zdefiniuj$list
parametr , aby uzyskać istniejące ustawienia DNS. Następnie dołącz do niego sufiks, jak pokazano w poniższym przykładzie:$list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net" Set-DnsClientGlobalSetting -SuffixSearchList $list
Testowanie łączności sieciowej
Po skonfigurowaniu sieci i systemu DNS uruchom polecenie Test-NetConnection (TNC) między punktami końcowymi DTC wystąpienia zarządzanego i zewnętrznym hostem DTC.
Aby przetestować połączenie, najpierw zaktualizuj wartości konfigurowalne przez użytkownika. Następnie użyj następującego skryptu programu PowerShell w środowisku zewnętrznym, aby zidentyfikować w pełni kwalifikowaną nazwę domeny (FQDN) wystąpienia zarządzanego hosta DTC. Oto przykład:
# ===============================================================
# 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
# ===============================================================
Dane wyjściowe JSON wyglądają podobnie do następującej przykładowej nazwy FQDN:
chn000000000000.zcn111111111.database.windows.net
Gdzie:
chn000000000000
to nazwa NetBIOS hosta DTC wystąpienia zarządzanego.zcn111111111.database.windows.net
jest sufiksem DNS.
Następnie uruchom TNC zarówno do nazwy FQDN, jak i nazwy NetBIOS hosta DTC wystąpienia zarządzanego na porcie 135. W poniższym przykładzie pierwszy wpis weryfikuje łączność sieciową. Drugi wpis sprawdza, czy ustawienia DNS są poprawne.
tnc chn000000000000.zcn111111111.database.windows.net -Port 135
tnc chn000000000000 -Port 135
Jeśli łączność i sufiksy DNS są poprawnie skonfigurowane, zostanie wyświetlony wyjściowy tcpTestSucceeded : True .
Po stronie wystąpienia zarządzanego utwórz zadanie agenta SQL, aby uruchomić polecenie TNC programu PowerShell w celu przetestowania łączności z hostem zewnętrznym.
Jeśli na przykład nazwa FQDN hosta zewnętrznego to host10.dnszone1.com
, uruchom następujący test za pośrednictwem zadania agenta SQL:
tnc host10.dnszone1.com -Port 135
tnc host10 -Port 135
Ograniczenia
Podczas korzystania z usługi DTC z usługą SQL Managed Instance należy wziąć pod uwagę następujące ograniczenia:
- Uruchamianie rozproszonych transakcji T-SQL między usługą SQL Managed Instance i usługą RDBMS innej firmy nie jest obsługiwane. Usługa SQL Managed Instance nie obsługuje serwerów połączonych, które mają maszyny RDBMS innych firm. Z drugiej strony obsługiwane jest uruchamianie rozproszonych transakcji T-SQL między wystąpieniami zarządzanymi a programem SQL Server i innymi produktami opartymi na programie SQL Server.
- Nazwy hostów w środowisku zewnętrznym nie mogą przekraczać 15 znaków.
- Transakcje rozproszone w usłudze Azure SQL Database nie są obsługiwane w przypadku usługi DTC.
- W przypadku uwierzytelniania usługa DTC obsługuje wyłącznie opcję bez uwierzytelniania . Opcje uwierzytelniania wzajemnego i przychodzącego uwierzytelniania wywołującego nie są dostępne. Ponieważ usługa DTC wymienia tylko komunikaty synchronizacji, a nie dane użytkownika, a ponieważ komunikuje się wyłącznie z siecią wirtualną, to ograniczenie nie jest zagrożeniem bezpieczeństwa.
Zarządzaj transakcjami
Aby wyświetlić statystyki transakcji rozproszonych, zobacz sys.dm_tran_distributed_transaction_stats.
Dziennik DTC można zresetować przy użyciu procedury składowanej sp_reset_dtc_log .
Transakcje rozproszone można zarządzać przy użyciu procedury składowanej sys.sp_manage_distributed_transaction .
Następne kroki
Aby uzyskać informacje na temat natywnej obsługi transakcji rozproszonych wystąpienia zarządzanego, zobacz Elastic transactions (Transakcje elastyczne).