O SQL Server tem uma opção de configuração de “acesso a dados” que habilita e desabilita um servidor vinculado para acesso a consultas distribuídas.
Se você receber um erro "O servidor não está configurado para ACESSO A DADOS", provavelmente precisará habilitar o acesso a dados para o servidor vinculado no qual está tentando executar a consulta distribuída. Por outro lado, também pode haver momentos em que você precise desabilitar o acesso a dados.
Para habilitar ou desabilitar o acesso a dados, use a
sp_serveroption
procedimento armazenado do sistema. Execute-o no servidor do qual você pretende executar consultas distribuídas. O exemplo a seguir demonstra como fazer isso. Exemplo 1 – Habilitar acesso a dados
Veja como habilitar o acesso a dados.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
Neste caso, o servidor é chamado
sqlserver007
, e defino o DATA ACCESS
opção para TRUE
. Aqui está uma maneira mais concisa de fazer a mesma coisa:
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
A execução de qualquer um deles habilitará o acesso a dados no servidor vinculado especificado.
A propósito, o servidor vinculado especificado pode ser o servidor local, se necessário. Não precisa ser um servidor remoto.
Para verificar a configuração de acesso a dados, execute uma consulta em
sys.servers
visualização do catálogo do sistema. SELECT name, is_data_access_enabled FROM sys.servers;
Resultado:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
Novamente, você executa isso no servidor local – não no servidor remoto.
Exemplo 2 - Desativar acesso a dados
Para desabilitar o acesso a dados, basta definir
@optvalue
para FALSE
. EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
Agora verifique a configuração novamente.
SELECT name, is_data_access_enabled FROM sys.servers;
Resultado:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
Em qual servidor eu executo o código?
Execute o código no servidor do qual você pretende executar consultas distribuídas.
No meu exemplo, sqlserver007 é o nome do servidor local e Homer é um servidor remoto/vinculado. Se eu quisesse executar consultas distribuídas em Homer , eu executaria o código em sqlserver007 .
Não preciso pular para Homer para alterar sua configuração. Na verdade, pode ter uma configuração diferente daquela que eu aplico em sqlserver007 .
Para demonstrar esse ponto, eis o que recebo se comparar os resultados do servidor vinculado com a configuração real no 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 | +--------------------+--------------------------+
Nesse caso, o servidor local tem uma configuração diferente da contraparte do servidor vinculado.
E o fato de eu ter conseguido recuperar essas informações por meio de uma consulta distribuída demonstra que foi a configuração do meu próprio servidor que permitiu a consulta distribuída, não a do servidor remoto.