728x90

서버: 메시지 7391, 수준 16, 상태 1, 프로시저 IN_PRODUCTID_FROM_R3_D_TAX, 줄 10
OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
[OLE/DB provider returned message: 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다. ]
OLE DB 오류 추적 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].

예전에 위와 같은 에러로 고생한 적이 있었습니다.

연결된 서버를 이용한 쿼리 앞에 Begin tran만 붙이면 에러가 나는 것이었습니다.

관련 기술 자료 827805, 873160, 306212, 329332을 읽어 봤으나 제 상황에 맞는 것은 없었습니다.

그러던중 DTCping.exe 라는 툴을 발견하고 테스트 해 보게 되었지요. 그리고 문제를 쉽게 해결하였습니다.

간단히 이 툴 사용법을 설명 드리면...

1. 일단 위 링크를 눌러 DTCping.exe를 다운받으세요. (참고로 MS에서 제공되는 툴입니다.)

2. 분산트랜잭션으로 처리될 두 서버에 DTCping.exe 압축을 푸시고, 동시에 실행을 시킵니다.(Target Server는 서버의 hostname을 넣습니다.)

3. 그러면 각각의 폴더(DTCping.exe 가 풀린 폴더)에 로그파일이 저장됩니다.

4. 로그 파일을 열어 어떤 연결성 문제가 있는지 분석합니다.

 

제 상황에서는 WINS에 문제가 있어서, 서버1에서 서버2의 이름으로 서버를 찾을수 없었던 것이 문제였습니다. MS DTC간의 통신에서는 Name resolution이 NetBIOS name -> IP -> DNS name 순으로 이뤄지더군요.

 

아무튼 위와 같은 에러가 났을 경우,

set XACT_ABORT on, begin distributed tran, MS DTC 서비스 등을 체크 하고서도 문제가 해결되지 않는다면, 꼭 DTCping으로 네트워크 연결성 테스트를 하시기 바랍니다.

원문 : http://cafe.naver.com/sqlist/254

+ Recent posts