Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
SQL Server může být zapojen do operací zálohování a obnovení stínové kopie svazku (VSS) prostřednictvím vyhrazené služby SQL Writer. Další informace najdete v tématu Zálohování aplikací SQL Serveru – Služba stínové kopie svazku (VSS) a Zapisovač SQL.
Služba by hlásila chyby spuštění do protokolů událostí aplikace systému Windows s událostí Source (nebo ProviderName v kontextu PowerShellu nebo XML) hodnoty SQLWRITER, jak je znázorněno v příkladu dále v tomto článku. Před verzí SQL Server 2019 (15.x) neexistoval žádný vyhrazený protokol aktivit, což ztěžovalo provádění šetření proti SQL Serveru jako účastníku operací VSS.
Tento článek popisuje nový protokol zavedený SQL Serverem 2019 (15.x), který poskytuje lepší přehled o operacích SQLWriter. Tato funkce byla také dostupná v aktualizaci Service Pack 3 pro SQL Server 2016 (13.x) a kumulativní aktualizaci SQL Server 2017 (14.x) (CU) 27.
Přehled
Hlavními charakteristikami protokolování SQL Server 2019 (15.x) SQLWriter jsou:
- Ve výchozím nastavení je zapnutá.
- Je v celém systému (bude trasovat aktivitu zapisovače SQL vůči všem instancím SQL Serveru spuštěným na serveru).
- Je založená na textu.
- Jeho pracovní adresář je
C:\Program Files\Microsoft SQL Server\90\Shared - V rámci daného adresáře:
- Protokolování probíhá v souboru
SqlWriterLogger.txt. - Tento soubor se přejmenuje na
SqlWriterLogger1.txtpři dosažení maximální velikosti (ve výchozím nastavení 1 MB) a protokolování pokračuje v hlavníSqlWriterLogger.txt. - Existuje pouze jeden soubor rollover, takže druhý rollover by přepsal existující
SqlWriterLogger1.txtsoubor. - Parametry se spravují pomocí souboru.
SqlWriterConfig.ini
- Protokolování probíhá v souboru
Protože SQL Writer je sdílená komponenta SQL Serveru, má v systému jednu instanci a její hlavní verze bude stejná jako nejvyšší hlavní verze nainstalované instance SQL Serveru. Pokud jsou například SQL Server 2016 (13.x) SP2 a SQL Server 2019 (15.x) nainstalovány ve stejném systému, binární soubor SQL Writer bude ten, který poskytuje SQL Server 2019 (15.x) a bude obsluhovat všechny spuštěné instance ze všech hlavních verzí (i když jeho domovský adresář zůstává pod \90). Místní instance a verze budou těžit z nového trasování SQL Serveru 2019 (15.x), které je zde popsáno. Také to znamená, že v této situaci upgraduje binární soubory SQL Writeru pouze kumulativní aktualizace SQL Serveru 2019 (15.x).
Poznámka:
Následující odstavce popisují situaci počínaje SQL Serverem 2019 (15.x) CU 4. Starší verze SQL Serveru 2019 (15.x) nebudou mít ve výchozím nastavení stejné množství informací v souboru protokolu.
Základní operace
Nové protokolování můžete využít bez nutnosti ruční změny. Můžete otevřít nebo získat kopii hlavního SqlWriterLogger.txt souboru protokolu v C:\Program Files\Microsoft SQL Server\90\Shared\. Soubor bude odrážet všechny události VSS, které se dostanou do zapisovače SQL, a to zejména:
-
OnIdentifyudálosti aktivované příkazemvssadmin list writers - Události zálohování
- Obnovovací události
To znamená, že i když tyto operace proběhnou úspěšně, soubor protokolu bude stále zaznamenávat podrobné položky. Můžete potvrdit, že operace VSS probíhají a úspěšně pracují se zapisovačem SQL. Jedná se o vylepšení, které nabízí snadný integrovaný způsob vytvoření těchto podrobností na úrovni instance SQL Serveru.
Kromě toho budou zaznamenány také události spuštění služby SQLWriter a budou hlásit aktivní parametry protokolování.
Pokud selhání operace VSS zahrnuje SQL Server, stane se SqlWriterLogger důležitým místem, kde můžete zkontrolovat všechny informace.
Poznámka:
Tato nová infrastruktura protokolování doplňuje stávající zprávu o chybách pro SQL Server, nenahrazuje ji. V případě chyby proto protokol událostí aplikace systému Windows zůstává prvním místem, kde je potřeba zkontrolovat (filtrování podle zdrojů, jako je SQLWRITER a VSS).
SqlWriterLogger.txt poskytne další informace k této počáteční sadě.
Kontrola typických položek protokolování
Následující exporty byly provedeny ve výchozím nastavení.
Spuštění služby
[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] ****************************************************************
Výše uvedená položka se bude sledovat při každém spuštění služby SQL Writer Service (může být dokonce zaznamenána dvakrát při každém spuštění služby).
V pořadí výskytu vidíme následující informace:
- Časové razítko (datum a čas) podle času místního serveru a ThreadId, které zadává položku pro každý řádek.
- ProcessId procesu SQLWriter, který se spouští.
- Skutečnost, že služba byla spuštěna v normálním režimu (nebyla spuštěna jako WIDWriter) nebo v režimu interní databáze Windows.
- Verze binárních souborů zapisovače SQL
- Všechny parametry nastavené souborem
SqlWriterConfig.ini:- Cílová cesta aktivního souboru protokolu
- Úroveň podrobností trasování, která je v tomto příkladu nastavena na VÝCHOZÍ
- Maximální velikost souboru, než dojde k překročení, je v tomto případě 1 MB.
- Možnost ForceFlush při každé aktualizaci souboru protokolu versus použití uvolněnějšího nebo vyrovnávaného přístupu, což je ve výchozím nastavení False.
- Připomenutí, že protokolování používá místní čas včetně posunu UTC pro tento místní čas.
Událost VSS OnIdentify
[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 je běžná operace VSS. Aktivuje se příkazem vssadmin list writers . Většina žadatelů VSS spouští jakoukoli operaci zálohování nebo obnovení VSS pomocí události OnIdentify.
Dříve pouze aktivní trasování profileru umožnilo dbA takovou událost rozpoznat. S novou funkcí protokolování každá událost povede k výše uvedené položce.
V pořadí výskytu vidíme, že se protokolují následující informace:
- Explicitní zmínka o
OnIdentifyudálosti VSS - Seznam všech aktivních (spuštěných) instancí SQL Serveru spolu s názvem jejich instance, hlavní verzí a edicí.
- Naznačuje to, že jsme se nepokoušeli vypsat "Instance uživatelů" – konkrétní funkci SQL Serveru označovanou také jako LocalDB, která se obvykle nepoužívá na podnikových databázových serverech.
Úspěšné zálohování VSS v režimu komponent
[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.
Tato událost vede k většímu množství položek. V pořadí výskytu vidíme následující informace:
- Úplná
OnIdentifyčást, která už je označená často vede k zálohování. - Zmínka o každé hlavní fázi zálohování VSS se vzorem "Vstup do SQL Writer xxxx".
- První tady je
Entering SQL Writer OnPrepareBackup.
- První tady je
- Neobvyklá položka označující začátek zálohování SQL služby VSS
- (ID je ThreadId, které provádí protokolování během pokusu o zálohování v SQLWriteru)
- Rozhraní API pro zálohování VSS, které vybral žadatel VSS: "komponenta" nebo "bez komponenty / svazku"
- Počet databází zahrnutých v seznamu komponent odeslaných žadatelem VSS, zde je jedna databáze (1).
- Potvrzení, že každý název databáze poskytnutý žadatelem (zde 'db_on_G') je nalezen (nebo není nalezen) v instanci SQL Serveru, ke které je přidružen žadatel VSS (zde výchozí instance 'GF19').
- Požadovaný typ zálohování VSS. Obvykle
VSS_BT_FULLneboVSS_BT_COPY. Podívejte se na výčet VSS_BACKUP_TYPE . - Další
OnIdentifyoddíl - Další položky identifikující hlavní fáze zálohování VSS (
OnFreeze,OnThaw,OnPostSnapshot) - Poslední
OnIdentifyoddíl. - Závěrečná zpráva o fázi VSS, jejíž název z ní činí užitečnou "závěrečnou událost":
OnBackupComplete.
Tyto položky obsahují podrobnosti o operacích VSS, které bylo dříve obtížné rychle navázat, a vyžadovaly pokročilé trasování. Základním příkladem je režim "Component" nebo "non-Component" jakéhokoli požadavku na zálohování VSS. Díky SQL Writeru v SQL Serveru 2019 (15.x) se ve výchozím nastavení protokolují všechny požadavky VSS a jsou snadno přístupné.
Situace selhání: Roztrhaná databáze
Abychom ilustrovali předchozí tvrzení, že protokolování zapisovače SQL doplňuje architekturu protokolu událostí, podívejme se na položky přidružené k dobře známé situaci selhání: poškozená databáze. Tento scénář může nastat, když se záloha VSS pokusí vytvořit sadu snímků svazků, které obsahují pouze částečnou sadu souborů dané databáze. Zapisovač SQL ho zablokuje podle konvencí VSS.
Tento extrakt SqlWriterLogger.txt je obsahem operace:
[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.
Z SqlWriterLogger.txt víme, že došlo k selhání, ale jediné podrobnosti, které máme o selhání, je 0x80780002 HResult. Tato hodnota je obtížné interpretovat bez odkazů na kód chyby. Identifikuje však roztrhanou situaci v databázi.
Zobrazení protokolu událostí
Teď zkontrolujeme obsah protokolů událostí aplikací systému Windows:
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.
Tato událost poskytuje úplnou uživatelsky přívětivou formátovanou zprávu s vysvětlením situace.
Architektura VSS operačního systému bude také hlásit problém v protokolech událostí pomocí jeho nomenklatury (VSS spravuje "komponenty", které jsou "databázemi" v kontextu SQL Serveru).
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
Protokol událostí je lepším zdrojem informací o samotné chybě. Obsah SqlWriterLogger však poskytuje podrobnosti o žádosti o zálohování ( VSS_BT_FULLpožadavek na zálohování VSS, který není součástí, který selhal během OnPrepareSnapshot fáze zapisovače SQL). Jakékoli šetření chyb VSS zahrnujících SQL Server by proto mělo shromažďovat a kontrolovat oba zdroje.
Úprava parametrů protokolování zapisovače SQL
Protokolování zapisovače SQL lze nakonfigurovat úpravou textového SqlWriterConfig.ini souboru. Samotný soubor obsahuje rychlý vložený popis dostupných parametrů, které si projdeme níže.
Poznámka:
Soubor .ini je ve složce Windows-Protected (Program Files). Proto k úpravám vyžaduje zvýšená oprávnění správce. Poklikáním v Průzkumníku otevřete Poznámkový blok bez zvýšení oprávnění: Umožní uživateli číst obsah, ale pokusy o uložení jakékoli změny selžou. Buď spusťte Poznámkový blok jako správce a otevřete ho SqlWriterConfig.ini, nebo použijte textový editor, který při ukládání souboru dokáže vyžádat povolení ke zvýšení oprávnění podle potřeby.
Duplikování komentářů k SqlWriterConfig.ini souboru:
| Parameter | Možnosti | Description |
|---|---|---|
| Povolenílogování | - PRAVDA (výchozí) - NEPRAVDA |
Umožňuje uživateli zakázat celou novou funkci protokolování v nepravděpodobném případě, že je potřeba. |
| TraceFile | C:\Program Files\Microsoft SQL Server\90\Shared\SqlWriterLog.txt |
Umožňuje uživateli změnit cestu a název souboru trasování. Nedoporučujeme jeho změnu z výchozího, dobře známého umístění, protože to usnadňuje přístup přímo na správné místo na jakémkoli SQL Serveru. |
| Tracelevel | – VÝCHOZÍ (výchozí) -MINIMÁLNÍ -PODROBNÉ |
Úroveň podrobností protokolování Další informace najdete v podrobnostech TraceLevel. |
| TraceFileSizeMb | 1 MB (výchozí) | Maximální velikost souboru před vrácením. Soubor .txt používá kódování UTF-8 a využívá 2 bajty na znak. Zvýšení této hodnoty je platné například s intenzivní aktivitou VSS, zachováním dlouhých období položek protokolu nebo povolením jiných než výchozích TraceLevel hodnot po dlouhou dobu. Výchozí hodnota 1 MB by měla ve většině situací poskytovat větší historii. |
| ForceFlush | -PRAVDA – NEPRAVDA (výchozí) |
Nastavení této možnosti TRUE by bylo užitečné jenom ve výjimečných případech, kdy by služba SQL Writer selhala předtím, než by měla možnost vyprázdnit poslední položky protokolu. Jinak ponechte výchozí hodnotu. |
Použít změny
Všechny změny nastavení vyžadují, aby se aktivoval restart služby SQL Writer.
Návod
Restart zapisovače SQL je velmi rychlý a může být proveden kdykoliv, protože zapisovač SQL neuchovává žádné stavové informace ani neprovádí žádné činnosti mezi voláním VSS. Jediným preventivním opatřením je vyhnout se restartování, když probíhá operace VSS (zálohování, obnovení).
Zapisovač SQL bude hlásit aktivní parametry v souboru protokolu při (re)startu, jak je vidět v ukázce spuštění služby .
Podrobnosti TraceLevel
Soubor SqlWriterConfig.ini obsahuje následující úrovně:
| Úroveň | Detail |
|---|---|
DEFAULT |
Výchozí parametry podrobností by měly být vhodné pro většinu potřeb: Projděte si část Kontrola typických položek protokolování a sledujte, co už je ve výchozím nastavení vygenerováno. Kromě chyb budou úspěšná volání VSS spolu s metadaty VSS ve výchozím nastavení protokolována. |
MINIMAL |
Tato úroveň zachová formátování DEFAULT režimu a jeho událostí. Vygeneruje také výstup na mnoha klíčových místech kódu. Především protokoluje všechny soubory a iterace databáze, které jsou běžné v logice SQLWriter. Může výrazně zvýšit počet záznamů zaprotokolovaných pro každou operaci VSS (včetně běžné OnIdentify události), zejména pro instance hostující velký počet databází: každý fyzický soubor každé databáze lze nahlásit vícekrát během zálohování VSS. Tato úroveň pomáhá poskytnout přesnější představu o logické pozici logiky zápisu SQL v době selhání. Je to také vhodné pro účely průzkumu. Není užitečné, aby byla aktivní i mimo momentální šetření, protože úroveň podrobností výrazně sníží hloubku historie výchozí velikosti souboru o velikosti 1 MB.
TraceFileSizeMb Zvýšení hodnoty může být relevantní. |
VERBOSE |
V současné době tato úroveň hlásí stejné události jako MINIMAL, ale předřazuje každou položku deskriptory objektu zdrojového kódu a metod. Výstup je širší (větší než minimální) a méně čitelný. Přidané informace by nebylo užitečné mimo interakce se službami podpory Microsoftu. Stejný komentář jako MINIMAL by se vztahoval: Zachování této úrovně aktivní po delší dobu výrazně sníží hloubku historie u výchozí velikosti souboru 1 MB a zvýšení hodnoty TraceFileSizeMb může být relevantní. |
MINIMAL a VERBOSE úrovně neposkytují další podrobnosti o chybách v případě selhání, pouze další podrobnosti o průběhu pro každou operaci nízké úrovně související s aktivitami zapisovače SQL.