SQL Server VSS-író naplózása

A következőkre vonatkozik:SQL Server

Az SQL Server részt vehet a VSS (Kötet árnyékmásolata szolgáltatás) biztonsági mentési és visszaállítási műveleteiben a dedikált SQL Writer szolgáltatáson keresztül. További információ: SQL Server – Biztonsági mentési alkalmazások – Kötet árnyékmásolata szolgáltatás (VSS) és SQL Writer.

A szolgáltatás a végrehajtási hibákat a Windows alkalmazások eseménynaplóiba jelentené, egy Source eseménnyel (vagy ProviderName PowerShell- vagy XML-környezetben), amelynek értéke SQLWRITER, ahogyan azt a jelen cikk későbbi példájában látható. Az SQL Server 2019 (15.x) előtt nem volt dedikált tevékenységnapló, ami megnehezítette a vizsgálatokat, amikor az SQL Server a VSS műveletek résztvevőjeként szerepelt.

Ez a cikk az SQL Server 2019 (15.x) által bevezetett új naplót ismerteti, amely jobb láthatóságot biztosít az SQLWriter-műveletekhez. Ez a funkció az SQL Server 2016 (13.x) Service Pack 3 és az SQL Server 2017 (14.x) 27-es kumulatív frissítésében is elérhetővé vált.

Áttekintés

Az SQL Server 2019 (15.x) SQLWriter naplózásának fő jellemzői a következők:

  • Alapértelmezés szerint be van kapcsolva
  • Rendszerszintű (az SQL Writer-tevékenységet a kiszolgálón futó összes SQL Server-példányon nyomon fogja követni)
  • Szövegalapú
  • A munkakönyvtára C:\Program Files\Microsoft SQL Server\90\Shared
  • Ezen a könyvtáron belül:
    • A naplózás fájlban történik SqlWriterLogger.txt
    • Ez a fájl a maximális méret elérésekor (alapértelmezés szerint 1 MB) lesz átnevezve SqlWriterLogger1.txt , és a naplózás a fő SqlWriterLogger.txthelyen folytatódik.
    • Csak egy gördítési fájl van, így a második gördülés felülírja a meglévőt SqlWriterLogger1.txt.
    • A paramétereket fájl kezeli SqlWriterConfig.ini

Mivel az SQL Writer egy MEGOSZTOTT SQL Server-összetevő, egyetlen példánya van egy rendszeren, és fő verziója megegyezik a telepített SQL Server-példányok legmagasabb főverziójával. Ha például az SQL Server 2016 (13.x) SP2 és az SQL Server 2019 (15.x) ugyanarra a rendszerre van telepítve, az SQL Writer bináris verziója lesz az SQL Server 2019 (15.x) által biztosított, és az összes nagyobb verzióból származó összes futó példányt kiszolgálja (annak ellenére, hogy a kezdőkönyvtára továbbra is az alatt \90marad). A helyi példányok és verziók az itt ismertetett új SQL Server 2019 (15.x) nyomkövetés előnyeit élvezhetik. Azt is jelenti, hogy ebben az esetben csak az SQL Server 2019 (15.x) kumulatív frissítései frissítik az SQL Writer bináris fájljait.

Megjegyzés:

A következő bekezdések az SQL Server 2019 (15.x) CU 4-től kezdődő helyzetet ismertetik. A korábbi SQL Server 2019-verziók (15.x) nem rendelkeznek ugyanolyan mennyiségű információval a naplófájlban az alapértelmezett beállításoknál.

Alapszintű műveletek

Az új naplózás manuális módosítás nélkül is kihasználható. Megnyithatja vagy lekérheti a fő SqlWriterLogger.txt naplófájl egy példányát a fájlban C:\Program Files\Microsoft SQL Server\90\Shared\. A fájl az SQL Writert elérő összes VSS-eseményt tükrözi, amely főként a következő lenne:

  • OnIdentify parancs által aktivált események vssadmin list writers
  • Mentési események
  • Események visszaállítása

Vagyis még ha ezek a műveletek sikeresek is, a naplófájl továbbra is rögzíti a részletes bejegyzéseket. Ellenőrizheti, hogy a VSS-műveletek végbementek-e, és sikeresen együttműködnek-e az SQL-íróval. Ez egy olyan fejlesztés, amely egyszerű beépített módot kínál ezeknek a részleteknek az SQL Server-példány szintjén történő létrehozására.

Emellett az SQLWriter szolgáltatás indítási eseményei is rögzítésre kerülnek, és aktív naplózási paramétereket fognak jelenteni.

Ha egy VSS-művelet meghiúsul az SQL Serverrel, az SqlWriterLogger fontos hely lesz az információk kereséséhez.

Megjegyzés:

Ez az új naplózási infrastruktúra kiegészíti az SQL Server meglévő hibajelentését, nem helyettesíti azt. Ezért hiba esetén a Windows-alkalmazás eseménynaplója marad az első hely az ellenőrzéshez (az olyan források szűrése, mint az "SQLWRITER" és a "VSS"). SqlWriterLogger.txt további információt ad ehhez a kezdeti készlethez.

A tipikus naplózási bejegyzések áttekintése

Az alábbi exportálások az alapértelmezett beállítás szerint lettek létrehozva.

Szolgáltatás indítása

[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] ****************************************************************

A fenti bejegyzés az SQL Writer Service minden egyes indításakor megjelenik (akár szolgáltatásindításonként kétszer is naplózható).

A megjelenés sorrendjében a következő információkat láthatjuk:

  • Egy időbélyeg (dátum + idő) a helyi kiszolgáló időzónájában, és az egyes sorok bejegyzésének ThreadIdja.
  • Az indított SQLWriter folyamat azonosítója.
  • Az a tény, hogy a szolgáltatás "normál" módban indult ("nem WIDWriterként fut") vagy Windows belső adatbázis módban.
  • Az SQL Writer bináris fájljainak verziója.
  • A fájl által SqlWriterConfig.ini beállított összes paraméter:
    • Az aktív naplófájl célútvonala
    • A nyomkövetés részletes szintje, amely ebben a példában ALAPÉRTELMEZETT
    • A fájl maximális mérete a visszaállítás előtt, amely ebben a példában 1 MB
    • Az a lehetőség, hogy a naplófájl minden egyes frissítését azonnal lemezre írja, összehasonlítva egy lazább, puffereltebb megközelítéssel, amely alapértelmezés szerint False.
  • Emlékeztető: a naplózás a helyi idő és annak UTC-eltolása szerint történik.

VSS "OnIdentify" esemény

[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 egy gyakori VSS-művelet. A vssadmin list writers parancs váltja ki. A VSS-kérelmezők többsége bármilyen VSS biztonsági mentési vagy visszaállítási műveletet elindít egy OnIdentify esemény alapján.

Korábban csak az aktív profilkészítő nyomkövetés tette lehetővé, hogy a DBA észlelje az ilyen eseményeket. Az új naplózási funkcióval minden esemény a fenti bejegyzéshez vezet.

Megjelenési sorrend szerint a következő információk kerülnek naplózásra:

  • A VSS-esemény explicit említése OnIdentify .
  • Az összes aktív (futó) SQL Server-példány listája a példány nevével, főverziójával és kiadásával együtt.
  • A jelzés szerint nem próbáltuk meg listázni a "Felhasználói példányokat" – amely egy adott SQL Server-funkció, más néven LocalDB, és amelyet általában nem használnak vállalati adatbázis-kiszolgálókon.

Az összetevő módú VSS biztonsági mentése sikeres

[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.

Ez az esemény nagyobb számú bejegyzéshez vezet. A megjelenés sorrendjében a következő információkat láthatjuk:

  • Egy teljes OnIdentify szakasz, amely a már említettek szerint gyakran eredményez biztonsági mentést.
  • A biztonsági mentés minden fő VSS-fázisának említése az "Entering SQL Writer xxxx" mintával.
    • Az első itt van Entering SQL Writer OnPrepareBackup.
  • A VSS SQL Backup indítását jelző feltűnő bejegyzés
    • (Az azonosító az a ThreadId, amely a biztonsági mentési kísérlet naplózását végzi az SQLWriterben)
  • A VSS-kérelmező által kiválasztott VSS biztonsági mentési API, amely lehet "komponens" vagy "nem komponens/kötet"
  • A VSS-kérelmező által küldött összetevők listájában szereplő adatbázisok száma, itt egyetlen adatbázis (1).
  • Annak megerősítése, hogy minden kérelmező által megadott adatbázisnév (itt a "db_on_G") megtalálható (vagy nem található) azon az SQL Server-példányon, amelyhez a VSS-kérelmező társította (itt az alapértelmezett "GF19" példány).
  • A kért VSS-biztonsági mentési típus. Általában VSS_BT_FULL vagy VSS_BT_COPY. Lásd a VSS_BACKUP_TYPE enumerálást.
  • Egy másik OnIdentify szakasz
  • További bejegyzések a VSS Biztonsági mentés fő fázisainak azonosításához (OnFreeze, OnThaw, OnPostSnapshot)
  • Egy utolsó OnIdentify szakasz.
  • Egy végleges VSS-fázisjelentés, amely a megnevezéseknek köszönhetően hasznos "záróesemény": OnBackupComplete.

Ezek a bejegyzések részletesen ismertetik azokat a VSS-műveleteket, amelyeket korábban nehéz volt gyorsan létrehozni, és ehhez speciális nyomkövetésre volt szükség. Egy elsődleges példa a VSS biztonsági mentési kéréseinek "Összetevő" vagy "nem összetevő" módja. Az SQL Server 2019 (15.x) SQL-íróval alapértelmezés szerint minden egyes VSS-kéréshez naplózzák őket, és könnyen elérhetők.

Hibahelyzet: megszakadt adatbázis

Ha azt a korábbi állítást szeretné szemléltetni, hogy az SQL Writer naplózása kiegészíti az eseménynapló architektúráját, tekintsük át egy jól ismert hibahelyzethez, egy szakadt adatbázishoz társított bejegyzéseket. Ez a forgatókönyv akkor fordulhat elő, ha a VSS biztonsági mentése olyan kötetek pillanatképkészletét kísérli meg létrehozni, amelyek csak egy adott adatbázis fájljainak egy részét tartalmazzák. Az SQL Writer a VSS-konvenciók szerint blokkolja azt.

Ez a kivonat a SqlWriterLogger.txt művelet tartalma:

[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.

A SqlWriterLogger.txt látjuk, hogy hiba történt, azonban a hibáról csak a 0x80780002 HResult áll rendelkezésünkre. Ezt az értéket a hibakódhivatkozások nélkül nehéz értelmezni. Ez azonban azonosítja a szakadt adatbázis-helyzetet.

Eseménynapló megtekintése

Most nézzük meg a Windows-alkalmazás eseménynaplóinak tartalmát:

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.

Az esemény egy teljes, felhasználóbarát formátumú üzenetet nyújt, amely ismerteti a helyzetet.

Az operációs rendszer VSS-keretrendszere az eseménynaplókban is jelentést tesz a problémáról a saját nómenklatúrája alapján (a VSS kezeli az "összetevőket", amelyek az SQL Server kontextusában "adatbázisok").

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

Az eseménynapló jobb információforrás a hibáról. Az SqlWriterLogger tartalma azonban részletesen ismerteti a biztonsági mentési kérést (egy VSS_BT_FULLnem összetevős VSS biztonsági mentési kérést, amely az OnPrepareSnapshot SQL Writer fázisában meghiúsult). Az SQL Servert érintő VSS-hibák vizsgálatának ezért mindkét forrást be kell gyűjtenie és felül kell vizsgálnia.

SQL Writer naplózási paramétereinek módosítása

Az SQL-író naplózása a SqlWriterConfig.ini szövegfájl szerkesztésével konfigurálható. Maga a fájl tartalmazza az elérhető paraméterek gyors beágyazott leírását, amelyet alább tekintünk át.

Megjegyzés:

A .ini fájl egy Windows-Protected mappa (ProgramFájlok) alatt található. Ezért emelt szintű rendszergazdai jogosultságokat igényel a szerkesztéshez. A dupla kattintással megnyílik a Jegyzettömb jogosultságszint-emelés nélkül: lehetővé teszi a felhasználó számára a tartalom olvasását, de a módosítások mentésére tett kísérletek sikertelenek lesznek. Indítsa el a Jegyzettömbet rendszergazdaként, majd nyissa meg SqlWriterConfig.ini, vagy használjon egy szövegszerkesztőt, amely szükség szerint kérheti a jogosultságszint-emelést a fájl mentésekor.

A SqlWriterConfig.ini fájlhoz tartozó megjegyzések másolása itt:

Paraméter Beállítások Description
EnableLogging - IGAZ (alapértelmezett)
-HAMIS
Lehetővé teszi, hogy a felhasználó letiltsa a teljes új naplózási funkciót, abban a valószínűtlen esetben, ha erre szükség van.
TraceFile C:\Program Files\Microsoft SQL Server\90\Shared\SqlWriterLog.txt Lehetővé teszi, hogy a felhasználó módosítsa a nyomkövetési fájl elérési útját és fájlnevét. Nem ajánlott módosítani, mivel az alapértelmezett, jól ismert hely megkönnyíti a megfelelő helyre való ugrást bármely SQL Serveren.
Nyomkövetési szint - ALAPÉRTELMEZETT (alapértelmezett)
-MINIMÁLIS
- RÉSZLETES
A naplózás részletessége. További információ a TraceLevel részleteiben található.
TraceFileSizeMb 1 MB (alapértelmezett) A maximális fájlméret az átállás előtt. A .txt fájl UTF-8 kódolást használ, és karakterenként 2 bájtot használ fel. Az érték növelése érvényes, például intenzív VSS-tevékenység esetén, hosszú naplóbejegyzések megtartásával, vagy ha a nem alapértelmezett TraceLevel értékek engedélyezve vannak hosszú ideig. Az alapértelmezett 1 MB-os értéknek elegendő előzményt kell biztosítania a legtöbb helyzetben.
ForceFlush -IGAZ
- HAMIS (alapértelmezett)
Ha ezt a beállítást úgy állítja be, hogy TRUE csak azokban a ritka esetekben hasznos, amikor az SQL Writer szolgáltatás összeomlik, mielőtt az utolsó naplóbejegyzéseit kiürítené, ellenkező esetben tartsa meg az alapértelmezett értéket.

Módosítások alkalmazása

A beállítások módosításához az SQL Writer szolgáltatás újraindítása szükséges az aktiváláshoz.

Jótanács

Az SQL Writer újraindítása rendkívül gyors, és bármikor elvégezhető, mivel az SQL Writer nem őriz meg állapotinformációkat, és nem végez semmilyen tevékenységet a VSS-hívások között. Az egyetlen óvintézkedés az újraindítás elkerülése a VSS-művelet (biztonsági mentés, visszaállítás) során.

Az SQL Writer (újra)indításkor a naplófájlban jelenti az aktív paramétereket, ahogy az a Service Start mintakivonatában is látható.

TraceLevel részletei

A SqlWriterConfig.ini fájl a következő szinteket sorolja fel:

szint Részlet
DEFAULT Az alapértelmezett részletességi paramétereknek a legtöbb igénynek megfelelőnek kell lenniük: tekintse meg a tipikus naplózási bejegyzések áttekintését ismertető szakaszt, hogy megfigyelje, mi jön létre alapértelmezés szerint. A hibák mellett a sikeres VSS-hívások és a VSS-metaadatok is alapértelmezés szerint naplózásra kerülnek.
MINIMAL Ez a szint megőrzi a DEFAULT mód formázását és annak eseményeit. Emellett kimenetet is generál a kód számos fontos helyén. Leginkább az SQLWriter logikájában gyakori összes fájlt és adatbázis-iterációt naplózza. Jelentősen növelheti az egyes VSS-műveletekhez (beleértve a hétköznapi OnIdentify eseményeket) naplózott bejegyzések számát, különösen azon példányoknál, amelyek nagy számú adatbázist üzemeltetnek: minden adatbázis minden egyes fizikai fájlját a VSS mentése során többször is jelentheti. Ez a szint csak abban segít, hogy pontosabb képet adjon az SQL Writer-logika logikai helyzetéről a hiba időpontjában. Feltárási célokra is kényelmes. Nem hasznos, ha a pillanatnyi vizsgálatokon túl aktív marad, mivel a részletek szintje jelentősen csökkenti az alapértelmezett 1 MB-os fájlméret előzménymélységét. TraceFileSizeMb Az érték növelése releváns lehet.
VERBOSE Ez a szint jelenleg ugyanazokat az eseményeket jelenti, mint MINIMAL, de minden bejegyzést előtaggal lát el forráskód-objektumok és metódusleírók alapján. Szélesebbé (a Minimálisnál nagyobb méretűvé) és kevésbé olvashatóvá teszi a kimenetet. A hozzáadott információk a Microsoft támogatási szolgáltatásaival folytatott interakciókon kívül nem lennének hasznosak. Ugyanaz a megjegyzés, mint az MINIMAL alkalmazandó: ha ezt a szintet hosszú ideig aktív állapotban tartja, jelentősen csökkenti az alapértelmezett 1 MB-os fájlméret előzménymélységét, és az TraceFileSizeMb érték növelése releváns lehet.

MINIMAL és VERBOSE a szintek nem adnak meg további hibaadatokat hiba esetén, csak az SQL Writer-tevékenységekhez kapcsolódó alacsony szintű műveletek további előrehaladási adatait.

Következő lépések