<작업내용>
mssql에서 A서버를 링크드서버로 구성하여 B서버에서 접근 하려 합니다.
B서버에서 특정 테이블에 데이터가 INSERT되면 A서버로 링크드서버를 통해
오픈쿼리로 같은 데이터를 INSERT하려고 합니다.
<트리거 스크립트>
CREATE Trigger [dbo].[트리거명] on [dbo].[B서버_테이블]
for Insert
AS
INSERT openquery([A서버주소], 'select TEST_NM from [디비명].dbo.A서버_테이블')
VALUES (123)
GO
<에러상황>
위 상태에서 B서버_테이블에 INSERT문을 날리면 아래와 같이 에러가 발생합니다.
-------------------------------------------------------------------------
연결된 서버 "A서버"의 OLE DB 공급자 "SQLNCLI11"이(가) 메시지 "활성 중인 트랜잭션이 없습니다."을(를) 반환했습니다.
메시지 7391, 수준 16, 상태 2, 줄 2
연결된 서버 "A서버"의 OLE DB 공급자 "SQLNCLI11"이(가) 분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.
-------------------------------------------------------------------------
<시도한 방법>
1. MS DTC 서비스 활성화(가장 많이 검색된 방법)
2. 방화벽은 MSDTC.EXE.프로그램을 예외 처리하였고, 혹시 몰라 아예 방화벽을 해제 하였습니다.
3. 링크드서버 옵션 설정 변경
4. 레지스트리 변경
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTCSecurity에 NetworkDtcAccess => 1
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTCSecurity에 NetworkDtcAccessTransactions => 1
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTC에 TurnOffRpcSecurity => 1
5. 쿼리 변경
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRAN
쿼리
COMMIT TRAN
SET XACT_ABORT OFF
위 방법을 A서버, B서버 모두 적용하였지만 에러가 계속 발생합니다.
하루동안 이것만 계속 살펴보았으나 해결책을 찾을수가 없네요.
서버구성 문제인지 쿼리부분 문제인지 아직 감도 안오네요.
해결방법을 알고 계신분은 답글 좀 부탁 드립니다.