mssql 다른 DB 연결하기 #3
2. 연결된 서버의 사용
이제 FUTURE\INST01을 연결된 서버로 등록하였으므로 FUTURE 서버에 로그인 해서 다음과 같은 쿼리문을 수행하면 원했던 결과가 표시됩니다.
SELECT * FROM [FUTURE\INST01].Pubs.dbo.Titles |
연결된 서버의 특정 테이블을 참고하기 위해서는 위 쿼리문에서처럼 "서버이름.데이터베이스이름.소유자.테이블"과 같이 사용해야 합니다. [FUTURE\INST01] 처럼 []를 사용한 이유는 특수문자 \ 가 포함된 인스턴스를 사용하기 때문이며, 일반적인 경우는 []를 사용할 필요가 없습니다.
만일 다음과 같은 쿼리문을 수행하면 결과는 어떨까요?
SELECT * FROM [FUTURE\INST01].master.dbo.sysobjets |
다음과 같은 에러가 발생하게 됩니다.
서버: 메시지 7314, 수준 16, 상태 1, 줄 1 |
왜냐하면 FUTURE\INST01의 james 계정이 master 데이터베이스에 대한 권한이 없기 때문입니다. james 계정은 FUTURE\INST01의 Pubs 데이터베이스에 대한 권한만을 가지고 있습니다. 그렇다면 다음의 쿼리문은 어떻게 될까요?
SELECT * FROM [FUTURE\INST01].Northwind.dbo.Customers |
james 계정에 Northwind 데이터베이스에 대한 접근 권한이 없으므로 에러가 나야 하는게 정상적으로 수행됩니다. 그 이유는 FUTURE\INST01 서버의 Northwind 데이터베이스에 guest 계정이 있기 때문입니다. (이 부분에 대해 이해가 안되시는 문은 로그인계정 관련된 강좌를 참고하시기 바랍니다.)
이제 다음과 같은 쿼리문도 가능합니다.
USE Pubs SELECT S.stor_id, S.title_id, T.title |
FUTURE 서버의 Pubs의 Sales 테이블과 FUTURE\INST01 서버의 Pubs의 Titles 테이블을 조인해서 검색을 하고 있습니다. 물론 위 예제의 경우 큰 의미는 없습니다. 하지만 실제 업무에서 이러한 기능은 많은 효과를 가져오게 됩니다.
3. QA를 이용한 연결된 서버 만들기
QA를 이용해서 연결된 서버를 만드는 과정은 다음과 같습니다.
USE master EXEC sp_addlinkedserver EXEC sp_addlinkedsrvlogin 'FUTURE\INST01', 'false', NULL, 'james', 'password' |
위 쿼리문에서 sp_addlinkedsrvlogin 부분은 EM에서 [보안] 탭에서 지정하는 방법이 여러가지인것 처럼 이 부분도 여러가지 방법으로 사용이 됩니다. 만일 FUTURE 서버의 jangrae 계정과 FUTURE\INST01 서버의 james 계정을 매핑 시키는 경우는 다음과 같이 해야 합니다.
USE master EXEC sp_addlinkedserver EXEC sp_addlinkedsrvlogin 'FUTURE\INST01', 'false', 'jangrae', 'james', 'james' |
앞의 방법과 비교해서 sp_addlinkedsrvlogin 부분이 달라진 것을 볼 수 있습니다. sp_addlinkedsrvlogin 저장프로시져에 대한 자세한 내용은 온라인 설명서를 참고하시기 바랍니다.
4. 정리
이번 강좌에서는 연결된 서버를 만드는 과정을 살펴 보았습니다. 예전에 연결된 서버 만드는 방법을 물어오는 분들이 있었는데 이제야 강좌를 올리게 되었습니다. 너무 늦은 감이 있어 죄송합니다.
이제 연결된 서버를 만드는 방법을 배웠으니 이것을 토대로 해서 다양한 연결된 서버 이용방법을 살펴 보도록 하겠습니다. 예를 든다면 엑셀 파일의 워크시트의 내용을 QA에서 검색하고 입력하는 방법 또는 텍스트 파일의 내용을 QA에서 검색하고 입력하는 방법등입니다. 다음 강좌를 기대해 주시기 바랍니다.
[출처] 제 1 장 : 연결된 서버 만들기|작성자 눈꽃천사