MSSQLSERVER_7391

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:

  1. 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.

  2. 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:

  3. 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.

  4. 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:

  1. 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.

  2. 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 ON
    

    Note

    Detta alternativ krävs inte om leverantören stödjer nästlade transaktioner.

  3. 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.

  4. 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 OFF för servern, eller kör en SET REMOTE_PROC_TRANSACTIONS OFF sats 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.

  5. Kontrollera returvärdet för systemfunktionen @@SERVERNAME på båda servrarna. Kontrollera om returvärdet matchar datorns namn på varje server. Om det inte stämmer, byt namn på servern.

  6. Verifiera att SQL Server:s startkonto har fulla kontrollbehörigheter på följande registernyckel:

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

Nästa steg