SQL Server DTC Transaction SPID = -2 반환

 

·         Version : SQL Server

 

SQL Server에서 Session ID (SPID) 값이-2  경우는 SQL Server에서 DTC 트랜잭션이 활성화 중이지만 트랜잭션에 사용중인 세션이 없음을 나타낸다간단하게 시나리오를 정리하면 아래와 같다.

1.       클라이언트가 DTC트랜잭션을 생성하고 소유한다.

2.       클라이언트는 SQL Server 연결하고 DTC 트랜잭션을 등록한다.

3.       Connection DTC 트랜잭션의 일부 작업을 수행한다.

4.       클라이언트 연결이 끊어진다 .(또는 NULL 등록)

 

현재 DTC 트랜잭션의 상태는 여전히 활성 상태이고 클라이언트가  DTC 트랜잭션을 커밋하지 않고 기본 연결을 유지한다. SQL Server 연결이 종료되었으므로 트랜잭션을 중단하거나 커밋할  없다클라이언트는 다른 자원 관리자(파일 시스템,다른 데이터베이스 서버 ) 등록   있으며 여전히 작업을 수행    있다. SQL Server 쿼리할  활성 DTC 트랜잭션 (UOW) 있지만  이상 트랜잭션과 연결된 연결이 없는 경우 세션ID(PSID) -2 반환된다.

 

아래 설명은 위의 시나리오에 따라DTC  트랜잭션 흐름의 작동방식을 단계별로 설명한다.

1.       클라이언트가 DTC 트랜잭션을 생성하고 소유한다.

클라이언트는 제공된 DTC 인터페이스  하나를 사용하여ITransaction 개체를 생성한다. ITransaction 생성하고 연결되면DTC 관리자는 ITrasanctionDispenser ->BeginTransaction 호출한다닷넷에서는 TransactionScope객체를 통해 이를 제공  있다.

 

 

2.       클리어언트가 SQL Server 연결하고 DTC 트랜잭션을 등록 한다.

클라이언트는 SQL Server 연결을통해  DTC 트랜잭션으로 등록/전파한다이를 수행하는 다양한 방법이 있지만  클라이언트는ODBC SqlDriverConnect, .NET Sqlconnection.Open 등을사용하여 SQL Server 대한 연결을 설정한다. SQL Server는클라이언트가 DTC 관리자() SQL Server 동기화를 수행하도록 지시한다.

 

ITransaction에서 클라이언트 드라이버는 ITransactionExport 인터페이스를 사용하여 트랜잭션 쿠키를 내보낸다쿠키는 트랜잭션 UOW  DTC 관리자 끝점에 대한 정보를 나타내는 이진 값으로 SQL Server 인스턴스에서 사용하는 DTC 관리자와 다를  있다쿠키는 SQL Server 보내진다. (해당 흐름에 대해서는 XeventDTC::Enlist 또는 DTC::Propagate 이벤트 사용한다.) SQL Server DTC 관리자와 트랜잭션 리소스 관리자로 등록할  있다. SQL Server 제공된 쿠키를 사용하고ITransactionImport 인터페이스를 활용하여 트랜잭션을 나타내는 ITransaction 개체를 가져온다 시점에서 클라이언트는트랜잭션에 대한 참조가 있는  ITransaction 가지며 SQL Server에는 동일한 트랜잭션에 대한 참조가 있는 ITransaction있다. SQL Server는저장된 ITransaction 객체를 DMV 통해서 출력할  있다.

 

 

3.       Connection 작업을 수행한다.

모든 트랜잭션 활동이 DTC 트랜잭션 엔티티와 올바르게 연관된다 시점에서 클라이언트와 SQL Server에는 여전히ITransaction 참조가 있으며 연결은 DTC 트랜잭션에 바인딩  상태로 유지되며 잠금은 변경된 행에 보관된 상태로 유지된다.

 

4.       클라이언트 연결 끊기.

클라이언트는 SQL Server에서 연결을 끊을  있다.  연결이 끊어지거나 트랜잭션이 NULL 전파될때 SQL Server 추적중인 DTC트랜잭션에서 연결을 해제한다트랜잭션 개체는여전히 활성상태이므로 SQL Server 트랜잭션 목록에 계속 남아있다. DTC 관리자는 중단 또는 커밋을 명령하지 않은 상태이다.

 

 시점은 SQL Server DTC 트랜잭션에 바인딩된 세션이 없는 상태이다. DMV 쿼리를 실행하면 SQL Server 트랜잭션개체와 연결된 세션을 조회하려고 시도한다활성 트랜잭션에 대해 세션이 없는DTC경우 SPID -2 반환한다.

 

클라이언트는 추가 작업을 수행한 다음 ITransaction->Commit또는 중단을 발행할  있다커밋 또는 중단은 DTC 관리자가  처리하며 동일한 ITransaction(UOW) 대한 모든 끝점에 연결하고 수행  작업을 나타낸다. SQL Server DTC 관리자로부터 커밋 또는 중단을 수신하고 적절한 단계를 수행하여 요청을 완료한다요청이 완료되면 SQL Server ITransaction  내부 추적 구조를 해제 한다.

 Prepare, Prepared, Abort, Aborting 등과 같은 추가 DTC 이벤트를 사용하여 커밋 또는 중단을 추적할  있다.

 

 

[참고자료]

https://blogs.msdn.microsoft.com/bobsql/2016/08/04/how-it-works-sessionspid-2-for-dtc-transactions/

 


 

SQL Server, MS SQL, DTC, DTC Session, DTC Transaction, ITransaction, ODBC, .NET, SQLSetConnectAttr, xEvent, DMV, DTC Manager




강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33870
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17084
2094 SQL Linux에서 기본 백업 디렉토리 변경 jevida(강성욱) 2017.09.13 3937
2093 Linux에서 DISK I/O 사용량 확인 jevida(강성욱) 2017.09.13 3918
2092 Linux에서 CPU 사용량 확인 jevida(강성욱) 2017.09.13 2302
2091 SQL Linux에서 SQL Server 시작, 중지, 활성, 비활성 jevida(강성욱) 2017.09.13 1537
2090 SQL Server DBA 체크리스트 jevida(강성욱) 2017.05.31 8254
2089 SQL Server 데이터베이스 백업이 성공적인지 확인하는 방법 jevida(강성욱) 2017.05.31 3807
2088 트리거가 적용된 메모리 최적화 테이블에서 alter table 실패 jevida(강성욱) 2017.05.31 3375
2087 메모리 최적화 테이블 변수 및 예상 행수 jevida(강성욱) 2017.05.31 3027
2086 백업 파일 복원과 3241 오류 (Microsoft® SQL Server® Backup to Microsoft Azure®Tool 사용) jevida(강성욱) 2017.05.31 3261
2085 In-Memory OLTP를 사용할 때 체크포인트 파일이 너무 많아 지는 이유 jevida(강성욱) 2017.05.31 2737
2084 메모리 최적화 테이블변수와 701 오류 (loop 사용으로 인한 메모리 부족 오류) jevida(강성욱) 2017.05.31 3453
2083 메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성 jevida(강성욱) 2017.05.31 3103
2082 인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유 jevida(강성욱) 2017.03.13 5067
2081 SQL Server 833오류 (15 Sec Slow IO Detected) jevida(강성욱) 2017.03.13 4517
2080 SQL Server nonpreemptive 모드에서Long Sync IO 오류 jevida(강성욱) 2017.03.13 3297
» SQL Server DTC Transaction의 SPID = -2 반환 jevida(강성욱) 2017.03.13 2460
2078 SQL Server Read/Writer 동기화 작동 원리 jevida(강성욱) 2017.03.13 2819
2077 SQL Server가 논리 및 물리 프로세서를 결정하는 방법 jevida(강성욱) 2017.03.13 2955
2076 데이터베이스에서 사용자 삭제 오류 jevida(강성욱) 2017.03.13 2928
2075 SQL Server ODBC Driver 및 Command package Tool 설치 jevida(강성욱) 2017.01.11 4857





XE Login