DTC (Distributed Transaction Coordinator) pro spravovanou instanci Azure SQL
Platí pro: Azure SQL Managed Instance
Tento článek obsahuje přehled koordinátoru distribuovaných transakcí (DTC) pro službu Azure SQL Managed Instance. DTC můžete použít ke spouštění distribuovaných transakcí ve smíšených prostředích, včetně spravovaných instancí, instancí SQL Serveru, jiných systémů pro správu relačních databází (RDBMS), vlastních aplikací a dalších účastníků transakcí hostovaných v libovolném prostředí, které můžou navázat síťové připojení k Azure.
Scénáře
DTC pro Azure SQL Managed Instance můžete povolit spouštění distribuovaných transakcí napříč několika prostředími, která můžou navázat síťové připojení k Azure. DTC pro službu SQL Managed Instance se spravuje, což znamená, že Azure se stará o správu a údržbu, jako je protokolování, úložiště, dostupnost DTC a sítě. Kromě spravovaného aspektu je DTC pro službu SQL Managed Instance stejná služba DTC pro Windows, která podporuje tradiční distribuované transakce pro SQL Server.
DTC pro službu SQL Managed Instance odemkne širokou škálu technologií a scénářů, včetně XA, .NET, T-SQL, COM+, ODBC a JDBC.
Pokud chcete spouštět distribuované transakce, proveďte tyto úlohy:
- Konfigurace DTC
- Povolení možností síťového připojení mezi účastníky
- Konfigurace nastavení DNS
Poznámka:
U distribuovaných transakcí T-SQL nebo .NET napříč databázemi hostovanými pouze spravovanými instancemi doporučujeme používat nativní podporu distribuovaných transakcí.
Požadavky
Pokud chcete změnit nastavení DTC, musíte mít oprávnění k zápisu pro Microsoft.Sql/managedInstances/dtc
prostředek. Chcete-li zobrazit nastavení DTC, musíte mít oprávnění ke čtení pro Microsoft.Sql/managedInstances/dtc
prostředek.
Konfigurace DTC
DTC můžete nakonfigurovat pomocí webu Azure Portal, Azure PowerShellu a rozhraní příkazového řádku.
Konfigurace DTC pomocí webu Azure Portal:
Na webu Azure Portal přejděte do spravované instance.
V nabídce vlevo v části Nastavení vyberte Koordinátor distribuovaných transakcí.
Na kartě Základy nastavte Distributed Transaction Coordinator na Povoleno.
Na kartě Zabezpečení povolte příchozí nebo odchozí transakce a povolte XA nebo SNA LU.
Na kartě Sítě zadejte DNS DTC a získejte informace pro konfiguraci externích DNS a sítí.
Připojení k síti
Pokud chcete použít DTC, musí mít všichni účastníci transakcí síťové připojení k Azure. Vzhledem k tomu, že spravované instance jsou vždy nasazené do vyhrazené virtuální sítě v Azure, musíte externí prostředí připojit k virtuální síti spravované instance. V tomto kontextu externí odkazuje na jakýkoli objekt nebo proces, který není vaší spravovanou instancí. Pokud váš externí prostředek používá také virtuální síť v Azure, můžete použít partnerský vztah virtuálních sítí. V opačném případě vytvořte připojení pomocí preferované metody, jako je síť VPN typu point-to-site, Azure ExpressRoute nebo jiná technologie síťového připojení, která vyhovuje vašim obchodním potřebám.
Port 135 musí umožňovat příchozí i odchozí komunikaci, rozsah portů 14000–15000 musí umožňovat příchozí komunikaci a 49152-65535 musí umožňovat odchozí komunikaci ve skupině zabezpečení virtuální sítě pro spravovanou instanci i v bráně firewall, která je nastavená v externím prostředí.
Nastavení DNS
DTC spoléhá na název NetBIOS účastníka transakce pro vzájemnou komunikaci. Vzhledem k tomu, že sítě Azure a názvy NetBIOS nepodporují protokol NetBIOS, nejde přeložit ve smíšených prostředích, DTC pro spravovanou instanci spoléhá na názvové servery DNS pro překlad názvů hostitelů. Hostitelé DTC spravované instance se automaticky zaregistrují na serveru Azure DNS. Externí hostitele DTC musíte zaregistrovat na serveru DNS. Spravovaná instance a externí prostředí musí také vyměňovat přípony DNS.
Následující diagram znázorňuje překlad názvů napříč smíšenými prostředími:
Poznámka:
Pokud plánujete používat DTC pouze pro transakce XA, nemusíte konfigurovat nastavení DNS.
Výměna přípon DNS:
Na webu Azure Portal přejděte do spravované instance.
V nabídce vlevo v části Nastavení vyberte Koordinátor distribuovaných transakcí. Vyberte kartu Sítě.
V konfiguraci DNS vyberte Novou externí příponu DNS. Zadejte příponu DNS pro vaše externí prostředí, například
dnszone1.com
.Zkopírujte hodnotu přípony DNS hostitele DTC. Pak pomocí příkazu
Set-DnsClientGlobalSetting -SuffixSearchList $list
PowerShellu ve vašem externím prostředí nastavte příponu DNS hostitele DTC. Pokud jeabc1111111.database.windows.net
přípona například , definujte parametr$list
pro získání existujícího nastavení DNS. Pak k ní připojte příponu, jak je znázorněno v následujícím příkladu:$list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net" Set-DnsClientGlobalSetting -SuffixSearchList $list
Testování připojení k síti
Po konfiguraci sítě a DNS spusťte test-NetConnection (TNC) mezi koncovými body DTC vaší spravované instance a externím hostitelem DTC.
Pokud chcete otestovat připojení, nejprve aktualizujte hodnoty konfigurovatelné uživatelem. Pak pomocí následujícího skriptu PowerShellu v externím prostředí identifikujte plně kvalifikovaný název domény (FQDN) spravované instance hostitele DTC. Tady je příklad:
# ===============================================================
# 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
# ===============================================================
Výstup JSON vypadá jako následující příklad plně kvalifikovaného názvu domény:
chn000000000000.zcn111111111.database.windows.net
Kde:
chn000000000000
je název netBIOS hostitele DTC spravované instance.zcn111111111.database.windows.net
je přípona DNS.
Dále spusťte TNC na plně kvalifikovaný název domény i název NetBIOS hostitele DTC spravované instance na portu 135. V následujícím příkladu první položka ověřuje připojení k síti. Druhá položka ověří správnost nastavení DNS.
tnc chn000000000000.zcn111111111.database.windows.net -Port 135
tnc chn000000000000 -Port 135
Pokud jsou správně nakonfigurované připojení a přípony DNS, zobrazí se výstup TcpTestSucceeded : True .
Na straně spravované instance vytvořte úlohu agenta SQL, která spustí příkaz TNC PowerShellu pro otestování připojení k externímu hostiteli.
Pokud je například plně kvalifikovaný název domény vašeho externího hostitele host10.dnszone1.com
, spusťte následující test prostřednictvím úlohy agenta SQL:
tnc host10.dnszone1.com -Port 135
tnc host10 -Port 135
Omezení
Při použití DTC se službou SQL Managed Instance zohledněte následující omezení:
- Spouštění distribuovaných transakcí T-SQL mezi službou SQL Managed Instance a RDBMS třetí strany není podporováno. SQL Managed Instance nepodporuje propojené servery, které mají RDBMS třetích stran. Naopak je podporováno spouštění distribuovaných transakcí T-SQL mezi spravovanými instancemi a SQL Serverem a dalšími produkty založenými na SQL Serveru.
- Názvy hostitelů v externím prostředí nesmí být delší než 15 znaků.
- Distribuované transakce do služby Azure SQL Database nejsou u DTC podporovány.
- Pro ověřování DTC podporuje pouze možnost bez ověřování. Možnosti vzájemného ověřování a příchozího ověřování volajícího nejsou k dispozici. Protože DTC vyměňuje pouze synchronizační zprávy, a ne uživatelská data a protože komunikuje výhradně s virtuální sítí, toto omezení není bezpečnostní riziko.
Správa transakcí
Pokud chcete zobrazit statistiky distribuovaných transakcí, podívejte se na sys.dm_tran_distributed_transaction_stats.
Protokol DTC můžete resetovat pomocí uložené procedury sp_reset_dtc_log.
Distribuované transakce je možné spravovat pomocí uložené procedury sys.sp_manage_distributed_transaction.
Další kroky
Informace o podpoře distribuovaných transakcí nativní spravované instance najdete v tématu Elastické transakce.