MSSQLSERVER_7391
Gilt für: SQL Server
attribute | Wert |
---|---|
Produkt | SQL Server |
Ereignis-ID | 7391 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | RMT_TRANS_JOIN_FAIL |
Meldungstext | Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter '%ls' für den Verbindungsserver '%ls' keine verteilte Transaktion beginnen konnte. |
Erklärung
Dieser Fehler tritt auf, da der Microsoft Distributed Transaction Coordinator (MSDTC)-Dienst nicht ausgeführt wird oder den Netzwerkzugriff deaktiviert hat.
In einigen Fällen wird möglicherweise auch fehler 8522 angezeigt:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
Fehlernummern, die sich im Bereich von 7300 bis 7399 befinden, deuten auf ein Problem hin, das sich auf den Anbieter auswirkt. Da jeder Anbieter möglicherweise unterschiedliche Funktionen aufweist und unterschiedliche Details enthält, wird möglicherweise keine vollständige Fehlermeldung angezeigt. Um die vollständige Fehlermeldung von Anbietern abzurufen, führen Sie den folgenden Befehl aus, bevor Sie die Abfrage ausführen, die den Fehler generiert:
DBCC TRACEON (3604, 7300)
Wenn Sie fehler 7391 von einem Prozess wie sql Server-Replikation oder SQL Server Integration Services (SSIS) erhalten, erhalten Sie möglicherweise auch die Fehlermeldung, wenn der Code eine BEGIN DISTRIBUTED TRAN
Anweisung enthält.
Aktion des Benutzers
Hinweis
Es empfiehlt sich, Den Code in einer Transaktion zu beschränken, die eine verteilte Abfrage umfasst, die nur an den Remoteserver vorgenommen wird.
Unterstützungsmöglichkeiten
Um zu überprüfen, ob der Treiber verteilte Transaktionen unterstützt, wenden Sie sich an den Anbieter des Treibers, den Sie in Ihrer verknüpften Serverabfrage verwenden.
Überprüfen Sie, ob das Objekt auf dem Zielserver auf den ersten Server verweist. Dies wird als Loopbacksituation bezeichnet. Loopback-verknüpfte Server sind für Tests vorgesehen und werden für viele Vorgänge, z. B. verteilte Transaktionen, nicht unterstützt.
Serverkommunikation
Führen Sie die folgenden Schritte aus, um sicherzustellen, dass die Kommunikation zwischen Servern erfolgreich ist:
Überprüfen Sie, ob die Netzwerknamenauflösung funktioniert. Stellen Sie sicher, dass die Server nach Namen und nicht nur nach IP-Adresse miteinander kommunizieren können. Überprüfen Sie beide Richtungen (z. B. von Server A zu Server B und von Server B zu Server A). Beheben Sie alle Probleme bei der Namensauflösung im Netzwerk, bevor Sie die verteilte Abfrage ausführen. Dies kann das Aktualisieren der WINS-, DNS- oder LMHost-Dateien umfassen.
Wenn Sie über eine Firewall verfügen, stellen Sie sicher, dass Die Remoteprozeduraufrufports (REMOTE Procedure Call, RPC) ordnungsgemäß geöffnet sind. Weitere Informationen finden Sie in den folgenden Artikeln:
Überprüfen Sie das Objekt, auf das Sie auf den Zielserver zeigen. Wenn es sich bei dem Objekt um eine Ansicht oder eine gespeicherte Prozedur handelt oder wenn ein Trigger ausgeführt wird, überprüfen Sie, ob es implizit auf einen anderen Server verweist. Wenn ja, ist der dritte Server die Quelle des Problems. Führen Sie die Abfrage direkt auf dem dritten Server aus. Wenn Dies nicht möglich ist, ist die verknüpfte Serverabfrage nicht das Problem. Lösen Sie zuerst das zugrunde liegende Problem.
Überprüfen Sie, ob Sie Remotezugriffsserver (RAS) für den Zugriff auf Remoteserver verwenden. Stellen Sie in diesem Fall sicher, dass Sie Routing RAS (RRAS) implementiert haben. Verknüpfte Server funktionieren nicht auf RAS, da RAS nur unidirektionale Kommunikation zulässt.
Serverkonfiguration
Führen Sie die folgenden Schritte zum Konfigurieren der Server aus:
Starten Sie den Distributed Transaction Coordinator (DTC oder MS DTC) auf allen Servern, die an der verteilten Transaktion beteiligt sind. Informationen zum Aktivieren des DTC-Zugriffs im Netzwerk finden Sie in der Fehlermeldung des OLE DB-Anbieters SQL Server.
Legen Sie die Option XACT_ABORT für Datenänderungsanweisungen in einer impliziten oder expliziten Transaktion für die meisten OLE DB-Anbieter, einschließlich SQL Server, auf ON fest. Sie können dies tun, indem Sie den folgenden Befehl ausführen, bevor Sie Die Abfrage ausführen.
SET XACT_ABORT ON
Hinweis
Diese Option ist nicht erforderlich, wenn der Anbieter geschachtelte Transaktionen unterstützt.
Überprüfen Sie, ob sich eine der Server in einem Windows Server-Failovercluster befindet. Der MSDTC-Dienst im Cluster muss über eine eigene IP-Adresse verfügen. Stellen Sie sicher, dass die richtige Namensauflösung des DTC-Diensts auf jedem Server auftritt. Die IP-Adresse des DTC muss in Ihrem Namensauflösungssystem (z. B. WINS, DNS oder LMHosts) definiert werden. Stellen Sie sicher, dass jeder Server mit MSDTC auf den anderen Servern nach Name und nicht nur nach IP-Adresse kommunizieren kann. Checken Sie in beide Richtungen ein. Überprüfen Sie z. B. den MSDTC-Dienst von Server A zu Server B, und überprüfen Sie dann vom Server B zum MSDTC des Servers A. Sie müssen alle Probleme mit der Namensauflösung im Netzwerk beheben, bevor Sie die verteilte Abfrage ausführen. Informationen zum Konfigurieren von MSDTC auf einem Cluster finden Sie unter MSDTC-Empfehlungen für SQL-Failovercluster – Microsoft Community Hub.
Wenn Sie die ältere Remoteservertechnologie anstelle der empfohlenen verknüpften Server verwenden, legen Sie die Konfigurationsoption
OFF
für remoteproc trans für den Server fest, oder führen Sie eine Anweisung aus, bevor Sie eineSET REMOTE_PROC_TRANSACTIONS OFF
verteilte Abfrage ausführen. Wenn diese Einstellung auf <a0/> festgelegt ist, werden die Remoteprozeduraufrufe in einer lokalen Transaktion ausgeführt. Weitere Informationen finden Sie unter Configure the remote proc trans (Server configuration option) – SQL Server. Überprüfen Sie den Rückgabewert der Systemfunktion
@@SERVERNAME
auf beiden Servern. Überprüfen Sie, ob der Rückgabewert dem Computernamen der einzelnen Server entspricht. Wenn sie nicht übereinstimmen, benennen Sie den Server um.Stellen Sie sicher, dass das SQL Server-Startkonto über Vollzugriffsberechtigungen für den folgenden Registrierungsschlüssel verfügt:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer