Mogelijke fouten tijdens databasespiegeling

Van toepassing op:SQL Server

Problemen met fysieke, besturingssystemen of SQL Server kunnen leiden tot een fout in een databasespiegelingssessie. Databasespiegeling controleert niet regelmatig de onderdelen waarvan Sqlservr.exe afhankelijk is om te controleren of ze correct werken of zijn mislukt. Voor sommige typen fouten rapporteert het betrokken onderdeel echter een fout aan Sqlservr.exe. Een fout die door een ander onderdeel wordt gerapporteerd, wordt een harde fout genoemd. Voor het detecteren van andere fouten die anders onopgemerkt zouden blijven, implementeert databasespiegeling een eigen time-outmechanisme. Wanneer er een time-out voor spiegeling optreedt, gaat databasespiegeling ervan uit dat er een fout is opgetreden en een zachte fout declareert. Sommige fouten die optreden op het niveau van de SQL Server-instantie veroorzaken echter geen time-out van de databasespiegeling en kunnen onopgemerkt blijven.

Important

Fouten in andere databases dan de gespiegelde database kunnen niet worden gedetecteerd in een sessie voor databasespiegeling. Bovendien is het onwaarschijnlijk dat een gegevensschijffout wordt gedetecteerd, tenzij de database opnieuw wordt opgestart vanwege een gegevensschijffout.

De snelheid waarmee fouten worden gedetecteerd en daarmee de reactietijd van de mirrorsessie bij een storing, is afhankelijk van de vraag of de fout hard of soft is. Sommige harde fouten, zoals netwerkfouten, worden onmiddellijk gerapporteerd. In sommige gevallen kunnen echter onderdeelspecifieke time-outperioden de rapportage van bepaalde harde fouten vertragen. Voor zachte fouten bepaalt de lengte van de time-outperiode voor spiegeling de snelheid van foutdetectie. Deze periode is standaard 10 seconden. Dit is de minimaal aanbevolen waarde.

Storingen door harde fouten

Mogelijke oorzaken van harde fouten zijn onder andere (maar zijn niet beperkt tot) de volgende voorwaarden:

  • Een verbroken verbinding of draad

  • Een slechte netwerkkaart

  • Een routerwijziging

  • Wijzigingen in de firewall

  • Eindpuntconfiguratie

  • Verlies van het station waar het transactielog zich bevindt

  • Besturingssysteem- of procesuitval

Wanneer bijvoorbeeld de schijf met het transactielogboek op de primaire database niet meer reageert en uitvalt, meldt het besturingssysteem aan Sqlservr.exe dat er een ernstige fout is opgetreden.

Sommige onderdelen, zoals netwerkonderdelen en sommige IO-subsystemen, hebben hun eigen time-outs om fouten te bepalen. Dergelijke time-outs staan los van databasespiegeling, die hiervan niets weet en zich totaal niet bewust is van hun gedrag. In deze gevallen vergroot de time-outperiode de tijd tussen het optreden van een fout en het moment waarop databasemirroring de resulterende ernstige fout ontvangt.

Opmerking

De enige actieve foutcontrole die wordt uitgevoerd voor databasespiegeling, treedt op voor zachte foutcases. Zie 'Fouten vanwege zachte fouten' verderop in dit onderwerp voor meer informatie.

Vraag een netwerktechnicus welke foutberichten naar een poort worden verzonden wanneer de volgende gebeurtenissen optreden op een TCP-verbinding om u te helpen de foutvoorwaarden die zich voordoen op het netwerk te interpreteren:

  • DNS werkt niet.

  • Kabels worden losgekoppeld.

  • Microsoft Windows heeft een firewall die een specifieke poort blokkeert.

  • De toepassing die een poort bewaakt, mislukt.

  • De naam van een Windows-server wordt gewijzigd.

  • Er wordt een Windows-server opnieuw opgestart.

Opmerking

Spiegeling beschermt niet tegen problemen die specifiek zijn voor clienttoegang tot de servers. Denk bijvoorbeeld aan een geval waarin een openbare netwerkadapter clientverbindingen naar het primaire serverexemplaar verwerkt, terwijl een privé-netwerkinterfacekaart al het spiegelverkeer tussen serverexemplaren afhandelt. In dit geval zou het uitvallen van de openbare netwerkadapter voorkomen dat clients toegang krijgen tot de database, terwijl de database wel gespiegeld zou blijven.

Fouten vanwege zachte fouten

Omstandigheden die time-outs bij het spiegelen kunnen veroorzaken, omvatten onder andere (maar zijn niet daartoe beperkt) de volgende:

  • Netwerkfouten, zoals time-outs voor TCP-koppelingen, verwijderde of beschadigde pakketten of pakketten die in een onjuiste volgorde staan.

  • Een besturingssysteem, server of database die niet reageert.

  • Er treedt een time-out op voor een Windows-server.

  • Onvoldoende rekenresources, zoals een overbelasting van CPU of schijf, het volraken van het transactielogboek of een tekort aan geheugen of threads in het systeem. In dergelijke gevallen moet u de time-outperiode verhogen, de werkbelasting verminderen of de hardware wijzigen om de workload aan te kunnen.

Het time-outmechanisme voor spiegelen

Omdat zachte fouten niet direct door een serverexemplaar kunnen worden gedetecteerd, kan een zachte fout ertoe leiden dat een serverexemplaar voor onbepaalde tijd blijft wachten. Om dit te voorkomen, hanteert databasespiegeling een eigen time-outmechanisme, waarbij elk serverexemplaar in een spiegelingssessie met een vast interval een ping verzendt via elke open verbinding.

Om een verbinding open te houden, moet een serverexemplaar binnen de gedefinieerde time-outperiode een ping op die verbinding ontvangen, plus de tijd die nodig is om nog een extra ping te verzenden. Het ontvangen van een ping tijdens de time-outperiode geeft aan dat de verbinding nog steeds is geopend en dat de serverinstanties erover communiceren. Bij ontvangst van een ping reset een serverinstantie de time-outteller van die verbinding.

Als er tijdens de time-outperiode geen ping via een verbinding wordt ontvangen, beschouwt een serverinstantie de verbinding als verlopen. De serverinstantie sluit de verlopen verbinding en handelt de time-outgebeurtenis af op basis van de status en de werkingsmodus van de sessie.

Zelfs als de andere server daadwerkelijk correct doorgaat, wordt een time-out beschouwd als een fout. Als de time-outwaarde voor een sessie te kort is voor de normale reactietijd van een van beide partners, kunnen foutieve fouten optreden. Er is sprake van een onterechte storing wanneer de ene serverinstantie met succes contact opneemt met een andere serverinstantie die zo traag reageert dat de pings niet worden ontvangen voordat de time-out verstrijkt.

In sessies met hoge prestaties is de time-outperiode altijd 10 seconden. Dit is over het algemeen voldoende om valse fouten te voorkomen. In sessies met hoge veiligheid is de standaardtime-outperiode 10 seconden, maar u kunt de duur wijzigen. Om foutieve fouten te voorkomen, raden we u aan dat de time-outperiode voor spiegeling altijd 10 seconden of langer dan dat is.

De time-outwaarde wijzigen (alleen modus voor hoge veiligheid)

De huidige time-outwaarde weergeven

Reageren op een fout

Ongeacht het type fout reageert een serverinstantie die een fout detecteert op de juiste manier op basis van de rol van het exemplaar, de bedrijfsmodus van de sessie en de status van een andere verbinding in de sessie. Zie Bedrijfsmodi voor databasespiegeling voor informatie over wat er gebeurt wanneer een partner uitvalt.

Zie ook

Schat de serviceonderbreking tijdens het wisselen van rollen in (databasespiegeling)
Bedrijfsmodi voor databasespiegeling
Rolwisseling tijdens een databasespiegelingssessie (SQL Server)
Databasespiegeling (SQL Server)