Azure SQL Managed Instance용 DTC(Distributed Transaction Coordinator)
적용 대상: Azure SQL Managed Instance
이 문서에서는 Azure SQL Managed Instance용 DTC(Distributed Transaction Coordinator)의 개요를 제공합니다. DTC를 사용하여 관리되는 인스턴스, SQL Server 인스턴스, 기타 RDBMS(관계형 데이터베이스 관리 시스템), 사용자 지정 애플리케이션 및 Azure에 네트워크 연결을 설정할 수 있는 모든 환경에서 호스트되는 기타 트랜잭션 참여자를 포함하여 혼합 환경에서 분산 트랜잭션을 실행할 수 있습니다.
시나리오
Azure SQL Managed Instance용 DTC를 사용하도록 설정하여 Azure에 대한 네트워크 연결을 설정할 수 있는 여러 환경에서 분산 트랜잭션을 실행할 수 있습니다. SQL Managed Instance용 DTC는 관리됩니다. 즉, Azure는 로깅, 스토리지, DTC 가용성 및 네트워킹과 같은 관리 및 유지 관리를 담당합니다. 관리되는 측면 외에도 SQL Managed Instance용 DTC는 SQL Server에 대한 기존 분산 트랜잭션을 지원하는 동일한 DTC Windows 서비스입니다.
SQL Managed Instance용 DTC는 XA, .NET, T-SQL, COM+, ODBC 및 JDBC를 비롯한 다양한 기술 및 시나리오를 잠금 해제합니다.
분산 트랜잭션을 실행하려면 다음 작업을 완료합니다.
- DTC를 구성합니다.
- 참가자 간의 네트워크 연결을 활성화합니다.
- DNS 설정을 구성합니다.
참고
관리되는 인스턴스에서만 호스트되는 데이터베이스 간의 T-SQL 또는 .NET 분산 트랜잭션의 경우 분산 트랜잭션에 대한 네이티브 지원을 사용하는 것이 좋습니다.
요구 사항
DTC 설정을 변경하려면 Microsoft.Sql/managedInstances/dtc
리소스에 대한 쓰기 권한이 있어야 합니다. DTC 설정을 보려면 Microsoft.Sql/managedInstances/dtc
리소스에 대한 읽기 권한이 있어야 합니다.
DTC 구성
Azure Portal, PowerShell 및 CLI를 사용하여 DTC를 구성할 수 있습니다.
Azure Portal을 사용하여 DTC를 구성하려면 다음을 수행합니다.
Azure Portal에서 관리되는 인스턴스로 이동합니다.
설정 아래의 왼쪽 메뉴에서 Distributed Transaction Coordinator를 선택합니다.
기본 사항 탭에서 Distributed Transaction Coordinator를 사용으로 설정합니다.
보안 탭에서 인바운드 또는 아웃바운드 트랜잭션을 허용하고 XA 또는 SNA LU를 사용하도록 설정합니다.
네트워킹 탭에서 DTC DNS를 지정하고 외부 DNS 및 네트워킹을 구성하는 정보를 가져옵니다.
네트워크 연결
DTC를 사용하려면 모든 트랜잭션 참가자가 Azure에 대한 네트워크 연결이 있어야 합니다. 관리되는 인스턴스는 항상 Azure의 전용 가상 네트워크에 배포되므로 외부 환경을 관리되는 인스턴스의 가상 네트워크에 연결해야 합니다. 이 컨텍스트에서 외부는 관리되는 인스턴스가 아닌 모든 개체 또는 프로세스를 나타냅니다. 외부 리소스가 Azure에서 가상 네트워크도 사용하는 경우 가상 네트워크 피어링을 사용할 수 있습니다. 그렇지 않으면 지점 및 사이트 간 VPN, Azure ExpressRoute 또는 비즈니스 요구 사항을 충족하는 다른 네트워크 연결 기술과 같은 기본 설정하는 방법을 사용하여 연결을 설정합니다.
포트 135는 인바운드 및 아웃바운드 통신을 모두 허용해야 합니다. Managed Instance에 대한 가상 네트워크 네트워크 보안 그룹과 외부 환경에 설정된 방화벽 모두에서 범위 14000~15000의 경우 인바운드 허용, 49152~65535의 경우 아웃바운드 통신을 허용해야 합니다.
DNS 설정
DTC는 상호 통신을 위해 트랜잭션 참가자의 NetBIOS 이름을 사용합니다. NetBIOS 프로토콜은 Azure 네트워킹에서 지원되지 않으며 NetBIOS 이름은 혼합 환경에서 확인할 수 없으므로 관리되는 인스턴스의 DTC는 호스트 이름을 확인하기 위해 DNS 이름 서버를 사용합니다. 관리되는 인스턴스 DTC 호스트는 Azure DNS 서버에 자동으로 등록됩니다. DNS 서버에 외부 DTC 호스트를 등록해야 합니다. 관리되는 인스턴스 및 외부 환경도 DNS 접미사를 교환해야 합니다.
다음 다이어그램은 혼합 환경의 이름 확인을 보여 줍니다.
참고
XA 트랜잭션에만 DTC를 사용하려는 경우 DNS 설정을 구성할 필요가 없습니다.
DNS 접미사를 교환하려면 다음을 수행합니다.
Azure Portal에서 관리되는 인스턴스로 이동합니다.
설정 아래의 왼쪽 메뉴에서 Distributed Transaction Coordinator를 선택합니다. 네트워킹 탭을 선택합니다.
DNS 구성에서 새 외부 DNS 접미사를 선택합니다.
dnszone1.com
과 같은 외부 환경에 대한 DNS 접미사를 입력합니다.DTC 호스트 DNS 접미사의 값을 복사합니다. 그런 다음, 외부 환경에서 PowerShell 명령
Set-DnsClientGlobalSetting -SuffixSearchList $list
를 사용하여 DTC 호스트 DNS 접미사를 설정합니다. 예를 들어 접미사가abc1111111.database.windows.net
인 경우$list
매개 변수를 정의하여 기존 DNS 설정을 가져옵니다. 그런 다음, 다음 예제와 같이 접미사를 추가합니다.$list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net" Set-DnsClientGlobalSetting -SuffixSearchList $list
네트워크 연결 테스트
네트워킹 및 DNS를 구성한 후 관리되는 인스턴스의 DTC 엔드포인트와 외부 DTC 호스트 간에 TNC(Test-NetConnection)를 실행합니다.
연결을 테스트하려면 먼저 사용자가 구성할 수 있는 값을 업데이트합니다. 그런 다음, 외부 환경에서 다음 PowerShell 스크립트를 사용하여 DTC 호스트 관리형 인스턴스의 FQDN(정규화된 도메인 이름)을 식별합니다. 예를 들면 다음과 같습니다.
# ===============================================================
# 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
# ===============================================================
JSON 출력은 다음 FQDN 예제와 유사합니다.
chn000000000000.zcn111111111.database.windows.net
여기서
chn000000000000
은 관리되는 인스턴스 DTC 호스트의 NetBIOS 이름입니다.zcn111111111.database.windows.net
은 DNS 접미사입니다.
다음으로, 포트 135에서 관리되는 인스턴스 DTC 호스트의 FQDN 및 NetBIOS 이름 모두에 TNC를 실행합니다. 다음 예제에서 첫 번째 항목은 네트워크 연결을 확인합니다. 두 번째 항목은 DNS 설정이 올바른지 확인합니다.
tnc chn000000000000.zcn111111111.database.windows.net -Port 135
tnc chn000000000000 -Port 135
연결 및 DNS 접미사가 올바르게 구성된 경우 출력 TcpTestSucceeded: True가 나타납니다.
관리되는 인스턴스 쪽에서 외부 호스트에 대한 연결을 테스트하기 위해 TNC PowerShell 명령을 실행하는 SQL 에이전트 작업을 만듭니다.
예를 들어 외부 호스트의 FQDN이 host10.dnszone1.com
인 경우 SQL 에이전트 작업을 통해 다음 테스트를 실행합니다.
tnc host10.dnszone1.com -Port 135
tnc host10 -Port 135
제한 사항
SQL Managed Instance에서 DTC를 사용하는 경우 다음과 같은 제한 사항을 고려합니다.
- SQL Managed Instance와 타사 RDBMS 간의 분산 T-SQL 트랜잭션 실행은 지원되지 않습니다. SQL Managed Instance는 타사 RDBMS가 있는 연결된 서버를 지원하지 않습니다. 반대로 관리되는 인스턴스와 SQL Server 및 기타 SQL Server 기반 제품 간에 분산 T-SQL 트랜잭션을 실행할 수 있습니다.
- 외부 환경의 호스트 이름은 15자를 초과할 수 없습니다.
- Azure SQL Database에 대한 분산 트랜잭션은 DTC에서 지원되지 않습니다.
- 인증의 경우 DTC는 인증 없음 옵션만 지원합니다. 상호 인증 및 들어오는 호출자 인증 옵션을 사용할 수 없습니다. DTC는 사용자 데이터가 아닌 동기화 메시지만 교환하고 가상 네트워크와만 통신하기 때문에 이 제한은 보안 위험이 아닙니다.
트랜잭션 관리
분산 트랜잭션의 통계를 보려면 sys.dm_tran_distributed_transaction_stats를 참조하세요.
sp_reset_dtc_log 저장 프로시저로 DTC 로그를 재설정할 수 있습니다.
분산 트랜잭션은 sys.sp_manage_distributed_transaction 저장 프로시저로 관리할 수 있습니다.
다음 단계
네이티브 관리형 인스턴스 분산 트랜잭션 지원은 탄력적 트랜잭션을 참조하세요.