PDA

Показать полную графическую версию : Backup средствами bash для SQL


s.i.p.a
19-09-2018, 15:29
@Echo on
Set "Log=z:\system\logfile.txt"

Set "Mess=%~nx0 Start=%Date%-%Time%"
Call :Minutes "%Date% %Time%" "Day1" "Min1"

set now=%DATE: =0%
for /f "tokens=1-3 delims=/-:., " %%a in ( "%now%" ) do (
set now=%%c%%b%%a
)
SQLCMD -U user_backup -P user -Q "BACKUP DATABASE v8 TO DISK = 'z:\system\v8_bk.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
echo on
"c:\Program Files\WinRAR\WinRAR.exe" a -hpGflfrjybrJnkbdJnrjp1420 -ilogz:\system\rar.log -m5 z:\system\v8_bk-%now%.rar @z:\system\backupsql.list

rem rem @echo off
echo on
echo open 192.168.33.200>z:\system\ftp.txt
echo r>>z:\system\ftp.txt
echo NhjkmYfGfkjxrt>>z:\system\ftp.txt
echo lcd z:\system>>z:\system\ftp.txt
echo send "v8_bk-%now%.rar">>z:\system\ftp.txt
echo quit>>z:\system\ftp.txt
ftp -s:"z:\system\ftp.txt"
del z:\system\v8_bk-%now%.rar
del z:\system\v8_bk.bak
del z:\system\ftp.txt
Call :Minutes "%Date% %Time%" "Day2" "Min2"
Set /A DOld=(%Day2%-%Day1%)*1440+%Min2%-%Min1%
>>"%Log%" Echo %Mess% End=%Date%-%Time% Duration=%DOld% min
GoTo :Eof

:Minutes
SETLOCAL
FOR /F "tokens=1,2,3,4,5 delims=.:,/ " %%i IN ("%~1") DO Set "Day=0%%i" &Set "Month=0%%j" &Set "Year=%%k" &Set "Hour=0%%l" &Set "Min=0%%m"
Set /A Day=1%Day:~-2%-100
Set /A Month=1%Month:~-2%-100
Call :JulianDay %Day% %Month% %Year% "Day"
ENDLOCAL &(Set /A %~2=%Day% &Set /A %~3=1%Hour:~-2%*60+1%Min:~-2%-6100)
GoTo :Eof

:JulianDay
Set /A %~4=(1461*(%3+4800+(%2-14)/12))/4+(367*(%2-2-12*((%2-14)/12)))/12-(3*((%3+4900+(%2-14)/12)/100))/4+%1-32075
Exit /B


Есть вот такой отличный скрипт, который делает бекап SQL базы, архивирует базу и архив отправляет на FTP, плюс создаёт файл с отчётом о проведении операции.
Один только минус. Он создаёт полную базу и она весьма не маленькая. По этому было решено делать инкрементную версию ежедневно, а раз в неделю полную.
SQLCMD -U user_backup -P user -Q "BACKUP DATABASE v8 TO DISK = 'z:\system\v8_bk.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD" отвечает за создание полного бекапа.
Если заменить на SQLCMD -U user_backup -P user -Q "BACKUP DATABASE v8 TO DISK = 'z:\system\v8_bk.bak' WITH INIT, DIFFERENTIAL, NOFORMAT, SKIP, NOUNLOAD" , то делается инкрементная версия.

Со спокойной душой создал два батника, запихнул их в task scheduler. Один раз в неделю, второй ежедневно запускается. Проверил - всё работает. Спустя два дня проверил бекапы, второй скрипт делает полный бекап, почему-то, хотя сразу отрабатывал нормально.

Подскажите,что не так или как можно подправить скрипт.

p.s. Сейчас, почему-то только полные версии бекапа делаются обоими скриптами((( но работало ведь!

alpap
19-09-2018, 23:25
s.i.p.a,
для начала поясните зачем подобные кардибалеты: Set /A DOld=(%Day2%-%Day1%)*1440+%Min2%-%Min1%
и остальное, если вы все равно дату съема доверили планировщику, то кроме запуска архивирования на тот день ничего быть не должно, так?

Busla
20-09-2018, 10:02
было решено делать инкрементную версию ежедневно, а раз в неделю полную »
SQL сервер не умеет инкрементные бэкапы

Проверил - всё работает. »
как проверили?

s.i.p.a
20-09-2018, 11:08
alpap »

Set "Log=z:\system\logfile.txt"

Set "Mess=%~nx0 Start=%Date%-%Time%"
Call :Minutes "%Date% %Time%" "Day1" "Min1"
// Остальной код
Call :Minutes "%Date% %Time%" "Day2" "Min2"
Set /A DOld=(%Day2%-%Day1%)*1440+%Min2%-%Min1%
>>"%Log%" Echo %Mess% End=%Date%-%Time% Duration=%DOld% min
GoTo :Eof

:Minutes
SETLOCAL
FOR /F "tokens=1,2,3,4,5 delims=.:,/ " %%i IN ("%~1") DO Set "Day=0%%i" &Set "Month=0%%j" &Set "Year=%%k" &Set "Hour=0%%l" &Set "Min=0%%m"
Set /A Day=1%Day:~-2%-100
Set /A Month=1%Month:~-2%-100
Call :JulianDay %Day% %Month% %Year% "Day"
ENDLOCAL &(Set /A %~2=%Day% &Set /A %~3=1%Hour:~-2%*60+1%Min:~-2%-6100)
GoTo :Eof

:JulianDay
Set /A %~4=(1461*(%3+4800+(%2-14)/12))/4+(367*(%2-2-12*((%2-14)/12)))/12-(3*((%3+4900+(%2-14)/12)/100))/4+%1-32075

Это всего лишь создания текстового файла когда и сколько времени выполнялся скрипт. И на сервере выполняется много скриптов, которые записывают в этот файл данные. По хорошему, данный код к SQL никак не относится.

SQL сервер не умеет инкрементные бэкапы »
Прошу прощения, Differential Backup или "разностный бекап. Кому как удобнее называть.

как проверили? »

Запустил скрипт и он создал мне бекап c последними изменениями, который весил в 15 раз меньше чем полный.

Iska
20-09-2018, 12:20
Кому как удобнее называть. »
Вообще-то это не «как удобнее», а два отличающихся типа частичного резервирования.




© OSzone.net 2001-2012