Consultas distribuídas e transações distribuídas

O Mecanismo de banco de dados do SQL Server permite criar vínculos a fontes de dados OLE DB chamados servidores vinculados. Depois de executar um vínculo a uma fonte de dados OLE DB, você pode:

Consultar conjuntos de linha das fontes de dados OLE DB como tabelas em instruções Transact-SQL.

  • Transferir comandos para as fontes de dados OLE DB e incluir os conjuntos de linha resultante como tabelas em instruções Transact-SQL.

Cada consulta distribuída pode consultar diversos servidores vinculados e pode executar operações de atualização ou leitura em cada servidor vinculado individual. Uma única consulta distribuída pode executar operações de leitura em alguns servidores vinculados e operações de atualização em outros servidores vinculados. No geral, Mecanismo de Banco de Dados requer suporte a transações distribuídas do respectivo provedor OLE DB sempre que houver a probabilidade de os dados de mais de um servidor vinculado serem atualizados em uma transação. Portanto, os tipos de consultas que têm suporte em servidores vinculados dependem do nível de suporte para transações presentes nos provedores OLE DB. OLE DB define duas interfaces opcionais para o gerenciamento de transações:

  • ITransactionLocal dá suporte a transações locais na fonte de dados OLE DB.

  • ITransactionJoin permite que o provedor se associe a uma transação distribuída que inclui outros gerenciadores de recurso.

    Qualquer provedor que dê suporte a ITransactionJoin também tem suporte a ITransactionLocal.

Se uma consulta distribuída for executada quando a conexão estiver em modo de confirmação automática, essas regras se aplicarão:

  • Somente operações de leitura são permitidas em provedores que não dão suporte a ITransactionLocal.

  • Todas as operações de atualização são permitidas em qualquer provedor que dê suporte a ITransactionLocal.

    A instância de controle do Mecanismo de Banco de Dados chama ITransactionLocal automaticamente em cada servidor vinculado que participa em uma operação de atualização para iniciar uma transação local. Isso confirma quando a instrução for é sucedida ou faz a reversão se a instrução falhar.

Se uma consulta distribuída estiver em uma exibição particionada distribuída, ou se for executada quando a conexão estiver em uma transação explícita ou implícita, essas regras serão aplicadas:

  • Somente operações de leitura são permitidas em provedores que não dão suporte a ITransactionJoin. Provedores que não dão suporte a nenhuma transação ou dão suporte a apenas ITransactionLocal não pode participar em operações de atualização.

  • Se SET XACT_ABORT for ON, todas as operações de atualização serão permitidas em qualquer provedor que dê suporte a ITransactionJoin. A instância de controle do Mecanismo de Banco de Dados chama ITransactionJoin automaticamente em cada servidor vinculado que participa em uma operação de atualização para incluí-la na transação distribuída. O MS DTC (Coordenador de Transações Distribuídas da Microsoft) confirma ou reverte quando o servidor de controle indicar que a transação está confirmada ou revertida.

  • Se SET XACT_ABORT for OFF, o servidor vinculado também deverá dar suporte a transações aninhadas antes de permitir operações de atualização. Transações aninhadas terão suporte se o provedor aceitar chamar ITransactionLocal::StartTransaction quando já houver uma transação existente para a sessão. Isso permite que o SQL Server reverta instruções individuais em consultas distribuídas sem reverter toda a transação.

As regras acima implicam a seguinte restrição para provedores que não dão suporte a transações aninhadas: as operações de atualização são permitidas em uma transação distribuída somente se a opção XACT_ABORT for ON.

Consulte também

Conceitos