안녕하세요. MSSQL 분산트랜잭션 에러때문에 문의를 드립니다.
현재 상태가 저희쪽 서버에 다른 서버가 연결 되어있고 두 서버는 다른 네트웍망입니다.
DTC 설정 부터 RPC , 방화벽까지 두서버가 다 오픈된 상태인데
스튜디오를 통해 프로시저(두 서버에 insert 하는 작업입니다.)를 실행하면 정상적으로 작동이 됩니다만
응용프로그램을 통해 프로시저를 실행시키면
"연결된 서버 "XXXXX"의 OLE DB 공급자 "SQLNCl10"이(가) 분산트랜잭션을 시작할 수 없으므로 요청한
작업을 수행할 수 없습니다."
라는 오류 메세지를 뜨우며 프로시저가 실행되지 않습니다.
스튜디오에서 프로시저를 실행하면 정상작동이 되는걸로 보아 설정 및 연결에는 문제가 없는것 같은데
왜 응용프로그램을 통해 프로시저를 실행시키면 왜 저런 에러가 발생할까요??
(응용프로그램 코드에는 이상이 없는것 같습니다. 다른 프로시저를 돌려보니 잘 실행되네요 ㅠ)
4개의 답변이 있습니다.
혹시 모르니 아래 방법도 해보세요
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스튜디오에서 해당 프로시저를 실행하면 정상적으로 처리가 되는데 왜!! 어플리케이션에서 해당 프로시저를 실행하면 분산트랜잭션 오류가 뜨는지 이유를 모르겠다는 겁니다 ㅠㅠ
스튜디오에서는 되는데, 어플리케이션에서 안된다면...
어플리케이션에 설정된 계정이 다르다거나 다른 포트를 이용한다거나...
어떤 차이가 있기 때문이 아닐까 싶은데요.
어플리케이션에서 내부적을 어떻게 설정되어 있고, 어떤 방식으로 접근 시도하는지를 확인해 볼 필요가 있을 것 같네요.
어플리케이션의 소스를 볼 수 없는 상황이라면...
와이어샤크 같은 네트워크 트래픽 캡쳐 툴을 이용해서 스튜디오를 통해서 접근할때와 응용 프로그램을 통해서 접근할때 지나가는 트래픽에 어떤 차이가 있는지 비교 검토함으로해서 문제의 실마리를 찾을 수 있지 않을까 하는 생각도 드네요.
hgp33 | 약 3년 전
감사합니다. 소스는 볼수가 있고 사용자가 입력한 값을 네트워크를 통해 DB에 저장하는 단순한 프로그램입니다.
프로그램 코드에서 쿼리부분 처리할때 트랜잭션으로 묶었는지를 확인을 해야 하는데 관련된 부분이 코딩이 된게 없어 더 답답합니다. ㅠㅠ
혹시 BEGIN TRAN 사용 하셨나요?
BEGIN TRAN 대신 BEGIN DISTRIBUTED TRAN 을 써보세요
통신하는 두 서버의 설정이 잘못 되어서 발생되는 문제 입니다.
아래 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년 전
사용하지 않았습니다. 혹시 모르니 프로시저에 알려주신 트랜잭션 추가 해보겠습니다.