Membuat sumber daya DTC terkluster untuk grup ketersediaan AlwaysOn
Berlaku untuk:SQL Server - Hanya Windows
Artikel ini memandu Anda melalui konfigurasi lengkap sumber daya DTC berkluster untuk grup ketersediaan AlwaysOn (AG) SQL Server. Konfigurasi lengkap dapat memakan waktu hingga satu jam untuk diselesaikan.
Panduan ini membuat sumber daya DTC berkluster dan SQL Server AGs untuk menyelaraskan dengan persyaratan di Cara mengelompokkan layanan DTC untuk grup ketersediaan AlwaysOn.
Panduan ini menggunakan skrip PowerShell dan Transact-SQL (T-SQL). Banyak skrip T-SQL mengharuskan Mode SQLCMD diaktifkan. Untuk informasi selengkapnya tentang Mode SQLCMD, lihat Mengedit Skrip SQLCMD dengan Editor Kueri. Modul FailoverClusters
PowerShell harus diimpor. Untuk informasi selengkapnya tentang mengimpor modul PowerShell, lihat Mengimpor Modul PowerShell. Panduan ini didasarkan pada opsi konfigurasi berikut:
- Semua persyaratan dari Prasyarat, pembatasan, dan rekomendasi untuk grup ketersediaan AlwaysOn terpenuhi.
- Domainnya adalah
contoso.lab
. - Pengguna memiliki izin Buat objek Komputer di unit organisasi tempat sumber daya Nama Jaringan DTC akan dibuat.
- Pengguna adalah pengguna domain dengan hak administrator pada semua simpul dalam kluster.
- Berbagi file yang disebut
sqlbackups
telah dibuat untuk pencadangan. - Instans default SQL Server diberi nama
SQLNODE1
danSQLNODE2
. - Akun layanan yang sama digunakan pada semua instans SQL Server.
- Pengguna adalah anggota sysadmin peran SQL Server tetap pada semua instans SQL Server.
- Hasil default transaksi yang tidak dapat diselesaikan DTC akan diatur ke
presume commit
. - Titik akhir pencerminan akan menggunakan port
5022
. - Tidak ada AG lain atau sumber daya DTC terkluster.
- Detail kluster (Sudah Ada):
- Nama:
Cluster
- Nama Jaringan:
Cluster Network 1
- Simpul:
SQLNODE1, SQLNODE2
- Penyimpanan bersama:
Cluster Disk 3
(Dimiliki olehSQLNODE1
)
- Nama:
- Detail kluster (Untuk dibuat):
- Sumber daya Nama Jaringan:
DTCnet1
- Sumber daya Nama Jaringan DTC:
DTC1
- Sumber daya Disk Fisik DTC:
DTCDisk1
- IP DTC dan sumber daya subnet:
192.168.2.54
,255.255.255.0
- Sumber daya IP DTC:
DTCIP1
- Sumber daya Nama Jaringan:
1. Periksa sistem operasi
Untuk transaksi terdistribusi yang didukung, grup ketersediaan AlwaysOn harus berjalan pada Windows Server 2012 R2 dan versi yang lebih baru. Untuk Windows Server 2012 R2, Anda harus menginstal pembaruan di KB3090973. Skrip ini memeriksa versi sistem operasi, menentukan apakah Anda perlu menginstal hotfix 3090973. Jalankan skrip PowerShell berikut ini di SQLNODE1
.
# A few OS checks
<#
Script:
1) is re-runnable
2) will work on any node in the cluster, and
3) will execute against every node in the cluster
#>
$nodes = (Get-ClusterNode).Name;
foreach ($node in $nodes) {
# At least 2012 R2
$os = (Get-WmiObject -class Win32_OperatingSystem -ComputerName $node).caption;
if ($os -like "*2012 R2*" -or $os -like "*2016*" -or $os -like "*2019*" -or $os -like "*2022*") {
Write-Host "$os is supported on $node.";
}
else {
Write-Host "STOP! $os is not supported on $node.";
}
# KB 3090973
if ($os -like "*2012 R2*") {
$kb = Get-Hotfix -ComputerName $node | Where { $_.HotFixID -eq 'KB3090973' };
if ($kb) {
Write-Host "KB3090973 is installed on $node."
}
else {
Write-Host "HotFixID KB3090973 must be applied on $node. See https://support.microsoft.com/help/3090973 for additional information and to download the hotfix.";
}
}
else {
Write-Host "KB3090973 does not apply to $os on $node."
}
}
2. Mengonfigurasi aturan firewall
Skrip ini mengonfigurasi firewall untuk memungkinkan lalu lintas DTC pada setiap SQL Server yang menghosting replika AG, dan server lain yang terlibat dalam transaksi terdistribusi. Skrip juga mengonfigurasi firewall untuk memungkinkan koneksi untuk titik akhir pencerminan database. Jalankan skrip PowerShell berikut ini di SQLNODE1
.
# Configure Firewall
<#
Script:
1) is re-runnable
2) will work on any node in the cluster, and
3) will execute against every node in the cluster
#>
$nodes = (Get-ClusterNode).Name;
foreach ($node in $nodes) {
Get-NetFirewallRule -CimSession $node -DisplayGroup 'Distributed Transaction Coordinator' -Enabled False -ErrorAction SilentlyContinue | Enable-NetFirewallRule;
New-NetFirewallRule -CimSession $node -DisplayName 'SQL Server Mirroring' -Description 'Port 5022 for SQL Server Mirroring' -Action Allow -Direction Inbound -Protocol TCP -LocalPort 5022 -RemotePort Any -LocalAddress Any -RemoteAddress Any;
};
3. Mengonfigurasi resolusi xact yang ragu
Skrip ini mengonfigurasi opsi konfigurasi server resolusi xact yang ragu untuk "penerapan presume" untuk transaksi yang meragukan.
Jalankan skrip T-SQL berikut di SQL Server Management Studio (SSMS) terhadap SQLNODE1
dalam mode SQLCMD.
/*******************************************************************
Execute script in its entirety on SQLNODE1 in SQLCMD mode
*******************************************************************/
-- Configure in-doubt xact resolution on all SQL Server instances to presume commit
IF (
SELECT CAST(value_in_use AS BIT)
FROM sys.configurations WITH (NOLOCK)
WHERE [name] = N'show advanced options'
) = 0
BEGIN
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
END
-- Configure the server to presume commit for in-doubt transactions.
IF (
SELECT CAST(value AS BIT)
FROM sys.configurations WITH (NOLOCK)
WHERE [name] = N'in-doubt xact resolution'
) <> 1
BEGIN
EXEC sp_configure 'in-doubt xact resolution', 1;
RECONFIGURE;
END
GO
-----------------------------------------------------------------------------
:connect SQLNODE2
IF (
SELECT CAST(value_in_use AS BIT)
FROM sys.configurations WITH (NOLOCK)
WHERE [name] = N'show advanced options'
) = 0
BEGIN
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
END
-- Configure the server to presume commit for in-doubt transactions.
IF (
SELECT CAST(value AS BIT)
FROM sys.configurations WITH (NOLOCK)
WHERE [name] = N'in-doubt xact resolution'
) <> 1
BEGIN
EXEC sp_configure 'in-doubt xact resolution', 1;
RECONFIGURE;
END
GO
4. Membuat database pengujian
Skrip membuat database bernama AG1
di SQLNODE1
dan database bernama dtcDemoAG1
di SQLNODE2
. Jalankan skrip T-SQL berikut di SSMS terhadap SQLNODE1
dalam mode SQLCMD.
/*******************************************************************
Execute script in its entirety on SQLNODE1 in SQLCMD mode
*******************************************************************/
-- On SQLNODE1
USE master;
GO
SET NOCOUNT ON;
IF EXISTS (
SELECT *
FROM sys.databases
WHERE name = N'AG1'
)
BEGIN
DROP DATABASE AG1;
END
GO
CREATE DATABASE AG1;
GO
ALTER DATABASE AG1
SET RECOVERY FULL WITH NO_WAIT;
ALTER AUTHORIZATION ON DATABASE::AG1 TO sa;
GO
USE AG1;
CREATE TABLE [dbo].[Names] (
[Name] [varchar](64) NULL,
[EditDate] DATETIME
);
INSERT [dbo].[Names]
VALUES ('AG1', GETDATE());
GO
-- Against SQNODE2
:connect SQLNODE2
USE master;
GO
SET NOCOUNT ON;
IF EXISTS (
SELECT *
FROM sys.databases
WHERE name = N'dtcDemoAG1'
)
BEGIN
DROP DATABASE dtcDemoAG1;
END
GO
CREATE DATABASE dtcDemoAG1;
GO
ALTER DATABASE dtcDemoAG1
SET RECOVERY SIMPLE WITH NO_WAIT;
ALTER AUTHORIZATION ON DATABASE::dtcDemoAG1 TO sa;
GO
USE dtcDemoAG1;
GO
CREATE TABLE [dbo].[Names] (
[Name] [varchar](64) NULL,
[EditDate] DATETIME
);
GO
5. Buat titik akhir
Skrip ini membuat titik akhir yang disebut AG1_endpoint
yang mendengarkan pada port 5022
TCP . Jalankan skrip T-SQL berikut di SSMS terhadap SQLNODE1
dalam mode SQLCMD.
/**********************************************
Execute on SQLNODE1 in SQLCMD mode
**********************************************/
-- Create endpoint on the server instance that hosts the primary replica:
IF NOT EXISTS (SELECT * FROM sys.database_mirroring_endpoints)
BEGIN
CREATE ENDPOINT AG1_endpoint AUTHORIZATION [sa]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING(ROLE = ALL);
END
GO
-----------------------------------------------------------------------------
:connect SQLNODE2
IF NOT EXISTS (SELECT *FROM sys.database_mirroring_endpoints)
BEGIN
CREATE ENDPOINT AG1_endpoint AUTHORIZATION [sa]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING(ROLE = ALL);
END
GO
6. Siapkan database untuk grup ketersediaan
Skrip mencadangkan AG1
SQLNODE1
dan memulihkannya ke SQLNODE2
. Jalankan skrip T-SQL berikut di SSMS terhadap SQLNODE1
dalam mode SQLCMD.
/*******************************************************************
Execute script in its entirety on SQLNODE1 in SQLCMD mode
*******************************************************************/
-- Backup database
BACKUP DATABASE AG1 TO DISK = N'\\sqlnode1\sqlbackups\AG1.bak'
WITH FORMAT, STATS = 10;
-- Backup transaction log
BACKUP LOG AG1 TO DISK = N'\\sqlnode1\sqlbackups\AG1_Log.bak'
WITH FORMAT, STATS = 10;
GO
-- Restore database and logs on secondary WITH NORECOVERY
:connect SQLNODE2
USE [master];
GO
RESTORE DATABASE AG1
FROM DISK = N'\\sqlnode1\sqlbackups\AG1.bak'
WITH NORECOVERY, STATS = 10;
RESTORE LOG AG1
FROM DISK = N'\\sqlnode1\sqlbackups\AG1_Log.bak'
WITH NORECOVERY, STATS = 10;
GO
7. Membuat grup ketersediaan
Grup ketersediaan AlwaysOn harus dibuat dengan CREATE AVAILABILITY GROUP
perintah dan WITH DTC_SUPPORT = PER_DB
klausa. Saat ini Anda tidak dapat mengubah AG yang ada. Wizard Grup Ketersediaan Baru tidak memungkinkan Anda mengaktifkan dukungan DTC untuk AG baru. Skrip berikut membuat AG baru dan bergabung dengan sekunder. Jalankan skrip T-SQL berikut di SSMS terhadap SQLNODE1
dalam mode SQLCMD.
/*******************************************************************
Execute the script in its entirety on SQLNODE1 in SQLCMD mode
*******************************************************************/
-- Create availability group on SQLNODE1
USE master;
GO
CREATE AVAILABILITY GROUP DTCAG1
WITH (DTC_SUPPORT = PER_DB)
FOR DATABASE AG1 REPLICA ON
'SQLNODE1' WITH (
ENDPOINT_URL = 'TCP://SQLNODE1.contoso.lab:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL
),
'SQLNODE2' WITH (
ENDPOINT_URL = 'TCP://SQLNODE2.contoso.lab:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL
);
GO
-- SQLNODE2
-- Join a secondary replica to the availability group
:connect SQLNODE2
ALTER AVAILABILITY GROUP DTCag1 JOIN;
-- Join the database to the availability group
ALTER DATABASE AG1
SET HADR AVAILABILITY GROUP = DTCAG1;
GO
Dimulai dengan SQL Server 2016 (13.x) Paket Layanan 2, Anda dapat mengubah AG untuk transaksi terdistribusi. Untuk versi SQL Server 2016 (13.x) sebelum Paket Layanan 2, Anda tidak dapat mengaktifkan DTC pada grup ketersediaan AlwaysOn yang ada. SQL Server menerima sintaks berikut untuk AG yang ada:
USE master;
GO
ALTER AVAILABILITY GROUP <availability_group>
SET (DTC_Support = Per_DB);
Namun, tidak ada perubahan konfigurasi yang dilakukan. Anda dapat mengonfirmasi konfigurasi dtc_support dengan kueri T-SQL berikut:
SELECT name, dtc_support FROM sys.availability_groups;
Satu-satunya cara untuk mengaktifkan dukungan DTC pada AG untuk versi sebelum versi SQL Server 2016 (13.x) sebelum Paket Layanan 2, adalah dengan membuat AG menggunakan Transact-SQL.
8. Siapkan sumber daya kluster
Skrip ini menyiapkan sumber daya dependen DTC: Disk dan IP. Penyimpanan bersama ditambahkan ke Kluster Windows. Sumber daya jaringan dibuat, lalu DTC dibuat dan dibuat sebagai sumber daya ke AG. Jalankan skrip PowerShell berikut ini di SQLNODE1
. Skrip ini didasarkan pada sampel yang terletak di Cara Mengonfigurasi DTC dengan Benar untuk Instans Terkluster SQL Server (Direvisi).
# Create a clustered Microsoft Distributed Transaction Coordinator properly in the resource group with SQL Server
<#----------------------------------- Begin User Input -----------------------------------#>
$AGgrp = "DTCag1"; # Name of the WSFC resource group that will contain the DTC resource
$WSFC = (Get-Cluster).Name; # Windows Failover Cluster name
$DTCnetwk = "Cluster Network 1" # WSFC Network to use for the DTC IP address
$ClusterAvailableDisk = "Cluster Disk 3"; # Designated disk that can support failover clustering and is visible to all nodes but not yet part of the set of clustered disks
$DTCdisk = "DTCDisk1"; # Name of the disk to be used with DTC
$DTCipresnm = "DTCIP1"; # WSFC Friendly Name of the DTC's IP resource
$DTCipaddr = "192.168.2.54"; # IP address of the DTC resource
$DTCsubnet = "255.255.255.0"; # Subnet for the DTC IP address
$DTCnetnm = "DTCNet1"; # WSFC Friendly Name of the Network Name resource
$DTCresnm = "DTC1"; # Name of the WSFC DTC Network Name resource; Name must be unique in AD
<#------------------------------------ End User Input ------------------------------------#>
# Make a new disk available for use in a failover cluster.
Get-ClusterAvailableDisk | Where-Object { $_.Name -eq $ClusterAvailableDisk } | Add-ClusterDisk;
# Rename disk
$resource = Get-ClusterResource $ClusterAvailableDisk; $resource.Name = $DTCdisk;
# Create the IP resource
Add-ClusterResource -Name $DTCipresnm -ResourceType "IP Address" -Group $AGgrp;
# Set the network to use, IP address, and subnet
# All three have to be configured at the same time
$DTCIPres = Get-ClusterResource $DTCipresnm;
$ntwk = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $DTCipres, Network, $DTCnetwk;
$ipaddr = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $DTCipres, Address, $DTCipaddr;
$subnet = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $DTCipres, SubnetMask, $dtcsubnet;
$setdtcipparams = $ntwk, $ipaddr, $subnet;
$setdtcipparams | Set-ClusterParameter;
# Create the Network Name resource
Add-ClusterResource $DTCnetnm -ResourceType "Network Name" -Group $AGgrp;
# Set the value for the Network Name resource
Get-ClusterResource $DTCnetnm | Set-ClusterParameter DnsName $DTCresnm;
# Add the IP address as a depenency of the Network Name resource
Add-ClusterResourceDependency $DTCnetnm $DTCipresnm;
# Create the Distributed Transaction Coordinator resource
Add-ClusterResource $DTCresnm -ResourceType "Distributed Transaction Coordinator" -Group $AGgrp;
# Add the Network Name as a dependency of the DTC resource
Add-ClusterResourceDependency $DTCresnm $DTCnetnm;
# Move the disk into the resource group with SQL Server
Move-ClusterResource -Name $DTCdisk -Group $AGgrp;
# Add the disk as a dependency of the DTC resource
Add-ClusterResourceDependency $DTCresnm $DTCdisk;
# Bring the IP resource online
Start-ClusterResource $DTCipresnm;
# Bring the Network Name resource online
Start-ClusterResource $DTCnetnm;
# Bring the DTC resource online
Start-ClusterResource $DTCresnm;
9. Aktifkan akses DTC Jaringan
Skrip berikut memungkinkan Akses DTC Jaringan untuk layanan DTC berkluster untuk memungkinkan komputer jarak jauh mendaftarkan transaksi terdistribusi melalui jaringan. Jalankan skrip PowerShell berikut ini di SQLNODE1
.
# Enable Network DTC access for the clustered DTC service
<#
Script:
1) is re-runnable
2) will work on any node in the cluster, and
3) will execute against every node in the cluster
#>
# Enter the Name of DTC resource
$DtcName = "DTC1";
<# ------- End of User Input ------- #>
[bool]$restart = 0;
$node = (Get-ClusterResource -Name $DtcName).OwnerNode.Name;
$DtcSettings = Get-DtcNetworkSetting -DtcName $DtcName;
if ($DtcSettings.InboundTransactionsEnabled -eq $false) {
Set-DtcNetworkSetting -CimSession $node -DtcName $DtcName -AuthenticationLevel "Mutual" -InboundTransactionsEnabled $true -Confirm:$false;
$restart = 1;
}
if ($DtcSettings.OutboundTransactionsEnabled -eq $false) {
Set-DtcNetworkSetting -CimSession $node -DtcName $DtcName -AuthenticationLevel "Mutual" -OutboundTransactionsEnabled $true -Confirm:$false;
$restart = 1;
}
if ($restart -eq 1) {
Stop-Dtc -CimSession $node -DtcName $DTCname -Confirm:$false;
Start-Dtc -CimSession $node -DtcName $DTCname;
}
10. Nonaktifkan dan hentikan layanan DTC lokal pada setiap simpul
Nonaktifkan DTC lokal pada kedua simpul untuk menjamin bahwa transaksi terdistribusi menggunakan sumber daya DTC berkluster. Skrip berikut menonaktifkan dan menghentikan layanan DTC lokal pada setiap simpul. Jalankan skrip PowerShell berikut ini di SQLNODE1
.
# Disable local DTC service
<#
Script:
1) is re-runnable
2) will work on any node in the cluster, and
3) will execute against every node in the cluster
#>
$DTCname = 'Local';
$nodes = (Get-ClusterNode).Name;
foreach ($node in $nodes) {
$service = Get-WmiObject -class Win32_Service -computername $node -Filter "Name='MSDTC'";
if ($service.StartMode -ne 'Disabled') {
$service.ChangeStartMode('Disabled');
}
if ($service.State -ne 'Stopped') {
$service.StopService();
}
}
11. Siklus layanan SQL Server untuk setiap instans
Dengan layanan DTC terkluster yang dikonfigurasi sepenuhnya, Anda perlu menghentikan dan memulai ulang setiap instans SQL Server di AG untuk memastikan SQL Server terdaftar untuk menggunakan layanan DTC ini.
Pertama kali layanan SQL Server memerlukan transaksi terdistribusi. Ini mendaftar dengan layanan DTC. Layanan SQL Server terus menggunakan layanan DTC tersebut hingga dimulai ulang. Jika layanan DTC terkluster tersedia, SQL Server mendaftar dengan layanan DTC berkluster. Jika layanan DTC terkluster tidak tersedia, SQL Server mendaftar dengan layanan DTC lokal. Untuk memverifikasi bahwa SQL Server mendaftar dengan layanan DTC terkluster, hentikan dan mulai ulang setiap instans SQL Server.
Ikuti langkah-langkah yang terkandung dalam skrip T-SQL berikut:
/*
Gracefully cycle the SQL Server service and failover the availability group
a. On SQLNODE2, cycle the SQL Server service from SQL Server Configuration Manager
b. On SQLNODE2 failover, the availability group to SQLNODE2
Execute the T-SQL script below on SQLNODE2 (Use Results to Text)
c. On SQLNODE1, cycle the SQL Server service from SQL Server Configuration Manager
d. On SQLNODE1, failover the availability group to SQLNODE1 once the databases are back in sync.
Execute the T-SQL script below on SQLNODE1 (Use Results to Text)
*/
SET NOCOUNT ON;
-- Ensure replica is secondary
IF (
SELECT rs.is_primary_replica
FROM sys.availability_groups ag
INNER JOIN sys.dm_hadr_database_replica_states rs
ON ag.group_id = rs.group_id
WHERE ag.name = N'DTCag1' AND rs.is_local = 1
) = 0
BEGIN
-- Wait for SYNCHRONIZED state
DECLARE @ctr TINYINT = 0;
DECLARE @msg VARCHAR(128);
WHILE (
SELECT synchronization_state
FROM sys.availability_groups ag
INNER JOIN sys.dm_hadr_database_replica_states rs
ON ag.group_id = rs.group_id
WHERE ag.name = N'DTCag1'
AND rs.is_primary_replica = 0
AND rs.is_local = 1
) <> 2
BEGIN
WAITFOR DELAY '00:00:01';
SET @ctr += 1;
SET @msg = 'Waiting for databases to become synchronized. Duration in seconds: ' + cast(@ctr AS VARCHAR(3));
RAISERROR (@msg, 0, 1) WITH NOWAIT;
END;
ALTER AVAILABILITY GROUP DTCAG1 FAILOVER;
SELECT 'Failover complete' AS [Sucess];
END;
ELSE
BEGIN
SELECT 'This instance is the primary replica. Connect to the secondary replica and try again.' AS [Error];
END;
12. Konfigurasi pengujian
Pengujian ini menggunakan server tertaut dari SQLNODE1
ke SQLNODE2
untuk membuat transaksi terdistribusi. Pastikan replika utama AG aktif SQLNODE1
. Untuk menguji konfigurasi, Anda akan:
- Buat server yang ditautkan
- Menjalankan transaksi terdistribusi
Buat server yang ditautkan
Skrip berikut membuat dua server tertaut di SQLNODE1
. Jalankan skrip T-SQL berikut di SSMS terhadap SQLNODE1
.
-- SQLNODE1
IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = N'SQLNODE1')
BEGIN
EXEC master.dbo.sp_addlinkedserver @server = N'SQLNODE1';
END
IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = N'SQLNODE2')
BEGIN
EXEC master.dbo.sp_addlinkedserver @server = N'SQLNODE2';
END
Menjalankan transaksi terdistribusi
Skrip ini pertama kali mengembalikan statistik transaksi DTC saat ini. Kemudian skrip menjalankan transaksi terdistribusi yang menggunakan database pada SQLNODE1
dan SQLNODE2
. Kemudian skrip mengembalikan statis transaksi DTC, yang sekarang harus meningkatkan jumlah. Sambungkan SQLNODE1
dan jalankan skrip T-SQL berikut secara fisik di SQLCMS dalam SQLNODE1
mode SQLCMD.
/*******************************************************************
Execute the script in its entirety on SQLNODE1 in SQLCMD mode
Must be physically connected to SQLNODE1
*******************************************************************/
USE AG1;
GO
SET NOCOUNT ON;
-- Get Baseline
!! Powershell; $DtcNameC = Get-DtcClusterDefault; Get-DtcTransactionsStatistics -DtcName $DtcNameC;
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO SQLNODE1.[AG1].[dbo].[Names] VALUES ('TestValue1', GETDATE());
INSERT INTO SQLNODE2.[dtcDemoAG1].[dbo].[Names] VALUES ('TestValue2', GETDATE());
COMMIT TRAN
GO
-- Review DTC Transaction Statistics
!! Powershell; $DtcNameC = Get-DtcClusterDefault; Get-DtcTransactionsStatistics -DtcName $DtcNameC;
Penting
Pernyataan USE AG1
harus dijalankan untuk memastikan konteks database diatur ke AG1
. Jika tidak, Anda akan menerima pesan kesalahan berikut: "Konteks transaksi yang digunakan oleh sesi lain."
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk