Delen via


SQL Server VSS Writer-logboekregistratie

Van toepassing op:SQL Server

SQL Server kan worden betrokken bij back-up- en herstelbewerkingen van VSS (Volume Shadow Copy Service) via de toegewezen SQL Writer-service. Zie SQL Server Back-up maken van toepassingen - Volume Shadow Copy Service (VSS) en SQL Writer voor meer informatie.

De service rapporteert uitvoeringsfouten in windows-toepassingslogboeken met een gebeurtenis Source (of ProviderName in PowerShell- of XML-context) van waarde SQLWRITER, zoals u kunt zien in het voorbeeld verderop in dit artikel. Voorafgaand aan SQL Server 2019 (15.x) was er geen speciaal activiteitenlogboek, wat het moeilijk maakte om onderzoeken tegen SQL Server als deelnemer aan VSS-bewerkingen uit te voeren.

In dit artikel wordt het nieuwe logboek beschreven dat is geïntroduceerd door SQL Server 2019 (15.x) om de SQLWriter-bewerkingen beter zichtbaar te maken. Deze functionaliteit is ook beschikbaar gesteld in SQL Server 2016 (13.x) Service Pack 3 en SQL Server 2017 (14.x) Cumulatieve update (CU) 27.

Overzicht

De belangrijkste kenmerken van SQL Server 2019 (15.x) SQLWriter-logboekregistratie zijn:

  • Deze is standaard ingeschakeld
  • Het is systeembreed (het zal de activiteit van de SQL-schrijver traceren tegen alle SQL Server-exemplaren die op de server worden uitgevoerd)
  • Het is gebaseerd op tekst
  • De werkmap is C:\Program Files\Microsoft SQL Server\90\Shared
  • Binnen die map:
    • Logboekregistratie vindt plaats in bestand SqlWriterLogger.txt
    • Dit bestand wordt hernoemd naar SqlWriterLogger1.txt wanneer de maximale grootte (standaard 1 MB) wordt bereikt, waarbij logboekregistratie wordt voortgezet in de hoofdmap SqlWriterLogger.txt.
    • Er is slechts één rollover-bestand, dus de tweede rollover overschrijft de bestaande SqlWriterLogger1.txt.
    • Parameters worden beheerd door bestand SqlWriterConfig.ini

Omdat SQL Writer een gedeeld SQL Server-onderdeel is, heeft het één exemplaar op een systeem en is de primaire versie hetzelfde als de hoogste primaire versie van een geïnstalleerd SQL Server-exemplaar. Als SQL Server 2016 (13.x) SP2 en SQL Server 2019 (15.x) bijvoorbeeld op hetzelfde systeem zijn geïnstalleerd, wordt het binaire SQL Writer-bestand geleverd door SQL Server 2019 (15.x) en worden alle draaiende instanties van alle hoofdversies verwerkt, hoewel de thuismap onder \90 blijft. Lokale exemplaren en versies profiteren van de nieuwe SQL Server 2019 (15.x)-tracering die hier wordt beschreven. Het impliceert ook dat alleen cumulatieve updates van SQL Server 2019 (15.x) binaire SQL Writer-bestanden in deze situatie upgraden.

Opmerking

In de volgende alinea's wordt de situatie beschreven die begint met SQL Server 2019 (15.x) CU 4. Eerdere versies van SQL Server 2019 (15.x) hebben niet dezelfde hoeveelheid informatie in het logboekbestand onder de standaardinstellingen.

Basisbewerkingen

U kunt profiteren van de nieuwe logboekregistratie zonder handmatige wijzigingen. U kunt het hoofdlogboekbestand openen of een kopie ervan ophalen in SqlWriterLogger.txtC:\Program Files\Microsoft SQL Server\90\Shared\. Het bestand geeft alle VSS-gebeurtenissen weer die SQL Writer bereiken, wat voornamelijk het volgende zou zijn:

  • OnIdentify gebeurtenissen, zoals geactiveerd door de opdracht vssadmin list writers
  • Backupgebeurtenissen
  • Gebeurtenissen herstellen

Dat wil gezegd, zelfs als deze bewerkingen met succes worden uitgevoerd, worden in het logboekbestand nog steeds gedetailleerde vermeldingen vastgelegd. U kunt bevestigen dat VSS-bewerkingen plaatsvinden en succesvol met SQL Writer communiceren. Het is een verbetering die een eenvoudige ingebouwde manier biedt om deze details op SQL Server-exemplaarniveau vast te stellen.

Daarnaast worden opstartgebeurtenissen van de SQLWriter-service ook vastgelegd en worden actieve logboekregistratieparameters gerapporteerd.

Als een VSS-bewerkingsfout betrekking heeft op SQL Server, wordt sqlWriterLogger een belangrijke plaats om te controleren op informatie.

Opmerking

Deze nieuwe infrastructuur voor logboekregistratie vormt een aanvulling op de bestaande foutrapportage voor SQL Server, maar vervangt deze niet . Daarom blijft het gebeurtenislogboek van de Windows-toepassing de eerste plaats om te controleren (filteren op bronnen zoals 'SQLWRITER' en 'VSS'). SqlWriterLogger.txt zou aanvullende informatie geven aan deze eerste set.

Controle van standaardvermeldingen voor logboekregistratie

De volgende exports zijn uitgevoerd onder de standaardinstelling .

Start van de service

[01/11/2021 02:54:59, TID 61f8] ****************************************************************
[01/11/2021 02:54:59, TID 61f8] **  SQLWRITER TRACING STARTED - ProcessId: 0x4124
[01/11/2021 02:54:59, TID 61f8] **  Service is not running as WIDWriter.
[01/11/2021 02:54:59, TID 61f8] **  SQL Writer version is 15.0.4073.23
[01/11/2021 02:54:59, TID 61f8] **  MODERN LOGGER V2 ENABLED ON C:\Program Files\Microsoft SQL Server\90\Shared\SqlWriterLogger.txt
[01/11/2021 02:54:59, TID 61f8] **  With TraceLevel = DEFAULT, TraceFileSizeMb = 1, ForceFlush = False
[01/11/2021 02:54:59, TID 61f8] **  Recording events in Server Local Time. UTC OFFSET: -8:00
[01/11/2021 02:54:59, TID 61f8] ****************************************************************

De bovenstaande vermelding wordt waargenomen voor elk begin van de SQL Writer-service (deze kan zelfs tweemaal per servicestart worden geregistreerd).

In volgorde van uiterlijk kunnen we de volgende informatie zien:

  • Een tijdstempel (datum + tijd) in de lokale servertijd en de ThreadId die voor elke regel de vermelding origineert.
  • De ProcessId van het SQLWriter-proces dat wordt gestart.
  • Het feit dat de service is gestart in de 'normale' modus ('niet uitgevoerd als WIDWriter') of in de modus Interne database van Windows.
  • De versie van binaire SQL Writer-bestanden.
  • Alle parameters die zijn ingesteld door het SqlWriterConfig.ini bestand:
    • Het doelpad van het actieve logboekbestand
    • Het detailsniveau van tracering, dat in dit voorbeeld STANDAARD is
    • De maximale grootte van het bestand voordat de rollover plaatsvindt, wat in dit voorbeeld 1 MB is
    • De optie om elke update naar het logbestand geforceerd te flushen versus een meer ontspannen/gebufferde benadering, wat standaard false is.
  • Een herinnering dat logboekregistratie lokale tijd is, samen met de UTC-offset van die lokale tijd.

VSS OnIdentify-gebeurtenis

[01/12/2021 08:23:40, TID 464c] Entering SQL Writer OnIdentify.
[01/12/2021 08:23:40, TID 464c] Service: MSSQLSERVER Server: GF19. Version=15
[01/12/2021 08:23:40, TID 464c] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/12/2021 08:23:40, TID 464c] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/12/2021 08:23:40, TID 464c] Skip User Instances Enumeration

OnIdentify is een algemene VSS-bewerking. Het wordt geactiveerd door vssadmin list writers de opdracht. De meeste VSS-aanvragers starten elke VSS-back-up- of herstelbewerking door een OnIdentify gebeurtenis.

Voorheen zou alleen actieve profilertracering de DBA toestaan om een dergelijke gebeurtenis te detecteren. Met de nieuwe functie voor logboekregistratie leidt elke gebeurtenis tot de bovenstaande vermelding.

In volgorde van uiterlijk zien we dat de volgende informatie is vastgelegd:

  • Een expliciete vermelding van de OnIdentify VSS-gebeurtenis.
  • Een lijst met alle actieve (actieve) SQL Server-exemplaren, samen met de naam van het exemplaar, de primaire versie en de editie.
  • De indicatie dat we niet hebben geprobeerd 'Gebruikersexemplaren' op te sommen, een specifieke SQL Server-functie die ook wel LocalDB wordt genoemd en doorgaans niet wordt gebruikt op ondernemingsdatabaseservers.

Geslaagde VSS-back-up in de componentmodus

[01/11/2021 02:30:19, TID 32c8] Entering SQL Writer Initialize.
[01/11/2021 02:33:33, TID 232c] Entering SQL Writer OnIdentify.
[01/11/2021 02:33:33, TID 232c] Service: MSSQLSERVER Server: GF19. Version=15
[01/11/2021 02:33:33, TID 232c] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/11/2021 02:33:33, TID 232c] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/11/2021 02:33:33, TID 232c] Skip User Instances Enumeration
[01/11/2021 02:33:37, TID 232c] Entering SQL Writer OnPrepareBackup.
[01/11/2021 02:33:37, TID 232c] ****************************************************************
[01/11/2021 02:33:37, TID 232c] **  VSS SQL BACKUP BEGIN - ID: 232c
[01/11/2021 02:33:37, TID 232c] ****************************************************************
[01/11/2021 02:33:37, TID 232c] Component based backup selected.
[01/11/2021 02:33:37, TID 232c] Database count from metadata is 1
[01/11/2021 02:33:37, TID 232c] Database db_on_G on instance GF19 found in metadata
[01/11/2021 02:33:37, TID 232c] Backup type is VSS_BT_COPY
[01/11/2021 02:33:38, TID 232c] Entering SQL Writer OnPrepareSnapshot.
[01/11/2021 02:33:38, TID 232c] Service: MSSQLSERVER Server: GF19. Version=15
[01/11/2021 02:33:38, TID 232c] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/11/2021 02:33:38, TID 232c] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/11/2021 02:33:38, TID 232c] Skip User Instances Enumeration
[01/11/2021 02:33:38, TID 232c] Entering SQL Writer OnFreeze.
[01/11/2021 02:33:38, TID 232c] Entering SQL Writer OnThaw.
[01/11/2021 02:33:38, TID 232c] Entering SQL Writer OnPostSnapshot.
[01/11/2021 02:33:38, TID 232c] Entering SQL Writer OnIdentify.
[01/11/2021 02:33:38, TID 232c] Service: MSSQLSERVER Server: GF19. Version=15
[01/11/2021 02:33:38, TID 232c] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/11/2021 02:33:38, TID 232c] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/11/2021 02:33:38, TID 232c] Skip User Instances Enumeration
[01/11/2021 02:33:40, TID 232c] Entering SQL Writer OnBackupComplete.

Deze gebeurtenis leidt tot een grotere set vermeldingen. In volgorde van uiterlijk kunnen we de volgende informatie zien:

  • Een volledige OnIdentify sectie, die zoals al is aangegeven, leidt vaak tot een back-up.
  • Vermelding van elke primaire VSS-fase van de back-up, met het patroon 'SQL Writer xxxx invoeren'.
    • De eerste hier is Entering SQL Writer OnPrepareBackup.
  • Een opvallende vermelding die het begin van een VSS SQL Backup aangeeft
    • (ID is de ThreadId die de logging uitvoert voor die back-uppoging in SQLWriter)
  • De VSS-back-up-API geselecteerd door de VSS-aanvrager, 'onderdeel' of 'niet-onderdeel/volume'
  • Het aantal databases dat is opgenomen in de onderdelenlijst die is verzonden door vss-aanvrager, hier één db (1).
  • Er wordt bevestigd dat elke aangevraagde databasenaam (hier 'db_on_G') is gevonden (of niet gevonden) op het SQL Server-exemplaar waaraan deze is gekoppeld door de VSS-aanvrager (hier standaardexemplaar 'GF19').
  • Het type VSS-back-up aangevraagd. Meestal VSS_BT_FULL of VSS_BT_COPY. Zie de VSS_BACKUP_TYPE-opsomming.
  • Een andere OnIdentify sectie
  • Meer vermeldingen die de belangrijkste fasen van VSS Backup (OnFreeze, OnThaw, OnPostSnapshot) identificeren
  • Een laatste OnIdentify sectie.
  • Een definitief VSS-faserapport, welke namen het een nuttige 'afsluitende gebeurtenis' maken: OnBackupComplete.

Deze vermeldingen bevatten details over de VSS-bewerkingen die eerder moeilijk tot stand konden worden gebracht en waarvoor geavanceerde tracering nodig was. Een voorbeeld hiervan is de modus Component of Non-Component van een VSS-back-upaanvraag. Met SQL Server 2019 (15.x) SQL Writer worden ze standaard geregistreerd voor elke VSS-aanvraag en zijn ze eenvoudig toegankelijk.

Foutsituatie: gescheurde database

Ter illustratie van de eerdere instructie dat SQL Writer-logboekregistratie een aanvulling vormt op de architectuur van het gebeurtenislogboek, gaan we kijken naar de vermeldingen die zijn gekoppeld aan een bekende foutsituatie: een gescheurde database. Dit scenario kan optreden wanneer een VSS-back-up probeert een momentopnameset met volumes te maken die slechts een gedeeltelijke set bestanden van een bepaalde database bevatten. SQL Writer blokkeert deze volgens VSS-conventies.

Dit extract is de inhoud van SqlWriterLogger.txt voor de bewerking:

[01/11/2021 02:57:00, TID 5a88] Entering SQL Writer OnIdentify.
[01/11/2021 02:57:00, TID 5a88] Service: MSSQLSERVER Server: GF19. Version=15
[01/11/2021 02:57:00, TID 5a88] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/11/2021 02:57:00, TID 5a88] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/11/2021 02:57:00, TID 5a88] Skip User Instances Enumeration
[01/11/2021 02:57:02, TID 5a88] Entering SQL Writer OnPrepareBackup.
[01/11/2021 02:57:02, TID 5a88] ****************************************************************
[01/11/2021 02:57:02, TID 5a88] **  VSS SQL BACKUP BEGIN - ID: 5a88
[01/11/2021 02:57:02, TID 5a88] ****************************************************************
[01/11/2021 02:57:02, TID 5a88] Volume based (= NonComponent) backup selected.
[01/11/2021 02:57:02, TID 5a88] Backup type is VSS_BT_FULL
[01/11/2021 02:57:03, TID 5a88] Entering SQL Writer OnPrepareSnapshot.
[01/11/2021 02:57:03, TID 5a88] Service: MSSQLSERVER Server: GF19. Version=15
[01/11/2021 02:57:03, TID 5a88] Instance MSSQL15.MSSQLSERVER Edition: Developer Edition
[01/11/2021 02:57:03, TID 5a88] Instance MSSQL15.NAMED1 Edition: Enterprise Edition: Core-based Licensing
[01/11/2021 02:57:03, TID 5a88] Skip User Instances Enumeration
[01/11/2021 02:57:03, TID 5a88] HRESULT EXCEPTION CAUGHT: hr: 0x80780002
[01/11/2021 02:57:03, TID 5a88] Entering SQL Writer OnAbort.

Van SqlWriterLogger.txt we zien dat er een fout is opgetreden, maar de enige details die we over de fout hebben, is de 0x80780002 HResult. Deze waarde is moeilijk te interpreteren zonder de foutcodeverwijzingen. De status van de gescheurde database wordt echter wel geïdentificeerd.

Gebeurtenislogboek weergeven

Nu gaan we de inhoud van gebeurtenislogboeken van Windows-toepassingen controleren:

Log Name:      Application
Source:        SQLWRITER
Date:          1/11/2021 02:57:03 AM
Event ID:      24579
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      GF19
Description:
Sqllib error: Database db_on_G_and_H of SQL Server instance GF19  is stored on multiple volumes, only some of which are being shadowed.

De gebeurtenis biedt een volledig gebruiksvriendelijk opgemaakt bericht waarin de situatie wordt uitgelegd.

Het VSS-framework van het besturingssysteem rapporteert ook het probleem in gebeurtenislogboeken, met behulp van de nomenclatuur (VSS beheert 'onderdelen' die 'databases' zijn in de context van SQL Server).

Log Name:      Application
Source:        VSS
Date:          1/11/2021 02:57:03 AM
Event ID:      8229
Task Category: None
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      GF19
Description:
A VSS writer has rejected an event with error 0x800423f0, The shadow-copy set only
 contains only a subset of the volumes needed to correctly backup the selected
components of the writer.
Changes that the writer made to the writer components while handling the event will
 not be available to the requester.
Check the event log for related events from the application hosting the VSS writer.

Operation:
   PrepareForSnapshot Event

Context:
   Execution Context: Writer
   Writer Class Id: {a65faa63-5ea8-4ebc-9dbd-a0c4db26912a}
   Writer Name: SqlServerWriter
   Writer Instance Name: Microsoft SQL Server 2019:SQLWriter
   Writer Instance ID: {a16fed29-e555-4cc5-8938-c89201f31f7e}
   Command Line: "C:\Program Files\Microsoft SQL Server\90\Shared\sqlwriter.exe"
   Process ID: 22628

Het gebeurtenislogboek is een betere bron van informatie over de fout zelf hier. De inhoud van SqlWriterLogger bevat echter details over de back-upaanvraag (een VSS_BT_FULLVSS-back-upaanvraag zonder onderdeel die is mislukt tijdens de OnPrepareSnapshot fase van SQL Writer). Elk onderzoek naar VSS-fouten met BETREKKING tot SQL Server moet daarom beide bronnen verzamelen en controleren.

Sql Writer-logboekregistratieparameters wijzigen

Logboekregistratie van SQL Writer kan worden geconfigureerd door het SqlWriterConfig.ini tekstbestand te bewerken. Het bestand zelf bevat een snelle inline beschrijving van de beschikbare parameters, die hieronder worden bekeken.

Opmerking

Het bestand .ini bevindt zich onder een Windows-beschermde map (Program Files). Hiervoor zijn verhoogde beheerdersbevoegdheden vereist om te bewerken. Als u dubbelklikt in Verkenner, wordt Kladblok zonder verhoging geopend: hiermee kan de gebruiker de inhoud lezen, maar pogingen om wijzigingen op te slaan zullen mislukken. Start Kladblok als beheerder en open SqlWriterConfig.iniof gebruik een teksteditor die indien nodig om benodigde bevoegdheden kan vragen bij het opslaan van het bestand.

Dupliceer hier de SqlWriterConfig.ini bestandsopmerkingen:

Kenmerk Options Description
LogboekenInschakelen - TRUE (standaard)
-VALSE
Hiermee kan de gebruiker de hele nieuwe functie voor logboekregistratie uitschakelen, in het onwaarschijnlijke geval dat deze nodig is.
TraceFile C:\Program Files\Microsoft SQL Server\90\Shared\SqlWriterLog.txt Hiermee kan de gebruiker het pad en de bestandsnaam van het traceringsbestand wijzigen. Het wordt niet aanbevolen om deze te wijzigen, omdat de standaard, bekende locatie het eenvoudig maakt om rechtstreeks naar de juiste plek op een SQL Server te gaan.
TraceLevel - STANDAARD (standaard)
-MINIMALE
-VERBOSITEIT
De uitgebreidheid van de logboekregistratie. Meer informatie vindt u in TraceLevel-details.
TraceFileSizeMb 1 MB (standaard) De maximale bestandsgrootte vóór rollover. Het .txt-bestand maakt gebruik van UTF-8-codering en verbruikt 2 bytes per teken. Het verhogen van deze waarde is bijvoorbeeld geldig met intense VSS-activiteit, het bewaren van lange perioden van logboekvermeldingen of als niet-standaardwaarden TraceLevel zijn ingeschakeld voor lange duur. De standaardwaarde van 1 MB moet voldoende geschiedenis bieden voor de meeste situaties.
ForceFlush -WAAR
- ONWAAR (standaard)
Het instellen van deze optie TRUE zou alleen nuttig zijn in de zeldzame omstandigheden waarin de SQL Writer-service zou vastlopen voordat de laatste logboekvermeldingen werden leeggemaakt. Bewaar anders de standaardwaarde.

Wijzigingen toepassen

Voor elke wijziging in de instellingen moet de SQL Writer-service opnieuw worden gestart om te activeren.

Aanbeveling

Het opnieuw starten van SQL Writer is uiterst snel en kan naar wens worden gedaan, omdat SQL Writer geen statusgevoelige informatie bewaart en geen activiteiten heeft tussen de VSS-oproepen door. De enige voorzorgsmaatregel is om opnieuw opstarten te voorkomen terwijl er een VSS-bewerking (back-up, herstel) plaatsvindt.

SQL Writer rapporteert actieve parameters in het logboekbestand bij het (opnieuw)starten, zoals te zien is in het voorbeeldextract van servicestart .

Details van traceringsniveau

Het SqlWriterConfig.ini bestand bevat de volgende niveaus:

Level Het detail
DEFAULT De standaard verbaalheidsparameters zouden voldoende moeten zijn voor de meeste behoeften: raadpleeg de sectie Overzicht van typische logboekvermeldingen om te zien wat er standaard al wordt gegenereerd. Naast fouten worden geslaagde VSS-aanroepen, samen met VSS-metagegevens, standaard geregistreerd.
MINIMAL Op dit niveau blijven de opmaak van de DEFAULT-modus en de bijbehorende gebeurtenissen behouden. Er wordt ook uitvoer gegenereerd in veel belangrijke delen van de code. Met name worden alle bestanden en database-iteraties vastgelegd die gebruikelijk zijn in de SQLWriter-logica. Het kan het aantal vermeldingen dat is geregistreerd voor elke VSS-bewerking (inclusief alledaagse OnIdentify gebeurtenis) met een grote marge verhogen, met name op exemplaren die een groot aantal databases hosten: elk fysiek bestand van elke database kan meer dan één keer worden gerapporteerd in de loop van een VSS-back-up. Dit niveau helpt alleen een nauwkeuriger beeld te geven van de logische positie van SQL Writer-logica op het moment van een fout. Het is ook handig voor verkenningsdoeleinden. Het is niet handig om het actief te houden buiten tijdelijke onderzoeken, omdat het niveau van details de geschiedenisdiepte van de standaardbestandsgrootte van 1 MB aanzienlijk vermindert. Het verhogen van de TraceFileSizeMb waarde kan relevant zijn.
VERBOSE Dit niveau rapporteert op dit moment dezelfde gebeurtenissen als MINIMAL, maar voorvoegt elke vermelding met broncodeobject en methoden descriptors. Hierdoor wordt de uitvoer breder (groter dan Minimaal) en minder leesbaar. De toegevoegde informatie zou niet nuttig zijn buiten interacties met Microsoft-ondersteuningsservices. Dezelfde opmerking als MINIMAL is van toepassing: dit niveau voor een lange tijd actief houden zal de diepte van de standaardgrootte van de bestandsgeschiedenis van 1 MB sterk verminderen, en het kan relevant zijn om de TraceFileSizeMb waarde te vergroten.

MINIMAL en VERBOSE niveaus bieden geen aanvullende foutdetails in het geval van een fout, alleen aanvullende voortgangsdetails voor elke bewerking op laag niveau die betrekking heeft op SQL Writer-activiteiten.

Volgende stappen