Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Backup средствами bash для SQL (http://forum.oszone.net/showthread.php?t=336772)

s.i.p.a 19-09-2018 15:29 2832051

Backup средствами bash для SQL
 
Код:

@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 2832140

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

Busla 20-09-2018 10:02 2832175

Цитата:

Цитата s.i.p.a
было решено делать инкрементную версию ежедневно, а раз в неделю полную »

SQL сервер не умеет инкрементные бэкапы

Цитата:

Цитата s.i.p.a
Проверил - всё работает. »

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

s.i.p.a 20-09-2018 11:08 2832191

Цитата:

Цитата alpap
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 никак не относится.

Цитата:

Цитата Busla
SQL сервер не умеет инкрементные бэкапы »

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

Цитата:

Цитата Busla
как проверили? »

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

Iska 20-09-2018 12:20 2832213

Цитата:

Цитата s.i.p.a
Кому как удобнее называть. »

Вообще-то это не «как удобнее», а два отличающихся типа частичного резервирования.


Время: 11:37.

Время: 11:37.
© OSzone.net 2001-