적용 대상:SQL Server
트랜잭션 승격 은 필요에 따라 완전히 배포 가능한 트랜잭션으로 자동으로 승격될 수 있는 간단한 로컬 트랜잭션을 설명합니다. 서버의 데이터베이스 트랜잭션 내에서 관리되는 저장 프로시저를 호출하면 CLR(공용 언어 런타임) 코드가 로컬 트랜잭션의 컨텍스트에서 실행됩니다. 데이터베이스 트랜잭션 내에서 원격 서버에 대한 연결을 열면 원격 서버에 대한 연결이 분산 트랜잭션에
따라서 트랜잭션 승격은 필요할 때까지 분산 트랜잭션 생성을 연기하여 분산 트랜잭션의 오버헤드를 최소화합니다. 트랜잭션 승격은 Enlist
키워드를 사용하여 사용하도록 설정되었으며 개발자의 개입이 필요하지 않은 경우 자동으로 수행됩니다. .NET Framework Data Provider for SQL Server는 .NET Framework System.Data.SqlClient
네임스페이스의 클래스를 통해 처리되는 트랜잭션 승격을 지원합니다.
Enlist 키워드
SqlConnection
개체의 ConnectionString
속성은 System.Data.SqlClient
트랜잭션 컨텍스트를 검색하고 분산 트랜잭션에 자동으로 연결을 등록하는지 여부를 나타내는 Enlist
키워드를 지원합니다. 이 키워드를 true(기본값)로 설정하면 연결이 여는 스레드의 현재 트랜잭션 컨텍스트에 자동으로 등록됩니다. 이 키워드를 false로 설정하면 SqlClient
연결이 분산 트랜잭션과 상호 작용하지 않습니다. 연결 문자열에 Enlist
지정되지 않은 경우 연결이 열릴 때 검색된 경우 분산 트랜잭션에 연결이 자동으로 등록됩니다.
분산 트랜잭션
분산 트랜잭션은 일반적으로 상당한 시스템 리소스를 사용합니다. MS DTC(Microsoft Distributed Transaction Coordinator)는 이러한 트랜잭션을 관리하고 이러한 트랜잭션에서 액세스하는 모든 리소스 관리자를 통합합니다. 반면 트랜잭션 승격은 작업을 간단한 SQL Server 트랜잭션에 효과적으로 위임하는 특별한 형태의 System.Transactions
트랜잭션입니다.
System.Transactions
, System.Data.SqlClient
및 SQL Server는 트랜잭션 처리와 관련된 작업을 조정하여 필요에 따라 전체 분산 트랜잭션으로 승격합니다.
트랜잭션 승격을 사용하면 활성 TransactionScope
트랜잭션으로 연결이 열리고 다른 연결이 열리지 않으면 트랜잭션이 전체 분산 트랜잭션의 추가 오버헤드를 발생시키지 않고 간단한 트랜잭션으로 커밋된다는 이점이 있습니다.
관련 콘텐츠
- CLR 통합 및 트랜잭션