Sdílet prostřednictvím


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:

  1. Konfigurace DTC
  2. Povolení možností síťového připojení mezi účastníky
  3. 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:

  1. Na webu Azure Portal přejděte do spravované instance.

  2. V nabídce vlevo v části Nastavení vyberte Koordinátor distribuovaných transakcí.

    Snímek obrazovky znázorňující zvýrazněnou možnost nabídky, podokno Koordinátor distribuovaných transakcí pro spravovanou instanci SQL a kartu Základy

  3. Na kartě Základy nastavte Distributed Transaction Coordinator na Povoleno.

  4. Na kartě Zabezpečení povolte příchozí nebo odchozí transakce a povolte XA nebo SNA LU.

  5. 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:

Diagram znázorňující překlad názvů ve smíšených prostředích při použití DTC

Poznámka:

Pokud plánujete používat DTC pouze pro transakce XA, nemusíte konfigurovat nastavení DNS.

Výměna přípon DNS:

  1. Na webu Azure Portal přejděte do spravované instance.

  2. V nabídce vlevo v části Nastavení vyberte Koordinátor distribuovaných transakcí. Vyberte kartu Sítě.

    Snímek obrazovky znázorňující kartu Sítě v podokně DTC pro vaši spravovanou instanci na webu Azure Portal se zvýrazněnou novou externí příponou DNS

  3. V konfiguraci DNS vyberte Novou externí příponu DNS. Zadejte příponu DNS pro vaše externí prostředí, například dnszone1.com.

  4. 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 je abc1111111.database.windows.netpří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.