タスクスケジューラでデータベースをバックアップする方法 ~Microsoft SQL Server 編~

タスクスケジューラでデータベースをバックアップする方法 ~Microsoft SQL Server 編~

みなさん、こんにちは!

今回はデータベースのバックアップをタスクスケジューラで定期実行する方法を紹介します。

私も業務でよく利用する方法なので、備忘録程度です。

Microsoft SQL Server Expressをインストールして実際に利用されている方は多いかと思います。

こちらのEditionではバックアップ機能が利用できないことから、自作でバックアップする仕組みを作っておく必要があります。

今回のシチュエーション

例)今回の条件は以下の通りとします。

・バックアップ対象のDB名=TEST_DB
・バックアップファイル保存先のリンクとファイル名=C:\Backup\test.bak
・バックアップはフルバックアップとし、毎回バックアップファイルを上書きする
・バックアップ頻度=1日1回、00時00分に実行
・バックアップ結果のログを出力する

・SQLサーバがインストールされているホスト名:testPC
・インスタンス名:sqlexpress

①バックアップ用のクエリの準備

クエリは以下の通りです。

クエリ

BACKUP DATABASE TEST_DB
TO DISK = N'C:\Backup\test.bak' WITH INIT;

上記のクエリをT-SQLで記載した場合は以下の通りです。

DECLARE @DB_name NVARCHAR(100);
DECLARE @Backup_Path NVARCHAR(250);

SET @DB_name = 'TEST_DB';
SET @Backup_Path = 'C:\Backup\test.bak';

EXEC('BACKUP DATABASE ' + @DB_name +
' TO DISK = N''' + @Backup_Path + ''' WITH INIT;')

WITH INITとした場合、既存のバックアップファイルに対して上書き保存されます。

追記したい場合は、WITH NOINITです。

 

作成したクエリを保存します。
SSMSの場合は「ファイル>名前を付けて保存」でクエリ(.sql)を保存します。今回は「Backup_Query.sql」としました。

②バッチの作成

上記で記載しましたが、SQLサーバの実行環境として
・ホスト名:testPC
・インスタンス名:sqlexpressとしています。

また、ログファイルも保存するので、Logフォルダに「Backup_log.log」としてログを保存しています。

 

バッチ(Backup_SQL.batとして保存)

@echo off

rem 空行の入力
echo.>>C:\Backup_Query\Log\Backup_log.log

rem 日時の入力
echo %date%_%time%>>C:\Backup_Query\Log\Backup_log.log

rem クエリ
sqlcmd -S testPC\sqlexpress -i C:\Backup_Query\Backup_Query.sql >> C:\Backup_Query\Log\Backup_log.log

上記のバッチを変数を利用して分かりやすくしたものが以下の通りです。

@echo off

rem 変数の宣言
set log=C:\Backup_Query\Log\Backup_log.log
set sql=C:\Backup_Query\Backup_Query.sql

rem 空行の入力
echo.>>%log%

rem 日時の入力
echo %date%_%time%>>%log%

rem クエリ
sqlcmd -S %COMPUTERNAME%\sqlexpress -i %sql% >> %log%

作成したバッチを実行し、指定した場所にログファイル、バックアップファイルが生成されていれば成功です。

③タスクスケジューラへの登録

タスクスケジューラは「Windows管理ツール>タスクスケジューラ」にあります。

(1)タスクスケジューラライブラリを右クリック>タスクの作成

(2)全般タブより、「名前」を入力します。
   場合によっては、ユーザがログインしているかどうかにかかわらず実行するに✅を入れます。

(3)トリガータブ>新規作成をクリックします。

(4)設定より「毎日」、時間を「0:00:00」に設定し、OKを押下します。

設定されていることを確認します。

(5)操作タブ>新規をクリックします。

(6)操作:プログラムの開始とします。
また、プログラム/スクリプトにて、先ほど作成したバッチファイルを参照します。

設定されていることを確認します。

(7)設定が完了したらOKを押下します。

下図のように設定されれば完了です。(今回はタスク名をbackupDBとしました。)

まとめ

本日はタスクスケジューラを用いてSQL ServerのDBバックアップを行う方法に関して、一連の作業をまとめました。

ではまた。