SQL Server をインストールすると、「SqlServerWriter」(SQL Server VSS Writer サービス) がインストールされ、VSS と連携が行われます。
詳しくは SQL ライター サービス / How to: VSS Tracing を確認していただくとよいかと。
いろいろなバックアップソリューションがあるかと思いますが、VSS を使用しているバックアップで SQL Server の VSS ライターが動いているかを確認する方法をざっくりと。
VSS のトレースのレジストリ設定が Windows Server 2012 R2 で動作しなかったので、この辺については時間があるときにでも調べたいものですね。
よくおこなわれていると思うのは、バックアップが行われている際に、「vssadmin list writers」を実行して、ライターが動作しているかを確認する方法でしょうか。
ライターが動作していれば、バックアップを実行した場合、以下のようなステータスとなっているはずです。 ![]()
ほかの方法としては、イベントビューアーのアプリケーションから確認するという方法もあります。
ライターが動作した場合、SQL Server としてはバックアップがとられたと認識されます。
そのため、イベントビューアーのアプリケーションに以下のようなイベント (イベント ID 18264) が出力されます。 ![]()
また、SQL Server に対して、プロファイラー等でトレースを取得すると、アプリケーションが 「Microsoft SQL Server VSS Writer」として、クエリが実行されていることが確認できます。 ![]()
select rtrim(physical_name),rtrim(type_desc),rtrim(state_desc), is_name_reserved from sys.master_files where DB_ID(N'TESTDB') = database_id
go
BACKUP DATABASE [TESTDB] TO VIRTUAL_DEVICE='{B0F334E6-D37C-42FC-96A8-ED213BE61190}3' WITH SNAPSHOT,BUFFERCOUNT=1,BLOCKSIZE=1024,COPY_ONLY
go
この際には、BACKUP DATABASE が 「WITH SNAPSHOT」という通常は使用しないオプションで実行されているのが確認できます。
# RDS for SQL Server でスナップショットを取得した場合なども、WITH SNAPSHOT オプションによる VSS を使用したバックアップが行われているようでした。
VSS を使用したバックアップも SQL Server としてはバックアップのエントリーが作成されますので、msdb のバックアップ関連のテーブル から情報を取得することができます。
サンプルとしては以下のようなクエリでしょうか。
SELECT [bs].[database_name], [bs].[backup_set_id], [bs].[name], [bf].[logical_device_name], [bf].[device_type], [bs].[software_major_version], [bs].[software_minor_version], [bs].[software_build_version], [bs].[database_creation_date], [bs].[backup_start_date], [bs].[backup_finish_date], [bs].[backup_size], [bs].[compressed_backup_size], [bs].[type] FROM [msdb]..[backupset] bs LEFT JOIN [msdb]..[backupmediafamily] bf ON bf.media_set_id = bs.media_set_id ORDER BY [database_name] ASC
VSS により取得されたバックアップは「device_type」が「7」(仮想デバイス) として認識が行われているかと思います。
これらの情報を確認することで、VSS と SQL Server が連携しているかは確認ができるかと。