A서버(로컬), B서버(원격)
이 두 MSSQL 서버에서 서로 링크드서버로 각 각 구성 되어 있고, 게시구독도 함께 구성되어 있다.
각 서버에서 일반적인 쿼리를 동작하면 아무 문제없이 실행 된다.
그런데 이상하게 원격 프로시져 호출만 하면 아래와 같은 오류가 나면서 실행이 되지 않았다.
원격서버에서 프로시져를 호출하는 방법을 검색해 보았으면 알겠지만..
RPC, RPC 내보내기 설정만 하면 된다고 나와있는데.. 잘 안되는 것을 보니..
이런 문제를 겪은 사람이 없는가 보다.
게시구독이 서비스되고 있는 상황이라 원격서버 재구성도 불가능한 터라.. 거의 반 포기 상태였다.
그러다 포럼에서 답변받은 내용에서 해결책을 발견한다.
http://systemcenter.wiki/?GetElement=Microsoft.SQLServer.2016.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule&Type=Rule&ManagementPack=Microsoft.SQLServer.2016.Monitoring&Version=6.7.7.0&Language=KOR
이런 ms관련 도움말은 항상 어렵게만 느껴져서 대충 읽기 마련이었는데..
짬이 나서 천천히 읽어보고 나서야 어느 정도 이해가 되었다.
우선, 이 페이지의 내용을 보면 키 포인트는 바로 아래 내용이었다.
로그인 매핑이 없거나 연결 문자열에 지정된 서버 이름이 sysremotelogins 테이블의 정확한 이름과 일치하지 않고 게스트 계정에 sysremotelogins의 매핑이 없는 경우 이 오류를 수신합니다. 원격 사용자의 로그인 이름이 null이거나 비어 있는 경우에도 이 오류가 나타납니다.
이 내용을 보고 master 테이블에 sys.sysremotelogins 를 검색해보니..
게시구독에 사용되는 계정만 등록되어 었었다.
게시구독을 설정을 할떄는 아무런 액션을 하지 않았음에도 sysremotelogins에 등록되어 있고,
Linked DB를 설정하였을 때는 sysremotelogins에 등록되지 않는 것을 보아, 두 방식이 무언가 차이점이 있나 보다. (공부의 부족함이 뼈저리게 느껴진다.. ㅠ.ㅠ)
여하튼.. sysremotelogins에 해당 원격 사용자 계정을 추가 하기위해서는 sp_addremotelogin를 사용하면 된다.
주의할 점은 계정 추가의 대상은 로컬서버가 아니고 원격서버에 추가해야 한다.