SQL Server tiene una opción de configuración de "acceso a datos" que habilita y deshabilita un servidor vinculado para el acceso de consultas distribuidas.
Si alguna vez recibe el error "El servidor no está configurado para el ACCESO A LOS DATOS", probablemente deba habilitar el acceso a los datos para el servidor vinculado en el que está intentando ejecutar la consulta distribuida. Por el contrario, también puede haber momentos en los que necesite deshabilitar el acceso a los datos.
Para habilitar o deshabilitar el acceso a datos, use la sp_serveroption
procedimiento almacenado del sistema. Ejecútelo en el servidor desde el que desea ejecutar consultas distribuidas. El siguiente ejemplo demuestra cómo hacer esto.
Ejemplo 1:habilitar el acceso a datos
Aquí se explica cómo habilitar el acceso a los datos.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
En este caso, el servidor se llama sqlserver007
, y configuré el DATA ACCESS
opción a TRUE
.
Esta es una forma más concisa de hacer lo mismo:
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
La ejecución de cualquiera de ellos habilitará el acceso a los datos en el servidor vinculado especificado.
Por cierto, el servidor vinculado especificado puede ser el servidor local si es necesario. No es necesario que sea un servidor remoto.
Para verificar la configuración de acceso a datos, ejecute una consulta en sys.servers
vista del catálogo del sistema.
SELECT name, is_data_access_enabled FROM sys.servers;
Resultado:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
Una vez más, ejecute esto en el servidor local, no en el servidor remoto.
Ejemplo 2:deshabilitar el acceso a datos
Para deshabilitar el acceso a los datos, simplemente configure @optvalue
a FALSE
.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
Ahora compruebe la configuración de nuevo.
SELECT name, is_data_access_enabled FROM sys.servers;
Resultado:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
¿En qué servidor ejecuto el código?
Ejecute el código en el servidor desde el que pretende ejecutar consultas distribuidas.
En mi ejemplo, sqlserver007 es el nombre del servidor local y Homer es un servidor remoto/enlazado. Si quisiera ejecutar consultas distribuidas contra Homer , ejecutaría el código contra sqlserver007 .
No necesito saltar a Homer para cambiar su configuración. De hecho, podría tener una configuración diferente a la que aplico a sqlserver007 .
Para demostrar este punto, esto es lo que obtengo si comparo los resultados del servidor vinculado con la configuración real en el servidor remoto.
EXEC sp_serveroption @server = 'Homer', @optname = 'DATA ACCESS', @optvalue = 'TRUE'; SELECT 'From local', is_data_access_enabled FROM sys.servers WHERE name = 'Homer' UNION ALL SELECT 'Remote setting', is_data_access_enabled FROM Homer.master.sys.servers WHERE server_id = 0;
Resultado:
+--------------------+--------------------------+ | (No column name) | is_data_access_enabled | |--------------------+--------------------------| | From local | 1 | | Remote setting | 0 | +--------------------+--------------------------+
En este caso, el servidor local tiene una configuración diferente a su homólogo del servidor vinculado.
Y el hecho de que pude recuperar esta información a través de una consulta distribuida demuestra que fue la configuración de mi propio servidor la que permitió la consulta distribuida, no la del servidor remoto.