데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 쿼리 처리 아키텍처_분산 쿼리 아키텍처

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server는 T-SQL문에서 다른 유형의 OLE DB 데이터 원본을 참조하는 두 가지 메서드를 지원 한다.

 

[연결된 서버 이름]

시스템 저장 프로시저 sp_addlinkedserver 및 sp_addlinkedsrvlogin은 OLE DB 데이터 원본에서 서버 이름을 제공하는 데 사용 된다.

 

  • 링크드 서버 등록

EXEC sp_addlinkedserver

@server='Server1', -- Linked Server Name

@srvproduct = '', -- NULL

@provider = 'SQLNCLI', -- SQL Server Native Client OLE DB

@datasrc = '127.0.0.1', -- Target IP

@provstr='', -- NULL

@catalog='AdventureWorks2008R2' -- Target Database Name (Default Null)

GO

 

 

T-SQL 문에서는 4부분으로 된 이름을 사용하여 서버의 개체를 참조 할 수 있다. 예를 들어 연결된 서버 이름 SERVER1 이 SQL Server의 다른 인스턴스에 정의되는 경우 다음과 같이 서버의 테이블을 참조 할 수 있다.

SELECT * FROM SERVER1.ADVENTUREWORKS2008R2.SALES.SALESREASON

 

 

 

연결된 서버이름은 OPENQUERY문에 지정 될 수도 있다. 그런 다음 이 행집합은 T-SQL문의 테이블처럼 참조 될 수 있다.

 

SELECT * FROM OPENQUERY(ORACLE, 'SELECT * FROM TBL_X')

 

 

[임의 커넥터 이름]

데이터 원본이 자주 참조 되지 않는 경우 연결된 서버에 연결하는데 필요한 정보로 OPENROWSET 또는 OPENDATASOURCE 함수가 지정된다. 그런 다음 행 집합은 테이블이 T-SQL문에서 참조되는 방법과 동일하게 참조될 수 있다.

SELECT *

FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';

Employees);

 

 

 

SQL Server는 OLE DB를 사용하여 관계형 엔진과 저장소 엔진 간에 통신 한다. 관계형 엔진은 각 T-SQL문을 기본 테이블로 저장소 엔진에서 단순 OLE DB 행 집합에 대한 일련의 작업으로 분류 한다. 이것은 관계형 엔진도 OLE DB 데이터 원본의 단순 OLE DB 행 집합을 열 수 있음을 의미 한다.

 

 

관계형 엔진은 OLE DB API를 사용하여 연결된 서버에서 행 집합을 열고 그 행을 인출하고 트랜잭션을 관리 한다.

 

연결된 서버로 액세스되는 각 OLE DB 데이터 원본에 대해 OLE DB 공급자는 SQL Server를 실행 중인 서버에 있어야 한다. 특정 OLE DB 데이터 원본에 대해 사용할 수 있는 T-SQL 연산 집합은 OLE DB 공급자의 기능에 따라 다르다.

 

 

SQL Servers의 인스턴스마다 sysadmin 고정 서버 멤버 역할의 멤버는 SQL Server DisallowAdhocAccess 속성을 사용하여 OLE DB 공급자에 대한 임의 커넥터 이름의 사용을 설정 또는 해제 할 수 있다. 임의 액세스가 활성화되어 있는 경우 해당 인스턴스에 로그온된 모든 사용자는 OLE DB 공급자를 사용하여 액세스 할 수 있는 네트워크에서 데이터 원본을 참조하며 임의 커넥터 이름이 있는 SQL 문을 실행 할 수 있다.

 

데이터 원본에 대한 액세스를 제어하기 위해 sysadmin 역할의 멤버는 해당 OLE DB공급자에 대한 임의 액세스를 비활성화하고 그에 따라 사용자를 관리자가 정의한 연결된 서버 이름에서 참조한 데이터 원본으로만 제한한다. 기본적으로 임의 액세스는 SQL Server OLE DB 공급자에 대해 활성화 되어 있고 기타 모든 OLE DB 공급자에 대해서는 비활성화 되어 있다.

 

분산 쿼리를 사용하면 사용자는 SQL Server 서비스가 실행 중인 Microsoft Windows 계정의 보안 컨텍스트를 사용하여 다른 데이터 원본(파일, AD와 같은 비관계형 데이터 원본 등)에 액세스 할 수 있다. SQL Server는 Windows 로그인에 대해서는 적절하게 로그인을 가장하지만 SQL Server 로그인에는 가능하지 않다. 이렇게 하면 사용권한이 없는 다른 데이터 원본에 대한 액세스를 분산 쿼리 사용자에게 허용할 수 있지만 SQL Server가 실행중인 계정에는 사용 권한이 없다.

 

Sp_addlinkedsrvlogin을 사용하여 연결된 해당 서버에 액세스할 권한이 부여된 특정 로그인을 정의할 수 있다. 이 제어는 임의 이름에 대해 사용할 수 없으므로 임의 액세스에 대해 OLE DB 공급자를 활성화 할 경우 조심해야 한다.

 

  • 링크드 서버 로그인 정의

EXEC SP_ADDLINKEDSRVLOGIN 'SERVER1', 'FALSE', NULL, 'ID', 'PWD'

 

 

가능한 경우 SQL Server는 조인, 제한, 프로젝션, 정렬, Group by 연산 같은 관계형 연산을 OLE DB데이터 원본에 밀어 넣는다. SQL Server는 기본적으로 SQL Server로 기본 테이블을 검색하고 관계형 연산을 직접 수행하지는 않는다. SQL Server는 OLE DB 공급자를 쿼리하여 지원하는 SQL 문법의 수준을 확인하고 그 정보에 기반하여 공급자에 가능한 많은 관계형 연산을 밀어 넣는다.

 

SQL Server는 OLE DB 공급자가 OLE DB 데이터 원본에서 키 값이 배포되는 방식을 나타내는 통계를 반환하기 위한 메커니즘을 지정 한다. 이렇게 하면 SQL Server 쿼리 최적화 프로그램은 각 SQL 문의 요구 사항에 대해 데이터 원본의 데이터의 패턴을 좀 더 잘 분석하므로 최적의 실행 계획을 생성하는 쿼리 최적화 프로그램의 기능을 향상시킬 수 있다.

 

 

 

[참고 자료]

http://msdn.microsoft.com/ko-kr/library/ms179468(v=sql.105).aspx

 

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

 

No. Subject Author Date Views
1791 메모리 관리 아키텍처 – 버퍼 관리_페이지 쓰기 jevida(강성욱) 2016.09.28 1056
1790 메모리 관리 아키텍처 – 버퍼 관리_페이지 읽기 jevida(강성욱) 2016.09.28 1250
1789 메모리 관리 아키텍처 – 버퍼 관리 jevida(강성욱) 2016.09.28 1818
1788 메모리 관리 아키텍처 – Min/Max Server Memory 효과 jevida(강성욱) 2016.09.28 2557
1787 메모리 관리 아키텍처 – 동적 메모리 관리 jevida(강성욱) 2016.09.28 1365
1786 메모리 관리 아키텍처 – 프로세스 주소 공간 jevida(강성욱) 2016.09.28 1363
1785 메모리 관리 아키텍처 – 메모리 아키텍처 jevida(강성욱) 2016.09.28 1873
1784 데이터 압축 상태에 대한 개체 크기 예상 jevida(강성욱) 2016.09.28 1368
1783 sp_MSforeachdb, sp_MSforeachtable 프로시저 활용하기 jevida(강성욱) 2016.09.28 2887
» SQL Server 쿼리 처리 아키텍처_분산 쿼리 아키텍처 jevida(강성욱) 2016.09.28 1145
1781 SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 - 병렬 인덱스 작업 jevida(강성욱) 2016.09.28 1341
1780 SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 - 병렬 처리 수준 jevida(강성욱) 2016.09.28 1853
1779 SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 jevida(강성욱) 2016.09.28 1791
1778 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 - Preparing SQL Statements jevida(강성욱) 2016.09.28 1009
1777 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 - 강제 매개 변수화 jevida(강성욱) 2016.09.28 999
1776 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 - 단순 매개 변수화 jevida(강성욱) 2016.09.28 880
1775 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 - 매개 변수 및 실행 계획 재사용 jevida(강성욱) 2016.09.28 1098
1774 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 jevida(강성욱) 2016.09.28 1440
1773 DMV를 이용한 캐시된 저장 프로시저 통계 정보 확인 jevida(강성욱) 2016.09.28 989
1772 SQL Server 쿼리 처리 아키텍처_저장 프로시저 및 트리거 실행 jevida(강성욱) 2016.09.27 941





XE Login