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 utama SqlWriterLogger.txt.
    • Hanya ada satu file rollover, sehingga rollover kedua akan menimpa SqlWriterLogger1.txt.
    • Parameter dikelola oleh file SqlWriterConfig.ini

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 perintah vssadmin 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.
  • 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 atau VSS_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_FULLpermintaan 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
-VERBOSE
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.

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

Langkah berikutnya