SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Backup で SQL Server がインストールされている仮想マシンをバックアップする際に意識しておきたいこと

leave a comment

Azure における VM バックアップ インフラストラクチャの計画を立てる に書かれている内容となりますが備忘録として。

Azure Backup で Azure 上の仮想マシンのバックアップを取得した場合、VSS と連動して取得が行われます。

Windows VM のスナップショットを取るとき、Backup サービスは Volume Shadow Copy Service (VSS) と連携して仮想マシンのディスクの一貫したスナップショットを取得します。

Windows に SQL Server をインストールすると「SQL Server VSS Writer」がインストールされ、この Writer が VSS と連動して、SQL Server としてのアプリケーション整合性を保持しながらバックアップの取得を行うことができるようになります。
ここで 1 点、注意しておきたいのが、

Azure Backup は、Windows VM 上で VSS 完全バックアップを行います ( VSS 完全バックアップの詳細をご覧ください)。

の記載です。

Azure Backup で Windows VM をバックアップした場合「VSS 完全バックアップ」が取得されます。
実際にバックアップが動作したとき、SQL Server では、データベースの整合性を担保するために、次のようなクエリが SQL Server VSS Writer から実行されます。

BACKUP DATABASE [TESTDB] TO VIRTUAL_DEVICE='{0477F56D-E5DD-4993-AA16-6C4577B083D6}4' WITH SNAPSHOT,BUFFERCOUNT=1,BLOCKSIZE=1024

「WITH SNAPSHOT」という、スナップショット専用の WITH オプションが使用して BACKUP DATABASE を実行することで、データベースの瞬間的な静止点を取得してバックアップを取得しているのですが、上記の SQL でポイントとなるのが「COPY_ONLY」オプションが指定されていない点です。
VSS 完全バックアップを取得した場合、SQL Server に対して実行されるコマンドとしては上記のものとなりますため、SQL Server の DB 観点のバックアップを個別に取得しており「完全バックアップ + 差分バックアップ」のバックアップ運用をしている場合に問題が出るケースがあります。

SQL Server の「差分バックアップ」は「前回実行した完全バックアップからの差分」になるのですが、想定していない完全バックアップが適切なオプションを指定して実行されていないと、「差分バックアップが利用できない (バックアップの取得に失敗 / バックアップの連続性が切れてしまい、想定していたファイルだけでは戻せない)」というような状態が発生するケースがあります。

SQL Server をインストールしている環境で、個別に DB のバックアップを取得する運用を実施している場合は、「VSS コピーバックアップ」に設定を変更するということも検討したほうが良いかと。
方法については、冒頭で紹介したドキュメントに記載されています。

Windows VM

Azure Backup は、Windows VM 上で VSS 完全バックアップを行います ( VSS 完全バックアップの詳細をご覧ください)。 VSS コピー バックアップを有効にするには、VM に以下のレジストリ キーを設定する必要があります。
コピー

[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT]
"USEVSSCOPYBACKUP"="TRUE"

この設定が実施されている場合、Azure Backup でバックアップを取得したタイミングで SQL Server に実行されるクエリは次のようになります。

BACKUP DATABASE [TESTDB] TO VIRTUAL_DEVICE='{F7148904-F9B2-4F2E-96E0-C54AB76B7902}4' WITH SNAPSHOT,BUFFERCOUNT=1,BLOCKSIZE=1024,COPY_ONLY

VSS コピーバックアップを実行した場合は「COPY_ONLY」オプションが指定されて、BACKUP DATABASE が実行されていることが確認できますね。

このオプションの内容は、BACKUP (Transact-SQL) に記載されていますが、COPY_ONLY がついているバックアップは、差分バックアップのベースとする完全バックアップとは切り離されたものとなりますため、Azure Backup によりバックアップが取得されても、SQL Server の観点で取得している DB バックアップには影響を与えないものとして利用されます。

DB サーバーのバックアップを取得する場合「サーバー全体のバックアップを定期的に取得するか」「DB のバックアップを定期的に取得するか」を検討する必要があるかと思いますが、「サーバー全体のバックアップ」を取得する場合、そのバックアップが SQL Server の DB バックアップに対してどのように動作するかは、意識しておいた方がよいかと思います。

バックアップは、いざという時に使用するものですが、実際に使用する必要になったタイミングでリストアできないと、手詰まりになってしまいますので…。

Share

Written by Masayuki.Ozawa

3月 17th, 2018 at 9:45 am

Leave a Reply