Bagikan melalui


Koordinator Transaksi Terdistribusi (DTC) untuk Azure SQL Managed Instance

Berlaku untuk: Azure SQL Managed Instance

Artikel ini memberikan gambaran umum Koordinator Transaksi Terdistribusi (DTC) untuk Azure SQL Managed Instance. Anda dapat menggunakan DTC untuk menjalankan transaksi terdistribusi di lingkungan campuran, termasuk di seluruh instans terkelola, instans SQL Server, sistem manajemen database relasional lainnya (RDBMS), aplikasi kustom, dan peserta transaksi lainnya yang dihosting di lingkungan apa pun yang dapat membangun konektivitas jaringan ke Azure.

Skenario

Anda dapat mengaktifkan DTC untuk Azure SQL Managed Instance untuk menjalankan transaksi terdistribusi di beberapa lingkungan yang dapat membangun konektivitas jaringan ke Azure. DTC untuk SQL Managed Instance dikelola, yang berarti bahwa Azure mengurus manajemen dan pemeliharaan, seperti pengelogan, penyimpanan, ketersediaan DTC, dan jaringan. Selain aspek terkelola, DTC untuk SQL Managed Instance adalah layanan Windows DTC yang sama yang mendukung transaksi terdistribusi tradisional untuk SQL Server.

DTC untuk SQL Managed Instance membuka berbagai teknologi dan skenario, termasuk XA, .NET, T-SQL, COM+, ODBC, dan JDBC.

Untuk menjalankan transaksi terdistribusi, selesaikan tugas-tugas ini:

  1. Konfigurasikan DTC.
  2. Aktifkan konektivitas jaringan di antara peserta.
  3. Mengonfigurasikan pengaturan DNS.

Catatan

Untuk transaksi terdistribusi T-SQL atau .NET di seluruh database yang hanya dihosting oleh instans terkelola, kami sarankan Anda menggunakan dukungan asli untuk transaksi terdistribusi.

Persyaratan

Untuk mengubah pengaturan DTC, Anda harus memiliki izin tulis untuk Microsoft.Sql/managedInstances/dtc sumber daya. Untuk melihat pengaturan DTC, Anda harus memiliki izin baca untuk Microsoft.Sql/managedInstances/dtc sumber daya.

Mengonfigurasikan DTC

Anda dapat mengonfigurasi DTC dengan portal Azure, Azure PowerShell, dan CLI.

Untuk mengonfigurasi DTC dengan menggunakan portal Azure:

  1. Di portal Azure, buka instans terkelola Anda.

  2. Di menu sebelah kiri di bawah Pengaturan, pilih Koordinator Transaksi Terdistribusi.

    Cuplikan layar yang memperlihatkan opsi menu yang disorot, panel Koordinator Transaksi Terdistribusi untuk SQL Managed Instance, dan tab Dasar.

  3. Pada tab Dasar , atur Koordinator Transaksi Terdistribusi ke Diaktifkan.

  4. Pada tab Keamanan , izinkan transaksi masuk atau keluar, dan aktifkan XA atau SNA LU.

  5. Pada tab Jaringan , tentukan DNS DTC, dan dapatkan informasi untuk mengonfigurasi DNS dan jaringan eksternal.

Konektivitas jaringan

Untuk menggunakan DTC, semua peserta transaksi harus memiliki koneksi jaringan ke Azure. Karena instans terkelola selalu disebarkan ke jaringan virtual khusus di Azure, Anda harus menghubungkan lingkungan eksternal Anda ke jaringan virtual instans terkelola Anda. Dalam konteks ini, eksternal mengacu pada objek atau proses apa pun yang bukan instans terkelola Anda. Jika sumber daya eksternal Anda juga menggunakan jaringan virtual di Azure, Anda dapat menggunakan peering jaringan virtual. Jika tidak, buat konektivitas dengan menggunakan metode pilihan Anda, seperti VPN titik-ke-situs, Azure ExpressRoute, atau teknologi konektivitas jaringan lain yang memenuhi kebutuhan bisnis Anda.

Port 135 harus mengizinkan komunikasi masuk dan keluar, rentang port 14000-15000 harus mengizinkan masuk, dan 49152-65535 harus mengizinkan komunikasi keluar, di grup keamanan jaringan jaringan virtual untuk instans terkelola dan di firewall apa pun yang disiapkan di lingkungan eksternal.

Pengaturan DNS

DTC mengandalkan nama NetBIOS peserta transaksi untuk komunikasi bersama. Karena protokol NetBIOS tidak didukung oleh jaringan Azure dan nama NetBIOS tidak dapat diselesaikan di lingkungan campuran, DTC untuk instans terkelola bergantung pada server nama DNS untuk resolusi nama host. Host DTC instans terkelola secara otomatis terdaftar di server Azure DNS. Anda harus mendaftarkan host DTC eksternal dengan server DNS. Instans terkelola dan lingkungan eksternal juga harus bertukar akhiran DNS.

Diagram berikut menunjukkan resolusi nama di seluruh lingkungan campuran:

Diagram yang memperlihatkan resolusi nama di seluruh lingkungan campuran saat Anda menggunakan DTC.

Catatan

Anda tidak perlu mengonfigurasi pengaturan DNS jika Anda berencana menggunakan DTC hanya untuk transaksi XA.

Untuk bertukar akhiran DNS:

  1. Di portal Azure, buka instans terkelola Anda.

  2. Di menu sebelah kiri di bawah Pengaturan, pilih Koordinator Transaksi Terdistribusi. Pilih tab Jaringan.

    Cuplikan layar yang memperlihatkan tab Jaringan panel DTC untuk instans terkelola Anda di portal Azure, dengan Akhiran DNS eksternal baru disorot.

  3. Dalam konfigurasi DNS, pilih Akhiran DNS eksternal baru. Masukkan akhiran DNS untuk lingkungan eksternal Anda, seperti dnszone1.com.

  4. Salin nilai untuk akhiran DNS Host DTC. Kemudian gunakan perintah Set-DnsClientGlobalSetting -SuffixSearchList $list PowerShell di lingkungan eksternal Anda untuk mengatur akhiran DNS Host DTC. Misalnya, jika akhiran Anda adalah abc1111111.database.windows.net, tentukan parameter Anda $list untuk mendapatkan pengaturan DNS yang ada. Kemudian, tambahkan akhiran Anda ke dalamnya seperti yang ditunjukkan dalam contoh berikut:

    $list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net"
    Set-DnsClientGlobalSetting -SuffixSearchList $list
    

Menguji konektivitas jaringan

Setelah Anda mengonfigurasi jaringan dan DNS, jalankan Test-NetConnection (TNC) antara titik akhir DTC instans terkelola Anda dan host DTC eksternal.

Untuk menguji koneksi, pertama-tama perbarui nilai yang dapat dikonfigurasi pengguna. Kemudian, gunakan skrip PowerShell berikut pada lingkungan eksternal untuk mengidentifikasi nama domain yang sepenuhnya memenuhi syarat (FQDN) dari instans terkelola host DTC. Berikut contohnya:

# =============================================================== 
# 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 
# =============================================================== 

Output JSON terlihat seperti contoh FQDN berikut:

chn000000000000.zcn111111111.database.windows.net

Mana:

  • chn000000000000 adalah nama NetBIOS dari host DTC instans terkelola.
  • zcn111111111.database.windows.net adalah akhiran DNS.

Selanjutnya, jalankan TNC ke FQDN dan nama NetBIOS dari host DTC instans terkelola pada port 135. Dalam contoh berikut, entri pertama memverifikasi konektivitas jaringan. Entri kedua memverifikasi bahwa pengaturan DNS sudah benar.

tnc chn000000000000.zcn111111111.database.windows.net -Port 135 
tnc chn000000000000 -Port 135 

Jika konektivitas dan akhiran DNS dikonfigurasi dengan benar, output TcpTestSucceeded : True muncul.

Di sisi instans terkelola, buat pekerjaan SQL Agent untuk menjalankan perintah TNC PowerShell untuk menguji konektivitas ke host eksternal Anda.

Misalnya, jika FQDN untuk host eksternal Anda adalah host10.dnszone1.com, jalankan pengujian berikut melalui pekerjaan Agen SQL Anda:

tnc host10.dnszone1.com -Port 135 
tnc host10 -Port 135 

Batasan

Pertimbangkan keterbatasan berikut saat Anda menggunakan DTC dengan SQL Managed Instance:

  • Menjalankan transaksi T-SQL terdistribusi antara SQL Managed Instance dan RDBMS pihak ketiga tidak didukung. SQL Managed Instance tidak mendukung server tertaut yang memiliki RDBMS pihak ketiga. Sebaliknya, menjalankan transaksi T-SQL terdistribusi antara instans terkelola dan SQL Server serta produk berbasis SQL Server lainnya didukung.
  • Nama host di lingkungan eksternal tidak boleh berisi lebih dari 15 karakter.
  • Transaksi terdistribusi ke Azure SQL Database tidak didukung dengan DTC.
  • Untuk autentikasi, DTC hanya mendukung opsi tanpa autentikasi. Opsi autentikasi timbal balik dan autentikasi pemanggil masuk tidak tersedia. Karena DTC hanya bertukar pesan sinkronisasi dan bukan data pengguna, dan karena DTC hanya berkomunikasi dengan jaringan virtual, keterbatasan ini bukan merupakan risiko keamanan.

Kelola transaksi

Untuk melihat statistik transaksi terdistribusi, lihat sys.dm_tran_distributed_transaction_stats.

Anda dapat mereset log DTC dengan prosedur tersimpan sp_reset_dtc_log.

Transaksi terdistribusi dapat dikelola dengan prosedur tersimpan sys.sp_manage_distributed_transaction.

Langkah berikutnya

Untuk dukungan transaksi terdistribusi instans terkelola asli, lihat Transaksi elastis.