본문 바로가기

Database/MS-SQL

[Linked Server] 원격서버 프로시져 호출 오류 해결기

A서버(로컬), B서버(원격)

이 두 MSSQL 서버에서 서로 링크드서버로 각 각 구성 되어 있고, 게시구독도 함께 구성되어 있다.


각 서버에서 일반적인 쿼리를 동작하면 아무 문제없이 실행 된다.


그런데 이상하게 원격 프로시져 호출만 하면 아래와 같은 오류가 나면서 실행이 되지 않았다.


'USER_1'이(가) 서버에서 원격 로그인으로 정의되어 있지 않으므로 서버 'Server_B'에 연결할 수 없습니다. 올바른 로그인 이름을 지정했는지 확인하십시오. .


원격서버에서 프로시져를 호출하는 방법을 검색해 보았으면 알겠지만..

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를 사용하면 된다.

주의할 점은 계정 추가의 대상은 로컬서버가 아니고 원격서버에 추가해야 한다.