dblink2

DB/MSSQL 2019. 3. 22. 13:59

dblink2



SQL 네이티브 클라이언트 OLE DB 공급자 이용



SQL 네이티브 클라이언트 OLE DB 공급자


Microsoft SQL 네이티브 클라이언트 OLE DB 공급자는 Microsoft SQL Server 2005 데이터베이스에 OLE DB 인터페이스를 제공합니다. SQL Server 분산 쿼리는 SQL 네이티브 클라이언트 OLE DB 공급자를 사용하면 분산 쿼리가 SQL Server의 원격 인스턴스에서 데이터를 쿼리할 수 있습니다.


SQL Server 데이터베이스를 액세스하기 위해 연결된 서버를 만들려면 

sp_addlinkedserver를 실행하여 연결된 서버를 만들고 data_source로 SQL Server의 원격 인스턴스를 실행하는 서버의 네트워크 이름을 지정합니다. SQL Server 연결된 서버에서 공급자 SQLNCLI 지정은 선택 항목입니다. 


예를 들어 네트워크 이름이 NetSQLSrvr인 서버에서 실행되는 SQL Server 인스턴스에 대해 작동하는 LinkSQLSrvr라는 연결된 서버를 만들려면 다음 중 하나를 실행하십시오. 


sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'

sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'또는 다음 예에서와 같이 SQL Server 연결된 서버를 해당 네트워크 이름으로 정의할 수 있습니다.


sp_addlinkedserver N'NetSQLSrvr'

SQL Server 2000 인스턴스를 실행하는 서버에 대해 분산 쿼리를 실행할 때는 SQL Server 2000 서비스 팩 4(SP4)를 적용하는 것이 좋습니다. SP4를 적용하지 않은 경우 SP4에 포함된 Instcat.sql 스크립트를 실행하여 카탈로그 저장 프로시저를 업그레이드해야 합니다.


분산 쿼리가 SQL Server 버전 7.0 또는 그 이전 버전을 실행하는 서버에 대해 실행될 때는 분산 쿼리가 제대로 작동하도록 이전 버전의 카탈로그 저장 프로시저를 업그레이드해야 합니다. 예를 들어 서버가 SQL Server 7.0 인스턴스를 실행 중인 경우 SQL Server 2005의 인스턴스에서 실행 중인 서버의 분산 쿼리에서 해당 서버의 카탈로그 저장 프로시저를 참조하려면 먼저 카탈로그 저장 프로시저를 SQL Server 2005로 업그레이드해야 합니다. 


원격 SQL Server 테이블이 업데이트되면 로컬 서버나 클라이언트는 이 업데이트에 대해 실행한 트리거로부터 어떤 결과 집합이나 메시지도 받지 못하게 됩니다.


네 부분으로 된 이름을 사용할 때는 항상 스키마 이름을 지정하십시오. 분산 쿼리에 스키마 이름을 지정하지 않으면 OLE DB가 테이블을 찾을 수 없습니다. 로컬 테이블을 참조할 때 소유자 이름을 지정하지 않으면 SQL Server는 기본값을 사용합니다. 다음 SELECT 문은 연결된 서버 로그인이 연결된 서버의 AdventureWorks 데이터베이스에 있는 dbo 사용자에 매핑될 경우에도 7314 오류를 생성합니다.


sp_addlinkedserver @server = N'LinkServer',

    @srvproduct = N' ',

    @provider = N'SQLNCLI', 

    @datasrc = N'ServerNetName', 

    @catalog = N'AdventureWorks'

GO

SELECT *

FROM LinkServer.AdventureWorks.dbo.Vendor다음 예는 네트워크 이름이 othersite인 같은 컴퓨터를 액세스하는 연결된 서버와 원격 서버를 정의합니다. 이 연결된 서버 정의는 원격 서버의 네트워크 이름과 같은 이름을 사용합니다. 원격 서버 정의는 다른 이름을 사용합니다.


/* Create a linked server definition to othersite. */

EXEC sp_addlinkedserver 'othersite', N'SQL Server'


/* Create a remote server definition using a

   fictitious name. */

EXEC sp_addserver 'RPCothersite'


/* Set the fictitious name to the network name far away. */

EXEC sp_setnetname 'RPCothersite', 'othersite'이 이름들은 분산 쿼리나 원격 프로시저 호출에서 참조될 수 있습니다.


/* A distributed query referencing othersite. */

SELECT *

FROM othersite.Northwind.dbo.Employees

/* A remote procedure call to the same server. */

EXEC RPCothersite.master.dbo.sp_who

/* Distributed queries can be used to execute

   stored procedures on the other server. */

EXEC othersite.master.dbo.sp_who연결된 서버를 통해 실행된 저장 프로시저와 원격 서버를 통해 실행된 저장 프로시저의 로그인 매핑 메커니즘에는 몇 가지 차이점이 있습니다. 자세한 내용은 서버 연결을 참조하십시오.


 분산 쿼리의 트랜잭션 고려 사항 

Microsoft SQL 네이티브 클라이언트 OLE DB 공급자는 중첩된 트랜잭션을 지원하지 않습니다. 따라서 여러 Transact-SQL 문이 포함된 트랜잭션 내의 데이터 수정 작업에 대해, 그리고 분산 분할 뷰에 대한 데이터 수정 작업에 대해 XACT_ABORT를 ON으로 설정해야 합니다.

'DB > MSSQL' 카테고리의 다른 글

dblink3  (0) 2019.04.02
dblink  (0) 2019.04.02
페이지 쿼리2  (0) 2019.03.22
페이지 쿼리  (0) 2019.03.22
DBLINK  (0) 2019.03.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,