MSSQL backup script with year-month-day /SQL сервер жил-сар-өдрөөр бакап авах/
Зио өнөөдрийн хийсэн зүйлээ хуваалцая. Бас нилээн удаан гүүглэ ахаасаа асуулаа. Алдаа дутагдал байвал харамгүй хайрлаарай. 😅😅😅😅😅
Шаардлагатай зүйлс:
1. Sqlserver
2. 7zip
3. NamedPip enabled
4. sa password
5. за ер нь болоо дөө.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM шинээр фолдерууд үүсгэх
if exist D:\backup\daily\ (
set dailyfolder=D:\backup\daily
) else (
mkdir D:\backup\daily\
set dailyfolder=D:\backup\daily
)
if exist D:\backup\weekly\ (
set weeklyfolder=D:\backup\weekly
) else (
mkdir D:\backup\weekly\
set weeklyfolder=D:\backup\weekly
)
if exist D:\backup\monthly\ (
set monthlyfolder=D:\backup\monthly
) else (
mkdir D:\backup\monthly\
set monthlyfolder=D:\backup\monthly
)
goto init
REM өнөөдрийн он сар өдрийг авах
:init
for /f "tokens=1-4 delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
for /f "delims=" %%a in ('wmic path win32_localtime get dayofweek /format:list ') do for /f "delims=" %%d in ("%%a") do set %%d
REM өнөөдөр ямар өдөр гэдгийг тодорхойлох
if "%day%"=="01" (
goto monthly_backup
) else (
goto next_check
)
goto eof
:next_check
if "%dayofweek%"=="7" (
goto weekly_backup
) else (
goto daily_backup
)
goto eof
REM d:\SQLDBList.txt энэ файлд баазуудын нэрийг бичиж өгнө.
REM баазуудын нэрийг уншаад, архив хийж шахна. Мөн өдөр бүрийн
:daily_backup
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%dailyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%dailyfolder%\%year%-%month%-%day%-%%I.7z" "%dailyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%dailyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.
)
ENDLOCAL
goto eof
REM 7 хоногийн бакап
:weekly_backup
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%weeklyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%weeklyfolder%\%year%-%month%-%day%-%%I.7z" "%weeklyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%weeklyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.........
)
ENDLOCAL
goto eof
REM сарын бакап
:monthly_backup
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%monthlyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%monthlyfolder%\%year%-%month%-%day%-%%I.7z" "%monthlyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%monthlyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.........
)
ENDLOCAL
goto eof
:eof
Шаардлагатай зүйлс:
1. Sqlserver
2. 7zip
3. NamedPip enabled
4. sa password
5. за ер нь болоо дөө.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM шинээр фолдерууд үүсгэх
if exist D:\backup\daily\ (
set dailyfolder=D:\backup\daily
) else (
mkdir D:\backup\daily\
set dailyfolder=D:\backup\daily
)
if exist D:\backup\weekly\ (
set weeklyfolder=D:\backup\weekly
) else (
mkdir D:\backup\weekly\
set weeklyfolder=D:\backup\weekly
)
if exist D:\backup\monthly\ (
set monthlyfolder=D:\backup\monthly
) else (
mkdir D:\backup\monthly\
set monthlyfolder=D:\backup\monthly
)
goto init
REM өнөөдрийн он сар өдрийг авах
:init
for /f "tokens=1-4 delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
for /f "delims=" %%a in ('wmic path win32_localtime get dayofweek /format:list ') do for /f "delims=" %%d in ("%%a") do set %%d
REM өнөөдөр ямар өдөр гэдгийг тодорхойлох
if "%day%"=="01" (
goto monthly_backup
) else (
goto next_check
)
goto eof
:next_check
if "%dayofweek%"=="7" (
goto weekly_backup
) else (
goto daily_backup
)
goto eof
REM d:\SQLDBList.txt энэ файлд баазуудын нэрийг бичиж өгнө.
REM баазуудын нэрийг уншаад, архив хийж шахна. Мөн өдөр бүрийн
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%dailyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%dailyfolder%\%year%-%month%-%day%-%%I.7z" "%dailyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%dailyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.
)
ENDLOCAL
goto eof
REM 7 хоногийн бакап
:weekly_backup
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%weeklyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%weeklyfolder%\%year%-%month%-%day%-%%I.7z" "%weeklyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%weeklyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.........
)
ENDLOCAL
goto eof
REM сарын бакап
:monthly_backup
SETLOCAL EnableDelayedExpansion
SET DBList1=d:\SQLDBList1.txt
FOR /F "tokens=*" %%I IN (%DBList1%) DO (
ECHO Backing up database: %%I
sqlcmd -U sa -P password -S %computername% -Q "BACKUP DATABASE [%%I] TO Disk='%monthlyfolder%\%year%-%month%-%day%-%%I.bak'"
CD /D "C:\Program Files\7-Zip"
7z.exe -y a "%monthlyfolder%\%year%-%month%-%day%-%%I.7z" "%monthlyfolder%\%year%-%month%-%day%-%%I.bak"
echo 'deleting bak file....'
del "%monthlyfolder%\%year%-%month%-%day%-%%I.bak"
ECHO.........
)
ENDLOCAL
goto eof
:eof
Comments
Post a Comment