はじめに
移転に伴って社内データベースを定期バックアップをとることになったのでメモ書き
手順
バックアップコマンドが分からないのでSQL Server Management Studio (SSMS)から行う。
SQL Server Express 2019には付属しないので別途インストールをする。
SQL Server Management Studio からSQLサーバーへ接続を行い、バックアップを取りたいデータベースを選択して
右クリックメニューでタスク→バックアップを選択します。
下記の画面でスプリクトを選択OKをクリックする
下記画面が表示されるので、吐き出されたコマンドをコピー
上記でコピーしてものをメモ帳などで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オプション 進捗非表示
さいごに
いろんなこと同時にやると忘れちゃうので、作業しながら書きました。。
忘れん坊・・です。では。