[DB] SQL SERVER

[MSSQL] DCT 설정 확인하기(DCP Ping)

mewoni 2023. 5. 17. 16:40
반응형

(MSSQL DCT 설정하기)

https://kwomy.tistory.com/87

 

[MSSQL] DTC, 분산 트랜잭션 처리를 위한 설정

물리적으로 분리되어 있는 DBMS 간 트랜잭션 처리를 위한 DTC 설정 * DTC : Distributed Transaction Coordinator, MS-DTC Main Server : Client로 부터 최초로 요청을 받는 Server (이하 Main) Sub Server : Main Server에 등록된 L

kwomy.tistory.com

 

MSSQL에서 분산 트랜잭션이 처리되지 않는 경우 DCT 설정을 다시 확인해 보아야 한다.

 

에러메세지)

OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
[OLE/DB provider returned message: 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다. ]
OLE DB 오류 추적 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]
서버: 메시지 7391, 수준 16, 상태 2, 프로시저 xxxxxxxx, 줄 1
OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
[OLE/DB provider returned message: 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다. ]

OLE DB provider "SQLNCLI10" for linked server "ERPTESTSQL" returned message "No transaction is active.". 
Msg 7391, Level 16, State 2, Line 1 
The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "ERPTESTSQL" was unable to begin a distributed transaction.

 

1. DCT Ping 프로그램을 통해서 확인

 * DCP Ping 확인 프로그램

dtcping.exe
0.41MB

 

Main, Sub Server에 해당 프로그램을 설치한 후, 

 - Main : 압축 풀고 프로그램 실행 후, 대기

 - Sub : Main에서 프로그램 실행 후에 두번째 서버에서 압축 풀고 프로그램 실행

 

위 단계를 거치고 나면 양쪽 서버에 로그가 남음. 

양쪽 로그 메세지 확인하여 DCT Ping 이 전송되는지 확인한다.

 

2. 분산 트랜잭션 쿼리문을 통해 이상이 없는지 확인.

SET XACT_ABORT ON
BEGIN DISTRIBUTED TRAN
    UPDATE X_linked_server.db명.소유자명.SA_PROJECTH 
       SET DC_RMK2 = NULL
     WHERE NO_PROJECT = 'zzzzzzzzzzzZ'
COMMIT TRAN
SET XACT_ABORT OFF

 

3. 레지스트리 구성정보 확인

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security에 NetworkDtcAccess => 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security에 NetworkDtcAccessTransactions => 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC에 TurnOffRpcSecurity => 1

 

 ** 모든 DCT 설정이나 수정 후에는 SQL서비스를 재시작 하지 않으면 위와 같은 에러메세지를 반환 **

반응형