Delen via


Ernst van fouten van de database-engine

Van toepassing op:SQL Server

Wanneer er een fout wordt gegenereerd door de SQL Server Database Engine, geeft de ernst van de fout het type probleem aan dat door SQL Server is opgetreden.

Ernstniveaus

De volgende tabel bevat en beschrijft de ernstniveaus van de fouten die zijn gegenereerd door de SQL Server Database Engine.

Ernstniveau Description
0-9 Geef informatieve berichten aan die statusinformatie retourneren of fouten melden die niet ernstig zijn. De database-engine genereert geen systeemfouten met ernst van 0 tot en met 9.
10 Geeft informatieve berichten aan die statusinformatie retourneren of fouten melden die niet ernstig zijn. Om compatibiliteitsredenen converteert de database-engine ernst 10 naar ernst 0 voordat de foutgegevens naar de aanroepende toepassing worden geretourneerd.
11-16 Geef fouten aan die door de gebruiker kunnen worden gecorrigeerd.
11 Geeft aan dat het opgegeven object of de opgegeven entiteit niet bestaat.
12 Een speciale ernst voor query's die geen vergrendeling gebruiken vanwege speciale queryhints. In sommige gevallen kunnen leesbewerkingen die door deze instructies worden uitgevoerd, leiden tot inconsistente gegevens, omdat er geen vergrendelingen worden genomen om consistentie te garanderen.
13 Geeft aan dat er impassefouten zijn voor transacties.
14 Geeft beveiligingsfouten aan, zoals geweigerde machtigingen.
15 Geeft syntaxisfouten aan in de opdracht Transact-SQL.
16 Geeft algemene fouten aan die door de gebruiker kunnen worden gecorrigeerd.
17-19 Geef softwarefouten aan die niet door de gebruiker kunnen worden gecorrigeerd. Informeer uw systeembeheerder over het probleem.
17 Geeft aan dat de instructie ertoe heeft geleid dat SQL Server geen resources meer heeft (zoals geheugen, vergrendelingen of schijfruimte voor de database) of dat een bepaalde limiet wordt overschreden die is ingesteld door de systeembeheerder.
18 Geeft een probleem aan in de database-enginesoftware, maar de instructie is voltooid en de verbinding met het exemplaar van de database-engine wordt gehandhaafd. De systeembeheerder moet telkens worden geïnformeerd wanneer een bericht met een ernstniveau van 18 optreedt.
19 Geeft aan dat een niet-geconfigureerde database-enginelimiet is overschreden en dat het huidige batchproces is beëindigd. Foutberichten met een ernstniveau van 19 of hoger stoppen de uitvoering van de huidige batch. Ernstniveau 19-fouten zijn zeldzaam en moeten worden gecorrigeerd door de systeembeheerder of de primaire ondersteuningsprovider. Neem contact op met uw systeembeheerder wanneer een bericht met ernstniveau 19 wordt verhoogd. Foutberichten met een ernstniveau van 19 tot en met 25 worden naar het foutenlogboek geschreven.
20-24 Geef systeemproblemen aan en zijn fatale fouten, wat betekent dat de database-enginetaak waarop een instructie of batch wordt uitgevoerd, niet meer wordt uitgevoerd. De taak registreert informatie over wat er is opgetreden en eindigt vervolgens. In de meeste gevallen kan de toepassingsverbinding met het exemplaar van de database-engine ook worden beëindigd. Als dit het geval is, kan de toepassing mogelijk niet opnieuw verbinding maken, afhankelijk van het probleem.

Foutberichten in dit bereik kunnen van invloed zijn op alle processen die toegang hebben tot gegevens in de database en kunnen erop wijzen dat een database of object is beschadigd. Foutberichten met een ernstniveau van 19 tot en met 24 worden naar het foutenlogboek geschreven.
20 Geeft aan dat een instructie een probleem heeft aangetroffen. Omdat het probleem alleen van invloed is op de huidige taak, is het niet waarschijnlijk dat de database zelf beschadigd is.
21 Geeft aan dat er een probleem is opgetreden dat van invloed is op alle taken in de huidige database, maar de database zelf is waarschijnlijk niet beschadigd.
22 Geeft aan dat de tabel of index die in het bericht is opgegeven, is beschadigd door een software- of hardwareprobleem.

Fouten met ernstniveau 22 treden zelden op. Als er een voorkomt, voert u uit DBCC CHECKDB om te bepalen of andere objecten in de database ook beschadigd zijn. Het probleem bevindt zich mogelijk alleen in de buffercache en niet op de schijf zelf. Als dat het geval is, wordt het probleem opgelost door het exemplaar van de database-engine opnieuw te starten. Als u wilt blijven werken, moet u opnieuw verbinding maken met het exemplaar van de database-engine. DBCC Gebruik anders om het probleem te herstellen. In sommige gevallen moet u de database mogelijk herstellen.

Als het probleem niet wordt opgelost door het exemplaar van de database-engine opnieuw op te starten, bevindt het probleem zich op de schijf. Soms wordt het probleem opgelost door het object te vernietigen dat is opgegeven in het foutbericht. Als het bericht bijvoorbeeld meldt dat het exemplaar van de database-engine een rij heeft gevonden met een lengte van 0 in een niet-geclusterde index, verwijdert u de index en bouwt u deze opnieuw.
23 Geeft aan dat de integriteit van de hele database in kwestie is vanwege een hardware- of softwareprobleem.

Ernstniveau 23-fouten treden zelden op. Als er een optreedt, voert u uit DBCC CHECKDB om de omvang van de schade te bepalen. Het probleem bevindt zich mogelijk alleen in de cache en niet op de schijf zelf. Als dat het geval is, wordt het probleem opgelost door het exemplaar van de database-engine opnieuw te starten. Als u wilt blijven werken, moet u opnieuw verbinding maken met het exemplaar van de database-engine. DBCC Gebruik anders om het probleem te herstellen. In sommige gevallen moet u de database mogelijk herstellen.
24 Geeft een mediafout aan. Mogelijk moet de systeembeheerder de database herstellen. Mogelijk moet u ook uw hardwareleverancier aanroepen.

Ernst van door de gebruiker gedefinieerde foutberichten

U kunt sp_addmessage door de gebruiker gedefinieerde foutberichten met ernst van 1 tot en met 25 toevoegen aan de sys.messages catalogusweergave. Deze door de gebruiker gedefinieerde foutberichten kunnen worden gebruikt door RAISERROR. Zie sp_addmessage voor meer informatie.

RAISERROR kan worden gebruikt voor het genereren van door de gebruiker gedefinieerde foutberichten met ernst van 1 tot en met 25. RAISERROR kan verwijzen naar een door de gebruiker gedefinieerd foutbericht dat is opgeslagen in de sys.messages catalogusweergave of dynamisch een bericht samenstellen. Wanneer RAISERROR een door de gebruiker gedefinieerd foutbericht wordt sys.messages gebruikt bij het genereren van een fout, overschrijft de ernst die is opgegeven door RAISERROR de ernst die is opgegeven in sys.messages. Zie RAISERROR voor meer informatie.

Fout ernst en TRY... VANGEN

Een TRY...CATCH constructie onderschept alle uitvoeringsfouten met ernst groter dan 10 die de databaseverbinding niet beëindigen.

Fouten met ernst van 0 tot en met 10 zijn informatieve berichten en veroorzaken geen uitvoering van het CATCH blok van een TRY...CATCH constructie.

Fouten die de databaseverbinding beëindigen, meestal met ernst van 20 tot en met 25, worden niet verwerkt door het CATCH blok omdat de uitvoering wordt afgebroken wanneer de verbinding wordt beëindigd.

Zie TRY voor meer informatie ... CATCH.

Fouternigheid ophalen

De ERROR_SEVERITY systeemfunctie kan worden gebruikt om de ernst van de fout op te halen waardoor het CATCH blok van een TRY...CATCH constructie werd uitgevoerd. ERROR_SEVERITY retourneert NULL indien aangeroepen buiten het bereik van een CATCH blok. Zie ERROR_SEVERITY voor meer informatie.