Introducción a los servidores vinculados en SQL Server

Un servidor vinculado consiste en un enlace a una fuente de datos externa (remota). La fuente de datos remota puede ser Oracle, Access, Excel o cualquier fuente de datos a la que se pueda acceder mediante OLE DB (por ejemplo, Index Server).

Servidores Remotos

  • No usan proveedores OLE DB
  • Una configuración de servidor remoto permite a un cliente conectado a una instancia SQL Server ejecutar un procedimiento almacenado en otra instancia de SQL Server sin establecer otra conexión.
  • Tanto procedimientos almacenados como consultas distribuidas están permitidas contra servidores vinculados, sin embargo, sólo se permiten procedimientos almacenados contra servidores remotos.
  • Conviene usar Servidores Vinculados en vez de Servidores Remotos. Estos últimos existen para mantener la compatibilidad hacia atrás.

Nota: Los servidores enlazados pueden ejecutar procedimientos almacenados remotos de SQL Server mientras que no pueden ejecutar procedimientos almacenados de Oracle.

Añadiendo Servidores Vinculados

Sintaxis

sp_addlinkedserver [ @server= server [ , [ @srvproduct= product_name ]

, [ @provider= provider_name ]

, [ @datasrc= data_source ]

, [ @location= location ]

, [ @provstr= provider_string ]

, [ @catalog= catalog ]

En este ejemplo vamos a ver como crear una conexión a Oracle como servidor enlazado a SQL Server. Crearemos un servidor vinculado llamado OraLinkServ el cual usa el proveedor Microsoft OLE DB y asume que el alias SQL*Net para la base de datos es OraProduction.

USE masterGOEXEC sp_addlinkedserver @server = ‘OraLinkServ’, @srvproduct = ‘Oracle’, @provider = ‘MSDAORA’, @datasrc = ‘OraProduction’

GO

Añadiendo datos de login a un Servidor Vinculado

sp_addlinkedsvrlogin

Crea o actualiza un mapeado entre logins de la instancia local de SQL Server y logins remotos en el Servidor Vinculado.

Sintaxis

sp_addlinkedsrvlogin [ @rmtsrvname = rmtsrvname

, [ @useself = useself ]

, [ @locallogin = locallogin ]

, [ @rmtuser = rmtuser ]

, [ @rmtpassword = rmtpassword

Consultando Servidores Vinculados

A continuación podemos ver varios métodos de ejecutar una consulta sobre diferentes servidores vinculados:

NombreServidor.NombreBD.Propietario.NombreObjeto

Select * from LinkSqlServ.Northwind.dbo.Employees

Select * from OraLinkServ..SCOTT.Stores

Select * from LinkMdb…customers

OpenQuery: Ejecuta una consulta de paso a través en el servidor vinculado proporcionado el cual debe ser una fuente de datos OLE DB (por ejemplo, para su uso con Index Server).

Sintaxis:

OpenQuery (servidor_vinculado, ‘consulta’)

Ejemplos:

SELECT * FROM OPENQUERY(OraLinkServ, ‘SELECT Name, Title FROM Scott.Titles’)

INSERT OPENQUERY(LinkSqlServ, ‘select * from pubs.dbo.jobs’) values (15, ‘Technical Editor’, 100, 300)

Ejemplo de consulta sobre Index Server:

SELECT Path, Filename FROM OpenQuery(IDX, ‘Select Path, Directory, FileName, Size FROM SCOPE() ORDER BY Rank, Size DESC’)

OpenRowSet: Este método consiste en una forma ad-hoc de conectarse y accceder a datos remotos usando OLE DB. Crea un servidor vinculado al vuelo.

Sintaxis

OPENROWSET ( ‘provider_name
datasource‘ ; ‘user_id‘ ; ‘password
provider_string‘ }
{ [ catalog] [ schemaobject
query‘ }

Eliminando Servidores Vinculados y sus Logins

sp_dropserver : Elimina un servidor de la lista de servidores vinculados y remotos en el SQL Server local.

sp_droplinkedsvrlogin: Elimina un mapeado existente entre un login en el servidor local con SQL Server y un login en el servidor vinculado.

Obteniendo Metadatos

sp_tables_ex: Devuelve una tabla con información acerca de las tablas del servidor vinculado especificado.

sp_columns_ex: Devuelve información de columna, una fila por columna, para la/s tabla/s dada/s de un servidor vinculado. Sólo devuelve información de una sola columna siempre que haya sido especificada.

sp_table_privileges_ex: Devuelve información de privilegios acerca de la tabla especificada del servidor vinculado.

sp_column_privileges_ex: Deuelve privilegios de columna para la tabla especificada del servidor vinculado.

sp_linkedservers: Devuelve la lista de servidores vinculados en el servidor local.

sp_helpserver: Muestra información sobre un servidor remoto o de réplica, o sobre todos los servidores de ambos tipos.  Proporciona el nombre del servidor, el nombre de red del servidor, el estado de réplica del servidor, el número de identificación del servidor, nombre de la intercalación y valores de time-out, tanto de conexión como de consultas.

sysservers: Contiene una fila para cada servidor al que SQL Server puede acceder como fuente de datos OLEDB. Esta tabla es almacenada en la base de datos master.

sysoledbusers: Contiene una fila por cada mapeado de usuario y contraseña para el servidor vinculado especificado. Esta tabla está contenida en la base de datos master.

xp_enum_oledb_providers: Proporciona información sobre proveedores OLEDB

sp_serveroption: Ajusta opciones en servidores remotos y vinculados.

sp_serveroption se ha ampliado con dos nuevas funcionalidades, use remote collation y collation name, que permiten soporte para intercalación en servidores vinculados.

sp_setnetname: Ajusta nombres de red en sysservers para los nombres actuales de equipos de red y nombres de instancias remotas de SQL Server. Este procedimiento puede ser usado para permitir ejecución de llamadas a procedimientos almacenados remotos para ordenadores que tienene nombres de red que contienen identificadores SQL Server no válidos.

* Traducción propia de «An Introduction to Linked Servers» por Krishna Sonti publicado en www.sqlservercentral.com

http://www.sqlservercentral.com/columnists/ksonti/anintroductiontolinkedservers.asp

Deja una respuesta