RDS for SQL Server에서 Microsoft Distributed Transaction Coordinator 지원
분산 트랜잭션은 두 개 이상의 네트워크 호스트가 관련된 데이터베이스 트랜잭션입니다. RDS for SQL Server는 호스트 간의 분산 트랜잭션을 지원하며 여기서 단일 호스트는 다음 중 하나일 수 있습니다.
-
RDS for SQL Server DB 인스턴스
-
온프레미스 SQL Server 호스트
-
SQL Server가 설치된 Amazon EC2 호스트
-
분산 트랜잭션을 지원하는 데이터베이스 엔진이 있는 기타 EC2 호스트 또는 RDS DB 인스턴스
RDS에서는 SQL Server 2012(버전 11.00.5058.0.v1 이상)부터 모든 에디션의 RDS for SQL Server에서 분산 트랜잭션을 지원합니다. Microsoft Distributed Transaction Coordinator(MSDTC)를 사용하여 지원이 제공됩니다. MSDTC에 대한 자세한 내용은 Microsoft 설명서에서 Distributed Transaction Coordinator
목차
제한 사항
RDS for SQL Server에서 MSDTC를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
-
SQL Server 데이터베이스 미러링을 사용하는 인스턴스에서는 MSDTC가 지원되지 않습니다. 자세한 내용은 트랜잭션 - 가용성 그룹 및 데이터베이스 미러링
을 참조하십시오. -
in-doubt xact resolution
파라미터를 1 또는 2로 설정해야 합니다. 자세한 내용은 MSDTC에 대한 파라미터 수정 단원을 참조하세요. -
MSDTC에서는 분산 트랜잭션에 참여하는 모든 호스트를 호스트 이름을 사용하여 확인할 수 있어야 합니다. RDS는 도메인에 가입된 인스턴스에 대해 이 기능을 자동으로 유지 관리합니다. 그러나 독립 실행형 인스턴스의 경우 DNS 서버를 수동으로 구성해야 합니다.
-
Java Database Connectivity(JDBC) XA 트랜잭션은 SQL Server 2017 버전 14.00.3223.3 이상 및 SQL Server 2019에서 지원됩니다.
-
RDS 인스턴스의 클라이언트 동적 연결 라이브러리(DLL)를 사용하는 분산 트랜잭션은 지원되지 않습니다.
-
사용자 지정 XA 동적 연결 라이브러리 사용은 지원되지 않습니다.
트랜잭션 사용
분산 트랜잭션 사용
Amazon RDS for SQL Server에서는 온프레미스에서 실행되는 분산 트랜잭션과 동일한 방식으로 분산 트랜잭션을 실행합니다.
-
.NET Framework
System.Transactions
승격 가능한 트랜잭션 사용. 이를 통해 필요할 때까지 생성을 연기함으로써 분산 트랜잭션을 최적화합니다.이 경우 승격이 자동으로 수행되므로 사용자가 개입할 필요가 없습니다. 트랜잭션 내에 하나의 리소스 관리자만 있는 경우 승격이 수행되지 않습니다. 암시적 트랜잭션 범위에 대한 자세한 내용은 Microsoft 설명서의 트랜잭션 범위를 사용하여 암시적 트랜잭션 구현
을 참조하십시오. 승격 가능 트랜잭션은 다음 .NET 구현에서 지원됩니다.
-
ADO.NET 2.0부터
System.Data.SqlClient
는 SQL Server를 사용하여 승격 가능한 트랜잭션을 지원합니다. 자세한 내용은 Microsoft 설명서에서 SQL Server와의 System.Transactions 통합을 참조하십시오. -
ODP.NET은
System.Transactions
를 지원합니다. Oracle Database 11g 릴리스 1(버전 11.1) 이상에서TransactionsScope
범위에서 열린 첫 번째 연결에 대해 로컬 트랜잭션이 생성됩니다. 두 번째 연결이 열리면 이 트랜잭션이 분산 트랜잭션으로 자동 승격됩니다. ODP.NET에서 분산 트랜잭션 지원에 대한 자세한 내용은 Microsoft 설명서의 Microsoft Distributed Transaction Coordinator 통합을 참조하십시오.
-
-
BEGIN DISTRIBUTED TRANSACTION
문 사용. 자세한 내용은 Microsoft 설명서의 BEGIN DISTRIBUTED TRANSACTION(Transact-SQL)을 참조하세요.
XA 트랜잭션 사용
RDS for SQL Server 2017 버전 14.00.3223.3부터 JDBC를 사용하여 분산 트랜잭션을 제어할 수 있습니다. Enable XA
옵션 설정을 true
옵션의 MSDTC
(으)로 설정하면 RDS가 자동으로 JDBC 트랜잭션을 활성화하고 SqlJDBCXAUser
역할을 guest
사용자에게 부여합니다. 이를 통해 JDBC를 통해 분산 트랜잭션을 실행할 수 있습니다. 코드 예제를 포함한 자세한 정보는 Microsoft 설명서의 XA 트랜잭션 이해
트랜잭션 추적 사용
RDS는 문제 해결을 위해 MSDTC 트랜잭션 추적을 제어하고 RDS DB 인스턴스에서 해당 추적을 다운로드할 수 있도록 지원합니다. 다음 RDS 저장 프로시저를 실행하여 트랜잭션 추적 세션을 제어할 수 있습니다.
exec msdb.dbo.rds_msdtc_transaction_tracing '
trace_action
', [@traceall='0|1
'], [@traceaborted='0|1
'], [@tracelong='0|1
'];
다음 파라미터는 필수입니다.
-
trace_action
– 추적 작업입니다.START
,STOP
또는STATUS
일 수 있습니다.
다음 파라미터는 선택적입니다.
-
@traceall
– 모든 분산 트랜잭션을 추적하려면 1로 설정합니다. 기본값은 0입니다. -
@traceaborted
– 취소된 분산 트랜잭션을 추적하려면 1로 설정합니다. 기본값은 0입니다. -
@tracelong
– 장기 실행 분산 트랜잭션을 추적하려면 1로 설정합니다. 기본값은 0입니다.
예 START 추적 작업
새 트랜잭션 추적 세션을 시작하려면 다음 예에 나온 문을 실행합니다.
exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='
0
', @traceaborted='1
', @tracelong='1
';
참고
한 번에 하나의 트랜잭션 추적 세션만 활성화할 수 있습니다. 추적 세션이 활성 상태일 때 새 추적 세션 START
명령이 실행되면 오류가 반환되고 활성 추적 세션이 변경되지 않습니다.
예 STOP 추적 작업
트랜잭션 추적 세션을 중지하려면 다음 문을 실행합니다.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
이 문은 활성 트랜잭션 추적 세션을 중지하고 트랜잭션 추적 데이터를 RDS DB 인스턴스의 로그 디렉터리에 저장합니다. 출력의 첫 번째 행에는 전체 결과가 포함되며 다음 줄은 작업의 세부 정보를 나타냅니다.
다음은 성공적인 추적 세션 중지의 예입니다.
OK: Trace session has been successfully stopped. Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats, 8 found. Searching for TMF files on path: (null) Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log: OS version 10.0.14393 (Currently running on 6.2.9200) Start Time <timestamp> End Time <timestamp> Timezone is @tzres.dll,-932 (Bias is 0mins) BufferSize 16384 B Maximum File Size 10 MB Buffers Written Not set (Logger may not have been stopped). Logger Mode Settings (11000002) ( circular paged ProcessorCount 1 Processing completed Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3 Event traces dumped to d:\rdsdbdata\Log\msdtc_<
timestamp
>.log
세부 정보를 사용하여 생성된 로그 파일의 이름을 쿼리할 수 있습니다. RDS DB 인스턴스에서 로그 파일을 다운로드하는 방법에 대한 자세한 내용은 Amazon RDS 로그 파일 모니터링 단원을 참조하십시오.
추적 세션 로그는 35일 동안 인스턴스에 남아 있습니다. 이전 추적 세션 로그는 자동으로 삭제됩니다.
예 STATUS 추적 작업
트랜잭션 추적 세션의 상태를 추적하려면 다음 문을 실행합니다.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
이 문은 결과 집합의 별도 행으로 다음을 출력합니다.
OK SessionStatus: <
Started|Stopped
> TraceAll: <True|False
> TraceAborted: <True|False
> TraceLongLived: <True|False
>
첫 번째 줄은 작업의 전체 결과(OK
또는 ERROR
)와 함께 세부 정보(해당되는 경우)를 나타냅니다. 그 다음 줄에는 추적 세션 상태에 대한 세부 정보가 표시됩니다.
-
SessionStatus
의 값은 다음 중 하나일 수 있습니다.-
Started
- 추적 세션이 실행 중인 경우. -
Stopped
- 실행 중인 추적 세션이 없는 경우.
-
-
추적 세션 플래그는
True
명령에서 설정된 방법에 따라False
또는START
일 수 있습니다.