Hola a todos, hoy vamos a ver una característica de SQL Server que permite conectarte desde tu base de datos a otras bases de datos, y ejecutar consultas sobre ellas. Son los Linked Server en SQL Server.
Qué es un Linked Server
Un Linked Server es una conexión lógica definida en SQL Server que apunta a otro origen de datos. Ese origen puede ser:
- Otro SQL Server
- Otro motor de BBDD (Oracle, MySQL, PostgreSQL, Access…).
- Un fichero de texto, Excel…
- Cualquier fuente accesible mediante OLE DB.
El origen de datos externo debe tener los drivers instalados para poder usarlos en la configuración de la conexión. Los distintos proveedores a los que se puede acceder se pueden ver en el momento de la creación del Linked Server en el listado desplegable «Provider»

Creación de un Linked Server
Un Linked Server se puede crear de dos formas, desde el Management Studio o desde comandos.
Desde el Management Studio los Linked Server se encuentran a nivel de instancia en el directorio «Server Objects».
El primer paso es especificar un nombre y el proveedor OLE DB al que hay que conectarse, o bien especificar que es otro SQL Server. En este caso los drivers están instalados con la instalación del motor. En este caso, el nombre debe ser el de la instancia a la que se quiere acceder.

Después en la pestaña «Security» se especifica el usuario local que se va a utilizar, como el usuario de la BBDD remota a la que se va a conectar el Linked Server, y que debe tener permisos sobre los objetos que queramos consultar en esa BBDD Remota.
Si se marca el check «impersonate» SQL Server intentará conectarse al servidor remoto usando la identidad del login local. Esto requiere que el servidor remoto acepte Windows Authentication.

Opciones de seguridad
En la misma pestaña «Security», hay que especificar qué debe hacer el Linked Server si el usuario que intenta usar el Linked Server no está en el listado configurado.
Hay varias opciones:

1. ‘Not be made’ – No se permite la conexión al Linked Server. Es la opción cuando se necesita la mayor seguridad posible.
2. ‘Be made without using a security context’ – Permite la conexión sin credenciales. Puede generar problemas de seguridad. No se recomienda su uso.
3. ‘Be made using the login’s current security context’ – Similar a chequear «impersonate» en la configuración de los login. Se puede utilizar en entornos Windows con Active Directory y confianza entre servidores.
4. ‘Be made using this security context’ – Usa un usuario y contraseña fijos. Se utiliza cuando se tiene un usuario genérico para los login no mapeados.
También se puede crear mediante comandos, por medio de dos procedimientos almacenados, cuya sintaxis es la siguiente:
-- Crear el Linked Server
EXEC sp_addlinkedserver
@server = 'ServidorRemoto', -- Nombre lógico del linked server
@srvproduct = '', -- Producto (vacío para SQL Server)
@provider = 'SQLNCLI', -- Proveedor OLE DB (SQL Native Client)
@datasrc = 'NombreServidorRemoto'; -- Nombre del servidor remoto
- Configurar credenciales para el Linked Server
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'ServidorRemoto', -- Nombre del linked server
@useself = 'FALSE', -- No usar credenciales locales
@locallogin = NULL, -- Para todos los usuarios
@rmtuser = 'usuario_remoto', -- Usuario remoto
@rmtpassword = 'contraseña_remota'; -- Contraseña remota
Uso de un Linked Server
Existen dos formas de utilizar un Linked Server para consultar datos en un servidor remoto.
Por un lado, se puede anteponer el nombre del Linked Server al objeto que queremos consultar.
SELECT *
FROM Linked_Server.BBDDRemota.dbo.tabla
También se puede utilizar la claúsula OPENQUERY (Esta es más eficiente)
SELECT *
FROM OPENQUERY(Linked_Server, 'SELECT * FROM BBDDRemota.dbo.tabla');
Ejemplo de uso
Se puede acceder a los mismos datos de las dos formas mencionadas. Se puede hacer un ejemplo de acceso a una tabla llamada «empleados», que se encuentra dentro de una BBDD llamada «empresa», y que se encuentra en otra instancia SQL Server llamada [WIN2016SALTO01\PRUEBALK] donde se ha creado un Linked Server con el mismo nombre.
Si se utiliza el nombre completo del objeto

Si se utiliza la claúsula OPENQUERY, se devuelve el mismo resultado

Más adelante, haremos una comparación de las dos posibilidades de uso a los Linked Server en cuanto a optimización de las consultas.
No dudéis en poneros en contacto con nosotros en caso de necesitar ayuda en la gestión de vuestras bases de datos. Échale un vistazo a nuestros servicios de soporte y mantenimiento SQL Server y Oracle.
¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.
Sígue a GPS en LinkedIn
