최근 포토로그


분산 트렌잭션 DTC, RPC 가 안되는 분들을 위한 트러블슈팅 (Windows Server 2012버전 중심으로) 1

젝일! 

최근 MS-SQL 두대를 링크드서버(linked-server) 를 통하여 연결한 후
분산트렌젝션을 했다.

그런데 조까튼 문제가 발생했다.

한놈은 Windows Server 2003 이고 
한놈은 Windows Server 2012 였다.


문제는 이 더러븐 놈의 셋팅이 예전에 할때는 잘 되었는데 이번에는 죽어도 안되는 거였다.

즉 서버 2003에서 이런식으로 작성해서 저장하면 




보안구성

요런식으로 넣으면 레지스트리의 
HKLM\SOFTWARE\Microsoft\Rpc\internet 부분에 저장이 된다. (아래화면 참조)

즉, 이 부분을 레지스트리에 넣으나, 프로그램으로 넣으나 같은 결과물을 가진다는 말이다.



그런데, Fucking 2013 서버는 
전혀 다른 메카니즘을 보이고 있었다는 것을 간과했다.


나는 예전에만 분산트렌젝션을 일으켰기 때문에 기억은 2003 서버 기준으로만 생각하고 있었다.

그런데,

일단 화면 부터 퍼킹 헬이다.


포트번호 넣고 MSDTC설정 해볼까? 했는데 

MSDTC가 여기에 없다.
즉, 여기에 있다.




보다 시피 옵션도 존나리 많다.

하지만, 이건 넘어가리라고 생각했다.

근데 Dtcping을 통하여 통신이 일어나지 않았다.

어떤 문서 보니깐 HKLM\SOFTWARE\Microsoft\Rpc 여기에다가 포트 넣으라고 되어있어서
씨붕 넣었다.

안되었다.

다시 internet 폴더에 



넣었다.


이게 무슨 개 삽질일까?


아마 인터넷폴더를 번역하면서 어떤 ㅂㅅ이 internet을 폴더라고 생각하지 않고 RPC폴더에 바로 넣는 것으로 착각했나 보다.



암튼 개삽질이었음.



정리해보자

1. RPC통신을 하려면 두 MSSQL 컴퓨터간에 컴퓨터이름으로 ping을 할수가 있어야 한다.

즉 CMD창(명령프롬프트)에서 ping xxx.xxx.xxx.xxx 가 아닌 A서버의 명칭 
 - 서버명칭은 제어판->시스템 에서 보면 나옵니다. - 

  즉, ping rpc서버1[가칭] 과 ping rpc서버2[가칭] 가 다 먹혀야 한다.
     이게 안먹힌다면, windows\system32\drivers\etc\hosts파일을 열어서 
     xxx.xxx.xxx.xxx  rpc서버1 을 추가하면 됩니다.
서버 재부팅 해주세요.
  
   이렇게 했는데도 안먹히면 분명히 firewall이 막혀있습니다.  
   네트웍 관리자에게 Ping 막혀있는지 물어보세요

2. RPC포트 열려있어야 합니다. 
   135번 포트입니다.
  이게 내부방화벽으로 막혀있을 수도 있고, 


아니면 네트웍 방화벽에도 막혀있을 수 있으니 네트웍 관리자에게 물어보세요


3. RCP가 내부적으로 사용하는 동적포트를 뚫어주어야 합니다.


그건 위에 다 설명되어 있습니다.




이후 DTCping.exe파일을 두 서버에서 동시에 실행한 후에


두 포트가 정상적으로 오는지 보고 통신이 왔다갔다 하는지를 보세요

한군데서 실행한 후에 다른데서 실행하면 두놈다 반응을 일으킵니다.
A서버에서 실행한 후 컴터이름을 치고 Ping을 했는데, B서버에서 반응이 없으면 RPC가 안되는 겁니다.


이게 되면 분산트렌잭션은 거의 100% 실행됩니다.

참조

http://nagid.egloos.com/2986380


덧글

  • 김선환 2022/05/12 12:20 # 삭제 답글

    서로 다른 디비 서버 간에 MSSQL 로 디비링크 작업중이었는데
    DTC 랑 방화벽 설정 다된거 같은데도 안되서
    이틀째 구글링 하면서 이것저것 해봐두 안됬습니다.
    서버이름으로 PING 날리는거 해보라고 해서
    했더니 한쪽 서버에서는 안되길래 거기 HOSTS 파일에 컴퓨터이름으로 등록 하고 재부팅 했더니
    한방에 되버리네요

    도움 얻고 갑니다. 감사합니다.
댓글 입력 영역