Arquitetura de consulta distribuída

O Microsoft SQL Server oferece suporte a dois métodos para referenciar fontes de dados OLE DB heterogêneas em instruções Transact-SQL:

  • Nomes de servidor vinculado

    Os procedimentos armazenados do sistema sp_addlinkedserver e sp_addlinkedsrvlogin são usados para fornecer um nome de servidor a uma fonte de dados OLE DB. Os objetos desses servidores vinculados podem ser referenciados nas instruções Transact-SQL que usam nomes de quatro partes. Por exemplo, se um nome de servidor vinculado do DeptSQLSrvr for definido em relação a outra instância do SQL Server, as seguintes referências de instrução farão referência a uma tabela naquele servidor:

    SELECT JobTitle, HireDate 
       FROM DeptSQLSrvr.AdventureWorks2008R2.HumanResources.Employee;
    

    O nome de servidor vinculado também pode ser especificado em uma instrução OPENQUERY para abrir um conjunto de linhas da fonte de dados OLE DB. Esse conjunto de linhas pode ser referenciado como uma tabela nas instruções Transact-SQL.

  • Nomes de conector ad hoc

    Para referências de pouca frequência a uma fonte de dados, são especificadas as funções OPENROWSET ou OPENDATASOURCE com as informações necessárias para a conexão com o servidor vinculado. O conjunto de linhas pode ser referenciado do mesmo modo que uma tabela é referenciada nas instruções Transact-SQL:

    SELECT *
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
            'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
            Employees);
    

O SQL Server usa o OLE DB para se comunicar entre o mecanismo relacional e o mecanismo de armazenamento. O mecanismo relacional divide cada instrução Transact-SQL em uma série de operações nos conjuntos de linhas OLE DB simples abertos pelo mecanismo de armazenamento das tabelas base. Isso significa que o mecanismo relacional também pode abrir os conjuntos de linhas OLE DB simples em qualquer fonte de dados OLE DB.

Mecanismo relacional, camada OLE DB, mecanismo de armazenamento

O mecanismo relacional usa a API (interface de programação de aplicativo) do OLE DB para abrir os conjuntos de linhas em servidores vinculados, buscar as linhas e gerenciar as transações.

Para cada fonte de dados OLE DB acessada como um servidor vinculado, é necessário que um provedor OLE DB esteja presente no servidor que executa o SQL Server. O conjunto de operações Transact-SQL que pode ser usado com uma fonte de dados OLE DB específica depende dos recursos do provedor OLE DB. Para obter mais informações, consulte Referência do provedor OLE DB para consultas distribuídas.

Para cada instância do SQL Server, os membros da função de servidor fixa sysadmin podem habilitar ou desabilitar o uso de nomes de conector ad hoc para um provedor OLE DB que usa a propriedade SQL ServerDisallowAdhocAccess. Quando o acesso ad hoc é habilitado, qualquer usuário com logon naquela instância pode executar instruções SQL que contêm nomes de conector ad hoc, fazendo referência a qualquer fonte de dados na rede que pode ser acessada usando aquele provedor OLE DB. Para controlar o acesso a fontes de dados, os membros da função sysadmin podem desabilitar o acesso ad hoc ao provedor OLE DB, limitando os usuários às fontes de dados referenciadas pelos nomes de servidor vinculado definidos pelos administradores. Por padrão, o acesso ad hoc é habilitado para o provedor OLE DB do SQL Server e desabilitado para todos os outros provedores OLE DB.

As consultas distribuídas podem permitir que os usuários acessem outra fonte de dados (por exemplo, arquivos, fontes de dados não relacionais como Active Directory, e assim por diante) que usa o contexto de segurança da conta Microsoft Windows no qual o serviço SQL Server está sendo executado. O SQL Server representa o logon adequadamente para logons do Windows; porém, isso não é possível para logons do SQL Server. Isso pode permitir potencialmente que um usuário de consulta distribuída acesse outra fonte de dados para a qual ele não tem permissões, mas a conta em que o serviço SQL Server está sendo executada tem permissões. Use sp_addlinkedsrvlogin para definir os logons específicos autorizados para acessar o servidor vinculado correspondente. Esse controle não está disponível para nomes ad hoc, portanto, tome cuidado ao habilitar um provedor OLE DB para acesso ad hoc.

Quando possível, o SQL Server envia operações relacionais como junções, restrições, projeções, classificações e operações agrupar por para a fonte de dados OLE DB. O SQL Server não padroniza o exame da tabela base no SQL Server e a execução das operações relacionais. O SQL Server consulta o provedor OLE DB para determinar o nível de gramática de SQL suportado e, com base nessas informações, envia o maior número possível de operações relacionais ao provedor. Para obter mais informações, consulte Requisitos do SQL Dialect para provedores OLE DB.

O SQL Server especifica um mecanismo para um provedor OLE DB retornar estatísticas que indicam como os valores de chave são distribuídos em uma fonte de dados OLE DB. Isso permite ao otimizador de consulta SQL Server analisar melhor o padrão de dados na fonte de dados em relação aos requisitos de cada instrução SQL, aumentando a capacidade do otimizador de consulta de gerar planos de execução otimizados. Para obter mais informações, consulte Requisitos de estatísticas de distribuição para provedores OLE DB.