:: 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가 삭제되어있을 가능성 있음.