SQL Server Express 2019でバックアップ

らら
らら

はじめに

移転に伴って社内データベースを定期バックアップをとることになったのでメモ書き

手順

バックアップコマンドが分からないのでSQL Server Management Studio (SSMS)から行う。

SQL Server Express 2019には付属しないので別途インストールをする。

SQL Server Management Studio からSQLサーバーへ接続を行い、バックアップを取りたいデータベースを選択して

右クリックメニューでタスク→バックアップを選択します。

SQL Server Express step1

下記の画面でスプリクトを選択OKをクリックする

SQL Server Express step2

下記画面が表示されるので、吐き出されたコマンドをコピー

SQL Server Express step3

上記でコピーしてものをメモ帳などでbackup.sqlとして保存しておきます。


BACKUP DATABASE [DB名] TO  DISK = N'C:\xxxxx\backup.sql' WITH NOFORMAT,NOINIT,NAME = N'完全 データベース バックアップ',SKIP, NOREWIND, NOUNLOAD, STATS = 100

バッチファイル作成

保存したものだとファイル名が固定なので下記を追加


DECLARE @SDATE CHAR(8) = FORMAT(GETDATE(),'yyyyMMdd')
DECLARE @FILE VARCHAR(50) = N'C:\保存したいパス\backup_' + @SDATE + '.sql'

上記追加後、下記のN'C:\xxxxx\backup.sql'部分を@FILEに置き換えます。


BACKUP DATABASE [DB名] TO  DISK = @FILE WITH NOFORMAT,NOINIT,NAME = N'完全 データベース バックアップ',SKIP, NOREWIND, NOUNLOAD, STATS = 100

正式なもの backup.sql


DECLARE @SDATE CHAR(8) = FORMAT(GETDATE(),'yyyyMMdd')
DECLARE @FILE VARCHAR(50) = N'C:\臨時の保存したいパス\backup_' + @SDATE + '.sql'
BACKUP DATABASE [DB名] TO  DISK = @FILE WITH NOFORMAT,NOINIT,NAME = N'完全 データベース バックアップ',SKIP, NOREWIND, NOUNLOAD, STATS = 100

呼び出すバッチファイルbackup.bat


set logdir=C:\ログのパス\log
set logfile=%logdir%\backupsql_%DATE:/=%.log
set originalfolder=C:\臨時の保存したいパス
echo SQLバックアップ開始 %DATE% %TIME% >> %logfile%
sqlcmd -U ユーザー名 -P パスワード -S ホスト名orIP -i c:\SQLファイルを保存したパス\backup.sql >> %logfile%
forfiles /P %originalfolder% /S /D -10 /C "cmd /c del /F /Q @path" >> %logfile%
robocopy %originalfolder% C:\\最終的に保存するパス /MIR /R:0 /NDL /NP >> %logfile%
forfiles /P %logdir% /S /D -10 /C "cmd /c del /F /Q @path" >> %logfile%

上記バッチファイルをタスクスケジューラにお好みの時間にセット

C:\最終的に保存するパスは、BOXドライプなど利用するのもあり、windows severにもインストールできます。

forfilesは、指定ディレクトリ内を/D -10で指定した条件のものを削除するコマンド

robocopyはオプション/MIRはミラーリングなので元が消えれば先も消えます。増えれば、増えます。

/NDLは失敗したものだけ出力

/NPはNo Progressオプション 進捗非表示

さいごに

いろんなこと同時にやると忘れちゃうので、作業しながら書きました。。

忘れん坊・・です。では。

関連記事