SQL Server에서 MSDTC를 활성화하려면 어떻게합니까?


106

이것이 유효한 질문입니까? MSTDC를 사용하는 .NET Windows 앱이 있는데 예외가 발생합니다.

System.Transactions.TransactionManagerCommunicationException : MSDTC (분산 트랜잭션 관리자)에 대한 네트워크 액세스가 비활성화되었습니다. 구성 요소 서비스 관리 도구 ---> System.Runtime.InteropServices.COMException (0x8004D024)을 사용하여 MSDTC의 보안 구성에서 네트워크 액세스를위한 DTC를 활성화하십시오. 트랜잭션 관리자가 원격 / 네트워크 트랜잭션에 대한 지원을 비활성화했습니다. (HRESULT에서 예외 : 0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel & isolationLevel, ITransactionShim & transactionShim) ....

나는 다음 Kbalertz이 MSDTC를 사용하도록 안내 응용 프로그램이 설치된 PC에 있지만 오류가 계속 발생합니다.

이것이 데이터베이스 문제인지 궁금합니다. 그렇다면 어떻게 해결할 수 있습니까?


언급 된 솔루션으로 문제가 해결되지 않으면 이 링크를
Shahab J

답변:


127

Windows Server 2008 r2 및 Windows Server 2012 R2에 사용

  1. 클릭 시작을 클릭 실행을 입력 dcomcnfg를 클릭하고 확인을 열고 구성 요소 서비스를 .

  2. 콘솔 트리에서 구성 요소 서비스 , 컴퓨터 , 내 컴퓨터 , Distributed Transaction Coordinator 를 차례로 클릭하여 확장 한 다음 로컬 DTC 를 클릭 합니다.

  3. 로컬 DTC를 마우스 오른쪽 단추로 클릭하고 속성 을 클릭 하여 로컬 DTC 속성 대화 상자 를 표시합니다 .

  4. 보안 탭을 클릭 하십시오.

  5. 마크 확인 "네트워크 DTC 액세스" 확인란을.

  6. 마지막으로 "인바운드 허용""아웃 바운드 허용" 확인란을 선택합니다.

  7. 클릭 적용 , 확인 .

  8. 서비스 를 다시 시작하라는 메시지가 나타납니다 .

  9. 확인을 클릭하면 그게 전부입니다.

참조 : https://msdn.microsoft.com/en-us/library/dd327979.aspx

참고 : 때때로 로컬 컴퓨터 또는 서버의 네트워크 방화벽이 연결을 방해 할 수 있으므로 "인바운드 허용""아웃 바운드 허용" 연결 규칙을 만들어야 합니다.C:\Windows\System32\msdtc.exe


Windows Server 2012 R2에서도 작동합니다. 명확한 지침에 감사드립니다. 이걸 내 스스로 찾지 못했을 것입니다!
jonazu apr

윈도우 서버 2012 R2에 대한 @jonazu 지금 내가 업데이트 한 대답이 너무 :
칼 싱

잘 했어 ShivSingh!
Super Coder

의 올바른 경로 msdtc.exe는 다음과 같습니다.c:\windows\system32\msdtc.exe
firepol

1
최소한 클러스터 된 Server 2016 노드에서 UI를 통해 설정할 때 이러한 속성이 고정되지 않는 버그가있는 것 같습니다. 해결 방법은 레지스트리에서 이러한 속성을 수동으로 설정하는 것 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security입니다.. 여기 에 속성에 대한 자세한 정보가 있습니다 .
Paul

102

MSDTC가 필요합니까? 경험하는 에스컬레이션은 단일 TransactionScope 내에서 여러 연결을 만들 때 발생하는 경우가 많습니다.

필요한 경우 오류 메시지에 설명 된대로 활성화해야합니다. XP의 경우 :

  • 관리 도구-> 구성 요소 서비스로 이동합니다.
  • 구성 요소 서비스-> 컴퓨터->를 확장합니다.
  • 마우스 오른쪽 버튼 클릭-> 속성-> MSDTC 탭
  • 보안 구성 버튼을 누르십시오.

2
\ 예외로 WINDOWS \ msdtc.exe를 : 또한 창문에서 나는 포트 135 TCP 및 추가 C 열 방화벽
사미르 Alibhai을

20
단일 TransactionScope 내에서 여러 연결을 생성하여 발생하는 오류에 대한 의견을 보내 주셔서 감사합니다. 나는 오류를 받고 있었고 그것이 정확히 문제였습니다. MSDTC를 사용하고 싶지 않았기 때문에 잘못된 새 연결을 찾아 기존 연결을 다시 사용했습니다. 감사!
Jim McKeeth

10
저는 Windows 7과 8을 사용하고 있으며 "기본 코디네이터"섹션 만 있습니다. 당신이 말하는 보안 구성은 어디에서 얻을 수 있습니까?
qdev76 2014 년

2
1) 로컬 DTC를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 2) 보안 탭을 엽니 다. 3) 적어도 네트워크 DTC 액세스, 원격 클라이언트 허용 및 인바운드 허용을 선택합니다.
롭 윅

19

디버깅하는 가장 좋은 방법은 DTCPing 이라는 Microsoft 도구를 사용하는 것입니다.

  1. 파일을 서버 (DB)와 클라이언트 (응용 프로그램 서버 / 클라이언트 PC) 모두에 복사합니다.
    • 서버와 클라이언트에서 시작
    • 서버에서 : 클라이언트 netbios 컴퓨터 이름을 입력하고 DTC 연결 설정을 시도합니다.
    • 두 응용 프로그램을 모두 다시 시작하십시오.
    • 클라이언트에서 : 서버 netbios 컴퓨터 이름을 입력하고 DTC 연결 설정을 시도합니다.

예전 회사 네트워크에서 문제가 많았고 몇 가지 팁이 있습니다.

  • "Gethostbyname failed"라는 오류 메시지가 나타나면 컴퓨터가 netbios 이름으로 다른 컴퓨터를 찾을 수 없음을 의미합니다 . 예를 들어 서버는 클라이언트를 확인하고 핑할 수 있지만 DNS 수준에서 작동합니다. netbios 조회 수준이 아닙니다. WINS 서버를 사용하거나 LMHOST (더티)를 변경하면이 문제가 해결됩니다.
  • "액세스 거부"오류가 발생하면 보안 설정이 일치하지 않는 것입니다. msdtc의 보안 탭을 비교하여 서버와 클라이언트가 일치하도록해야합니다. 살펴볼 또 다른 사항RestrictRemoteClients 값입니다. OS 버전 및 더 중요한 서비스 팩에 따라이 값은 다를 수 있습니다.
  • 기타 연결 문제 :
    • 서버와 클라이언트 간의 방화벽은 포트 135를 통한 통신을 허용해야합니다. 그리고 더 중요한 것은 두 사이트 모두에서 연결을 시작할 수 있다는 것입니다. 그 포트에)
    • 프로토콜은 실제 트랜잭션 통신을 위해 연결할 임의의 포트를 반환합니다. 방화벽 사람들은 그것을 좋아하지 않으며 포트를 특정 범위로 제한하는 것을 좋아합니다. 방화벽에서 작동하도록 RPC 동적 포트 할당을 구성하는 방법에 설명 된대로 키를 사용하여 RPC 동적 포트 생성을 특정 범위로 제한 할 수 있습니다 .

내 경험상 DTCPing이 클라이언트에서 시작되고 서버에서 시작된 DTC 연결을 설정할 수 있다면 트랜잭션은 더 이상 문제가되지 않습니다.


6

제어판의 services.msc에서 MSDTC를 설정하는 방법 도 여기 에서 볼 수 있습니다 .

트리거가있는 서버에서 MSDTC 서비스를 설정해야합니다. 시작> 설정> 제어판> 관리 도구> 서비스를 클릭하면됩니다. 'Distributed Transaction Coordinator'라는 서비스를 찾아 오른쪽 클릭 (선택하고 선택)> 시작.



4

@단,

트랜잭션이 작동하기 위해 msdtc를 활성화 할 필요가 없습니까?

분산 트랜잭션 만-하나 이상의 연결을 포함하는 트랜잭션. 트랜잭션 내에서 단일 연결 만 열어야하며 에스컬레이션되지 않는지 확인하십시오. 성능도 훨씬 좋아질 것입니다.


트랜잭션이 작동하기 위해 msdtc를 활성화 할 필요가 없습니까? 어느 쪽이든 내가 아는 한 여러 연결이 이루어지지 않습니다. 이미 클라이언트 PC에서 이러한 단계를 실행했습니다. 데이터베이스 서버에서도 이러한 단계를 수행해야합니까?
Dan

@Dan, ado.net 트랜잭션을 사용하는 경우 DTC를 활성화 할 필요가 없습니다. 분산 트랜잭션을 사용하는 경우에만 서버에서 MSDTC를 활성화해야합니다
Niraj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.