Pengelogan Penulis VSS SQL Server
Berlaku untuk: SQL Server
SQL Server dapat terlibat dalam operasi pencadangan dan pemulihan VSS (Layanan Salinan Bayangan Volume) melalui layanan Penulis SQL khususnya. Untuk informasi selengkapnya, lihat Aplikasi Pencadangan SQL Server - Layanan Salinan Bayangan Volume (VSS) dan Penulis SQL.
Layanan ini akan melaporkan kesalahan eksekusi ke Log Peristiwa Aplikasi Windows dengan peristiwa Source
(atau ProviderName
dalam konteks PowerShell atau XML) nilai SQLWRITER
, seperti yang Anda lihat dalam contoh nanti di artikel ini. Sebelum SQL Server 2019 (15.x), tidak ada log aktivitas khusus, yang melakukan penyelidikan terhadap SQL Server sebagai peserta dalam operasi VSS yang menantang.
Artikel ini menjelaskan log baru yang diperkenalkan oleh SQL Server 2019 (15.x) untuk memberikan visibilitas yang lebih baik pada operasi SQLWriter-nya. Fungsionalitas ini juga tersedia di SQL Server 2016 (13.x) Paket Layanan 3, dan SQL Server 2017 (14.x) Pembaruan Kumulatif (CU) 27.
Gambaran Umum
Karakteristik utama pengelogan SQL Server 2019 (15.x) SQLWriter adalah:
- Ini aktif secara default
- Ini di seluruh sistem (akan melacak aktivitas SQL Writer terhadap semua instans SQL Server yang berjalan di server)
- Ini berbasis teks
- Direktori kerjanya adalah
C:\Program Files\Microsoft SQL Server\90\Shared
- Dalam direktori tersebut:
- Pengelogan terjadi dalam file
SqlWriterLogger.txt
- File ini akan diganti namanya menjadi
SqlWriterLogger1.txt
ketika mencapai ukuran maksimum (secara default 1 MB), dengan pengelogan berlanjut di utamaSqlWriterLogger.txt
. - Hanya ada satu file rollover, sehingga rollover kedua akan menimpa
SqlWriterLogger1.txt
. - Parameter dikelola oleh file
SqlWriterConfig.ini
- Pengelogan terjadi dalam file
Karena SQL Writer adalah komponen bersama SQL Server, SQL Server memiliki satu instans pada sistem, dan versi utamanya akan sama dengan versi utama tertinggi dari instans SQL Server yang diinstal. Misalnya, jika SQL Server 2016 (13.x) SP2 dan SQL Server 2019 (15.x) diinstal pada sistem yang sama, biner SQL Writer akan menjadi yang disediakan oleh SQL Server 2019 (15.x), dan akan melayani semua instans yang berjalan dari semua versi utama (meskipun direktori berandanya tetap di bawah \90
). Instans dan versi lokal akan mendapat manfaat dari pelacakan SQL Server 2019 (15.x) baru yang dijelaskan di sini. Ini juga menyiratkan bahwa hanya pembaruan kumulatif SQL Server 2019 (15.x) yang akan meningkatkan biner SQL Writer dalam situasi ini.
Catatan
Paragraf berikut menjelaskan situasi yang dimulai dengan SQL Server 2019 (15.x) CU 4. Versi SQL Server 2019 (15.x) sebelumnya tidak akan memiliki jumlah informasi yang sama dalam file log di bawah pengaturan default.
Operasi dasar
Anda dapat memperoleh manfaat dari pengelogan baru tanpa perubahan manual. Anda dapat membuka, atau mendapatkan salinan, file log utama SqlWriterLogger.txt
di C:\Program Files\Microsoft SQL Server\90\Shared\
. File akan mencerminkan semua peristiwa VSS yang mencapai SQL Writer, yang terutama akan:
OnIdentify
peristiwa, seperti yang dipicu oleh perintahvssadmin list writers
- Peristiwa pencadangan
- Memulihkan peristiwa
Artinya, bahkan jika operasi ini berhasil dilakukan, file log masih akan merekam entri terperinci. Anda dapat mengonfirmasi bahwa operasi VSS terjadi dan berhasil berinteraksi dengan SQL Writer. Ini adalah peningkatan yang menawarkan cara bawaan yang mudah untuk membuat detail ini di tingkat instans SQL Server.
Selain itu, peristiwa start-up layanan SQLWriter juga akan direkam, dan akan melaporkan parameter pengelogan aktif.
Jika kegagalan operasi VSS melibatkan SQL Server, SqlWriterLogger menjadi tempat penting untuk memeriksa informasi apa pun.
Catatan
Infrastruktur pengelogan baru ini melengkapi pelaporan kesalahan yang ada untuk SQL Server, tidak menggantinya . Oleh karena itu jika terjadi kesalahan, Log Peristiwa Aplikasi Windows tetap menjadi tempat pertama untuk memeriksa (pemfilteran pada Sumber seperti "SQLWRITER" dan "VSS"). SqlWriterLogger.txt
akan memberikan informasi tambahan untuk set awal ini.
Tinjau entri pengelogan umum
Ekspor berikut telah dibuat di bawah pengaturan default .
Mulai layanan
[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] ****************************************************************
Entri di atas akan diamati untuk setiap awal Layanan Penulis SQL (bahkan dapat dicatat dua kali per mulai layanan).
Dalam urutan penampilan, kita dapat melihat informasi berikut:
- Stempel waktu (tanggal + waktu) di waktu server lokal, dan ThreadId yang berasal dari entri untuk setiap baris.
- ProsesId dari proses SQLWriter sedang dimulai.
- Fakta layanan dimulai dalam mode 'normal' ('tidak berjalan sebagai WIDWriter') atau dalam mode Database Internal Windows.
- Versi biner SQL Writer.
- Semua parameter yang diatur oleh
SqlWriterConfig.ini
file:- Jalur target file log aktif
- Tingkat detail pelacakan, yang dalam contoh ini adalah DEFAULT
- Ukuran maksimum file sebelum rollover terjadi, yang dalam contoh ini adalah 1 MB
- Opsi untuk ForceFlush setiap pembaruan ke file log vs pendekatan yang lebih santai/di-buffer, yaitu False secara default.
- Pengingat bahwa pengelogan adalah waktu lokal bersama dengan Offset UTC waktu lokal tersebut.
Peristiwa 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
adalah operasi VSS umum. Ini dipicu oleh vssadmin list writers
perintah. Sebagian besar pemohon VSS akan memulai operasi pencadangan atau pemulihan VSS oleh suatu OnIdentify
peristiwa.
Sebelumnya, hanya pelacakan profiler aktif yang akan memungkinkan DBA mendeteksi peristiwa seperti itu. Dengan fitur pengelogan baru, setiap peristiwa akan mengarah ke entri di atas.
Dalam urutan penampilan, kita dapat melihat informasi berikut dicatat:
- Penyebutan eksplisit dari
OnIdentify
peristiwa VSS. - Daftar semua instans SQL Server aktif (berjalan), bersama dengan nama instans, versi utama, dan Edisinya.
- Indikasi kami tidak mencoba mencantumkan "Instans Pengguna" - fitur SQL Server tertentu yang juga dikenal sebagai LocalDB dan biasanya tidak terlibat di server database perusahaan.
Pencadangan VSS mode komponen berhasil
[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.
Kejadian ini mengarah ke sekumpulan entri yang lebih besar. Dalam urutan penampilan, kita dapat melihat informasi berikut:
- Bagian lengkap
OnIdentify
, yang seperti sudah ditunjukkan sering memimpin pencadangan. - Sebutkan setiap fase cadangan VSS utama, dengan pola "Memasuki SQL Writer xxxx".
- Pertama di sini adalah
Entering SQL Writer OnPrepareBackup
.
- Pertama di sini adalah
- Entri mencolok yang menunjukkan dimulainya VsS SQL Backup
- (ID menjadi ThreadId yang melakukan pengelogan untuk upaya pencadangan tersebut di SQLWriter)
- API cadangan VSS dipilih oleh pemohon VSS, "komponen" atau "non-komponen / Volume"
- Jumlah database yang disertakan dalam daftar komponen yang dikirim oleh pemohon VSS, di sini satu DB (1).
- Konfirmasi bahwa setiap nama database yang disediakan Pemohon (di sini 'db_on_G') ditemukan (atau tidak ditemukan) pada instans SQL Server yang dikaitkan dengan pemohon VSS (di sini instans default 'GF19').
- Rasa cadangan VSS diminta. Biasanya
VSS_BT_FULL
atauVSS_BT_COPY
. Lihat enum VSS_BACKUP_TYPE. - Bagian lain
OnIdentify
- Entri lainnya yang mengidentifikasi fase utama VsS Backup (
OnFreeze
,OnThaw
,OnPostSnapshot
) - Bagian terakhir
OnIdentify
. - Laporan fase VSS akhir, yang namanya menjadikannya "peristiwa penutupan" yang berguna:
OnBackupComplete
.
Entri ini memberikan detail tentang operasi VSS yang sebelumnya sulit dibuat dengan cepat, dan pelacakan lanjutan yang diperlukan untuk melakukannya. Contoh utamanya adalah mode "Komponen" atau "non-Komponen" dari permintaan pencadangan VSS apa pun. Dengan SQL Server 2019 (15.x) SQL Writer, mereka dicatat untuk setiap permintaan VSS secara default dan mudah diakses.
Situasi kegagalan: database robek
Untuk mengilustrasikan pernyataan sebelumnya bahwa pengelogan SQL Writer melengkapi arsitektur Log Peristiwa, mari kita lihat entri yang terkait dengan situasi kegagalan terkenal: database robek. Skenario ini dapat terjadi ketika cadangan VSS mencoba membuat sekumpulan volume rekam jepret yang hanya menyertakan sekumpulan file parsial dari database tertentu. SQL Writer akan memblokirnya sesuai konvensi VSS.
Ekstrak ini adalah konten SqlWriterLogger.txt
untuk operasi:
[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.
Dari SqlWriterLogger.txt
kita melihat bahwa kegagalan terjadi, namun satu-satunya detail yang kita miliki pada kegagalan adalah 0x80780002 HResult
. Nilai ini sulit ditafsirkan tanpa referensi kode kesalahan. Ini memang mengidentifikasi situasi database yang robek sekalipun.
Menampilkan log peristiwa
Sekarang mari kita periksa konten Log Peristiwa Aplikasi 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.
Acara ini menyediakan pesan berformat lengkap yang mudah digunakan yang menjelaskan situasinya.
Kerangka kerja OS VSS juga akan melaporkan masalah di Log Peristiwa, menggunakan nomenklaturnya (VSS mengelola 'komponen,' yang merupakan 'database' dalam konteks 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
Log Peristiwa adalah sumber informasi yang lebih baik tentang kesalahan itu sendiri di sini. Namun, konten SqlWriterLogger memberikan detail tentang permintaan cadangan ( VSS_BT_FULL
permintaan cadangan VSS non-komponen yang gagal selama OnPrepareSnapshot
fase SQL Writer). Oleh karena itu, setiap penyelidikan kesalahan VSS yang melibatkan SQL Server harus mengumpulkan dan meninjau kedua sumber.
Mengubah parameter pengelogan SQL Writer
Pengelogan SQL Writer dapat dikonfigurasi dengan mengedit SqlWriterConfig.ini
file teks. File itu sendiri berisi deskripsi sebaris cepat dari parameter yang tersedia, yang akan kita tinjau di bawah ini.
Catatan
File .ini berada di bawah folder Yang Dilindungi Windows (File Program). Dengan demikian memerlukan hak istimewa administrator yang ditinggikan untuk diedit. Klik ganda di penjelajah akan membuka Notepad tanpa elevasi: ini akan memungkinkan pengguna untuk membaca konten, tetapi upaya untuk menyimpan perubahan apa pun akan gagal. Mulai Notepad sebagai administrator lalu buka SqlWriterConfig.ini
, atau gunakan editor teks yang dapat meminta elevasi sesuai kebutuhan saat menyimpan file.
Menduplikasi komentar file di SqlWriterConfig.ini
sini:
Parameter | Opsi | Deskripsi |
---|---|---|
AktifkanLog | - TRUE (default) -PALSU |
Memungkinkan pengguna menonaktifkan seluruh fitur pengelogan baru, dalam kasus yang tidak mungkin diperlukan. |
TraceFile | C:\Program Files\Microsoft SQL Server\90\Shared\SqlWriterLog.txt |
Memungkinkan pengguna untuk mengubah jalur dan nama file file pelacakan. Tidak disarankan untuk mengubahnya sebagai lokasi default dan terkenal membuatnya mudah untuk langsung pergi ke tempat yang tepat di SQL Server apa pun. |
TraceLevel | - DEFAULT (default) - MINIMAL -PENYEDEHANAAN KATA |
Verbositas pengelogan. Informasi selengkapnya ada di detail TraceLevel. |
TraceFileSizeMb | 1 MB (default) | Ukuran file maks sebelum rollover. File .txt menggunakan pengodean UTF-8 dan menggunakan 2 byte per karakter. Meningkatkan nilai ini valid, misalnya, dengan aktivitas VSS yang intens, mempertahankan periode panjang entri log, atau jika nilai non-default TraceLevel diaktifkan untuk durasi panjang. Nilai default 1-MB harus memberikan riwayat yang cukup untuk sebagian besar situasi. |
ForceFlush | -BENAR - FALSE (default) |
Mengatur opsi ini hanya TRUE akan berguna dalam keadaan langka di mana layanan SQL Writer akan crash sebelum mendapat kesempatan untuk menghapus entri log terakhirnya; jika tidak, simpan nilai default. |
Terapkan perubahan
Setiap perubahan pada pengaturan memerlukan mulai ulang layanan SQL Writer untuk diaktifkan.
Tip
Menghidupkan ulang SQL Writer sangat cepat dan dapat dilakukan sesuka hati karena SQL Writer tidak menyimpan informasi stateful apa pun atau memiliki aktivitas di antara panggilan VSS. Satu-satunya tindakan pencegahan adalah menghindari hidupkan ulang saat operasi VSS (pencadangan, pemulihan) sedang berlangsung.
SQL Writer akan melaporkan parameter aktif dalam file lognya saat (re)start, seperti yang dapat dilihat dalam ekstrak sampel Service Start .
Detail TraceLevel
File mencantumkan SqlWriterConfig.ini
tingkat berikut:
Tingkat | Detail |
---|---|
DEFAULT |
Parameter verbositas default harus memadai untuk sebagian besar kebutuhan: lihat bagian Tinjauan entri pengelogan umum untuk mengamati apa yang sudah dihasilkan secara default. Selain kesalahan, panggilan VSS yang berhasil, bersama dengan metadata VSS, akan dicatat secara default. |
MINIMAL |
Tingkat ini akan mempertahankan pemformatan DEFAULT mode, dan peristiwanya. Ini juga akan menghasilkan output di banyak tempat utama kode. Terutama akan mencatat semua file dan iterasi database yang biasa dalam logika SQLWriter. Ini dapat meningkatkan jumlah entri yang dicatat untuk setiap operasi VSS (termasuk OnIdentify peristiwa biasa) dengan margin besar, terutama pada instans yang menghosting sejumlah besar database: setiap file fisik dari setiap Database tunggal dapat dilaporkan lebih dari sekali selama pencadangan VSS. Tingkat ini hanya membantu memberikan gagasan yang lebih tepat tentang posisi logis logika SQL Writer pada saat kegagalan. Ini juga nyaman untuk tujuan eksplorasi. Tidak berguna untuk tetap aktif di luar penyelidikan sesaat, karena tingkat detail akan sangat mengurangi kedalaman riwayat ukuran file 1-MB default. TraceFileSizeMb Meningkatkan nilai mungkin relevan. |
VERBOSE |
Saat ini tingkat ini melaporkan peristiwa yang sama dengan MINIMAL , tetapi mengawali setiap entri dengan objek kode sumber dan deskriptor metode. Ini membuat output lebih lebar (ukurannya lebih besar dari Minimal) dan kurang dapat dibaca. Informasi tambahan tidak akan berguna di luar interaksi dengan Layanan Dukungan Microsoft. Komentar yang sama seperti MINIMAL yang akan berlaku: menjaga tingkat ini tetap aktif untuk durasi panjang akan sangat mengurangi kedalaman riwayat ukuran file 1-MB default, dan meningkatkan TraceFileSizeMb nilai mungkin relevan. |
MINIMAL
dan VERBOSE
tingkat tidak memberikan detail kesalahan tambahan jika terjadi kegagalan, hanya detail kemajuan tambahan untuk setiap operasi tingkat rendah yang terkait dengan aktivitas Penulis SQL.