PowerShell ベースですが、SQL Server の汎用バックアップのテンプレートにできそうなスクリプトを作ってみました。
スクリプトは SQL Server BackupSample.ps1 に置いてあります。
基本動作としては以下のようになっています。
- 完全バックアップ / 差分バックアップ / トランザクションログバックアップを実行
- バックアップの取得先は既定のバックアップディレクトリ
- バックアップ取得時に圧縮とチェックサムの確認を実施
完全バックアップの実装の特徴としては、以下となります。
- tempdb のバックアップは取得しない
tempdb は SQL Server のサービス起動時に初期化されるため、バックアップを取得することができません。
そのため、完全バックアップでは取得の除外とするようにしています。
差分バックアップの実装の特徴としては、以下となります。
- tempdb のバックアップは取得しない
- 完全バックアップが取得されていない場合は、完全バックアップを取得する
tempdb の扱いについては完全バックアップと同じですね。
差分バックアップは前回完全バックアップからの差分となりますので、一度でも完全バックアップを取得していないデータベースでは取得することができません。
そのため、msdb の backupset からバックアップ情報を取得し、完全バックアップが取得されているかを確認しています。
# これは、データベースのプロパティを開いたときの最終のバックアップ日時の確認と同じ方法です。
トランザクションログバックアップの実装の特徴としては、以下となります。
- 単純復旧モデルのデータベースは取得しない
- 完全バックアップが取得されていないデータベースについてはログバックアップの取得をスキップする
トランザクションログのバックアップは単純復旧モデルでは取得できませんので、単純の場合はスキップしています。
また、差分バックアップ同様、完全バックアップが取得されていないデータベースについてはログバックアップは取得できませんのでこちらも同様にスキップしています。
基本的な動作確認のみ実施したものではありますが、サンプルとして利用可能なようでしたらご利用いただければと思います。