Microsoft SQL Server에서 사용되는 OPENQUERY에 대해 알아보겠습니다.
Microsoft SQL Server에서 OPENQUERY는 지정한 연결된 서버(OLE DB 데이터 원본)에서 전달된 쿼리를 실행하는 함수입니다. 주로 분산 데이터베이스 환경에서 사용되며, 여러 데이터베이스 간에 데이터를 조회하거나 수정할 때 유용합니다.
Ⅰ. Open Query 란?
SQL Server의 Linked Server 기능을 활용하여 원격 데이터베이스 서버에 직접 쿼리를 전달하고 그 결과를 로컬 서버로 가져오는 역할을 합니다. 주로 다른 데이터베이스 유형(예: Oracle, MySQL 등)과의 상호작용을 위해 사용됩니다.
Ⅱ. Open Query 기본 문법
SELECT * FROM OPENQUERY([Linked Server명], [원격 서버에서 실행할 SQL 쿼리]) Linked Server명 : 미리 설정된 Linked Server 이름 원격 서버에서 실행할 SQL 쿼리: 원격 서버에서 실행될 SQL 명령 |
Ⅲ. Open Query 사용 예시
SELECT * FROM OPENQUERY(MyDatabase, 'SELECT name, age FROM User') MyDatabase라는 연결된 서버에서 User 테이블의 name과 age 컬럼을 가져옵니다. |
Ⅳ. Open Query 에서 SELECT 를 제외한 DML 실행 가능 여부
ⅰ) INSERT, UPDATE, DELETE 문은 OPENQUERY를 통해 실행할 수 있습니다.
ⅱ) 원격 서버의 트랜잭션 및 잠금 정책에 따라 성능 및 동시성에 영향을 미칠 수 있습니다.
ⅲ) MERGE 문도 실행할 수 있지만, 원격 서버의 설정에 따라 제약이 있을 수 있습니다.
Ⅴ. Linked Server의 트랜잭션 영향
ⅰ) OPENQUERY는 기본적으로 원격 서버에서 독립적인 트랜잭션을 실행합니다.
ⅱ) 로컬 서버에서 실행하는 트랜잭션과 독립적으로 실행되므로, Distributed Transaction (분산 트랜잭션, MSDTC) 이 활성화되지 않으면 ROLLBACK이 되지 않을 수 있습니다.
Ⅴ 성능 및 부하 영향
ⅰ) OPENQUERY는 원격 서버에서 직접 실행되므로, 네트워크 부하를 줄이는 효과가 있습니다.
ⅱ) 대량의 DML 작업을 수행할 경우, 원격 서버의 트랜잭션 로그 증가 및 잠금 문제가 발생할 수 있습니다.
ⅲ) 원격 서버에서 실행되는 쿼리는 해당 서버의 리소스를 직접 사용하므로, CPU 및 I/O 부하에 영향을 줄 수 있습니다.