WorkaHolic

일정 기간이 지난 파일을 삭제시켜 주는 SQL 스크립트

2010. 4. 8. 22:32
반응형

저자: DatabaseJournal

 

어떤 특정 폴더의 파일들 중 일정 기간이 지난 파일들을 삭제시켜 주고 싶은 경우들이 있다. 가령 예를 들어 로그 데이터 파일의 경우 계속해서 데이터가 쌓이는데 최신 30일 정도의 데이터만 유지하고 싶은 경우가 그런 좋은 예가 되겠다.

다음은 해당 SQL 스크립트이다.

Create procedure USP_DelOldFiles @path varchar(25),@duration int
as
declare @myquery varchar(1000)
declare @query varchar(1000)
declare @name varchar(100)
set @myquery = "exec master.dbo.xp_cmdshell 'dir "+ ltrim(rtrim(@path)) + "\*.* /a/od'"
print @query
 
create table #Filenames (id int identity(1,1) ,name varchar(100))
 
insert #Filenames(name)
exec (@Myquery)
delete from #Filenames where substring(name,3,1) <> '/' or name is null or
substring(name,25,1) ='<'
 
Declare mycursor cursor for
select name from #Filenames where
convert(datetime,left(name,10)) <= getdate()-@duration
open mycursor
 
fetch next from mycursor into @name
while (@@fetch_status =0)
begin
set @query = 'exec master.dbo.xp_cmdshell "del '+@path+'\'+ ltrim(rtrim(substring(@name,40,59)))+'"'
--print @query
exec (@query)
fetch next from mycursor into @name
end
close mycursor
deallocate mycursor
 
drop table #Filenames

위 스크립트를 사용하는 방법은 간단하다. 예를 들어, c:\test 폴더에 있는 파일들 중 현재 날짜를 기준으로 30일 이전의 파일들을 삭제하고 싶다면 다음과 같이 실행시켜 주면 된다.

Exec USP_DelOldFiles 'c:\test',30 -- 현재 날짜를 기준으로which deletes files older than todaydate-30

이 스크립트를 실무에 적용시키기 전에 만약을 위해 테스트 폴더 및 테스트 파일을 이용하여 충분히 테스트를 거쳐 적용하기 바란다.

반응형