通過SQL儲存過程刪除過期的資料庫Bak備份檔案
1.先啟用 xp_cmdshell 擴充套件儲存過程:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->Use Master
GO
Exec sp_configure 'show advanced options', 1
GO
Reconfigure;
GO
sp_configure 'xp_cmdshell', 1
GO
Reconfigure;
GO
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->Use Master
GO
Exec sp_configure 'show advanced options', 1
GO
Reconfigure;
GO
sp_configure 'xp_cmdshell', 1
GO
Reconfigure;
GO
(注:因為xp_cmdshell是高階選項,所以這裡啟動xp_cmdshell,需要先將 show advanced option 設定為 1,便可顯示高階配置選項。
可以通過語句
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->Select is_advanced From sys.configurations Where name=N'xp_cmdshell'
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->Select is_advanced From sys.configurations Where name=N'xp_cmdshell'
檢視是否高階選項。
)
2.刪除檔案的儲存過程:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->If object_id('sp_DeleteFiles') Is Not Null
Drop Proc sp_DeleteFiles
Go
Create Proc sp_DeleteFiles
(
@FilePath nvarchar(128),
@SearchPattern nvarchar(200),
@LastWriteTimeStart datetime,
@LastWriteTImeEnd datetime
)
As
Set Nocount On
Declare @Cmd nvarchar(2000),
@OutputInfo nvarchar(2000),
@Dir nvarchar(2000),
@Date datetime,
@FileName nvarchar(512)
Declare @Tmp Table(ID int Identity(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 For
Select OutputInfo From @tmp Where Patindex('%\%',OutputInfo)>0 Or IsDate(substring(OutputInfo,1,10))=1 /*過濾只留目錄和檔案列表*/
Open Cur_dir
Fetch Next From Cur_dir Into @OutputInfo
While @@Fetch_Status = 0
Begin
If Patindex('%\%',@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
Print N'已刪除檔案:'+@Dir+N'\'+@FileName
End
End
Fetch Next From Cur_dir Into @OutputInfo
End
Close Cur_dir
Deallocate Cur_dir
Go
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->If object_id('sp_DeleteFiles') Is Not Null
Drop Proc sp_DeleteFiles
Go
Create Proc sp_DeleteFiles
(
@FilePath nvarchar(128),
@SearchPattern nvarchar(200),
@LastWriteTimeStart datetime,
@LastWriteTImeEnd datetime
)
As
Set Nocount On
Declare @Cmd nvarchar(2000),
@OutputInfo nvarchar(2000),
@Dir nvarchar(2000),
@Date datetime,
@FileName nvarchar(512)
Declare @Tmp Table(ID int Identity(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 For
Select OutputInfo From @tmp Where Patindex('%\%',OutputInfo)>0 Or IsDate(substring(OutputInfo,1,10))=1 /*過濾只留目錄和檔案列表*/
Open Cur_dir
Fetch Next From Cur_dir Into @OutputInfo
While @@Fetch_Status = 0
Begin
If Patindex('%\%',@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
Print N'已刪除檔案:'+@Dir+N'\'+@FileName
End
End
Fetch Next From Cur_dir Into @OutputInfo
End
Close Cur_dir
Deallocate Cur_dir
Go
3. 測試:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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
*/
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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
*/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-620296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server資料庫還原過程記錄,bak檔案+mdf檔案SQLServer資料庫
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- 資料庫儲存過程資料庫儲存過程
- RocketMQ -- 過期檔案的刪除MQ
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- kafka-- 過期檔案的刪除Kafka
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- EMC UNITY 400儲存卷刪除資料恢復操作過程Unity資料恢復
- Sql Server 資料庫中呼叫dll檔案的過程SQLServer資料庫
- plsqlDevloper 儲存過程的除錯SQLdev儲存過程除錯
- SQL 分頁儲存過程SQL儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- openGauss 支援儲存過程除錯儲存過程除錯
- SQL server儲存過程函式SQLServer儲存過程函式
- OGG刪除過期的trail檔案,shell實現AI
- oracle rman 刪除過期的歸檔Oracle
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- MySQL超大表刪除資料過程MySql
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- MySQL的寫入資料儲存過程MySql儲存過程
- SQL Server儲存過程的優缺點SQLServer儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- oracle 刪除過期的歸檔日誌Oracle
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- Redis單機資料庫持久化與過期建刪除Redis資料庫持久化
- 【伺服器資料恢復】NetApp儲存中lun被誤刪除的資料恢復過程伺服器資料恢復APP
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程