MS DTC에서 트랜잭션을 시작하려고 할 때 새 트랜잭션이 지정된 트랜잭션 코디네이터에 등록할 수 없습니다.

이 문서는 MS DTC(Microsoft Distributed Transaction Coordinator)에서 트랜잭션을 시작할 때 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: Windows
원본 KB 번호: 922430

중요

이 문서는 레지스트리 수정 방법에 대한 정보를 담고 있습니다. 수정하기 전에 해당 레지스트리를 백업하세요. 문제가 발생하는 경우 레지스트리를 복원하는 방법을 알고 있어야 합니다. 레지스트리를 백업, 복원 및 수정하는 방법에 대한 자세한 내용은 고급 사용자에 대한 Windows 레지스트리 정보를 참조하세요.

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • 서버 컴퓨터와 통신하는 클라이언트 컴퓨터가 있습니다.
  • MS DTC는 두 컴퓨터에 모두 설치됩니다.
  • 다음 조건 중 하나 이상이 true입니다.
    • 컴퓨터 중 하나를 다시 시작합니다.
    • 두 컴퓨터 중 하나에서 MS DTC를 다시 시작합니다.
    • 컴퓨터는 서로 다른 도메인에 있습니다.

이 시나리오에서는 MS DTC에서 트랜잭션을 시작하려고 할 때 다음 오류 메시지가 표시됩니다.

새 트랜잭션이 지정된 트랜잭션 코디네이터(0x8004d00a)에 등록할 수 없습니다.

또한 첫 번째 트랜잭션이 실패합니다. 후속 트랜잭션은 잠시 동안 성공합니다. 그러나 후속 트랜잭션이 다시 실패할 수 있습니다. 후속 트랜잭션이 실패하면 다음 오류 메시지가 표시됩니다.

새 트랜잭션이 지정된 트랜잭션 코디네이터(0x8004d00e)에 등록할 수 없습니다.

원인

이 문제는 클라이언트 컴퓨터와 서버 컴퓨터 간의 MS DTC 연결이 닫혀 있을 때 발생할 수 있습니다. 예를 들어 유휴 시간 제한, RPC(원격 프로시저 호출) 시간 제한 또는 방화벽이 클라이언트 컴퓨터와 서버 컴퓨터 간의 MS DTC 연결을 닫을 수 있습니다. 새 트랜잭션 요청이 발생하면 클라이언트 컴퓨터가 서버 컴퓨터와의 MS DTC 연결을 다시 설정해야 합니다.

클라이언트 컴퓨터가 서버 컴퓨터와 MS DTC 연결을 다시 설정하려고 하면 클라이언트 컴퓨터에서 패킷을 보냅니다. 그런 다음 클라이언트 컴퓨터는 서버 컴퓨터의 바인딩 패킷 응답을 기다립니다. 기본적으로 클라이언트 컴퓨터가 4초 만에 서버 컴퓨터로부터 응답을 받지 못하면 클라이언트 컴퓨터는 트랜잭션을 중지합니다. 네트워크 대기 시간 문제 또는 인증 지연으로 인해 서버 컴퓨터의 응답이 지연될 수 있습니다. 서버 컴퓨터의 응답이 마침내 클라이언트 컴퓨터에 도달하면 후속 트랜잭션이 성공합니다.

첫 번째 트랜잭션은 시간이 오래 걸릴 수 있으며 나중에 분산 트랜잭션을 수행하라는 요청이 즉시 완료될 수 있습니다. 이 문제는 MS DTC의 클라이언트 쪽에서 KDC(Kerberos) 서버와 통신하는 데 문제가 있을 때 발생할 수 있습니다. 일반적으로 이 문제는 클라이언트와 서버가 방화벽이 있는 다른 도메인에 있는 경우에 발생합니다.

예를 들어 이 문제는 다음 시나리오에서 발생합니다.

  • 웹 서비스는 도메인의 경계 네트워크에 있습니다. 웹 서비스는 인트라넷의 다른 도메인에 있는 데이터베이스 서버와 트랜잭션을 사용해야 합니다.
  • 방화벽은 경계 네트워크와 인트라넷 사이에 있습니다. UDP(사용자 데이터그램 프로토콜) 포트 88(Kerberos)이 차단되어 첫 번째 트랜잭션의 과도한 지연이 발생합니다.
  • Kerberos 요청에 대한 재시도 및 재시도 간격은 과도한 지연(100초 이상)과 같습니다.

해결 방법

경고

레지스트리 편집기 또는 다른 방법을 사용하여 레지스트리를 잘못 수정하는 경우 심각한 문제가 발생할 수 있습니다. 이러한 문제가 발생하면 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft에서는 이 문제의 해결을 보장하지 않습니다. 레지스트리를 수정하는 데 따르는 위험은 사용자가 부담해야 합니다.

이 문서에 설명된 문제가 발생하는지 확인하려면 MS DTC 트랜잭션 추적 로그 파일에 다음 데이터가 포함되어 있는지 확인합니다.

; eventid=TRANSACTION_PROPOGATION_FAILED_CONNECTION_DOWN_FROM_REMOTE_TM ; tx_guid=f11cd9c9-7b8a-41e3-a904-4840123bacf7 ;" 원격 트랜잭션 관리자와의 연결이 중단되었으므로 'ComputerName' 자식 노드에 트랜잭션을 전파하지 못했습니다."

참고

이 데이터에서 단어 전파 는 단어 전파의 철자가 잘못 되었습니다. 전파라는 단어의 철자가 잘못되었습니다.

MS DTC 트랜잭션 추적 로그 파일에 이 데이터가 포함된 경우 다음 단계를 수행합니다.

  1. 시작을 선택하고 실행을 선택한 후 regedit를 입력하고 확인을 선택합니다.

  2. 다음 레지스트리 하위 키를 찾습니다.
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC

  3. MSDTC를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 DWORD 값을 선택합니다.

  4. CmMaxNumberBindRetries를 입력한 다음 Enter 키를 누릅니다.

  5. CmMaxNumberBindRetries를 마우스 오른쪽 단추로 클릭한 다음 수정을 선택합니다.

  6. 10진수를 선택합니다.

  7. 값 데이터 상자에 60을 입력합니다.

    이 값은 클라이언트 컴퓨터가 서버 컴퓨터의 바인딩 패킷 응답을 기다리는 시간을 증가합니다. 이 값은 클라이언트 컴퓨터가 바인딩 패킷 응답을 받지 못하는 경우 클라이언트 컴퓨터가 트랜잭션을 중지하기 전의 시간(초)의 두 배입니다. 예를 들어 값 60은 30초와 같습니다. 값 60은 권장 값일 뿐입니다. 구성에 대한 추가 테스트가 필요할 수 있습니다.

  8. 확인을 선택합니다.

  9. MS DTC를 다시 시작합니다.

참고

느린 응답 시나리오의 경우 방화벽이 경계 네트워크에 관련될 때 Kerberos 인증(UDP 88 및 TCP(Transmission Control Protocol) 88)에 필요한 포트가 열려 있는지 확인합니다. UDP 389 및 TCP 389(KDC(키 배포 센터)를 찾기 위한 LDAP(Lightweight Directory Access Protocol)의 경우 모두 열려 있어야 합니다.