MSSQL에서 Linked Server를 설정한 뒤 실제로 정상적으로 연결되는지 확인해야 할 때가 있다.
Linked Server 자체는 등록되어 있지만 실제 쿼리를 실행하면 접속 오류가 발생하거나, 로그인 계정 문제로 데이터를 읽지 못하는 경우도 있다.
이번 글에서는 sp_testlinkedserver를 이용해 Linked Server 연결 상태를 확인하고, 연결되지 않을 때 어떤 부분부터 확인해야 하는지 정리해보려고 한다.
1. 현재 등록된 Linked Server 확인
먼저 현재 SQL Server에 어떤 Linked Server가 등록되어 있는지 확인한다.
SELECT
name,
product,
provider,
data_source,
is_linked
FROM sys.servers
WHERE is_linked = 1;
예를 들어 다음과 같이 Linked Server가 등록되어 있다고 가정한다.
name : MYCLIENT
provider : MSOLEDBSQL
data_source: 192.168.0.100,1433
여기서 확인할 부분은 Linked Server 이름과 실제 연결 대상 서버 주소이다.
이후 테스트할 때는 name에 표시되는 Linked Server 이름을 사용한다.
2. sp_testlinkedserver로 연결 테스트
가장 간단한 방법은 sp_testlinkedserver를 사용하는 것이다.
Linked Server 이름이 MYCLIENT라면 다음과 같이 실행한다.
EXEC master.dbo.sp_testlinkedserver N'MYCLIENT';
GO
정상적으로 연결되면 별도의 결과 테이블이 출력되는 것이 아니라 오류 없이 명령이 종료된다.
반대로 연결에 문제가 있으면 해당 원인에 대한 오류가 발생한다.
따라서 Linked Server를 생성한 뒤에는 실제 데이터를 조회하기 전에 먼저 이 명령으로 연결 상태를 확인해보는 것이 좋다.
3. TRY/CATCH로 오류 내용 확인
프로그램이나 관리용 쿼리에서 테스트 결과를 조금 더 명확하게 확인하고 싶다면 TRY/CATCH를 사용할 수도 있다.
BEGIN TRY
EXEC master.dbo.sp_testlinkedserver N'MYCLIENT';
PRINT N'Linked Server 연결 정상';
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
정상적으로 연결되면:
Linked Server 연결 정상
이 출력된다.
실패할 경우에는 오류 번호와 메시지를 확인할 수 있다.
Linked Server 문제를 확인할 때는 단순히 "연결이 안 된다"라고 판단하기보다 실제 오류 메시지를 먼저 확인하는 것이 중요하다.
4. Linked Server 로그인 매핑 확인
연결 자체가 되지 않는다면 다음으로 확인할 부분은 로그인 설정이다.
Linked Server에 설정되어 있는 로그인 매핑은 다음 명령으로 확인할 수 있다.
EXEC master.dbo.sp_helplinkedsrvlogin N'MYCLIENT';
GO
결과에서는 다음과 같은 내용을 확인할 수 있다.
Linked Server
Local Login
Is Self Mapping
Remote Login
특히 Is Self Mapping 값을 확인할 필요가 있다.
Self Mapping이 설정되어 있으면 로컬 SQL Server에서 사용하는 보안 컨텍스트를 이용하여 원격 서버에 연결하게 된다.
별도의 SQL Server 로그인 계정을 사용하도록 설정했다면 Remote Login에 해당 계정이 표시된다.
5. 별도의 원격 계정을 사용하는 경우
원격 SQL Server의 특정 계정을 이용해 Linked Server에 접속하려면 sp_addlinkedsrvlogin으로 로그인 매핑을 설정할 수 있다.
예를 들어:
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'MYCLIENT',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'RemoteUser',
@rmtpassword = N'Password';
GO
각 항목의 의미는 다음과 같다.
- @rmtsrvname : Linked Server 이름
- @useself : 현재 로그인 정보를 사용할지 여부
- @locallogin : 적용할 로컬 로그인
- @rmtuser : 원격 SQL Server 로그인
- @rmtpassword : 원격 SQL Server 로그인 비밀번호
@locallogin = NULL로 지정하면 모든 로컬 로그인에 해당 매핑이 적용될 수 있으므로 실제 운영 환경에서는 필요한 범위를 확인하고 설정하는 것이 좋다.
또한 관리자 계정을 Linked Server 전용 계정으로 사용하는 것보다는 필요한 권한만 가진 별도의 계정을 사용하는 것이 좋다.
비밀번호가 들어 있는 SQL 스크립트는 Git이나 공개 저장소 등에 저장하지 않도록 주의한다.
6. 실제 SELECT 쿼리로 최종 확인
sp_testlinkedserver가 정상적으로 완료되면 실제 데이터를 조회해본다.
Linked Server는 일반적으로 다음과 같은 4파트 이름을 사용한다.
[Linked Server].[Database].[Schema].[Table]
예를 들어:
SELECT TOP (10) *
FROM [MYCLIENT].[TESTDB].[dbo].[TABLE1];
GO
또는 원격 SQL Server의 데이터베이스 목록을 확인하려면 다음과 같이 테스트할 수도 있다.
SELECT
name,
database_id
FROM [MYCLIENT].[master].[sys].[databases];
GO
여기까지 정상적으로 조회된다면 Linked Server 연결뿐 아니라 실제 원격 데이터에 접근할 수 있는 권한까지 정상적으로 설정되어 있다고 볼 수 있다.
7. Linked Server가 등록되어 있는데 연결되지 않는 경우
sp_testlinkedserver 실행 시 오류가 발생한다면 다음 순서로 확인한다.
① Linked Server 이름 확인
먼저 실제 등록된 이름을 확인한다.
SELECT
name,
provider,
data_source
FROM sys.servers
WHERE is_linked = 1;
쿼리에서 사용하는 Linked Server 이름과 등록된 이름이 동일해야 한다.
② 서버 주소 및 SQL Server 인스턴스 확인
data_source에 설정한 서버 주소를 확인한다.
예를 들어:
192.168.0.100
또는:
SERVER01\SQLEXPRESS
또는 특정 TCP 포트를 사용한다면:
192.168.0.100,1433
처럼 설정될 수 있다.
IP, 서버 이름, 인스턴스 이름 또는 포트가 잘못되어 있으면 Linked Server 연결이 실패한다.
③ 네트워크 연결 확인
다른 SQL Server에 접속하는 경우 다음 내용도 확인해야 한다.
- 대상 서버가 실행 중인지
- SQL Server 서비스가 정상 실행 중인지
- TCP/IP가 필요한 환경에서 활성화되어 있는지
- 방화벽에서 SQL Server 포트가 차단되어 있지 않은지
- 서버 이름 또는 IP에 접근 가능한지
SSMS에서 대상 SQL Server에 직접 접속할 수 있는지 먼저 확인해보는 것도 좋은 방법이다.
SSMS에서 직접 접속 자체가 되지 않는다면 Linked Server 설정보다 네트워크 또는 원격 SQL Server 설정을 먼저 확인해야 한다.
④ 로그인 매핑 확인
다음 명령을 다시 실행한다.
EXEC master.dbo.sp_helplinkedsrvlogin N'MYCLIENT';
GO
필요한 로그인 매핑이 없다면 Linked Server가 등록되어 있더라도 원격 서버에 인증하지 못할 수 있다.
Linked Server 생성 시 기본 Self Mapping이 만들어질 수 있기 때문에 현재 환경에서 어떤 로그인 방식이 사용되고 있는지 확인하는 것이 좋다.
⑤ 원격 계정의 권한 확인
Linked Server 연결에는 성공했지만:
SELECT *
FROM [MYCLIENT].[TESTDB].[dbo].[TABLE1];
와 같은 실제 조회에서 오류가 발생한다면 원격 SQL Server 로그인 계정의 Database 및 Object 권한을 확인해야 한다.
Linked Server의 로그인 매핑과 실제 원격 데이터베이스 권한은 별개의 문제이다.
즉:
Linked Server 연결 성공
↓
원격 SQL Server 로그인 성공
↓
Database 접근 권한
↓
Table SELECT 권한
순서로 모두 정상이어야 실제 데이터를 조회할 수 있다.
8. SQL Server 2025에서 연결되지 않는 경우
SQL Server 2025에서는 Linked Server를 사용할 때 한 가지 더 확인해야 한다.
SQL Server 2025의 MSOLEDBSQL은 Microsoft OLE DB Driver 19를 사용하며 연결 암호화 설정이 변경되었다.
Linked Server 생성 시 encrypt 옵션을 지정해야 하는 환경이 있다.
내부 개발 또는 테스트 환경에서 암호화를 선택적으로 사용하는 구성이라면 다음과 같은 방식이 가능하다.
EXEC master.dbo.sp_addlinkedserver
@server = N'MYCLIENT',
@srvproduct = N'',
@provider = N'MSOLEDBSQL',
@datasrc = N'192.168.0.100,1433',
@provstr = N'encrypt=optional';
GO
보안이 필요한 운영 환경에서는 적절한 인증서를 구성하고 암호화를 사용하는 것이 좋다.
@provstr = N'encrypt=mandatory'
SQL Server 2025로 버전을 올린 뒤 기존 Linked Server가 갑자기 연결되지 않는다면 Provider와 encrypt 설정도 함께 확인해볼 필요가 있다.
9. Linked Server 문제 확인 순서 정리
Linked Server가 연결되지 않을 때는 다음 순서로 확인하면 문제 범위를 빠르게 좁힐 수 있다.
1. Linked Server 등록 여부
↓
2. sp_testlinkedserver 실행
↓
3. 서버 IP / Instance / Port 확인
↓
4. 네트워크 및 방화벽 확인
↓
5. Linked Server 로그인 매핑 확인
↓
6. 원격 SQL Server 로그인 확인
↓
7. Database / Table 권한 확인
↓
8. 실제 SELECT 실행
↓
9. SQL Server 2025라면 encrypt 설정 확인
개인적으로는 Linked Server 설정 후 바로 실제 업무 쿼리를 실행하기보다 먼저 sp_testlinkedserver로 연결 자체가 정상인지 확인한 다음 실제 데이터 조회를 테스트하는 방법을 추천한다.
연결 자체의 문제와 데이터베이스 권한 문제를 분리해서 확인할 수 있기 때문이다.
관련 글
Linked Server를 처음 생성하고 설정하는 방법은 아래 글을 참고하면 된다.
[MSSQL] 연결된 서버(Linked Server) 설정하기
연결된 서버는 다른 네트워크의 서버를내 서버의 MSSQL로 연결한다.이를 통해 내 서버에서 다른 서버에 접근하는 방법 중 하나 인데,오늘은 이 방법에 대해 알아보자.※ 2026년 업데이트이 글은 201
zadd.tistory.com
Linked Server가 정상적으로 구성된 이후에는 이번 글의 sp_testlinkedserver를 이용해 실제 연결 상태를 확인하면 된다.
'Programming > Database' 카테고리의 다른 글
| [MSSQL] 데이터베이스, 테이블 용량 확인 하기 (0) | 2019.12.06 |
|---|---|
| [MSSQL] 연결된 서버(Linked Server) 설정하기 (0) | 2019.12.05 |
| [MSSQL] 데이터베이스 파일(MDF, LDF) 저장 위치 변경하기 (1) | 2019.12.03 |
| [MSSQL] 운영체제 오류 5 해결 (엑세스가 거부되었습니다.) (1) | 2019.12.03 |
| [MSSQL] 오류 3702 해결(데이터베이스는 현재 사용 중이므로 삭제할 수 없습니다.) (0) | 2019.08.19 |