Mensagem de erro ao implementar uma transacção aninhada com o fornecedor de OLE DB para SQL Server: "Não foi possível iniciar uma transacção de fornecedor OLE DB"

Traduções de Artigos Traduções de Artigos
Artigo: 306649 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Microsoft OLE DB Provider para SQL Server não suporta transacções aninhadas e é devolvida a seguinte mensagem de erro:
Não foi possível iniciar uma transacção de fornecedor de OLE DB '% ls'.
Microsoft SQL Server também devolverá a seguinte mensagem de erro se o fornecedor é um fornecedor específicas do SQL Server:
Servidor: Erro 7392, 16, nível Distrito 2,
Não foi possível iniciar uma transacção de fornecedor de OLE DB 'SQLOLEDB'. [Fornecedor OLE/DB devolvida a mensagem: apenas uma transacção pode estar activa nesta sessão.]

Causa

Este erro indica que uma instrução de modificação de dados está a ser tentada contra um fornecedor de OLE DB quando a ligação está numa transacção explícita ou implícita, e o fornecedor de OLE DB não suporta transacções aninhadas. SQL Server requer este suporte, de modo a que, em determinadas condições de erro, pode terminar os efeitos da instrução de modificação de dados enquanto continua com a transacção.

Resolução

Para contornar este problema, defina XACT_ABORT como ON antes da transacção. Isto provoca o SQL Server terminar a transacção adjacente quando ocorre um erro ao processar a instrução de modificação de dados. Se SET XACT_ABORT está ACTIVADO, SQL Server não necessita de suporte de transacção aninhada do fornecedor de OLE DB.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

Este exemplo utiliza um servidor ligado, que utiliza o fornecedor de OLE DB para SQL Server, para explicar o efeito de XACT_ABORT.
  1. Utilizar o fornecedor de OLE DB para SQL Server para criar um servidor ligado denominado vendas, que utiliza o Microsoft OLE DB Provider para SQL Server.
    USE Master
    GO
    EXEC sp_addlinkedserver 
        'Sales',
        N'SQL Server'
    GO
    					
  2. Abra o analisador de consultas e execute o seguinte comando.
    Begin Transaction
    Insert into Sales.Northwind.DBO.Customers(CustomerId,CompanyName) Values ('1000','Test')
    Commit Transaction
    					
    é apresentada a mensagem de erro acima indicado.

    Solução

  3. Execute o seguinte comando para definir XACT_ABORT ON:
    Set XACT_ABORT ON
    					
  4. Execute a instrução de Inserir novamente. Repare que os dados são inseridos a tabela sem erro.

Referências

Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
177138INFO: Transacções aninhadas não está disponíveis na base de dados de ODBC/OLE/ADO
187289COMO: Implementar transacções aninhadas com Oracle

Propriedades

Artigo: 306649 - Última revisão: 9 de dezembro de 2005 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 Service Pack 1
Palavras-chave: 
kbmt kbprb KB306649 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 306649

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com