バッチ処理のバックアップDMPを2→1世代保存へ修正した話


DBサーバーのストレージが限界

DBサーバーのストレージが限界に近くなり、原因の調査と一時的にバックアップを2世代→1世代に変更することになった。
バックアップ先フォルダを確認するとDMPは2世代保存のはずが10世代も保存されていた。

原因と修正内容を備忘録までに記載。


 

バックアップは毎日行われDMPは以下のような日付フォルダの中に配置される。

F:¥Data¥Dump¥20200826
F:¥Data¥Dump¥20200825
F:¥Data¥Dump¥20200824
 




今までの処理



今日の日付を年月日で取得
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%


パワーシェルで前々日の日付を取得
set SEDAI=2

FOR /F "usebackq" %%a IN (`powershell [DateTime]::Today.AddDays"("-%SEDAI%")".ToString"("'yyyyMMdd'")"`) DO SET REMOVEDAY=%%a




削除対象のパスからフォルダ削除
set REMOVEDIR=F:¥Data¥Dump¥REMOVEDAY

rmdir /s /q %REMOVEDIR%



この処理だと何らかの作業でバッチ処理を停止させた場合、手動で削除しなければ永遠に残ってしまうフォルダ(DMP)が発生する。
過去バッチ処理を停止させた時に削除されなかったDMPが残ってしまいストレージを圧迫していた。

今回の修正


パワーシェルの日付取得は使わず、フォルダ名を日付でソートして取得する。最新日付のフォルダ以外は削除。
for /f "skip=1" %%i in ('dir /ad /b /s /o:-n F:¥Data¥Dump¥') do rmdir /s /q %%i


これで保存世代も2→1世代になり、バッチ処理を停止させた後も最新日付以外のフォルダは削除されるようになった。