SharedIT | 묻고 답하기(AMP)

MSSQL 분산트랜잭션 관련문의드립니다.

안녕하세요. MSSQL 분산트랜잭션 에러때문에 문의를 드립니다.

현재 상태가 저희쪽 서버에 다른 서버가 연결 되어있고 두 서버는 다른 네트웍망입니다.

DTC 설정 부터 RPC , 방화벽까지 두서버가 다 오픈된 상태인데

스튜디오를 통해 프로시저(두 서버에  insert 하는 작업입니다.)를 실행하면 정상적으로 작동이 됩니다만 

응용프로그램을 통해 프로시저를 실행시키면  

"연결된 서버 "XXXXX"의 OLE DB 공급자 "SQLNCl10"이(가) 분산트랜잭션을 시작할 수 없으므로 요청한

작업을 수행할 수 없습니다."

라는 오류 메세지를 뜨우며 프로시저가 실행되지 않습니다.

스튜디오에서 프로시저를 실행하면 정상작동이 되는걸로 보아 설정 및 연결에는 문제가 없는것 같은데

왜 응용프로그램을 통해 프로시저를 실행시키면 왜 저런 에러가 발생할까요?? 

(응용프로그램 코드에는 이상이 없는것 같습니다. 다른 프로시저를 돌려보니 잘 실행되네요 ㅠ)

Tags : 태그가 없습니다.

4개의 답변이 있습니다.

차바라기
  0 추천 | 약 3년 전

혹시 모르니 아래 방법도 해보세요

EXEC sp_serveroption @server=N'LGWMS', @optname=N,remote proc transaction promotion', @optvalue=N'FALSE'

차바라기 | 약 3년 전

'LGWMS'는 DBname을 적어주셔야 합니다.

차바라기 | 약 3년 전

https://jsson.tistory.com/16

이부분도 참고 하시면 될듯합니다.

hgp33 | 약 3년 전

감사합니다. 힘들게 링크를 걸어주셨는데.. 해당 링크부분도 이미 다 해본상태입니다. ㅠㅠ 

현재 문제가 되는 부분이 분산트랜잭션 처리 에러가 MSSQL스튜디오에서 해당 프로시저를 실행하면 정상적으로 처리가 되는데 왜!! 어플리케이션에서 해당 프로시저를 실행하면 분산트랜잭션 오류가 뜨는지 이유를 모르겠다는 겁니다 ㅠㅠ

wansoo
  0 추천 | 약 3년 전

스튜디오에서는 되는데, 어플리케이션에서 안된다면...

어플리케이션에 설정된 계정이 다르다거나 다른 포트를 이용한다거나...

어떤 차이가 있기 때문이 아닐까 싶은데요.

어플리케이션에서 내부적을 어떻게 설정되어 있고, 어떤 방식으로 접근 시도하는지를 확인해 볼 필요가 있을 것 같네요.

어플리케이션의 소스를 볼 수 없는 상황이라면...

와이어샤크 같은 네트워크 트래픽 캡쳐 툴을 이용해서 스튜디오를 통해서 접근할때와 응용 프로그램을 통해서 접근할때 지나가는 트래픽에 어떤 차이가 있는지 비교 검토함으로해서 문제의 실마리를 찾을 수 있지 않을까 하는 생각도 드네요.

hgp33 | 약 3년 전

감사합니다. 소스는 볼수가 있고 사용자가 입력한 값을 네트워크를 통해 DB에 저장하는 단순한 프로그램입니다.

프로그램 코드에서 쿼리부분 처리할때 트랜잭션으로 묶었는지를 확인을 해야 하는데 관련된 부분이 코딩이 된게 없어 더 답답합니다. ㅠㅠ

 

deerokgo
  0 추천 | 약 3년 전

혹시 BEGIN TRAN 사용 하셨나요?

BEGIN TRAN 대신 BEGIN DISTRIBUTED TRAN 을 써보세요

deerokgo
  0 추천 | 약 3년 전

통신하는 두 서버의 설정이 잘못 되어서 발생되는 문제 입니다.

아래 URL 내용 보시고 처리해보시기 바랍니다.

https://hackhyun.tistory.com/249 


https://suemirr.tistory.com/entry/MSSQL-2008-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98 


hgp33 | 약 3년 전

감사합니다. 허나 현재 문제가 SQL매니저먼트스튜디오에서 해당 프로시저를 실행하면 잘되고 응용프로그램을 통해 해당 프로시저를 실행시키면 발생하는 문제입니다. ㅠㅠ

프로그램소스에서는 트랜잭션 처리를 한 부분도 없고요 ㅠ 


deerokgo | 약 3년 전

혹시 BEGIN TRAN 사용 하셨나요?

BEGIN TRAN 대신 BEGIN DISTRIBUTED TRAN 을 써보세요

hgp33 | 약 3년 전

사용하지 않았습니다. 혹시 모르니 프로시저에 알려주신 트랜잭션 추가 해보겠습니다.