Venga visualizzato un messaggio di errore di 7391 in SQL Server 2000 quando si esegue una transazione distribuita su un server collegato dopo l'installazione di Windows Server 2003 o Windows XP Service Pack 2

Sintomi

Quando si esegue una transazione distribuita in un'istanza di SQL Server, si potrebbe ricevere un messaggio di errore analogo al seguente:

Server: Msg 7391, livello 16, stato 1, riga 1
L'operazione non eseguita perché il provider OLE DB "SQLOLEDB" non è riuscito ad avviare una transazione distribuita. [Messaggio restituito dal provider OLE DB: nuova transazione non può eseguire l'inserimento di coordinatore di transazione specificato.] Analisi di errore OLE DB [OLE DB Provider OLE DB "SQLOLEDB" ITransactionJoin::JoinTransaction restituito 0x8004d00a].


Questo problema può verificarsi quando si verifica una delle seguenti condizioni:
  • Microsoft Windows Server 2003 o Microsoft Windows XP Service Pack 2 (SP2) è installato nel computer che avvia la transazione distribuita.
  • Sul computer remoto che esegue Microsoft SQL Server 2000 è installato Microsoft Windows Server 2003 o Microsoft Windows XP SP2 e il computer è collegato al computer che avvia la transazione distribuita.

Causa

Questo problema si verifica per uno o più dei seguenti motivi:
  • Microsoft Distributed Transaction Coordinator (MSDTC) è disabilitata per le transazioni di rete.
  • Windows Firewall è attivato nel computer. Per impostazione predefinita, Windows Firewall blocca il programma di Microsoft Distributed Transaction Coordinator (MSDTC).

    Nota: Questo problema può verificarsi anche quando Windows Firewall è disattivato.

Soluzione alternativa

Importante Questa sezione, metodo o attività contiene passaggi su come modificare il Registro di sistema. Tuttavia, una modifica errata del registro di sistema potrebbe causare gravi problemi. Pertanto, assicurarsi di seguire attentamente i passaggi. Per maggiore protezione, eseguire il backup del Registro di sistema prima di modificarlo. Cosicché sia possibile ripristinare il Registro di sistema se si verifica un problema. Per ulteriori informazioni su come eseguire il backup e ripristinare il Registro di sistema, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
322756 come eseguire il backup e ripristinare il Registro di sistema Windows


Per risolvere questo problema, eseguire la procedura seguente sul computer in cui è installato Windows Server 2003 o Windows XP SP2:
  1. Assicurarsi che l'account di Connessione per il servizio MSDTC sia l'account Network Service . A tale scopo, attenersi alla seguente procedura:
    1. Fare clic su Starte quindi fare clic su
      L'esecuzione.
    2. Nella finestra di dialogo Esegui , digitare
      Services. msce quindi fare clic su
      OK.
    3. Nella finestra servizi , individuare il servizio Distributed Transaction Coordinator
      Nome nel riquadro di destra.
    4. Nella colonna Accedi come vedere se l'account Accedi come Servizio di rete o Sistema locale.

      Se l'account Accedi come Servizio di rete, andare al passaggio 2. Se l'account Accedi come account di Sistema locale , continuare con la procedura.
    5. Fare clic su Starte quindi fare clic su
      L'esecuzione.
    6. Nella finestra di dialogo Esegui , digitare
      cmd, quindi scegliere OK.
    7. Al prompt dei comandi, digitare Net stop msdtc per interrompere il servizio MSDTC.
    8. Al prompt dei comandi, digitare Msdtc – disinstallare per rimuovere MSDTC.
    9. Al prompt dei comandi, digitare regedit per aprire l'Editor del Registro di sistema.
    10. Nell'Editor del Registro di sistema individuare la seguente chiave:

      Chiave del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC.

      Eliminare questa chiave.
    11. Chiudere l'Editor del Registro di sistema.
    12. Al prompt dei comandi, digitare Msdtc – installare per installare MSDTC.
    13. Al prompt dei comandi, digitare Net start msdtc per avviare il servizio MSDTC.

      Si noti che l'account di Connessione per il servizio MSDTC è impostata su account Servizio di rete .
  2. Abilitare MSDTC consentire le transazioni di rete. A tale scopo, attenersi alla seguente procedura:
    1. Fare clic su Starte quindi fare clic su
      L'esecuzione.
    2. Nella finestra di dialogo Esegui , digitare
      dcomcnfg.exee quindi fare clic su
      OK.
    3. Nella finestra Servizi componenti espandere Servizi componenti, espandere computere quindi espandere Risorse del Computer.
    4. Risorse delcomputer e quindi scegliere proprietà.
    5. Nella finestra di dialogo Proprietà risorse del Computer , fare clic su Configurazione di protezione nella scheda MSDTC .
    6. Nella finestra di dialogo Configurazione della protezione , fare clic per selezionare la casella di controllo di Accesso di rete DTC .
    7. Per consentire la transazione distribuita per l'esecuzione nel computer in uso da un computer remoto, fare clic per selezionare la casella di controllo Consenti connessioni in ingresso .
    8. Per consentire la transazione distribuita per l'esecuzione su un computer remoto dal computer, fare clic per selezionare la casella di controllo Consenti in uscita .
    9. Nel gruppo Comunicazione gestore transazioni , fare clic per selezionare l'opzione Nessuna autenticazione richiesta . Impostare Nessuna autenticazione richiesta per i client e i sistemi remoti.
    10. Nella finestra di dialogo Configurazione della protezione , fare clic su OK.
    11. Nella finestra di dialogo Proprietà risorse del Computer , fare clic su OK.
  3. Configurare Windows Firewall per includere il programma MSDTC e la porta 135 come un'eccezione. A tale scopo, attenersi alla seguente procedura:
    1. Fare clic su Start e quindi fare clic su Esegui.
    2. Nella finestra di dialogo Esegui , digitare firewall. cple quindi fare clic su OK
    3. Nel Pannello di controllo, fare doppio clic su
      Windows Firewall.
    4. Nella finestra di dialogo Windows Firewall , fare clic su Aggiungi programma nella scheda eccezioni .
    5. Nella finestra di dialogo Aggiungi programma , fare clic sul pulsante Sfoglia e individuare il file Msdtc.exe. Per impostazione predefinita, il file è archiviato nel < unità di installazione >: \Windows\System32 cartella.
    6. Nella finestra di dialogo Aggiungi programma , fare clic su
      OK.
    7. Nella finestra di dialogo Windows Firewall , fare clic per selezionare il
      MSDTC opzione nell'elenco programmi e servizi .
    8. Fare clic su Aggiungi porta nella scheda eccezioni .
    9. Nella finestra di dialogo Aggiungi porta digitare 135 nel
      Casella di testo numero di porta e quindi fare clic per selezionare l'opzione TCP .
    10. Nella finestra di dialogo Aggiungi porta digitare un nome per l'eccezione di
      Casella di testo nome e quindi fare clic su
      OK.
    11. Nella finestra di dialogo Windows Firewall , selezionare il nome utilizzato per l'eccezione nel passaggio j nell'elenco programmi e servizi e quindi fare clic su
      OK.
  4. Eseguire il test ping dal server host per il server remoto e dal server remoto al server host, utilizzando il nome netbios (nome server, senza il dominio). Microsoft Distributed Transaction Coordinator viene utilizzato il nome netbios, non il nome di dominio completo, per individuare i server. Se la risoluzione dei nomi non riesce, le transazioni distribuite. In caso di errore ping utilizzando il nome netbios, vedere il seguente articolo della knowledge base:
    Ordine di risoluzione nome Host TCP/IP Microsoft 172218

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori informazioni

Procedura per riprodurre il comportamento

  1. Accedere a un computer con Windows Server 2003 o Windows XP SP2 installato.
  2. Avviare l'analizzatore di Query.
  3. Aggiungere un computer remoto che esegue Microsoft SQL Server 2000 come server collegato. A tale scopo, eseguire la seguente istruzione Transact-SQL in Query Analyzer:
    EXEC sp_addlinkedserver  '<remote_server>',  N'SQL SERVER'GO

    Nota: Sostituire remote_server con il nome del computer che deve essere configurato come server collegato.
  4. Eseguire una transazione distribuita tra il computer e il computer remoto. A tale scopo, eseguire la seguente istruzione Transact-SQL in Query Analyzer:
    SET xact_abort ON GO
    USE pubs
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT * FROM <remote_server>.pubs.dbo.authors
    COMMIT TRAN
    GO

    Venga visualizzato il messaggio di errore menzionato nella sezione "Sintomi".

Riferimenti

Per ulteriori informazioni sulla configurazione di Windows XP Service Pack 2 per l'utilizzo con SQL Server 2000, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:

841249 come configurare Windows XP Service Pack 2 per l'utilizzo con SQL Server

Proprietà

ID articolo: 839279 - Ultima revisione: 30 gen 2017 - Revisione: 1

Feedback