Databasespiegeling in SQL Server
Met databasespiegeling in SQL Server kunt u een kopie of spiegeling van een SQL Server-database op een stand-byserver bewaren. Spiegeling zorgt ervoor dat er altijd twee afzonderlijke kopieën van de gegevens bestaan, waardoor hoge beschikbaarheid en volledige gegevensredundantie worden geboden. De .NET-gegevensprovider voor SQL Server biedt impliciete ondersteuning voor databasespiegeling, zodat de ontwikkelaar geen actie hoeft te ondernemen of code hoeft te schrijven zodra deze is geconfigureerd voor een SQL Server-database. Daarnaast ondersteunt het SqlConnection object een expliciete verbindingsmodus waarmee de naam van een failoverpartnerserver in de ConnectionString.
De volgende vereenvoudigde reeks gebeurtenissen vindt plaats voor een SqlConnection object dat is gericht op een database die is geconfigureerd voor spiegeling:
De clienttoepassing maakt verbinding met de principal-database en de server stuurt de naam van de partnerserver terug, die vervolgens in de cache op de client wordt opgeslagen.
Als de server met de principal-database mislukt of de verbinding wordt onderbroken, gaat de verbinding en de transactiestatus verloren. De clienttoepassing probeert opnieuw verbinding te maken met de principal-database en mislukt.
De clienttoepassing probeert vervolgens transparant een verbinding tot stand te brengen met de gespiegelde database op de partnerserver. Als dit lukt, wordt de verbinding omgeleid naar de gespiegelde database, die vervolgens de nieuwe principal-database wordt.
De failoverpartner opgeven in de verbindingsreeks
Als u de naam opgeeft van een failoverpartnerserver in de verbindingsreeks, probeert de client transparant verbinding te maken met de failoverpartner als de principal-database niet beschikbaar is wanneer de clienttoepassing voor het eerst verbinding maakt.
";Failover Partner=PartnerServerName"
Als u de naam van de failoverpartnerserver weglaat en de principal-database niet beschikbaar is wanneer de clienttoepassing voor het eerst verbinding maakt, wordt er een SqlException gegenereerd.
Wanneer een SqlConnection failoverpartner is geopend, wordt de naam van de failoverpartner geretourneerd door de server en worden alle waarden vervangen die zijn opgegeven in de verbindingsreeks.
Notitie
U moet expliciet de initiële catalogus- of databasenaam opgeven in de verbindingsreeks voor scenario's voor databasespiegeling. Als de client failover-informatie ontvangt over een verbinding die niet expliciet is opgegeven initiële catalogus of database, wordt de failover-informatie niet in de cache opgeslagen en probeert de toepassing geen failover uit te voeren als de principal-server mislukt. Als een verbindingsreeks een waarde heeft voor de failoverpartner, maar geen waarde voor de eerste catalogus of database, wordt er een InvalidArgumentException
verhoogd.
De naam van de huidige server ophalen
In het geval van een failover kunt u de naam ophalen van de server waarmee de huidige verbinding daadwerkelijk is verbonden met behulp van de DataSource eigenschap van een SqlConnection object. Met het volgende codefragment wordt de naam van de actieve server opgehaald, ervan uitgaande dat de verbindingsvariabele verwijst naar een geopende SqlConnection.
Wanneer er een failover-gebeurtenis optreedt en de verbinding wordt overgeschakeld naar de mirrorserver, wordt de eigenschap DataSource bijgewerkt om de mirrornaam weer te geven.
Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;
Gedrag van SqlClient-spiegeling
De client probeert altijd verbinding te maken met de huidige principal-server. Als dit mislukt, wordt de failoverpartner geprobeerd. Als de mirrordatabase al is overgeschakeld naar de principal-rol op de partnerserver, slaagt de verbinding en wordt de nieuwe principal-mirror-toewijzing naar de client verzonden en in de cache opgeslagen voor de levensduur van de aanroep AppDomain. Het wordt niet opgeslagen in permanente opslag en is niet beschikbaar voor volgende verbindingen in een ander AppDomain of proces. Het is echter beschikbaar voor volgende verbindingen binnen hetzelfde AppDomain. Houd er rekening mee dat een ander AppDomain of proces dat op dezelfde of een andere computer wordt uitgevoerd, altijd de groep verbindingen heeft en dat deze verbindingen niet opnieuw worden ingesteld. In dat geval, als de primaire database uitvalt, mislukt elk proces of AppDomain eenmaal en wordt de pool automatisch gewist.
Notitie
Ondersteuning voor spiegeling op de server wordt geconfigureerd per database. Als bewerkingen voor gegevensbewerkingen worden uitgevoerd op andere databases die niet zijn opgenomen in de principal/mirror-set, hetzij met behulp van namen van meerdere onderdelen of door de huidige database te wijzigen, worden de wijzigingen in deze andere databases niet doorgegeven in het geval van een storing. Er wordt geen fout gegenereerd wanneer gegevens worden gewijzigd in een database die niet wordt gespiegeld. De ontwikkelaar moet de mogelijke impact van dergelijke bewerkingen evalueren.
Resources voor databasespiegeling
Zie de volgende bronnen in sql Server-documentatie voor conceptuele documentatie en informatie over het configureren, implementeren en beheren van spiegeling.
Bron | Beschrijving |
---|---|
Databasespiegeling | Hierin wordt beschreven hoe u spiegeling instelt en configureert in SQL Server. |