백업을 만들고, 삭제 하기 위해서 사용하는 명령어(?) 입니다. 해당 프로시저는 MSDN에 문서화 되어 있지 않습니다.
백업 파일을 삭제할때 windows 스케줄러 및 파워쉘 등을 이용하거나, xp_cmdshell를 이용하여, 삭제하는 경우가 있는데 그보다 더욱 간단하게 처리 가능 합니다.
하지만 해당 프로시저는 MSDN에 나와있지 않은 만큼 주의를 기울여서 사용해야 하며, 많은 테스트를 통해서 검증을 거친 이후에 사용하시길 권장 합니다.
일단 기본적인 예시를 보면 다음과 같습니다.
exec master.sys.xp_delete_file 0,N'D:\MSSQL_BACKUP\',N'BAK',N'2015-11-10 17:00',1
크게 복잡하거나 하지는 않지만 많은 파라미터를 받고 있습니다. 하지만 크게 어려운 것은 없습니다.
위의 파라미터 값을 하나씩 살펴보면 다음과 같습니다.
exec master.sys.xp_delete_file
0,
N'D:\MSSQL_BACKUP\',
N'BAK',
N'2015-11-10 17:00',
1
순서는 명령어인 1줄을 제외하고, 1번부터 보시면 됩니다.
① 파일 타입 : 0 백업파일 / 1 report 파일
- 이 부분에 대해서 report파일이 무엇인지 모르겠습니다. 영문 사이트를 봤지만, MSDN이 없어서 무엇인지 알기 어렵습니다.
하지만 대부분의 경우 백업 파일을 삭제하기 위한 목적이므로, 0번으로 사용하면 문제가 없을 듯 합니다.
② 폴더 위치 : 폴더의 위치는 꼭 \로 끝나야 합니다.
③ 확장자명 : bak,tran 등의 확장자를 뜻 합니다. 일반적으로 그렇게 사용하지만 사용자의 마음데로, 하는 경우 해당 확장자를 기입합니다.
④ 날짜 : 삭제하고자 하는 파일의 기준이 되는 날짜 입니다.
- 날짜 주의 사항
해당 SP는 보통 백업이 끝난 다음에 실행이 될 텐데, 2015-11-10 18:00 의 전일 파일을 지운다고 가정하여, 보통 dateadd(mm,-1,getdate())
형식을 이용할텐데, 이럴 경우 백업이 30분이 걸린다고 치면, 그 시간은 2015-11-09 18:30으로 나와서 전날의 파일이 지워지지 않을 수 있습니다.
그러므로, dateadd(hh,-23,getdate())등으로, 시간단위로 지정하거나 하는 것이 좋습니다.
⑤ 서브 폴더 : 0 서브 폴더의 파일 무시 / 1 서브 폴더의 파일도 함께 삭제
감사합니다.
참고
http://stackoverflow.com/questions/24582996/sql-server-xp-delete-file-parameters
http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx
http://optimizer.tistory.com/93