よってタスクメニューから手動でのバックアップはできても自動で(定期的に)バックアップを行うことができない。そのためどうしてもWindowsのタスク機能を使ってバッチ処理などで実行させる必要がある。
事例:
SQLServerインスタンス:SQLEXPRESS
データベース名:testdb
SQLServer認証ユーザー名:sa、同パスワード:pass
バックアップ保存先フォルダ:C:\sqlback
用意するのは2つのファイル(ファイル名は任意)
これをバックアップ保存先フォルダに配置する
1.バックアップ命令文(SQL):backup.sql
BACKUP DATABASE testdb TO DISK='C:\sqlback\testdb.bak' WITH INIT
GO
※解説
@DISK=''でバックアップファイルを指定したパスに保存
AWITH INIT の文が無いと、バックアップデータが毎回追加されてtestdb.bakが大きくなってしまう。この文を付けることで上書きモードになる。
2.バッチファイル(BAT):backup.bat
sqlcmd -S .\SQLEXPRESS -U sa -P pass -i C:\sqlback\backup.sql > C:\sqlback\backup.log
※解説
sqlcmdの詳細はサイトで確認
@-S はサーバー名(インスタンス名含)
A-U はログイン名
B-P はログインパスワード
注:-U -P はSQLServer認証の場合に必要だが、Windows認証の場合は -E だけになる(下参照)
例:sqlcmd -S .\SQLEXPRESS -E -i C:\sqlback\backup.sql
C-i は実行するSQLのファイル名
D > 以下は無くても良いがログを残したい時に使う
あとはWindowsのタスクでバッチファイルbackup.batを指定すれば良い。
今回は毎日指定された時刻に行う予定で作成したので、前日以前のバックアップは保存されない。
1週間分バックアップを保存したい場合には、曜日毎に別々のSQLとバッチファイルを用意してタスクに登録すれば良い。