Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
| Attribute | Value |
|---|---|
| Produkt | SQL Server |
| Händelse-ID | 7391 |
| Händelsekälla | MSSQLSERVER |
| Component | SQLEngine |
| Symboliskt namn | RMT_TRANS_JOIN_FAIL |
| Meddelandetext | Det gick inte att utföra åtgärden eftersom OLE DB-providern "%ls" för den länkade servern "%ls" inte kunde starta en distribuerad transaktion. |
Explanation
Detta fel uppstår eftersom tjänsten Microsoft Distributed Transaction Coordinator (MSDTC) inte körs eller har avstängd nätverksåtkomst.
I vissa fall kan du också få fel 8522:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
Felnummer som ligger mellan 7300 och 7399 indikerar ett problem som påverkar vårdgivaren. Eftersom varje leverantör kan ha olika funktioner och visa olika detaljer, kanske du inte får ett komplett felmeddelande. För att hämta det fullständiga felmeddelandet från leverantörer, kör följande kommando innan du kör frågan som genererar felet:
DBCC TRACEON (3604, 7300)
Om du får fel 7391 från en process som SQL Server-replikering eller služba SSIS (SSIS) kan du också få felmeddelandet om koden innehåller ett BEGIN DISTRIBUTED TRAN sats.
Användaråtgärd
Note
Det är bästa praxis att begränsa din kod i en transaktion som involverar en distribuerad fråga som endast görs till fjärrservern.
Supportförmåga
För att kontrollera om drivrutinen stödjer distribuerade transaktioner, kontakta leverantören av drivrutinen som du använder i din länkade serverfråga.
Kontrollera om objektet på destinationsservern pekar tillbaka till den första servern. Detta kallas en loopback-situation. Loopback-länkade servrar är avsedda för testning och stöds inte för många operationer, såsom distribuerade transaktioner.
Serverkommunikation
För att säkerställa att kommunikationen mellan servrarna är framgångsrik, följ dessa steg:
Kontrollera om nätverksnamnets upplösning fungerar. Se till att servrarna kan kommunicera med varandra via namn och inte bara via IP-adress. Kontrollera i båda riktningarna (till exempel från server A till server B och från server B till server A). Lös alla problem med namnlösning på nätverket innan du kör din distribuerade fråga. Detta kan innebära att man uppdaterar WINS-, DNS- eller LMHost-filerna.
Om du har en brandvägg, se till att dina Remote Procedure Call (RPC)-portar är korrekt öppnade. Mer information finns i följande artiklar:
Kontrollera objektet du pekar på på destinationsservern. Om objektet är en vy eller en lagrad procedur, eller om det får en trigger att köras, kontrollera om det implicit pekar på en annan server. Om så är fallet är det den tredje servern som orsakar problemet. Kör frågan direkt på den tredje servern. Om du inte kan göra detta är det inte länkad server-fråga som är problemet. Lös det underliggande problemet först.
Kontrollera om du använder Remote Access Server (RAS) för att komma åt fjärrservrar. Om så är fallet, se till att du har implementerat Routing RAS (RRAS). Länkade servrar fungerar inte på RAS eftersom RAS endast tillåter envägskommunikation.
Serverkonfiguration
Följ dessa steg för att konfigurera servrarna:
Starta Distributed Transaction Coordinator (DTC eller MS DTC) på alla servrar som är involverade i den distribuerade transaktionen. För information om hur man aktiverar nätverks-DTC-åtkomst, se Felmeddelande från OLE DB-leverantören - SQL Server.
Ställ in XACT_ABORT alternativet till ON för dataändringarsuttalanden i en implicit eller explicit transaktion mot de flesta OLE DB-leverantörer, inklusive SQL Server. Du kan göra detta genom att köra följande kommando innan du kör din fråga.
SET XACT_ABORT ONNote
Detta alternativ krävs inte om leverantören stödjer nästlade transaktioner.
Kontrollera om någon av servrarna finns på ett Windows Server Failover-kluster. MSDTC-tjänsten i klustret måste ha sin egen IP-adress. Se till att korrekt namnlösning för DTC-tjänsten sker på varje server. IP-adressen till DTC måste definieras i ditt namnupplösningssystem (såsom WINS, DNS eller LMHosts). Verifiera att varje server kan kommunicera med MSDTC på de andra servrarna via namn och inte bara via IP-adress. Kolla åt båda hållen. Till exempel, kontrollera från server A till server B:s MSDTC-tjänst, och sedan från server B till server A:s MSDTC. Du måste lösa alla problem med namnlösning på nätverket innan du kör din distribuerade fråga. För att konfigurera MSDTC på ett kluster, se MSDTC Recommendations on SQL Failover Cluster - Microsoft Community Hub.
Om du använder den äldre fjärrserverteknologin istället för de rekommenderade länkade servrarna, ställ in fjärrproc-trans-konfigurationsalternativet till
OFFför servern, eller kör enSET REMOTE_PROC_TRANSACTIONS OFFsats innan du kör någon distribuerad fråga. Om denna inställning är inställd påON, görs fjärrproceduranropen i en lokal transaktion. För mer information, se Konfigurera fjärrproctrans (serverkonfigurationsalternativ) - SQL Server.Kontrollera returvärdet för systemfunktionen
@@SERVERNAMEpå båda servrarna. Kontrollera om returvärdet matchar datorns namn på varje server. Om det inte stämmer, byt namn på servern.Verifiera att SQL Server:s startkonto har fulla kontrollbehörigheter på följande registernyckel:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer