Aaron H. Kim Fearless Integration Maniac

BizTalk Interface를 위한 DTC 설정

2008-03-19
Aaron Kim

DTC 설정은 비즈톡 인터페이스에서만 필요한 것은 아니지만,
비즈톡 관리자로서 반드시 알아두어야 할 내용이므로 여기에 정리할까 합니다.

MS-DTC는 Windows 운영체제에서 분산 트랜잭션을 관장하는 중요한 서비스이다. COM+를
사용하여 트랜잭션을 사용한다면 반드시 사용되는 것이 MS-DTC, 줄여서 걍 DTC라고 하는 것
이다. DTC는 분산 트랜잭션의 TM(Transaction Manager) 역할을 수행하므로 분산 트랜잭션
을 시작하는 COM+ 컴포넌트가 반드시 사용해야 하는 것
이다.

여기서 의문점이 발생한다. 대개 COM+는 웹 서버 혹은 어플리케이션 서버(요즘은 대개 웹 서
버에서 COM+를 수행하므로 웹 서버로만 통일해서 지칭하겠다)에서 DTC 만을 사용하면 될 듯
싶다. 하지만 데이터베이스로 SQL-Server가 사용되고 DB 서버가 별도로 존재하는 경우, DTC
가 말썽을 부리는 경우가 많다. 웹 서버의 COM+가 웹 서버에서 작동하는 DTC만 액세스 하면
될 터인데 왜 DB 서버의 DTC 설정까지 다루어야 할까?

SQL-Server가 분산 트랜잭션에 관여되면 SQL-Server가 수행되는 컴퓨터의 DTC로
부터 제어를 받는다

. 따라서 웹 서버에서 원격 컴퓨터, 즉 DB 서버에 존재하는 SQL-Server
와 분산 트랜잭션을 수행하려고 하면 웹 서버의 DTC와 DB 서버의 DTC가 서로 통신해야 하는
것이다. 그렇다면 SQL-Server가 아닌 Oracle이 사용되면 어떻게 될까? 물론 웹 서버의 DTC가
사용된다. 그리고 이 DTC가 Oracle 과 직접 통신하거나(XA 프로토콜 사용 시), Oralce
Service for MTS 서비스를 통해(ODP.NET 같은 거 쓸 때) 오라클과 통신하게 된다. 따라서
DTC 끼리 통신할 때 발생하는 DTC 설정의 복잡도는 거의 없다고 볼 수 있다.

출처:Windows 2003 DTC 설정 완성(?)편
{#viewpost.ascx_TitleUrl}

일단 이론적으로 DTC 설정에 대해 아주 잘 설명된 자료가 아래 있으니 참조하시기 바라며,
여기선 실제로 필요한 작업 위주로 정리하겠습니다.

참조 : RPC 씨리즈 (1) , RPC 씨리즈 (2) , Windows 2003 DTC 설정 완성(?)편{#viewpost.ascx_TitleUrl}
참조 : MSDTC 무엇에 쓰는 물건인고?

먼저 양 쪽 서버(App 서버-BizTalk, DB서버)에서 DTC 통신이 가능하기 위해서는 두 가지 요건이
충족되어야 합니다.

  • 두 컴퓨터(웹 서버/DB 서버)가 서로 컴퓨터 이름으로 ping이 될 것
  • RPC 통신이 양방향으로 가능 할 것

우선 첫 번째 요건을 만족시키기 위해서 양 쪽 컴퓨터는 NetBios 프로토콜이 설치되어 있고, 같은 네트워크를 사용하거나, 두 서버의 Hosts 파일에 서로의 컴퓨터 이름과 IP를 적어주어야 합니다. BizTalk 서버 하나가 여러 DB와 연동한다면, 각 DB 서버들은 BizTalk 서버의 이름과 IP를 적어주고, BizTalk 서버에선 연동하는 모든 DB 서버들에 대한 내용을 Hosts 파일에 기록해줍니다.

C:\WINDOWS\system32\drivers\etc\hosts

165.244.64.**    knsdgw01      #포털 DB서버
165.244.64.**    drmdgw01      #DRM DB서버

다음으로 두 번째, RPC 통신이 양방향으로 가능해야 하는 이유는.. DTC가 RPC 프로토콜을 사용하기 때문입니다. 이 때 비즈톡 서버와 DB 서버간에 방화벽이 없다면 RPC 통신을 위해 따로 설정해줄 필요는 없지만, 방화벽이 존재할 경우, 아래 포트들을 열어주어야 합니다. 자세한 내용은 RPC 씨리즈 (1) , RPC 씨리즈 (2) 참고.

  • SQL Server 서비스 포트 : 1433 번
  • RPC 포트 매퍼 포트 : 135 번
  • RPC 서비스 포트 : xxxx ~ yyyy (저는 통상적으로 5000 ~ 5010번을 사용합니다.)

이 때 RPC 서비스 포트로 사용될 동적 포트 범위 지정은
 

  1. 시작 -> 프로그램 -> 관리도구 -> 구성요소 서비스 실행
    사용자 삽입 이미지
  2. 내 컴퓨터 등록정보 클릭 -> 기본프로토콜 -> 연결지향 TCP/IP -> 속성에서 지정합니다.
    사용자 삽입 이미지
    위 작업은 방화벽이 설정된 경우에만 필요하지만 다음 작업들은 모든 경우에 필요합니다. 반드시 BizTalk 서버와 DB 서버의 구성을 동일하게 맞춰주시기 바랍니다.

  3. 내 컴퓨터 등록정보 클릭 -> MSDTC -> 보안구성 설정
    사용자 삽입 이미지
    이 때 아래와 같이 로그 사이즈도 재 설정해주시면 좋습니다. KB문서등에는 기본 설정 4MB로도 충분하다고 되어 있으나, 대용량 트랜잭션 발생 시 로그 부족으로 인한 문제가 발생할 수 있습니다.

사용자 삽입 이미지

  1. 시작 -> 설정 -> 제어판 -> 프로그램 추가/제거 -> Windows 구성요소 추가/제거 클릭 -> 응용 프로그램 서버 선택 후 -> 자세히

사용자 삽입 이미지

  1. 네트웍 DTC 엑세스 사용, 네트웍 COM+ 엑세스 사용 체크.
    사용자 삽입 이미지
    • Win2003Svr인 경우 다음과 같이 설정.
      사용자 삽입 이미지
    • 위 DTC 설정이 반영되려면 재부팅이 필요합니다.
  2. 최종적으로 양쪽 서버간 DTC 통신이 제대로 이루어지는 지 확인을 위해서는 DTCPing 또는 DTCTester 를 통한 확인 절차가 필요합니다. 저는 간단히 DTCPing을 사용합니다.

먼저 양쪽 서버 임의의 위치에서 해당 DTCPing을 실행시킵니다. 이 때 발생하는 로그는 다음과 같습니다. 제가 추가한 주석을 참고해서 테스트를 마치시면 되겠습니다.

준비 로그

DTCping log file: C:\Documents and Settings\administrator.MGCDEV\바탕 화면
\MGDGW0137
 
Firewall Port Settings:Port:5000-5010
RPC server is ready
+ 0. RPC에서 사용하는 가변 포트들을 미리 정해주고 방화벽에서 열어달라고 요청할것.

Please Start Partner DTCping before pinging
+ 0.1. 상대편 서버도 DTCPing을 실행시켜 RPC server를 Ready시킨다.

성공했을 때 로그.

++++++++++++Validating Remote Computer Name++++++++++++
+ 1. 먼저 원격 서버명으로 접속하는데 이 때문에 같은 네트워크에 서버가 존재하지
+ 않을 경우 hosts 파일에 추가가 필요하다.

Please refer to following log file for details:
 C:\Documents and Settings\administrator.MGCDEV\바탕 화면\MGDGW012128.log
Invoking RPC method on MGesb
RPC test is successful

++++++++++++RPC test completed+++++++++++++++
+ 2. DTC는 RPC 프로토콜을 사용하므로 RPC 테스트를 먼저 거친다. 여기서 실패했을 경우는
RPC에서 사용하는 포트가 방화벽에 의해 막혀있는지 의심할 것.

++++++++++++Start DTC Binding Test +++++++++++++
Trying Bind to MGesb
Received reverse bind call from MGesb
Binding success: MGDGW01–>MGesb
++++++++++++DTC Binding Test END+++++++++++++
Please send following LOG to Microsoft for analysis:
 Partner LOG: MGESB6480.log
 My LOG: MGDGW012128.log
++++++++++++Start Reverse Bind Test+++++++++++++
Received Bind call from MGESB
Trying Reverse Bind to MGESB
Reverse Binding success: MGDGW01–>MGESB
++++++++++++Reverse Bind Test ENDED++++++++++

실패했을 때 로그.

++++++++++++Validating Remote Computer Name++++++++++++
Please refer to following log file for details:
 C:\MGIS-TEST0072608.log
Invoking RPC method on MGesb
Problem:fail to invoke remote RPC method
Error(0x6BA) at dtcping.cpp @303
–>RPC pinging exception
–>1722(RPC 서버를 사용할 수 없습니다.)
RPC test failed
 
+ RPC Method를 상대편 서버에서 호출하려했으나 RPC 서버를 사용할 수 없어 실패한 경우.
이 때는 방화벽에서 필요한 포트들을 열어줬는지 확인할 것.

주의!!!

  • 타겟 서버가 Clustered SQL 서버이고 대표 ip로 연결할 경우 대표 ip-Host 외에 Active, Passive 서버 ip-Host도 마찬가지로 Host 파일에 기재해주셔야 합니다. 대표 ip-Host만 등록할 경우 DTCPing을 했을 경우 대표 ip에서 Active 서버로 이어질 때 Active 서버의 호스트명만으로 ip를 가져올 수 없으므로 에러가 발생합니다.

아래는 문서 작성하면서 참고한 url들입니다. 감사합니다.

: http://support.microsoft.com/default.aspx?scid=kb;en-us;899191#XSLTH4185121123120121120120
: http://support.microsoft.com/kb/899191/
: http://support.microsoft.com/kb/817064/ko
: http://blogs.msdn.com/madhuponduru/archive/2005/12/03/499781.aspx

Similar Posts

Comments