Servidores vinculados (Mecanismo de Banco de Dados)Linked Servers (Database Engine)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure (somente a Instância Gerenciada) nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Os servidores vinculados habilitam o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine e a Instância Gerenciada do Banco de Dados SQL do Azure a ler dados de fontes de dados remotas e executar comandos nos servidores do banco de dados remoto (por exemplo, fontes de dados do OLE DB) fora da instância do SQL ServerSQL Server.Linked servers enable the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine and Azure SQL Database Managed Instance to read data from the remote data sources and execute commands against the remote database servers (for example, OLE DB data sources) outside of the instance of SQL ServerSQL Server. Normalmente, servidores vinculados são configurados para habilitar o Mecanismo de Banco de DadosDatabase Engine a executar uma instrução Transact-SQLTransact-SQL que inclui tabelas em outra instância do SQL ServerSQL Serverou outro produto de banco de dados como Oracle.Typically linked servers are configured to enable the Mecanismo de Banco de DadosDatabase Engine to execute a Transact-SQLTransact-SQL statement that includes tables in another instance of SQL ServerSQL Server, or another database product such as Oracle. Muitos tipos de fontes de dados do OLE DB podem ser configurados como servidores vinculados, inclusive o MicrosoftMicrosoft Access, o Excel e o Azure Cosmos DB.Many types OLE DB data sources can be configured as linked servers, including MicrosoftMicrosoft Access, Excel, and Azure CosmosDB.

Observação

Os servidores vinculados estão disponíveis no Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine e na Instância Gerenciada do Banco de Dados SQL do Azure.Linked servers are available in Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine and Azure SQL Database Managed Instance. Não estão habilitados nos pools elásticos e no singleton do Banco de Dados SQL do Azure.they are not enabled in Azure SQL database Singleton and Elastic pools. Há algumas restrições na Instância Gerenciada que podem ser encontradas aqui.There are some constraints in Managed Instance that can be found here.

Quando usar os Servidores Vinculados?When to use Linked Servers?

Os servidores vinculados permitem implementar bancos de dados distribuídos que podem buscar e atualizar dados em outros bancos de dados.Linked servers enable you to implement distributed databases that can fetch and update data in other databases. São uma boa solução nos cenários em que é preciso implementar a fragmentação de banco de dados sem a necessidade de criar um código de aplicativo personalizado ou carregar diretamente de fontes de dados remotas.They are a good solution in the scenarios where you need to implement database sharding without need to create a custom application code or directly load from remote data sources. Servidores vinculados têm as seguintes vantagens:Linked servers offer the following advantages:

  • A capacidade de acessar dados de fora do SQL ServerSQL Server.The ability to access data from outside of SQL ServerSQL Server.

  • A capacidade de emitir consultas distribuídas, atualizações, comandos e transações em fontes de dados heterogêneos em toda a empresa.The ability to issue distributed queries, updates, commands, and transactions on heterogeneous data sources across the enterprise.

  • A capacidade de endereçar de forma semelhante diversas fontes de dados.The ability to address diverse data sources similarly.

É possível configurar um servidor vinculado usando SQL Server Management StudioSQL Server Management Studio ou a instrução sp_addlinkedserver (Transact-SQL) .You can configure a linked server by using SQL Server Management StudioSQL Server Management Studio or by using the sp_addlinkedserver (Transact-SQL) statement. Provedores do OLE DB variam muito no tipo e número de parâmetros requeridos.OLE DB providers vary greatly in the type and number of parameters required. Por exemplo, alguns provedores exigem que você forneça um contexto de segurança para a conexão usando sp_addlinkedsrvlogin (Transact-SQL).For example some providers require you to provide a security context for the connection using sp_addlinkedsrvlogin (Transact-SQL). Alguns provedores OLE DB permitem que o SQL ServerSQL Server atualize dados na origem de OLE DB.Some OLE DB providers allow SQL ServerSQL Server to update data on the OLE DB source. Outros fornecem apenas o acesso a dados somente leitura.Others provide only read-only data access. Para obter informações sobre cada provedor do OLE DB, consulte a documentação desse provedor do OLE DB.For information about each OLE DB provider, consult documentation for that OLE DB provider.

Componentes de servidores vinculadosLinked Server Components

Uma definição de servidor vinculado especifica os seguintes objetos:A linked server definition specifies the following objects:

  • Um provedor de OLE DBAn OLE DB provider

  • Uma fonte de dados de OLE DBAn OLE DB data source

Um provedor de OLE DB é uma DLL que gerencia e interage com uma fonte de dados específica.An OLE DB provider is a DLL that manages and interacts with a specific data source. Uma fonte de dados de OLE DB identifica o banco de dados específico que pode ser acessado por meio de OLE DB.An OLE DB data source identifies the specific database that can be accessed through OLE DB. Embora fontes de dados consultadas através de definições de servidores vinculados sejam, ordinariamente, bancos de dados, existem provedores de OLE DB para uma variedade de arquivos e formatos de arquivo.Although data sources queried through linked server definitions are ordinarily databases, OLE DB providers exist for a variety of files and file formats. Eles compreendem arquivos de texto, dados de planilha e resultados de pesquisas de conteúdo de texto completo.These include text files, spreadsheet data, and the results of full-text content searches.

O provedor OLE DB do MicrosoftMicrosoft SQL ServerSQL Server Native Client (PROGID: SQLNCLI11) é o provedor OLE DB oficial do SQL ServerSQL Server.The MicrosoftMicrosoft SQL ServerSQL Server Native Client OLE DB Provider (PROGID: SQLNCLI11) is the official OLE DB provider for SQL ServerSQL Server.

Observação

SQL ServerSQL Server foram criadas de modo a funcionar com qualquer provedor de OLE DB que implemente as interfaces de OLE DB exigidas.distributed queries are designed to work with any OLE DB provider that implements the required OLE DB interfaces. Porém, o SQL ServerSQL Server foi testado apenas no provedor OLE DB do SQL ServerSQL Server Native Client e em alguns outros provedores.However, SQL ServerSQL Server has been tested against only the SQL ServerSQL Server Native Client OLE DB Provider and certain other providers.

Detalhes sobre servidores vinculadosLinked Server Details

A ilustração a seguir mostra os fundamentos básicos de uma configuração de servidores vinculados.The following illustration shows the basics of a linked server configuration.

Camadas de cliente, de servidor e de servidor de banco de dadosClient tier, server tier, and database server tier

Normalmente, servidores vinculados são usados para manipular consultas distribuídas.Typically, linked servers are used to handle distributed queries. Quando um aplicativo cliente executa uma consulta distribuída através de um servidor vinculado, o SQL ServerSQL Server analisa o comando e envia solicitações ao OLE DB.When a client application executes a distributed query through a linked server, SQL ServerSQL Server parses the command and sends requests to OLE DB. Essa solicitação de conjunto de linhas pode ser a execução de uma consulta em relação ao provedor ou a abertura de uma tabela base do provedor.The rowset request may be in the form of executing a query against the provider or opening a base table from the provider.

Observação

Para que uma fonte de dados retorne dados através de um servidor vinculado, seu provedor de OLE DB (DLL) deve estar presente no mesmo servidor da instância do SQL ServerSQL Server.For a data source to return data through a linked server, the OLE DB provider (DLL) for that data source must be present on the same server as the instance of SQL ServerSQL Server.

Importante

Quando é usado um provedor de OLE DB, a conta sob a qual o serviço do SQL ServerSQL Server é executado deve ter permissões de leitura e execução no diretório e em todos os subdiretórios em que o provedor está instalado.When an OLE DB provider is used, the account under which the SQL ServerSQL Server service runs must have read and execute permissions for the directory, and all subdirectories, in which the provider is installed. Isso inclui os provedores lançados pela Microsoft e os provedores de terceiros.This includes Microsoft-released providers, and any third-party providers.

Observação

Os servidores vinculados dão suporte à autenticação de passagem do Active Directory ao usar a delegação completa.Linked servers support Active Directory pass-through authentication when using full delegation. A partir do SQL Server 2017 CU17, também existe suporte para autenticação de passagem com delegação restrita; no entanto, não há suporte para delegação restrita baseada em recursos.Starting with SQL Server 2017 CU17, pass-through authentication with constrained delegation is also supported; however, resource-based constrained delegation is not supported.

Gerenciando provedoresManaging Providers

Há uma série de opções que controlam como o SQL ServerSQL Server carrega e usa os provedores de OLE DB especificados no registro.There is a set of options that control how SQL ServerSQL Server loads and uses OLE DB providers that are specified in the registry.

Gerenciando definições de servidores vinculadosManaging Linked Server Definitions

Ao configurar um servidor vinculado, registre as informações de conexão e de fonte de dados com o SQL ServerSQL Server.When you are setting up a linked server, register the connection information and data source information with SQL ServerSQL Server. Depois de registrada, a fonte de dados pode ser chamada por um nome lógico individual.After being registered, that data source can be referred to with a single logical name.

É possível usar procedimentos armazenados e exibições do catálogo para gerenciar definições de servidores vinculados:You can use stored procedures and catalog views to manage linked server definitions:

  • Crie uma definição de servidor vinculado, executando sp_addlinkedserver.Create a linked server definition by running sp_addlinkedserver.

  • Exiba informações sobre os servidores vinculados definidos em uma instância específica do SQL ServerSQL Server , executando uma consulta em relação às exibições do catálogo do sistema sys.servers .View information about the linked servers defined in a specific instance of SQL ServerSQL Server by running a query against the sys.servers system catalog views.

  • Exclua uma definição de servidor vinculado, executando sp_dropserver.Delete a linked server definition by running sp_dropserver. Você também pode usar esse procedimento armazenado para remover um servidor remoto.You can also use this stored procedure to remove a remote server.

Também é possível definir servidores vinculados por meio do SQL Server Management StudioSQL Server Management Studio.You can also define linked servers by using SQL Server Management StudioSQL Server Management Studio. No Pesquisador de Objetos, clique com o botão direito do mouse em Objetos de Servidor, selecione Novoe Servidor Vinculado.In the Object Explorer, right-click Server Objects, select New, and select Linked Server. Você pode excluir uma definição de servidor vinculado clicando com o botão direito do mouse no nome do servidor vinculado e selecionando Excluir.You can delete a linked server definition by right-clicking the linked server name and selecting Delete.

Ao executar uma consulta distribuída em relação a um servidor vinculado, inclua um nome de tabela de quatro partes totalmente qualificado para cada fonte de dados a consultar.When you execute a distributed query against a linked server, include a fully qualified, four-part table name for each data source to query. Esse nome de quatro partes deve estar no formato linked_server_name.catalog . schema . object_name.This four-part name should be in the form linked_server_name.catalog.schema.object_name.

Observação

Servidores vinculados podem ser definidos para apontar novamente (loopback) para o servidor no qual eles são definidos.Linked servers can be defined to point back (loop back) to the server on which they are defined. Servidores de loopback são mais úteis ao testar um aplicativo que usa consultas distribuídas em uma única rede de servidores.Loopback servers are most useful when testing an application that uses distributed queries on a single server network. Os servidores de loopback vinculados devem ser usados em testes e não têm suporte para várias operações, como transações distribuídas.Loopback linked servers are intended for testing and are not supported for many operations, such as distributed transactions.

Criar servidores vinculados (Mecanismo de Banco de Dados do SQL Server)Create Linked Servers (SQL Server Database Engine)

sp_addlinkedserver (Transact-SQL)sp_addlinkedserver (Transact-SQL)

sp_addlinkedsrvlogin (Transact-SQL)sp_addlinkedsrvlogin (Transact-SQL)

sp_dropserver (Transact-SQL)sp_dropserver (Transact-SQL)

sys.servers (Transact-SQL)sys.servers (Transact-SQL)

sp_linkedservers (Transact-SQL)sp_linkedservers (Transact-SQL)