Dela via


Transaktioner – tillgänglighetsgrupper och databasspegling

Gäller för:SQL Server

I den här artikeln beskrivs stöd för korsdatabaser och distribuerade transaktioner för AlwaysOn-tillgänglighetsgrupper och databasspegling.

Stöd för distribuerade transaktioner

SQL Server 2017 stöder distribuerade transaktioner för databaser i tillgänglighetsgrupper. Det här stödet omfattar databaser på samma instans av SQL Server eller databaser på olika instanser av SQL Server. Distribuerade transaktioner stöds inte för databaser som konfigurerats för databasspegling.

Anmärkning

SQL Server 2016 (13.x) Service Pack 2 och senare ger fullständigt stöd för distribuerade transaktioner i tillgänglighetsgrupper.

I SQL Server 2016-versioner (13.x) före Service Pack 2 stöds inte distribuerade transaktioner mellan databaser (dvs. transaktioner som använder databaser på samma SQL Server-instans) som involverar en databas i en tillgänglighetsgrupp.

Information om hur du konfigurerar en tillgänglighetsgrupp för distribuerade transaktioner finns i Konfigurera tillgänglighetsgrupp för distribuerade transaktioner.

Mer information finns på:

SQL Server 2016 SP1 och tidigare: Stöd för transaktioner mellan databaser inom samma SQL Server-instans

I SQL Server 2016 SP1 och tidigare stöds inte transaktioner mellan databaser inom samma SQL Server-instans för tillgänglighetsgrupper. Inga två databaser i en transaktion mellan databaser får hanteras av samma SQL Server-instans om någon av eller båda databaserna finns i en tillgänglighetsgrupp. Den här begränsningen gäller även när dessa databaser ingår i samma tillgänglighetsgrupp.

Transaktioner mellan databaser stöds inte heller för databasspegling.

SQL Server 2016 SP1 och tidigare: Stöd för distribuerade transaktioner

Distribuerade transaktioner stöds med tillgänglighetsgrupper när databaser hanteras av olika SQL Server-instanser. Det gäller även för distribuerade transaktioner mellan SQL Server-instanser och andra DTC-kompatibla servrar.

Microsoft Distributed Transaction Coordinator (MSDTC eller DTC) är en Windows-tjänst som tillhandahåller transaktionsinfrastruktur för distribuerade system. MSDTC tillåter klientprogram att inkludera flera datakällor i en transaktion, som sedan checkas in på alla servrar som ingår i transaktionen. Du kan till exempel använda MSDTC för att samordna transaktioner som sträcker sig över flera databaser på olika servrar.

SQL Server 2016 introducerar möjligheten att använda distribuerade transaktioner där en eller flera av databaserna i transaktionen finns i en tillgänglighetsgrupp. Före SQL Server 2016 kunde distribuerade transaktioner inte användas för databaser i tillgänglighetsgrupper. SQL Server 2016 kan registrera en resurshanterare per databas. Den här nya funktionen är anledningen till att distribuerade transaktioner kan inkludera databaser i tillgänglighetsgrupper.

Följande krav måste uppfyllas:

  • Tillgänglighetsgrupper måste köras på Windows Server 2012 R2 eller senare. För Windows Server 2012 R2 måste du installera uppdateringen i KB3090973.

  • Tillgänglighetsgrupper måste skapas med kommandot SKAPA TILLGÄNGLIGHETSGRUPP och satsen WITH DTC_SUPPORT = PER_DB . Du kan för närvarande inte ändra en befintlig tillgänglighetsgrupp.

  • Alla instanser av SQL Server som deltar i tillgänglighetsgruppen måste vara SQL Server 2016 eller senare.

Ej stöd för distribuerade transaktioner

Exempel på specifika fall där distribuerade transaktioner inte stöds är:

  • I SQL Server 2016 SP1 och tidigare, där fler än en databas som ingår i transaktionen finns i samma tillgänglighetsgrupp.

  • I SQL Server 2016 SP1 och tidigare, där minst en databas finns i en tillgänglighetsgrupp och en annan databas finns på samma instans av SQL Server.

  • Där tillgänglighetsgruppen inte skapades med aktiverad distribuerad transaktion.

  • Databasspegling.

Viktigt!

Fastställa lämpligt standardresultat för transaktioner som DTC inte kan matcha för din miljö. Information om hur du konfigurerar standardresultatet finns i serverkonfigurationsalternativet för lösning av beslutstvister.

Exempelscenario med databasspegling

Följande exempel på databasspegling visar hur en logisk inkonsekvens kan uppstå. I det här exemplet använder ett program en transaktion mellan databaser för att infoga två rader med data: en rad infogas i en tabell i en speglad databas, A och den andra raden infogas i en tabell i en annan databas, B. Databas A speglas i högsäkerhetsläge med automatisk redundansväxling. Medan transaktionen genomförs blir databas A otillgänglig och speglingssessionen växlar automatiskt över till speglingen av databas A.

Efter övertagande kan transaktionen mellan databaser lyckas åstadkommas på databas B men inte på den övertagna databasen. Om till exempel den ursprungliga huvudservern för databas A inte hade skickat loggen för transaktionen mellan databaser till speglingsservern före felet. Efter övertagandet skulle transaktionen inte finnas på den nya huvudservern. Databaserna A och B skulle bli inkonsekventa eftersom data som infogas i databas B förblir intakta, men data som infogats i databas A har gått förlorade.

Ett liknande scenario kan inträffa när du använder en MS DTC-transaktion. Efter systemväxling kontaktar den nya huvudrollen MS DTC, till exempel. Men MS DTC har ingen kunskap om den nya huvudservern och avslutar alla transaktioner som "förbereder sig för att bekräfta", som anses ha bekräftats i andra databaser.

Anmärkning

Det går inte att använda databasspegling med DTC eller använda tillgänglighetsgrupper med DTC på sätt som inte har godkänts i den här artikeln. Detta innebär inte att aspekter av produkten som inte är relaterade till DTC inte stöds. Problem som uppstår vid felaktig användning av distribuerade transaktioner stöds dock inte.

Nästa steg

AlwaysOn-tillgänglighetsgrupper: Samverkan (SQL Server)