MSDTC 문제 해결

대부분의 BizTalk Server 런타임 작업에서 일관되게 트랜잭션을 수행하려면 MSDTC(Microsoft Distributed Transaction Coordinator)가 지원되어야 합니다. MSDTC 트랜잭션이 지원되지 않으면 연결된 BizTalk Server 런타임 작업을 계속 진행할 수 없습니다. MSDTC 트랜잭션 지원이 올바르게 구성되지 않았을 때 일반적으로 영향을 받는 BizTalk 구성 요소에는 Single Sign-On 서비스, BizTalk 호스트 인스턴스 및 BizTalk Server에서 연결된 SQL Server 인스턴스 등이 있습니다. 이 섹션에는 MSDTC에 관한 문제를 진단하고 해결하는 데 도움이 되는 MSDTC 관련 오류 및 단계에 대한 정보가 포함되어 있습니다.

MSDTC 트랜잭션 지원이 올바르게 구성되지 않았을 때 발생할 수 있는 오류

BizTalk 환경의 컴퓨터에 MSDTC 트랜잭션 지원이 올바르게 구성되지 않은 경우 BizTalk Server에서 다음과 같은 오류가 발생할 수 있습니다.

  • "Microsoft Distributed Transaction Coordinator 오류가 발생하여 구성 데이터베이스에 연결하지 못했습니다. 트랜잭션 관리자가 원격/네트워크 트랜잭션에 대한 지원을 해제했습니다."

  • "Microsoft Distributed Transaction Coordinator 오류가 발생하여 구성 데이터베이스에 연결하지 못했습니다. 트랜잭션이 이미 암시적 또는 명시적으로 커밋되거나 중단되었습니다."

  • "오류 코드: 0x8004d00a, 새 트랜잭션을 지정된 Transaction Coordinator에 등록할 수 없습니다."

  • "구성 저장소에서 수신 위치 'MySample ReceiveLocation'에 대한 전송 방식 데이터를 검색할 수 없습니다. 주 SSO 서버 'MyServer'가 실패했습니다. RPC 서버를 사용할 수 없습니다."

  • "오류 코드: 0x8004d025, 파트너 트랜잭션 관리자가 원격/네트워크 트랜잭션에 대한 지원을 해제했습니다."

  • "오류 코드: 0xc0002a24, DTC 트랜잭션을 가져올 수 없습니다. MSDTC가 원격 작업에 맞게 구성되었는지 확인하세요."

  • "0x8004d01c

    [0x1705] 내부 작업 항목을 만들지 못했습니다.

    SQL 서버가 실행되고 있는지 확인합니다."

    MSDTC 구성 오류를 해결하려면 다음 단계를 수행하세요.

BizTalk Server와 원격 서버 간의 NetBIOS 이름 확인이 성공했는지 확인

컴퓨터 간에 MSDTC 트랜잭션을 수행하려면 클라이언트 컴퓨터에서 서버 컴퓨터의 NetBIOS 이름을 정확한 IP 주소로 확인하고, 서버 컴퓨터에서 클라이언트 컴퓨터의 NetBIOS 이름을 정확한 IP 주소로 확인할 수 있어야 합니다. 클라이언트 컴퓨터와 서버 컴퓨터 사이에 NetBIOS 이름 확인 작업을 수행하려면 다음 단계를 따르세요.

참고

NetBIOS 이름은 일반적으로 네트워크 이름이기도 합니다.

  1. 각 컴퓨터의 NetBIOS 이름을 확인합니다.

    1. 내 컴퓨터를 마우스 오른쪽 단추로 클릭하여 시스템 속성 대화 상자를 표시하고 컴퓨터 이름 탭을 클릭하여 컴퓨터에 할당된 전체 컴퓨터 이름을 확인합니다.

    2. NetBIOS 이름은 전체 컴퓨터 이름 으로 지정된 이름의 처음 부분입니다. 예를 들어 전체 컴퓨터 이름 이 myserver.company.domain.com으로 나열되어 있으면 컴퓨터의 NetBIOS 이름은 myserver입니다.

  2. 각 컴퓨터와 연결된 IP 주소를 확인합니다.

    1. 클라이언트 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ipconfig /all
      
    2. 클라이언트 컴퓨터와 연결된 IP 주소가 명령 프롬프트 창에 나열됩니다.

    3. 서버 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ipconfig /all
      
    4. 서버 컴퓨터와 연결된 IP 주소가 명령 프롬프트 창에 나열됩니다.

  3. 각 컴퓨터의 NetBIOS 이름이 컴퓨터와 연결된 IP 주소 중 하나로 확인되는지 확인합니다.

    1. 클라이언트 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ping <NetBIOS name of server computer>
      

      ping 명령을 실행하면 서버 컴퓨터와 연결된 IP 주소가 반환되어야 합니다.

    2. 서버 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ping <NetBIOS name of client computer>
      

      ping 명령을 실행하면 클라이언트 컴퓨터와 연결된 IP 주소가 반환되어야 합니다.

  4. 각 컴퓨터의 NetBIOS 이름에 연결된 IP 주소의 역방향 이름 조회가 올바른 컴퓨터 이름으로 확인되는지 확인합니다.

    1. 클라이언트 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ping -a <IP Address associated with client computer NetBIOS name>
      

      ping 명령을 수행하면 단계 3a에서 사용한 NetBIOS 이름에 해당하는 정규화된 도메인 이름 또는 NetBIOS 이름이 반환되어야 합니다. 반환된 이름이 단계 3a에서 사용한 NetBIOS 이름에 해당하지 않거나 일치하지 않는 경우 IP 주소 역방향 조회가 실패하고 이로 인해 MSDTC 트랜잭션이 실패하게 됩니다.

    2. 서버 컴퓨터에서 명령 프롬프트를 시작하고 다음 명령을 입력한 후 Enter를 누릅니다.

      ping -a <IP Address associated with server computer NetBIOS name>
      

      ping 명령을 수행하면 단계 3b에서 사용한 NetBIOS 이름에 해당하는 정규화된 도메인 이름 또는 NetBIOS 이름이 반환되어야 합니다. 반환된 이름이 단계 3b에서 사용한 NetBIOS 이름에 해당하지 않거나 일치하지 않는 경우 IP 주소 역방향 조회가 실패하고 이로 인해 MSDTC 트랜잭션이 실패하게 됩니다.

    어느 방향에서든 NetBIOS 이름 확인에 성공하지 못하거나 역방향 이름 조회가 실패하는 경우 DNS 서버, NetBIOS 이름 서버, HOSTS 파일 또는 LMHOSTS 파일에 적합한 항목을 만들어 문제를 해결하세요.

참고

컴퓨터에서 사용하는 이름 확인 방법은 컴퓨터의 NetBIOS 노드 유형에 따라 달라집니다. NetBIOS 노드 유형에 대한 자세한 내용은 NetBIOS 이름 확인을 참조하세요.

BizTalk Server와 원격 서버 간의 방화벽이 RPC 동적 포트 할당에 필요한 포트를 차단하고 있지 않는지 확인

네트워크를 통한 MSDTC 기능은 네트워크를 통한 RPC 기능에 종속됩니다. 방화벽을 통해 RPC 기능을 사용하려면 특정 포트를 RPC 동적 포트 할당에 맞게 열어야 합니다. 방화벽이 BizTalk Server와 원격 서버 간에 있는 경우 방화벽에 사용할 RPC 동적 포트 할당을 구성하는 방법 의 단계에 따라 RPC 동적 포트 할당을 설정합니다.

적절한 MSDTC 보안 구성 옵션 설정

Windows는 네트워크를 통해 MSDTC에 액세스하는 방법을 제어하는 보안 향상 기능을 제공합니다. MSDTC 보안 설정을 수정하면 MSDTC가 네트워크를 통해 원격 컴퓨터와 통신하는 방법을 제어할 수 있습니다. 다음 표에는 MSDTC 보안 설정을 구성할 때 사용할 수 있는 옵션에 대한 권장 값이 나열되어 있습니다.

구성 옵션 기본값 권장되는 값
네트워크 DTC 액세스 사용 안 함 사용
클라이언트 및 관리
원격 클라이언트 허용 사용 안 함 사용 안 함
원격 관리 허용 사용 안 함 사용 안 함
트랜잭션 관리자 통신
인바운드 허용 사용 안 함 사용
아웃바운드 허용 사용 안 함 사용
상호 인증 필요 사용 모든 원격 컴퓨터에서 Windows Server 2003 SP1 또는 Windows XP SP2 이상이 실행되고 "상호 인증 필요"로 구성된 경우 사용하는 것으로 설정됩니다.
들어오는 호출자 인증 필요 사용 안 함 클러스터에서 MSDTC를 실행하는 경우 사용
인증 필요 없음 사용 안 함 원격 컴퓨터가 이전 Windows Server 2003 SP1 또는 이전 Windows XP SP2인 경우 사용
TIP 사용 사용 안 함 BAM 포털을 실행하는 경우 사용
XA 트랜잭션 사용 사용 안 함 MQSeries 어댑터를 사용하여 IBM WebSphere MQ와 통신할 때처럼 XA 기반 트랜잭션 시스템과 통신하는 경우 사용

변경 내용을 적용하면 MSDTC 서비스가 다시 시작됩니다.

MSDTC 보안 구성 옵션에 액세스하려면 다음 단계를 수행합니다.

  1. 시작, 실행을 차례로 클릭하고 dcomcnfg 를 입력하여 구성 요소 서비스관리 콘솔을 시작합니다.

  2. 구성 요소 서비스, 컴퓨터를 차례로 클릭하여 확장합니다.

  3. 내 컴퓨터, Distributed Transaction Coordinator를 차례로 클릭하여 확장하고 로컬 DTC를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  4. 로컬 DTC 속성 대화 상자의 보안 탭을 클릭합니다.

참고

변경된 내용에 따라 컴퓨터를 다시 부팅해야 변경 내용이 적용될 수도 있습니다. 변경 내용을 적용하고 MSDTC 서비스를 다시 시작한 후에도 계속 문제가 발생하면 변경 내용이 확실하게 적용되도록 컴퓨터를 다시 부팅하세요.

상호 인증 필요 또는 들어오는 호출자 인증 필요 구성 옵션을 사용하는 경우 클라이언트 컴퓨터 계정에 네트워크에서 이 컴퓨터 액세스 사용자 권한을 부여해야 합니다. 클라이언트 컴퓨터의 컴퓨터 계정에 네트워크에서 이 컴퓨터 액세스 사용자 권한이 부여되지 않은 경우 또는 해당 계정이 네트워크에서 이 컴퓨터 액세스 거부 사용자 권한에 포함되어 있는 경우 클라이언트와 서버 컴퓨터 사이의 DTC 통신이 실패합니다.

기본 설정은 Everyone 그룹에 네트워크에서 이 컴퓨터 액세스 사용자 권한을 부여하는 것입니다. 그러므로 기본 설정이 수정되지 않은 한 이 사용자 권한을 변경할 필요는 없습니다. 인증 필요 없음 구성 옵션을 사용하면 네트워크에서 이 컴퓨터 액세스 사용자 권한은 클라이언트 컴퓨터 계정에 적용되지 않습니다.

"네트워크에서 이 컴퓨터 액세스" 사용자 권한이 부여된 사용자 또는 그룹을 변경하려면 다음 단계를 수행하세요.

  1. 시작을 클릭하고 실행을 클릭하고 Gpedit.msc를 입력한 다음 확인을 클릭합니다.

  2. 로컬 컴퓨터 정책 목록에서 다음 항목을 확장합니다.

    • 컴퓨터 구성

    • Windows 설정

    • 보안 설정

    • 로컬 정책

  3. 사용자 권한 할당을 클릭합니다.

  4. 네트워크에서 이 컴퓨터 액세스를 두 번 클릭한 다음 사용자 또는 그룹 추가를 클릭합니다.

  5. 개체 유형을 클릭하고 컴퓨터를 선택한 다음 확인을 클릭합니다.

  6. 선택할 개체 이름을 입력하세요. 영역에 컴퓨터 이름 또는 그룹 이름을 추가합니다.

  7. 이름 확인 을 클릭하여 입력된 항목을 확인합니다.

  8. 확인을 두 번 클릭합니다.

    네트워크에서 이 컴퓨터 액세스 거부 사용자 권한에 포함된 사용자 또는 그룹을 변경하려면 다음 단계를 수행하세요.

  9. 로컬 컴퓨터 정책 목록에서 다음 항목을 확장합니다.

    • 컴퓨터 구성

    • Windows 설정

    • 보안 설정

    • 로컬 정책

  10. 사용자 권한 할당을 클릭합니다.

  11. 네트워크에서 이 컴퓨터 액세스 거부를 두 번 클릭한 다음, 이 사용자 권한에서 제거할 컴퓨터 이름 또는 그룹을 클릭하여 선택합니다.

  12. 제거 를 클릭한 다음 확인을 클릭합니다.

EnableAuthEpResolution 및 RestrictRemoteClients 옵션에 적절한 값 설정

Windows에서는 RPC 인터페이스에 대해 인증된 호출을 요구하여 보안을 향상시킵니다. 이 기능은 EnableAuthEpResolutionRestrictRemoteClients 레지스트리 키를 사용하여 구성할 수 있습니다. 원격 컴퓨터에서 RPC 인터페이스에 액세스할 수 있도록 하려면 다음 단계를 따르세요.

경고

레지스트리 편집기를 잘못 사용하면 운영 체제를 다시 설치해야 하는 문제가 발생할 수 있습니다. 레지스트리 편집기를 사용할 때는 특별히 주의해야 합니다. 레지스트리를 백업, 복원 및 수정하는 방법에 대한 자세한 내용은 Microsoft 기술 자료 문서 "Microsoft Windows 레지스트리 설명"( Microsoft Windows 레지스트리 설명)을 참조하세요.

  1. 시작, 실행을 차례로 클릭한 다음 regedit.exe를 입력하고 확인 을 클릭하여 레지스트리 편집기를 시작합니다.

    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT로 이동합니다.

  2. RPC 키 아래에서 다음의 표시된 값을 사용하여 다음 DWORD 항목을 만듭니다. RPC 키가 없으면 만들어야 합니다.

    DWORD 항목 기본값 권장되는 값
    EnableAuthEpResolution 0(사용 안 함) 1
    RestrictRemoteClients 1(사용) 0
  3. 레지스트리 편집기를 닫습니다.

  4. MSDTC 서비스를 다시 시작합니다.

참고

변경된 내용에 따라 컴퓨터를 다시 부팅해야 변경 내용이 적용될 수도 있습니다. 변경 내용을 적용하고 MSDTC 서비스를 다시 시작한 후에도 계속 문제가 발생하면 변경 내용이 확실하게 적용되도록 컴퓨터를 다시 부팅하세요.

Windows 방화벽이 실행 중이면 MSDTC 서비스에 대한 예외를 추가하세요.

Windows 방화벽 서비스가 컴퓨터 간 MSDTC 통신을 차단할 수 있습니다. Windows 방화벽 서비스가 실행 중인 경우 컴퓨터 간 MSDTC 통신이 차단되지 않도록 Windows 방화벽 예외 목록에 msdtc.exe를 추가하세요.

  1. 시작, 실행을 차례로 클릭하고 firewall.cpl을 입력한 다음 확인 을 클릭하면 Windows 방화벽 대화 상자가 표시됩니다.

  2. Windows 방화벽을 통해 프로그램 허용 을 클릭하여 Windows 방화벽 설정 대화 상자를 표시합니다.

  3. Windows 방화벽 설정 대화 상자의 예외 탭을 클릭합니다.

  4. 프로그램 추가 를 클릭하면 프로그램 추가 대화 상자가 표시됩니다.

  5. 찾아보기 를 클릭하여 %system32%\msdtc.exe로 이동합니다.

    참고

    명령 프롬프트를 시작하고 echo %system32% 를 입력한 다음 Enter 를 눌러 이 컴퓨터의 \System32 디렉터리 위치를 확인합니다.

  6. msdtc.exe 를 클릭하여 선택한 다음 열기를 클릭합니다.

  7. 범위 변경 을 클릭하여 MSDTC 통신을 허용할 컴퓨터 집합을 지정한 다음 확인을 클릭합니다.

  8. 프로그램 추가 대화 상자에서 확인 을 클릭하고 Windows 방화벽 설정 대화 상자에서 확인 을 클릭합니다.

  9. Windows 방화벽 대화 상자를 닫습니다.

  10. 분산 트랜잭션 코디네이터 서비스를 중지하고 다시 시작합니다.

    • 명령 프롬프트를 시작하고 net stop msdtc 를 입력한 다음 Enter를 누릅니다.

    • Distributed Transaction Coordinator 서비스가 중지되면 net start msdtc 를 입력하고 Enter키를 누릅니다.

DTCTester 또는 DTCPing을 사용하여 네트워크상의 MSDTC 기능 확인

SQL Server 컴퓨터 중 하나에 설치된 경우 Test-Dtc cmdlet을 사용하여 두 컴퓨터 간의 트랜잭션 지원을 확인합니다. 자세한 내용은 Windows PowerShell Test-Dtc를 참조하세요.

두 컴퓨터 중 어떤 곳에도 SQL Server가 설치되어 있지 않은 경우 두 컴퓨터 간에 트랜잭션이 지원되는지 여부를 확인하려면 DTCPing을 사용합니다. DTCPing 도구는 클라이언트 컴퓨터와 서버 컴퓨터 모두에서 실행해야 하고 SQL Server가 두 컴퓨터 중 어떤 곳에도 설치되어 있지 않은 경우 DTCTester 유틸리티 대신 사용할 수 있습니다. DTCPing에 대한 자세한 내용은 MS DTC 방화벽 문제를 해결하는 방법 및 방화벽을 통해 작동하도록 Microsoft DTC(Distributed Transaction Coordinator) 구성을 참조하세요.

중요

DTCPing에서 “경고: 두 테스트 컴퓨터의 CID 값이 같음”을 반환하는 경우 MSDTC에 고유한 CID 값이 할당되었는지 확인 섹션의 단계에 따라 테스트 컴퓨터 간에 적절한 MSDTC 기능이 있도록 하세요.

MSDTC에 고유한 CID 값이 할당되었는지 확인

컴퓨터 간 MSDTC 기능이 올바르게 작동하려면 Windows 운영 체제의 MSDTC 기능에 고유한 CID 값이 필요합니다. Windows 설치의 디스크 중복 이미지에 고유한 CID 값이 있거나 MSDTC 기능이 손상되었을 수 있습니다. 이는 가상 하드 디스크를 사용하여 운영 체제를 가상 머신에 배포할 때 발생할 수 있습니다.

Windows 운영 체제가 실행 중인 컴퓨터의 MSDTC CID 값이 고유한지 판별하려면 두 컴퓨터 모두에서 HKEY_CLASSES_ROOT\CID 레지스트리 키에 있는 항목의 값을 확인하세요. 이러한 값이 컴퓨터마다 고유하지 않으면 다른 문제 해결 단계에 성공하지 못하면 DTC(Distributed Transaction Coordinator) 서비스를 재설치하도록 고려 섹션의 단계에 따라 컴퓨터 중 하나에 MSDTC를 다시 설치하세요. 그러면 해당 컴퓨터에 대해 고유한 MSDTC CID 값을 생성하고 적절한 MSDTC 작업을 수용합니다.

클라이언트 컴퓨터와 서버 컴퓨터 간의 MSDTC 연결이 닫히면 "지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다.(0x8004d00a)" 오류가 발생함

특정 시나리오에서는 클라이언트와 서버 간의 기존 MSDTC 연결이 닫혀 있고 이후에 이 연결을 사용하려고 하면 다음과 같은 오류 메시지가 발생할 수 있습니다. 새 트랜잭션은 지정된 트랜잭션 코디네이터(0x8004d00a)에 등록할 수 없습니다. 자세한 내용은 MS DTC에서 트랜잭션을 시작하려고 할 때 새 트랜잭션이 지정된 트랜잭션 코디네이터에 등록할 수 없음으로 이동합니다.

다른 문제 해결 단계에 성공하지 못하면 DTC(Distributed Transaction Coordinator) 서비스를 재설치하도록 고려

MSDTC 문제를 해결하기 위해 다른 방법을 시도해도 문제가 해결되지 않으면 MSDTC를 제거한 후에 다시 설치해 보세요. MSDTC를 제거하고 다시 설치하려면 다음 단계를 수행합니다.

  1. 관리자 권한으로 명령 프롬프트를 엽니다.

  2. 명령 프롬프트에서 다음을 입력하여 분산 트랜잭션 코디네이터 서비스를 제거합니다. msdtc -uninstall

  3. 명령 프롬프트에서 다음을 입력하여 분산 트랜잭션 코디네이터 서비스를 설치합니다. msdtc –install

중요

MSDTC를 다시 설치하면 Distributed Transaction Coordinator 서비스의 기본 동작이 변경될 수 있습니다. Distributed Transaction Coordinator 서비스가 올바르게 작동하도록 하려면 MSDTC를 다시 설치한 후에 다음 단계를 수행합니다.

  • MSDTC를 다시 설치하면 MSDTC 보안 구성 옵션이 기본값으로 다시 설정될 수 있습니다. 따라서 MSDTC를 다시 설치한 후에는 MSDTC 보안 구성 옵션이 적절한 값으로 설정되어 있는지 확인합니다.
    • MSDTC를 다시 설치하면 Distributed Transaction Coordinator 서비스의 시작 유형 값이 변경될 수 있습니다. 따라서 MSDTC를 다시 설치한 후에 Distributed Transaction Coordinator 서비스의 시작 유형 값이 자동 으로 설정되어 있는지 확인합니다.
    • MSDTC를 다시 설치할 때는 컴퓨터를 다시 부팅해야 할 수도 있습니다. Distributed Transaction Coordinator 서비스가 올바르게 작동하도록 하려면 MSDTC를 다시 설치한 후에 컴퓨터를 다시 부팅하세요.

참고 항목

Windows Server 클러스터 문제 해결에 사용할 도구 및 유틸리티