:: 2017-12-18 광훨 제작

:: 해당 파일만 가지고 백업 가능하게끔 제작

@echo off


:: 변수 초기화

setlocal


:: 백업 위치 설정, 폴더 생성

set Backup_Path=D:\Backup

mkdir %Backup_Path% 2> NUL


:: 파일명, 확장자 설정, 실행일시 기록

set FileNM=%date:~0,4%%date:~5,2%%date:~8,2%

set Extension=mssqlbak

echo %date% %time% >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


:: 백업 SQL 생성

echo Create SQL Script ^>^> >> %Backup_Path%\MSSQL_DB_Backup.log

echo BACKUP DATABASE 데이터베이스명 TO  DISK = N'%Backup_Path%\%FileNM%.%Extension%' WITH NOFORMAT, INIT,  NAME = N'%FileNM%', SKIP, NOREWIND, NOUNLOAD,  STATS = 10, CHECKSUM > %Backup_Path%\MSSQL_DB_Backup_SQL.txt

echo GO >> %Backup_Path%\MSSQL_DB_Backup_SQL.txt


:: SQL 기록

type %Backup_Path%\MSSQL_DB_Backup_SQL.txt >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


:: 백업 실행

echo Bakcup ^>^> >> %Backup_Path%\MSSQL_DB_Backup.log

sqlcmd -S 서버이름 -i %Backup_Path%\MSSQL_DB_Backup_SQL.txt >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


:: 백업 SQL 삭제

echo Delete SQL Script ^>^> >> %Backup_Path%\MSSQL_DB_Backup.log

forfiles /p %Backup_Path% /m MSSQL_DB_Backup_SQL.txt /c "cmd /c @del /s /q @file" >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


:: 오래된 백업파일 자동 삭제(/d 부분 변경 가능)

echo Delete Backup File ^>^> >> %Backup_Path%\MSSQL_DB_Backup.log

forfiles /p %Backup_Path% /m *.%Extension% /s /d -365 /c "cmd /c @del /s /q @file" >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


echo Done >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log

echo. >> %Backup_Path%\MSSQL_DB_Backup.log


SQLCMD를 활용한 Batch파일


MS SQL 2012 서비스팩 1에서 실행 가능, 그 외 버전은 Backup 명령어쪽 옵션만 조절하면 될 듯함.


변경해주어야 할 부분은 SQL 생성쪽에서 DB명을 지정해줘야하고, sqlcmd로 접속이 가능하게끔 바꿔줘야함


SSMS로 자동화를 해보려 했으나, 문제가 있어 SQLCMD를 활용한 방법으로 전환함.


참고사항 : CMD에서 SQLCMD가 정상적으로 실행되는지 확인 후 실행할 것, SQLCMD가 실행되지 않는다면, 환경변수가 잘못되어있거나 SQLCMD가 삭제되어있을 가능성 있음.

블로그 이미지

광훨

,