Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
| Attribute | Value |
|---|---|
| Product | SQL Server |
| Gebeurtenis-id | 7391 |
| Bron van gebeurtenis | MSSQLSERVER |
| Onderdeel | SQLEngine |
| Symbolische naam | RMT_TRANS_JOIN_FAIL |
| Berichttekst | De bewerking kan niet worden uitgevoerd omdat OLE DB-provider "%ls" voor gekoppelde server "%ls" geen gedistribueerde transactie kan starten. |
Explanation
Deze fout ontstaat omdat de Microsoft Distributed Transaction Coordinator (MSDTC) dienst niet draait of netwerktoegang is uitgeschakeld.
In sommige gevallen kunt u ook foutmelding 8522 ontvangen:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
Foutnummers tussen 7300 en 7399 wijzen op een probleem dat de zorgverlener treft. Omdat elke provider verschillende mogelijkheden kan hebben en verschillende details kan tonen, krijg je mogelijk geen volledige foutmelding. Om het volledige foutbericht van providers op te halen, voer je het volgende commando uit voordat je de query uitvoert die de fout genereert:
DBCC TRACEON (3604, 7300)
Als je fout 7391 ontvangt van een proces zoals SQL Server-replicatie of SQL Server Integration Services (SSIS), kun je ook het foutbericht krijgen als de code een BEGIN DISTRIBUTED TRAN instructie bevat.
Gebruikersactie
Note
Het is best practice om je code te beperken in een transactie waarbij een gedistribueerde query alleen naar de externe server wordt gestuurd.
Ondersteuning
Om te controleren of de driver gedistribueerde transacties ondersteunt, neem contact op met de leverancier van de driver die je gebruikt in je gekoppelde serverquery.
Controleer of het object op de bestemmingsserver terugwijst naar de eerste server. Dit staat bekend als een loopback-situatie. Loopback-gekoppelde servers zijn bedoeld voor testen en worden niet ondersteund voor veel operaties, zoals gedistribueerde transacties.
Servercommunicatie
Om ervoor te zorgen dat de communicatie tussen servers succesvol is, volgt u deze stappen:
Controleer of de resolutie van je netwerknaam werkt. Zorg ervoor dat de servers met elkaar kunnen communiceren op naam en niet alleen op IP-adres. Controleer in beide richtingen (bijvoorbeeld van server A naar server B en van server B naar server A). Los alle problemen met naamresolutie op het netwerk op voordat je je gedistribueerde query uitvoert. Dit kan inhouden dat de WINS-, DNS- of LMHost-bestanden worden bijgewerkt.
Als je een firewall hebt, zorg er dan voor dat je Remote Procedure Call (RPC)-poorten correct zijn geopend. Zie de volgende artikelen voor meer informatie:
Controleer het object waar je naar verwijst op de bestemmingsserver. Als het object een view of een opgeslagen procedure is, of als het een trigger laat draaien, controleer dan of het impliciet naar een andere server wijst. Als dat zo is, is de derde server de bron van het probleem. Voer de query direct uit op de derde server. Als je dit niet kunt, is de gekoppelde serverquery niet het probleem. Los eerst het onderliggende probleem op.
Controleer of je Remote Access Server (RAS) gebruikt om toegang te krijgen tot externe servers. Zo ja, zorg er dan voor dat je Routing RAS (RRAS) hebt geïmplementeerd. Gelinkte servers werken niet op RAS omdat RAS alleen eenrichtingscommunicatie toestaat.
Serverconfiguratie
Volg deze stappen voor het configureren van de servers:
Start de Distributed Transaction Coordinator (DTC of MS DTC) op alle servers die betrokken zijn bij de gedistribueerde transactie. Voor informatie over het inschakelen van netwerk-DTC-toegang, zie Foutmelding van OLE DB-provider - SQL Server.
Stel de XACT_ABORT optie in op ON voor data-wijzigingsstatements in een impliciete of expliciete transactie tegen de meeste OLE DB-providers, inclusief SQL Server. Je kunt dit doen door het volgende commando uit te voeren voordat je je query uitvoert.
SET XACT_ABORT ONNote
Deze optie is niet vereist als de provider geneste transacties ondersteunt.
Controleer of een van de servers zich op een Windows Server Failover Cluster bevindt. De MSDTC-dienst op de cluster moet een eigen IP-adres hebben. Zorg ervoor dat de juiste naamresolutie van de DTC-dienst op elke server plaatsvindt. Het IP-adres van de DTC moet gedefinieerd zijn in je naamresolutiesysteem (zoals WINS, DNS of LMHosts). Controleer dat elke server met MSDTC op de andere servers kan communiceren op naam en niet alleen op IP-adres. Controleer in beide richtingen. Controleer bijvoorbeeld van server A naar de MSDTC-dienst van server B, en controleer vervolgens van server B naar de MSDTC van server A. Je moet alle problemen met naamresolutie op het netwerk oplossen voordat je je gedistribueerde query uitvoert. Om MSDTC op een cluster te configureren, zie MSDTC Recommendations on SQL Failover Cluster - Microsoft Community Hub.
Als je de oudere remote server-technologie gebruikt in plaats van de aanbevolen gekoppelde servers, stel dan de remote proc trans-configuratieoptie in op
OFFvoor de server, of voer eenSET REMOTE_PROC_TRANSACTIONS OFFstatement uit voordat je een gedistribueerde query uitvoert. Als deze instelling is ingesteld opON, worden de remote procedure-aanroepen uitgevoerd in een lokale transactie. Voor meer informatie, zie Configureer de remote proc trans (serverconfiguratie-optie) - SQL Server.Controleer de returnwaarde van de systeemfunctie
@@SERVERNAMEop beide servers. Controleer of de returnwaarde overeenkomt met de computernaam van elke server. Als het niet klopt, geef dan de server een nieuwe naam.Controleer of het SQL Server-opstartaccount volledige controlerechten heeft op de volgende registersleutel:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer