분산 트랜잭션 만들기

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

Important

SQL Server Native Client(약칭 SNAC)는 SQL Server 2022(16.x) 및 SSMS(SQL Server Management Studio) 19에서 제거되었습니다. SQL Server Native Client(SQLNCLI 또는 SQLNCLI11) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다. 앞으로 새 SQL Server용 Microsoft OLE DB 드라이버(MSOLEDBSQL) 또는 최신 Microsoft ODBC Driver for SQL Server로 전환합니다. SQL Server 데이터베이스 엔진(버전 2012~2019)의 구성 요소로 제공되는 SQLNCLI의 경우 이 지원 수명 주기 예외를 참조하세요.

다양한 방법으로 다양한 Microsoft SQL 시스템에 대해 분산 트랜잭션을 만들 수 있습니다.

ODBC 드라이버가 SQL Server 온-프레미스용 MSDTC를 호출합니다.

MSDTC(Microsoft Distributed Transaction Coordinator)를 사용하면 애플리케이션이 둘 이상의 SQL Server 인스턴스에서 트랜잭션을 확장하거나 배포할 수 있습니다. 분산 트랜잭션은 두 인스턴스가 별도의 컴퓨터에서 호스트되는 경우에도 작동합니다.

MSDTC는 Microsoft SQL Server 온-프레미스용으로 설치되지만 Microsoft의 Azure SQL Database 클라우드 서비스에는 사용할 수 없습니다.

MSDTC는 C++ 프로그램이 분산 트랜잭션을 관리하는 경우 ODBC(Open Database Connectivity)에 대한 SQL Server Native Client 드라이버에 의해 호출됩니다. Native Client ODBC 드라이버에는 DTP(Open Group Distributed Transaction Processing) XA 표준을 준수하는 트랜잭션 관리자가 있습니다. 이 규정 준수는 MSDTC에서 필요합니다. 일반적으로 모든 트랜잭션 관리 명령은 이 Native Client ODBC 드라이버를 통해 전송됩니다. 순서는 다음과 같습니다.

  1. C++ Native Client ODBC 애플리케이션은 자동 커밋 모드가 해제된 상태에서 SQLSetConnectAttr를 호출하여 트랜잭션을 시작합니다.

  2. 애플리케이션은 컴퓨터 A의 SQL Server X에서 일부 데이터를 업데이트합니다.

  3. 애플리케이션은 컴퓨터 B의 SQL Server Y에서 일부 데이터를 업데이트합니다.

    • SQL Server Y의 업데이트가 실패하면 두 SQL Server 인스턴스에서 커밋되지 않은 모든 업데이트가 롤백됩니다.
  4. 마지막으로 애플리케이션은 SQL_COMMIT 또는 SQL_ROLLBACK 옵션을 사용하여 SQLEndTran(1)을 호출하여 트랜잭션을 종료합니다.

(1) MSDTC는 ODBC 없이 호출할 수 있습니다. 이 경우 MSDTC는 트랜잭션 관리자가 되고 애플리케이션은 더 이상 SQLEndTran을 사용하지 않습니다.

분산 트랜잭션 하나만

C++ Native Client ODBC 애플리케이션이 분산 트랜잭션에 참여한다고 가정합니다. 다음으로 애플리케이션은 두 번째 분산 트랜잭션에 참여합니다. 이 경우 SQL Server Native Client ODBC 드라이버는 원래 분산 트랜잭션을 떠나 새 분산 트랜잭션에 참여합니다.

자세한 내용은 DTC 프로그래머 참조를 참조하세요.

클라우드의 SQL Database에 대한 C# 대안

MSDTC는 Azure SQL Database 또는 Azure Synapse Analytics에 대해 지원되지 않습니다.

그러나 C# 프로그램에서 .NET 클래스 System.Transactions.TransactionScope를 사용하도록 하여 SQL Database에 대한 분산 트랜잭션을 만들 수 있습니다.

기타 프로그래밍 언어

다음 다른 프로그래밍 언어는 SQL Database 서비스를 사용하여 분산 트랜잭션을 지원하지 않을 수 있습니다.

  • ODBC 드라이버를 사용하는 네이티브 C++
  • Transact-SQL을 사용하는 연결된 서버
  • JDBC 드라이버

참고 항목

트랜잭션 수행(ODBC)