言葉にできるは武器なるらしい

言葉に文字に残していきます何事も。いつかきっと誰かの役に立つはずだから。

【バッチ】SQLserverでバックアップ取得し別サーバに格納する

つかえそうなのでメモメモ
バックアップファイルの出力先や移動先はもちろん任意です

やっていることを簡単に説明すると
まずバックアップを取りたいサーバ上でバックアップを出力した後
容量の大きいバックアップ格納サーバへ移動させて
その際に出力ファイルのログも残す。


★BACKUP_1.bat(バックアップを取りたいサーバ内におくバッチ)

rem バックアップファイルを出力&一部DB圧縮SP実行
osql -S ホスト名 -U ユーザ名 -P パスワード -Q "EXEC インスタンス.dbo.SP名"

rem 移動元バックアップファイル情報出力
echo ホスト名.bak > D:\tmp\bkup.log
dir D:\tmp\ >> D:\tmp\bkup.log

rem バックアップファイル移動
move /Y D:\tmp\*.bak \\移動先ホスト名\e$\backup\

rem 移動先バックアップファイル情報出力
echo 移動先ホスト名.bak >> D:\tmp\bkup.log
dir \\移動先ホスト名\e$\backup\ >> D:\tmp\bkup.log

rem 必要情報をとって、けす
findstr .bak D:\tmp\bkup.log > D:\tmp\DB_BKUP.log
del D:\tmp\bkup.log

exit

 

★BACKUP_2.bat(移動先サーバ内に配置するバッチ)
@echo off

rem 退避用フォルダ作成
md F:Backup\%date:/=%

rem バックアップファイル移動
move /Y E:\backup\*.bak F:Backup\%date:/=%

rem 移動先バックアップファイル情報出力
echo 移動先ホスト名.bak > E:\backup\bkup.log
dir F:Backup\%date:/=% >> E:\backup\bkup.log

exit

 

★BACKUP_3.bat(バックアップを取りたいサーバ内におくバッチ)
@echo off

rem 必要情報をとって、けす
findstr .bak \\移動先ホスト名\e$\backup\bkup.log >> D:\tmp\DB_BKUP.log
del \\移動先ホスト名\e$\backup\bkup.log

exit

 

インスタンス.dbo.SP名(呼び出しているプロシージャ)
set ansi_nulls on
go

set quoted_indentifier on
go

create procedure dbo.SP名
as
begin

--既に存在していたら上書き
--DBごとbackup主億
backup database DB名 to disk = 'D:\tmp\DB1名.bak' with init
backup database DB名 to disk = 'D:\tmp\DB2名.bak' with init
backup database DB名 to disk = 'D:\tmp\DB3名.bak' with init

--一部DB圧縮
dbcc shrinkdatabase(DB1名, 10)
dbcc shrinkdatabase(DB2名, 10)
dbcc shrinkdatabase(DB3名, 10)

end

go

 

いーじょう!