연결된 서버(Linked Server) 관련 글 보기
[ 연결된 서버 사용 방법]
[ 연결된 서버에서 오픈 쿼리 사용 방법 ]
[ 다른 RDBMS를 연결된 서버로 연결하기 ]
- MySQL
- Oracle
[ 연결된 서버로 프로시저 실행하기 ]
Openquery란?
- 지정한 연결된 서버에서 특정 쿼리를 실행하는 명령어
- 연결된 서버가 생성되지 않은 상태에서는 사용이 불가하다.
Openquery를 사용하는 이유?
그럼 이런 생각이 들 것이다.
'연결된 서버(Linked Server)와 같은데 왜 굳이 Openquery를 사용하는 걸까?'
연결된 서버는 여러명이 한 개의 DB서버를 이용하여 분산 처리를 진행 한다.
하지만 데이터 접근시 모든 값을 확인하기 때문에 데이터가 많을수록 DB서버의 성능 저하가 발생 할 수 있다.
그래서 DB 서버의 과부하 및 성능 저하를 방지하기 위해서 사용한다.
연결된 서버를 연결하여 데이터를 조회하는 프로세스를 살펴보자.
- 연결된 서버
- 연결된 서버에서 모든 데이터 호출
- 원격 서버로 데이터 전달
- 조건 확인
- 데이터 값 출력
이번엔 오픈 쿼리를 사용하여 데이터를 조회하는 프로세스를 살펴보자.
- openquery
- 연결된 서버에서 조건에 맞는 데이터 필터링 (조건 확인)
- 해당되는 조건의 데이터만 원격 서버로 데이터 전달
- 데이터 값 출력
프로세스를 확인해보면,
데이터를 모두 전달하고 조건을 확인하는 것과 조건을 필터링한 데이터만 전달하는 것으로 차이가 있다.
데이터 호출 시 전달되는 데이터의 양이 다르기 때문에 오픈 쿼리를 사용하는 것이 더욱 수월 할 수 있다는 것이다.
즉, 오픈 쿼리를 사용하면 연결된 서버에서의 기존 쿼리 실행 속도보다 더 빠르게 실행 될 수 있음을 의미한다.
사용 방법
- 쿼리의 FROM 절에 참조. 즉, 테이블 이름이 필요한 부분에 명시
- linked_server : 연결된 서버의 이름을 나타내는 식별자로 IP, 혹은 별칭 입력
- query : 연결된 서버에서 수행 할 쿼리문
- 중요: 반드시 테이블명을 적을 땐, 데이터베이스.소유주.테이블명순으로 명시
OPENQUERY ( [linked_server], 'query' )
- 쿼리 명령어를 따옴표(') 로 감싸야 함
- 다른 데이터베이스를 select 로 데이터를 가져오는 역할
사용 예시
예시를 위한 쿼리문이며, 조건을 명시하고 데이터를 접근하는 것을 권장합니다.
-- 예시 오픈쿼리로 다른 DB서버 데이터 조회
-- 서버 : 192.168.0.1
-- DB : testdb
-- 테이블 : testtable
SELECT * from OPENQUERY([192.168.0.1], 'select * from testdb.dbo.testtable')
Select 문
- SELECT * FROM openquery( [연결된서버], 'select * from 테이블' )
Insert 문
- INSERT openquery( [연결된서버], 'select * from 테이블' ) values( '값' )
Update 문
- UPDATE openquery( [연결된서버], 'select * from 테이블' ) SET 컬럼 = '값'
Delete 문
그대로 따라하시면 테이블 전체 값 다 지워집니다. 조건 꼭 넣으세요!!!
- DELETE openquery( [연결된서버], 'select * from 테이블' )
참고
- Microsoft SQL 문서 - OPENQUERY(Transact-SQL)
https://learn.microsoft.com/ko-kr/sql/t-sql/functions/openquery-transact-sql?view=sql-server-ver16