본문 바로가기

Server Story..../Windows Server

Windows XP SP2/2003 SP1 에서의 MS DTC 설정

Windows XP SP2가 출시되면서 개발자 PC도 자연스럽게 SP2를 패치하는 상황에서 잘되던 MS DTC가 더 이상 수행되지 못하는 상황이 발생한다. 이는 Windows XP SP2가 보안 기능을 강화하면서 추가한 방화벽 기능 때문이다.

이 문서는 이 방화벽 기능에 예외를 추가하여 MS DTC를 정상적으로 수행되게 해 주는 절차를 기술한다.

 

 

현상(Symptoms)

 

1. COM+ 트랜잭션 속성이 Not Supported일 경우에는 정상적으로 DB서버에 접근하여 로직 처리가 이루어지나, 트랜잭션 속성이 Required나 Required New일 경우에는 "트랜잭션이 이미 암시적 또는 명시적으로 커밋되었거나 종료되었습니다" 라는 메시지가 보이면서 Exception이 발생하게 된다.

 

2. 경우에 따라서 아래와 같은 에러 메시지가 보이기도 한다.

The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to start a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].

 

원인(Causes)

 

1. Microsoft Distributes Transaction Coordinator(MS DTC)가 Network Transaction이 불가능하게 되어 있는 경우

2. Windows 방화벽이 활성화 되어 있고 Windows 방화벽이 MS DTC 프로그램을 Block시켰을 때(SP2의 Default 세팅), Windows 방화벽이 비활성화 되어 있을 경우에도 일어날 수도 있음.

 

 

해결(workarounds)

 

1. MS DTC 서비스가 제대로 작동 중인지를 확인

  • 시작 > 실행 > Services.msc 입력 후 Enter 키
  • 서비스 창에서 Distributed Transaction Coordinator를 찾는다.
  • DTC 서비스의 다음사용자로 로그온 컬럼이 Network Service로 설정되어 있고, 상태가 시작됨으로 되어있는 지를 확인한다.

 

2. MS DTC 속성 중 일부 설정 변경

  • 시작 > 실행 > dcomcnfg.exe 입력 후 Enter 키
  • 구성 요소 서비스 창에서...콘솔 루트 > 구성 요소 서비스 > 컴퓨터 > 내 컴퓨터 선택 후 마우스 오른쪽 버튼 클릭하고 속성 선택
  • MS DTC 탭 선택
  • 트랜잭션 구성의 보안 구성 버튼 클릭하여 아래와 같이 설정

     

     

3. Windows 방화벽 설정 변경

  • 시작 > 실행 > Firewall.cpl 입력 후 Enter 키 또는 제어판에서 Windows 방화벽 더블클릭
  • "Windows 방화벽" 창에서 "예외(Exception)" 탭 선택 후 "프로그램 추가" 버튼 클릭
  • "프로그램 추가" 창에서 찾아보기(Browse...) 버튼을 클릭하여 "[OS설치Drive]:\Windows\System32"로 이동하여 msdtc.exe 파일 선택한 후 확인 버튼 클릭
  • "Windows 방화벽"의 "프로그램 및 서비스" 리스트에서 msdtc.exe 선택후 "Port 추가" 버튼 클릭
  • "Port 추가" 창에서 이름은 "DTC Port"(이건 맘대로 줘도 된다), 포트 번호 : "135",  TCP 옵션 선택한 후 확인 버튼 클릭
  • "Windows 방화벽" 창에서 확인 버튼 클릭

 

 

이 절차를 거치면 Windows XP SP 2에서의 MS DTC 설정은 완료되게 된다.