Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criar um servidor vinculado no SQL Server (exemplo T-SQL)


Este artigo fornece um exemplo de criação de um servidor vinculado no SQL Server usando Transact-SQL. O uso do T-SQL permite que você crie o servidor vinculado sem depender de uma interface gráfica do usuário (como SSMS).


Sintaxe


Para criar um servidor vinculado usando T-SQL, use o sp_addlinkedserver procedimento armazenado do sistema.

A sintaxe oficial é assim:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]   
     [ , [ @provider= ] 'provider_name' ]  
     [ , [ @datasrc= ] 'data_source' ]   
     [ , [ @location= ] 'location' ]   
     [ , [ @provstr= ] 'provider_string' ]   
     [ , [ @catalog= ] 'catalog' ]

A maioria dos argumentos é opcional, mas você precisará fornecer o nome do servidor vinculado.

Você provavelmente também desejará especificar a fonte de dados ou o local do servidor vinculado e talvez um nome de provedor. O catalog O argumento permite especificar um banco de dados padrão para o qual o servidor vinculado é mapeado. Confira a documentação oficial da Microsoft para obter uma explicação de cada um desses argumentos.

Exemplo – Criar o servidor vinculado


Para criar um servidor vinculado usando T-SQL, execute o sp_addlinkedserver procedimento armazenado ao passar o nome do servidor vinculado, bem como sua origem.

Aqui está um exemplo de criação de um servidor vinculado:
EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2,1433',
    @catalog='Music';

Nesse caso, o nome do servidor vinculado é “Homer” e eu especifico o endereço IP do servidor, seguido pela porta TCP (no meu caso é na verdade um container Docker na mesma máquina). Altere o nome do servidor e o endereço/porta IP conforme necessário. Eu também especifico um banco de dados padrão chamado “Música”.

Este exemplo usa MSOLEDBSQL como o nome do provedor, mas você pode usar o nome do provedor aplicável à sua situação. No meu caso, estou vinculando a outra instância do SQL Server.

Observe que MSOLEDBSQL é o provedor recomendado para SQL Server. Se você já usou SQLOLEDB ou SQLNCLI , ambos estão agora obsoletos. A Microsoft decidiu descontinuar o OLE DB e lançá-lo em 2018.

Se você for vincular ao Oracle, poderá usar OraOLEDB.Oracle , para MS Access você pode usar Microsoft.Jet.OLEDB.4.0 (para acessar os formatos 2002-2003) ou Microsoft.ACE.OLEDB.12.0 (para o formato de 2007). A documentação oficial tem uma tabela de parâmetros para usar em diferentes cenários.

Testar o servidor vinculado


Depois de adicionar o servidor vinculado, você pode usar sp_testlinkedserver para testá-lo:
EXEC sp_testlinkedserver Homer;

Resultado (se for bem sucedido):
Commands completed successfully.

Se você receber um erro "Falha no login", é provável que você não tenha um login correspondente no servidor remoto. Você precisará ter um login correspondente com as mesmas credenciais do servidor local.

A maneira como funciona é que, quando você adiciona o servidor vinculado pela primeira vez, um mapeamento padrão entre todos os logins no servidor local e os logins remotos no servidor vinculado é criado automaticamente. O SQL Server usa as credenciais do logon local ao se conectar ao servidor vinculado em nome do logon. Se o seu login local não tiver um login correspondente no servidor remoto, você receberá um erro "Falha no login".

Adicionar um login para o servidor vinculado


Se você não quiser que o servidor vinculado use seu próprio login, você pode especificar um login diferente para ele usar. Contanto que o servidor remoto tenha um login correspondente com as mesmas credenciais, você estará pronto. Obviamente, você precisará garantir que a conta remota tenha as permissões apropriadas para fazer o que você precisa.

Aqui está um exemplo de como adicionar um logon do SQL Server para o servidor vinculado.
EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Marge', 
    @rmtpassword=N'BigStrong#Passw0rd';

Execute isso no servidor local depois de criar o servidor vinculado. Você precisará de um login correspondente com as mesmas credenciais no servidor vinculado real (remoto).

Isso adiciona um login chamado “Marge” para o servidor vinculado chamado “Homer”. Desde que o servidor remoto tenha um login com as mesmas credenciais, o servidor local poderá fazer login no servidor vinculado.

Consulte Adicionar um logon de servidor vinculado no SQL Server para obter um exemplo de como adicionar um logon correspondente no servidor remoto.

Eliminar um servidor vinculado


Aqui está um exemplo de como descartar o servidor vinculado chamado “Homer” e todos os logins associados.
EXEC sp_dropserver 'Homer', 'droplogins';

Os droplogins O argumento é opcional, mas se você não especificar isso ao descartar um servidor vinculado que tenha entradas de login de servidor remoto e vinculado ou estiver configurado como um editor de replicação, uma mensagem de erro será retornada.

Consulte Remover um servidor vinculado usando T-SQL para obter mais exemplos de como descartar um servidor vinculado.

Executar uma consulta distribuída no servidor vinculado


Agora que criamos o servidor vinculado, aqui está um exemplo de execução de uma consulta distribuída nele:
SELECT * 
FROM Homer.Music.dbo.Artists;

A única diferença entre esta e uma consulta local é que você precisa adicionar o nome do servidor vinculado ao FROM cláusula.

Assim:
LinkedServer.Database.Schema.Table

Alternativamente, você pode usar OPENQUERY() para executar uma consulta de passagem:
SELECT * 
FROM OPENQUERY(
    Homer, 
    'SELECT * FROM Music.dbo.Artists;'
    );