SQLServer Expressでは、機能制限によりSQL Server Management Studio (SSMS) でメンテナンスプランによる自動バックアップを行う事ができません。 その為、Expressでのバックアップは、バッチファイルを作成して行います。
構成例)
SQL Server稼働サーバーでDBバックアップを行い、そのバックアップファイルを他サーバーやNASへコピーする作業の自動化を行います。
① メモ帳などのテキストエディタで、次の内容のファイル「backup.sql」を作成する。
コピーする時は、特殊文字(¥マークなど)の文字化けに注意してください。
DECLARE @DAY CHAR(8) = FORMAT(GETDATE(),'yyyyMMdd') DECLARE @FILE VARCHAR(50) = N'バックアップ作成フォルダ¥DB名_' + @DAY + '.bak' BACKUP DATABASE [DB名] TO DISK = @FILE WITH NOFORMAT,NOINIT, NAME = N'完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 100
1行目 :日付を取得
2行目 :DBバックアップファイルを日付毎に作成するように設定
3行目~:DBバックアップを実行
② バックアップ作成フォルダとDB名を環境に合わせて変更する。
例)
バックアップ作成フォルダ:C:¥original
DB名:exDB
※バックアップ作成フォルダは、ネットワーク先を指定する事も可能ですが、SQL Serverの設定が必要になります。
③ 動作確認を行う。
SQL Server Management Studio (SSMS)のクエリ実行から動作確認してください。
BACKUP DATABASEのオプション設定
NOFORMAT | バックアップファイルの初期化をしません。複数回実行すると、バックアップセットが同一ファイルに保存されます。 初期化する場合は、FORMATを指定。 |
STATS=100 | バックアップの進捗率を設定します。10で10%毎、100にすると100%のみ表示します。 |
※その他は、あまり使わないため省略
① メモ帳などのテキストエディタで、次の内容のファイル「backupsql.bat」を作成する。
コピーする時は、特殊文字(¥マークなど)の文字化けに注意してください。
set logfolder=ログファイル用フォルダ set logfile=%logfolder%¥backupsql_%DATE:/=%.log set originalfolder=コピー元フォルダ echo バックアップ開始 %DATE% %TIME% >> %logfile% sqlcmd -U ログインユーザ -P パスワード -S SQLServer接続先 -i sqlファイル用フォルダ¥backup.sql >> %logfile% forfiles /P %originalfolder% /S /D -10 /C "cmd /c del /F /Q @path" >> %logfile% robocopy %originalfolder% コピー先フォルダ /MIR /R:0 /NDL /NP >> %logfile% forfiles /P %logfolder% /S /D -30 /C "cmd /c del /F /Q @path" >> %logfile%
1行目:ログ用フォルダの設定
2行目:ログファイルを日付毎に作成するように設定
3行目:コピー元(=DBバックアップファイル用フォルダ)の設定
4行目:処理開始ログの出力
5行目:SQL Serverに接続を行い、SQLファイルを実行
6行目:古い(10日経過)DBバックアップファイルを削除
7行目:DBバックアップファイルを、コピー
8行目:古い(30日経過)ログファイルを削除
② 各フォルダやSQL Serverの接続情報を環境に合わせて変更する。
例)
ログファイル用フォルダ | ¥¥Network-PC¥log ※1 |
コピー元フォルダ | ¥¥Network-PC¥original ※1 |
ログインユーザ | sa(SQL Serverログインユーザ)※2 |
パスワード | (SQL Serverログインパスワード)※2 |
SQL Server接続先 | localhost |
sqlファイル用フォルダ | C:¥script ※1 |
コピー先フォルダ | ¥¥Network-PC¥copyto ※1 |
※1 フォルダ名に半角スペース等を含む場合は、"(ダブルクォーテーション)で囲む
※2 SQL Server認証の場合です。Windows認証の場合は、「sqlcmd -S SQL Server接続先 -E -i...」
③ 動作確認を行う。
ダブルクリックで起動し、ログファイル等を確認してください。
robocopyのオプション設定
/MIR | バックアップ元とバックアップ先をミラーリングします。元と先でファイルが同じ状態になります。 |
/R:0 | コピーを失敗した場合のリトライを0回にします。コピー失敗でリトライを繰り返しいつまでも終わらない状態を回避します。 |
/NDL | ディレクトリ名をログに記録しません。ログがスッキリします。 |
/NP | コピーの完了率を表示しません。少し処理速度が速くなります。 |
DBバックアップファイル、ログファイル削除の設定
/D -30 | 30日経過したファイルが削除対象となります。 |
② 基本タスクの作成を選択し、各設定を行う。
基本タスクの作成 | 名前を任意で設定 例)バックアップSQL |
トリガー | 毎日を選択 |
毎日 | 開始時刻を任意で設定、間隔は1日 |
操作 | プログラムの開始を選択 |
プログラムの開始 | 参照や直接入力で、バッチファイルを選択 |