Databasspegling i SQL Server
Med databasspegling i SQL Server kan du behålla en kopia eller spegling av en SQL Server-databas på en väntelägesserver. Spegling säkerställer att det finns två separata kopior av data hela tiden, vilket ger hög tillgänglighet och fullständig dataredundans. .NET Data Provider för SQL Server ger implicit stöd för databasspegling, så att utvecklaren inte behöver vidta några åtgärder eller skriva någon kod när den har konfigurerats för en SQL Server-databas. SqlConnection Dessutom stöder objektet ett explicit anslutningsläge som gör det möjligt att ange namnet på en redundanspartnerserver i ConnectionString.
Följande förenklade sekvens av händelser inträffar för ett SqlConnection objekt som är avsett för en databas som konfigurerats för spegling:
Klientprogrammet ansluter till huvuddatabasen och servern skickar tillbaka namnet på partnerservern, som sedan cachelagras på klienten.
Om servern som innehåller huvuddatabasen misslyckas eller anslutningen avbryts går anslutnings- och transaktionstillståndet förlorat. Klientprogrammet försöker återupprätta en anslutning till huvuddatabasen och misslyckas.
Klientprogrammet försöker sedan transparent upprätta en anslutning till speglingsdatabasen på partnerservern. Om den lyckas omdirigeras anslutningen till speglingsdatabasen, som sedan blir den nya huvuddatabasen.
Ange redundanspartnern i anslutningssträngen
Om du anger namnet på en redundanspartnerserver i anslutningssträng försöker klienten transparent ansluta till redundanspartnern om huvuddatabasen inte är tillgänglig när klientprogrammet först ansluter.
";Failover Partner=PartnerServerName"
Om du utelämnar namnet på redundanspartnerservern och huvuddatabasen inte är tillgänglig när klientprogrammet först ansluter, aktiveras en SqlException .
När en SqlConnection har öppnats returneras redundanspartnernamnet av servern och ersätter alla värden som anges i anslutningssträng.
Kommentar
Du måste uttryckligen ange det första katalog- eller databasnamnet i anslutningssträng för databasspeglingsscenarier. Om klienten får redundansinformation om en anslutning som inte har en uttryckligen angiven initial katalog eller databas cachelagras inte redundansinformationen och programmet försöker inte redundansväxla om huvudservern misslyckas. Om en anslutningssträng har ett värde för redundanspartnern, men inget värde för den första katalogen eller databasen, utlöses enInvalidArgumentException
.
Hämtar aktuellt servernamn
I händelse av en redundansväxling kan du hämta namnet på den server som den aktuella anslutningen faktiskt är ansluten till med hjälp DataSource av egenskapen för ett SqlConnection objekt. Följande kodfragment hämtar namnet på den aktiva servern, förutsatt att anslutningsvariabeln refererar till en öppen SqlConnection.
När en redundanshändelse inträffar och anslutningen växlas till speglingsservern uppdateras egenskapen DataSource för att återspegla speglingsnamnet.
Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;
SqlClient-speglingsbeteende
Klienten försöker alltid ansluta till den aktuella huvudservern. Om det misslyckas försöker den redundanspartnern. Om speglingsdatabasen redan har växlats till huvudrollen på partnerservern lyckas anslutningen och den nya huvudspeglingsmappningen skickas till klienten och cachelagras under anropets AppDomainlivslängd. Den lagras inte i beständig lagring och är inte tillgänglig för efterföljande anslutningar i en annan AppDomain eller process. Den är dock tillgänglig för efterföljande anslutningar inom samma AppDomain. Observera att en annan AppDomain - eller process som körs på samma dator eller en annan dator alltid har sin pool med anslutningar och att dessa anslutningar inte återställs. I så fall, om den primära databasen går ner, misslyckas varje process eller AppDomain en gång och poolen rensas automatiskt.
Kommentar
Speglingsstöd på servern konfigureras per databas. Om datamanipuleringsåtgärder utförs mot andra databaser som inte ingår i huvud-/speglingsuppsättningen, antingen genom att använda flerdelsnamn eller genom att ändra den aktuella databasen, sprids inte ändringarna till dessa andra databaser i händelse av fel. Inget fel genereras när data ändras i en databas som inte speglas. Utvecklaren måste utvärdera den möjliga effekten av sådana åtgärder.
Databasspeglingsresurser
Konceptuell dokumentation och information om hur du konfigurerar, distribuerar och administrerar spegling finns i följande resurser i SQL Server-dokumentationen.
Resurs | beskrivning |
---|---|
Databasspegling | Beskriver hur du konfigurerar spegling i SQL Server. |