Delen via


Databasespiegeling in SQL Server

ADO.NET downloaden

Opmerking

Databasespiegeling in SQL Server is een andere technologie in vergelijking met Microsoft Fabric Database Mirroring.

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 Microsoft SqlClient-provider voor SQL Server biedt impliciete ondersteuning voor databasespiegeling. De ontwikkelaar hoeft niets te doen nadat de client is geconfigureerd voor een SQL Server-database. Het object in SqlConnection ondersteunt ook een expliciete verbindingsmodus waarmee de naam van een failover-partnerserver kan worden opgegeven 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:

  1. De clienttoepassing maakt verbinding met de principal-database en de server stuurt de naam van de partnerserver terug, die door de client in de cache wordt opgeslagen.
  2. 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.
  3. 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 en de principal-database niet beschikbaar is wanneer de clienttoepassing verbinding maakt, probeert de client transparant verbinding te maken met de failoverpartner.

";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, treedt er een SqlException op.

Wanneer een SqlConnection met succes is geopend, retourneert de server de naam van de failover-partner, die eventuele waarden vervangt die worden opgegeven in de verbindingsreeks.

Opmerking

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 huidige servernaam ophalen

Wanneer er een failover plaatsvindt, kunt u de naam ophalen van de server waarmee de huidige verbinding 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 een failover-gebeurtenis optreedt en de verbinding overschakelt naar de mirror-server, wordt de eigenschap DataSource bijgewerkt om de naam van de mirror te weerspiegelen.

string activeServer = connection.DataSource;

Gedrag van SqlClient-spiegeling

De client probeert altijd verbinding te maken met de 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 toekomstige verbindingen in een ander AppDomain of -proces. Het is echter beschikbaar voor latere verbindingen binnen hetzelfde AppDomain. Een ander AppDomain of proces dat op dezelfde of een andere computer wordt uitgevoerd, heeft altijd zijn eigen groep verbindingen, en die worden niet opnieuw ingesteld. In dat geval, als de primaire database uitvalt, mislukt elk proces of AppDomain eenmaal en wordt de pool automatisch gewist.

Opmerking

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.

Volgende stappen

Resources voor databasespiegeling

Zie de volgende bronnen in sql Server-documentatie voor conceptuele documentatie en informatie over het configureren, implementeren en beheren van spiegeling.

Hulpbron Description
Databasespiegeling Hierin wordt beschreven hoe u spiegeling instelt en configureert in SQL Server.