Delen via


SqlClient-ondersteuning voor hoge beschikbaarheid, herstel na noodgevallen

ADO.NET downloaden

In dit onderwerp wordt de Microsoft SqlClient-gegevensprovider voor SQL Server besproken, met ondersteuning voor hogere beschikbaarheidsopties en herstel na noodgevallen – Always On-beschikbaarheidsgroepen. De functie AlwaysOn-beschikbaarheidsgroepen is toegevoegd aan SQL Server 2012. Zie SQL Server Books Online voor meer informatie over AlwaysOn-beschikbaarheidsgroepen.

U kunt nu de listener voor een beschikbaarheidsgroep opgeven van een beschikbaarheidsgroep met hoge beschikbaarheid en noodherstel (AG) of een SQL Server 2012-failoverclustering-instantie in de verbindingseigenschap. Als een SqlClient-toepassing is verbonden met een AlwaysOn-database waarvoor een failover wordt uitgevoerd, wordt de oorspronkelijke verbinding verbroken en moet de toepassing een nieuwe verbinding openen om door te gaan met werken na de failover.

Als u geen verbinding maakt met een listener voor een beschikbaarheidsgroep of een SQL Server 2012 Failover Cluster Instance en als er meerdere IP-adressen zijn gekoppeld aan een hostnaam, zal SqlClient opeenvolgend door alle IP-adressen lopen die aan de DNS-vermelding zijn gekoppeld. Dit kan tijdrovend zijn als het eerste IP-adres dat door de DNS-server wordt geretourneerd, niet is gebonden aan een netwerkinterfacekaart (NIC). Wanneer u verbinding maakt met een listener van een beschikbaarheidsgroep of een SQL Server 2012 failoverclusterinstantie, probeert SqlClient gelijktijdig verbindingen met alle IP-adressen tot stand te brengen. Als een verbindingspoging slaagt, zal de driver alle nog lopende verbindingspogingen annuleren.

Opmerking

Door de time-out van de verbinding te verhogen en logica voor opnieuw proberen te implementeren, wordt de kans vergroot dat een toepassing verbinding maakt met een beschikbaarheidsgroep. Omdat een verbinding kan mislukken vanwege een failover, moet u verbindingslogica voor opnieuw proberen implementeren en een mislukte verbinding opnieuw proberen totdat deze opnieuw verbinding maakt.

De volgende verbindingseigenschappen worden ondersteund in de Microsoft SqlClient-gegevensprovider voor SQL Server:

  • ApplicationIntent

  • MultiSubnetFailover

U kunt deze trefwoorden voor verbindingsreeksen programmatisch wijzigen met:

Verbinding maken met MultiSubnetFailover

Geef altijd MultiSubnetFailover=True op wanneer u verbinding maakt met een listener van een SQL Server 2012-beschikbaarheidsgroep of SQL Server 2012-failoverclusterexemplaar. MultiSubnetFailover maakt snellere failover mogelijk voor alle beschikbaarheidsgroepen en of failoverclusterexemplaren in SQL Server 2012 en vermindert de failovertijd voor AlwaysOn-topologieën met één en meerdere subnetten aanzienlijk. Tijdens een failover met meerdere subnetten probeert de client gelijktijdig verbindingen uit te voeren. Tijdens een subnetfailover wordt de TCP-verbinding agressief opnieuw geprobeerd.

De MultiSubnetFailover verbindingseigenschap geeft aan dat de toepassing wordt geïmplementeerd in een beschikbaarheidsgroep of SQL Server 2012-failoverclusterexemplaren en dat SqlClient probeert verbinding te maken met de database op het primaire SQL Server-exemplaar door verbinding te maken met alle IP-adressen. Wanneer MultiSubnetFailover=True wordt opgegeven voor een verbinding, probeert de client de TCP-verbindingspogingen sneller opnieuw dan de standaard TCP-hertransmissie-intervallen van het besturingssysteem. Hierdoor kunt u sneller opnieuw verbinding maken na een failover van een AlwaysOn-beschikbaarheidsgroep of een AlwaysOn-failoverclusterexemplaren en is van toepassing op beschikbaarheidsgroepen met één en meerdere subnetten en failoverclusterexemplaren.

Zie voor meer informatie over trefwoorden voor verbindingsreeksen in SqlClient ConnectionString.

Het specificeren van MultiSubnetFailover=True bij het verbinden met iets anders dan een beschikbaarheidsgroepluisteraar of een SQL Server 2012 Failover Cluster Instance kan resulteren in een negatieve invloed op de prestaties en wordt niet ondersteund.

Gebruik de volgende richtlijnen om verbinding te maken met een server in een beschikbaarheidsgroep of SQL Server 2012-failoverclusterexemplaar.

  • Gebruik de MultiSubnetFailover verbindingseigenschap wanneer u verbinding maakt met één subnet of meerdere subnetten. Hierdoor worden de prestaties voor beide verbeterd.

  • Als u verbinding wilt maken met een beschikbaarheidsgroep, geeft u de listener van de beschikbaarheidsgroep op als de server in uw verbindingsreeks.

  • Als u verbinding maakt met een SQL Server-exemplaar dat is geconfigureerd met meer dan 64 IP-adressen, treedt er een verbindingsfout op.

  • Gedrag van een toepassing die gebruikmaakt van de MultiSubnetFailover verbindingseigenschap wordt niet beïnvloed op basis van het type verificatie: SQL Server-verificatie, Kerberos-verificatie of Windows-verificatie.

  • Verhoog de waarde van Connect Timeout om rekening te houden met failovertijd en het aantal pogingen tot opnieuw verbinden van de applicatie te verminderen.

  • Gedistribueerde transacties worden niet ondersteund.

Als alleen-lezenroutering niet van kracht is, mislukt het maken van verbinding met een secundaire replicalocatie in de volgende situaties:

  • Als de secundaire replicalocatie niet is geconfigureerd voor het accepteren van verbindingen.

  • Als een toepassing gebruikmaakt van ApplicationIntent=ReadWrite (hieronder besproken) en de secundaire replicalocatie is geconfigureerd voor alleen-lezentoegang.

SqlDependency wordt niet ondersteund op secundaire replica's met het kenmerk Alleen-lezen.

Een verbinding mislukt wanneer een primaire replica zo is geconfigureerd dat het alleen-lezen taken weigert en de verbinding string ApplicationIntent=ReadOnly bevat.

Upgraden van databasespiegeling naar het gebruik van clusters met meerdere subnetten

Er treedt een verbindingsfout (ArgumentException) op als de trefwoorden voor verbindingen MultiSubnetFailoverFailover Partner aanwezig zijn in de verbindingsreeks of als MultiSubnetFailover=True en een ander protocol dan TCP wordt gebruikt. Er treedt ook een fout (SqlException) op als MultiSubnetFailover deze wordt gebruikt en de SQL Server een reactie van een failoverpartner retourneert die aangeeft dat het deel uitmaakt van een databasespiegelingspaar.

Als u een SqlClient-toepassing bijwerkt die momenteel gebruikmaakt van databasespiegeling naar een scenario met meerdere subnetten, moet u de verbindingseigenschap Failover Partner verwijderen en vervangen door MultiSubnetFailover ingesteld op True, en de servernaam in de verbindingsreeks vervangen door een listener voor een beschikbaarheidsgroep. Als een verbindingsreeks gebruikmaakt van Failover Partner en MultiSubnetFailover=True, zal het stuurprogramma een fout genereren. Als een verbindingsreeks echter gebruikmaakt van Failover Partner en MultiSubnetFailover=False (of ApplicationIntent=ReadWrite), zal de toepassing databasespiegeling gebruiken.

Het stuurprogramma retourneert een fout als databasespiegeling wordt gebruikt voor de primaire database in de beschikbaarheidsgroep en als MultiSubnetFailover=True in de verbindingsreeks wordt gebruikt die een verbinding maakt met een primaire database in plaats van met een listener voor een beschikbaarheidsgroep.

Toepassingsintentie opgeven

Wanneer ApplicationIntent=ReadOnly een leesworkload aanvraagt, maakt de client verbinding met een Always-On-ingeschakelde database. De server zal de intentie afdwingen op het moment van verbinding en tijdens de uitvoer van een USE-database-instructie, maar alleen voor een Always On ingeschakelde database.

Het ApplicationIntent trefwoord werkt niet met verouderde, alleen-lezen databases.

Een database kan leesworkloads voor de beoogde AlwaysOn-database toestaan of weigeren. (Dit gebeurt met de ALLOW_CONNECTIONS clausule van de PRIMARY_ROLE en SECONDARY_ROLE Transact-SQL verklaringen.)

Het ApplicationIntent trefwoord wordt gebruikt om routering voor alleen lezen in te schakelen.

Alleen-lezenroutering

Alleen-lezenroutering is een functie die ervoor zorgt dat een replica van een database voor alleen-lezen beschikbaar is. Om leesroutering in te schakelen:

  • U moet verbinding maken met een alwayson-beschikbaarheidsgroep-listener.

  • Het ApplicationIntent trefwoord voor de verbindingsreeks moet worden ingesteld op ReadOnly.

  • De beschikbaarheidsgroep moet door de databasebeheerder worden geconfigureerd om read-only routing in te schakelen.

Het is mogelijk dat meerdere verbindingen die alleen-lezenroutering gebruiken, niet allemaal verbinding maken met dezelfde alleen-lezen replica. Wijzigingen in databasesynchronisatie of wijzigingen in de routeringsconfiguratie van de server kunnen leiden tot clientverbindingen met verschillende alleen-lezen replica's. Om ervoor te zorgen dat alle alleen-lezen aanvragen verbinding maken met dezelfde alleen-lezen replica, geeft u geen listener van een beschikbaarheidsgroep door aan het trefwoord van de Data Source verbindingsreeks. Geef in plaats daarvan de naam op van het exemplaar met het kenmerk Alleen-lezen.

Alleen-lezenroutering kan langer duren dan verbinding maken met de primaire, omdat alleen-lezenroutering eerst verbinding maakt met de primaire en vervolgens zoekt naar de best beschikbare leesbare secundaire. Als gevolg hiervan moet u uw aanmeldingstime-out verhogen.

Volgende stappen