locked
erro 7391 - usando begin transaction nas stored procedures RRS feed

  • Pergunta

  • Boa Tarde,

     

    Gostaria de ajuda na resolução de um problema referente ao SQL SERVER 2000 SP4, COM WINDOWS SERVER 2003 SP2.

     

    Fiz uma migração de um SERVIDOR WINDOWS 2000 SP4 COM SQL SERVER 2000 SP3, para um com WINDOWS SERVER 2003 / SP2 e SQLSERVER 2000 SP4, no servidor de origem é usado o comando begin transact no inicio da sp, mas no novo as sp não funcionam gerando erro 7391 com segue:

     

    Msg 7391, 16, estado 1, nível Linha 1 servidor:
    A operação não pôde ser executada porque o provedor do OLE DB ' SQLOLEDB ' não conseguiu iniciar um distribuído transação. [Provedor OLE/DB retornado mensagem: nova transação não é possível se inscrever na transação especificado o coordenador.] Erro rastrear [ITransactionJoin::JoinTransaction ' SQLOLEDB ' OLE/DB Provider retornado 0x8004d00a] OLE DB.

     

    Grato,

     

    Leonardo

    sexta-feira, 29 de fevereiro de 2008 17:21

Todas as Respostas

  • Boa Tarde Leonardo,

     

    Seja bem vindo ao fórum de SQL Server no Technet. Esperamos conseguir resolver seus problemas e esclarescer suas dúvidas com nosso conhecimento e experiência a medida do possível.

     

    O Windows (a partir do NT4) possui um serviço (MSDTC) responsável por coordenar as transações distribuídas, ou seja, transações que usam mais de um recurso (banco de dados, componentes, filas, etc). No Windows 2000, ele costuma ficar aberto para acesso via rede enquanto no 2003 ele é fechado.

     

    Sua mensagem de erro parece estar relacionada a esse problema. Para habilitar o MSDTC em rede, siga os passos do link abaixo:

     

    http://support.microsoft.com/kb/817064/en-us

     

    Após seguir a recomendação, pare o serviço do DTC e do SQL Server e reinicie-os. O serviço do DTC deve subir antes do serviço do SQL Server

     

    [ ]s,

     

    Gustavo

    sábado, 1 de março de 2008 20:14
  • Olá leonardo, completando as informações riquíssimas repassadas pelo gustavo, certifique-se que a opção: 'remote proc trans' está habilitada, pois mesmo que o MSDTC esteja habilitado e iniciado, caso o 'remote proc trans' não esteja o erro deve persistir, por isso, verifique com o exec sp_configure 'remote proc trans'. Caso esteja 0 vc deve mudar para 1.

    ex:

    exec sp_configure 'remote proc trans',1

    reconfigure with override

     

     

    domingo, 2 de março de 2008 05:25


  • Oi Gustavo,

    Primeiramente gostaria de agradecer a sua ajuda e do Emanuel, porém,

    Verifiquei as configurações conforme descrição, mas não teve efeito, mas, verifiquei um detalhe que também possa estar relacionado, é o seguinte.

    Quando crio um linked server, defino o seu nome e marco SQL SERVER em  SERVER TYPE ele associa no servidor novo para:

    NO WINDOWS 2003 SP2 COM SQL SERVER 2000
    Provider Name: Fornecedor de banco de dados OLE para os serviços de diretório Microsoft.


    NO WINDOWS 2000 SP4 COM SQL SERVER 2000
    Provider Name: Microsoft Jet 4.0 OLE DB Provider

    OBS: Acredito que isto esteja interferindo, mas tenho como alterar estas configurações para os dois se comunicarem?


    Grato

    Leonardo
    segunda-feira, 3 de março de 2008 21:55
  • Bom Dia,

     

    Acho que eu e o Emanuel chegamos perto, mas realmente faltou alguns detalhes. Quando você vai criar um Linked Server você deve escolher um Provider. O Provider é o tipo de fonte de dados que você deseja acessar. Pode ser um SQL Server, um ORACLE, um DB2, um Access e até o Exchange ou o AD.

     

    Como imagino que você deseja conectar-se a outro SQL Server, na criação do Linked Server, especifique "Other SQL Server" e digite o nome do servidor. Não há necessidade de especificar o Provider.

     

    No seu caso, os providers estão errados. O primeiro refere-se ao provider para conectar-se ao AD e o segundo para conectar a bases JET como é o caso do Excel e do Access.

     

    [ ]s,

     

    Gustavo

    terça-feira, 4 de março de 2008 13:59