通過SQL儲存過程刪除過期的資料庫Bak備份檔案

2021-09-05 22:05:12 字數 3886 閱讀 8573

1.先啟用 xp_cmdshell 擴充套件儲存過程:

usemaster

goexec

sp_configure 

'show advanced options', 

1goreconfigure;go

sp_configure 

'xp_cmdshell', 

1goreconfigure;go

(注:因為xp_cmdshell是高階選項,所以這裡啟動xp_cmdshell,需要先

將 show advanced option 設定為 1,便可顯示高階配置選項。

可以通過語句

select

is_advanced 

from

sys.configurations 

where

name=n

'xp_cmdshell'

檢視是否高階選項。

2.刪除檔案的儲存過程:

ifobject_id('

sp_deletefiles') 

isnot

null

drop

proc

sp_deletefiles

gocreate

proc

sp_deletefiles

(@filepath

nvarchar

(128

),@searchpattern

nvarchar

(200

),@lastwritetimestart

datetime

,@lastwritetimeend

datetime)as

setnocount 

ondeclare

@cmd

nvarchar

(2000

),@outputinfo

nvarchar

(2000

),@dir

nvarchar

(2000

),@date

datetime

,@filename

nvarchar

(512

)declare

@tmp

table

(id 

intidentity(1

,1) primary

key, outputinfo 

nvarchar

(2000

))set

@cmd=n

'dir/a:-d/s/t:w/4 '+

@filepath+n

'\'+

rtrim

(@searchpattern

) /*

dos顯示檔案**

*/insert

into

@tmp

exec

xp_cmdshell 

@cmd

declare

cur_dir 

cursor

forselect

outputinfo 

from

@tmp

where

patindex('

%\%'

,outputinfo)

>0or

isdate

(substring

(outputinfo,1,

10))=1

/*過濾只留目錄和檔案列表

*/open

cur_dir

fetch

next

from

cur_dir 

into

@outputinfo

while

@@fetch_status=0

begin

ifpatindex('

%\%'

,@outputinfo

)>0/*

提取目錄

*/set

@dir

=substring

(@outputinfo,1

,len

(@outputinfo)-

charindex

(char(32

),reverse

(@outputinfo

)))else

begin

set@date

=substring

(@outputinfo,1

,10)if

@date

between

@lastwritetimestart

and@lastwritetimeend

begin

/*不同的環境,如在繁體系統,這裡取檔名的處理方法可能不同

*/set

@outputinfo

=stuff

(@outputinfo,1

,17,''

) /*

過濾掉日期部分

*/set

@outputinfo

=stuff

(@outputinfo,1

,patindex('

%[0-9]%',

@outputinfo)-

1,'') 

/*過濾掉字首的空格部分

*/set

@filename

=stuff

(@outputinfo,1

,charindex

(char(32

),@outputinfo

),''

) /*

取得檔名

*/set

@cmd=n

'del '+

@dir+n

'\'+

@filename

exec

xp_cmdshell 

@cmd

,no_output

printn'

已刪除檔案:'+

@dir+n

'\'+

@filename

endend

fetch

next

from

cur_dir 

into

@outputinfo

endclose

cur_dir

deallocate

cur_dirgo

3. 測試:

exec

sp_deletefiles 

'f:\test',

'*.exe',

'20011001',

'20091119'/*

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_071101.exe

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_080127.exe

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_080326.exe

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_080328.exe

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_080504.exe

已刪除檔案: f:\test\gao\高2009-8-14\b2000hr_fuxing_chn_060406\hr_fuxing_080628.exe*/

通過SQL儲存過程刪除過期的資料庫Bak備份檔案

1.先啟用 xp cmdshell 擴充套件儲存過程 usemaster goexec sp configure show advanced options 1goreconfigure go sp configure xp cmdshell 1goreconfigure go 注 因為xp cmd...

SQL刪除過期檔案

在sql server中,一般是用維護計畫實現刪除過期檔案。不過直接用指令碼也是可以的,而且更靈活。下面介紹三種方法。優點 相容性好 缺點 不能刪除sql server之外建立的檔案,包括rar 備註 維護計畫中的 清理維護 也是呼叫此 擴充套件儲存過程 來刪除檔案。declare olddate ...

通過CLR儲存過程刪除過期的資料庫Bak備份檔案

在乙個備份檔案目錄databasebak下,有各個資料庫的完全 差異 事務備份檔案,結構式 databasebak 例項名 資料庫名 備份日期 包含完全 差異 事務備份檔案 現在想實現刪除某一日期之前過期不用的備份檔案。usetest go 設定clr選項,指定ms sql server可以執行使用...