Пакет / Скрипт для резервного копирования баз данных MSSQL
Я ищу создание пакетного сценария, который может создавать резервные копии моих баз данных MSSQL и удалять предыдущую архивную резервную копию, только если резервная копия всех баз данных, которая начинается с 'Avn', успешно создана (как Avn*.bak) в текущем процессе резервного копирования. Моя проблема в разделе УДАЛЕНИЕ БАК-ФАЙЛОВ.
Не могли бы вы мне помочь?
================================================== ==============
@ECHO OFF
SETLOCAL
ECHO *** Script backup, Dec 2015 ***
REM -------------------------- BACKING UP --------------------------------------------------
REM Get date in format DDD-MM-YYYY (assumes the locale is the UK)
set NowDate=%date:/=-%
REM Build a list of databases to backup
SET DBList=C:\Windows\Temp\SQLDBList.txt
set cnt=0
set dbnr=C:\Windows\Temp\nrdb.txt
SqlCmd -E -S .\SQL1 -h-1 -W -Q "SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE substring(Name,1, 3) = 'Avn'" > "%DBList%"
REM Backup each database, prepending the date to the filename
FOR /F "tokens=*" %%I IN (%DBList%) DO (
ECHO Backing up database: %%I
SqlCmd -E -S .\SQL1 -Q "BACKUP DATABASE [%%I] TO Disk='D:\SQL2008\MSSQL10_50.SQL1\MSSQL\Backup\Automat\%%I.bak' WITH INIT"
ECHO.
)
REM -------------------------- DELETING BAK FILES---------------------------------------
SqlCmd -E -S .\SQL1 -h-1 -W -Q "SELECT count (*) dbnumber FROM master.dbo.sysDatabases WHERE substring(Name,1, 3) = 'Avn'" > "%dbnr%"
FOR %%a in (*.bak) do set /a cnt+=1
echo file count = %cnt%
IF !%nrdb%! == !%cnt%!
else exit
forfiles /P "D:\SQL2008\MSSQL10_50.SQL1\MSSQL\Backup\Automat" /S /M *.* /C "cmd /c del @PATH"
IF EXIST !%DBList%" DEL /F /Q "%DBList%"*
REM -------------------------- ARCHIVING BACKUP ----------------------------------------------
CLS
ECHO Archiving backup files...
"C:\Program Files\7-Zip\7z.exe" a -t7z "D:\SQL2008\MSSQL10_50.SQL1\MSSQL\Backup\Automat\Backup %NowDate%.rar" "D:\SQL2008\MSSQL10_50.SQL1\MSSQL\Backup\Automat" -x!*.rar
REM -------------------------- CLEANING UP BACKUP --------------------------------------------
ECHO Cleaning up backup files...
forfiles /P "D:\SQL2008\MSSQL10_50.SQL1\MSSQL\Backup\Automat" /S /M *.bak /C "cmd /c del @PATH"