2013-04-24 97 views
6

我一直在研究如何通過SQL查詢刪除特定的備份文件,但我只找到關於「刪除比日期更早的備份」的結果。這不是我想要的。我想保留舊的備份,但我希望能夠通過其ID刪除特定的備份。通過SQL刪除特定的備份文件

我可以很容易地從msdb表中刪除的項,並且其還原歷史記錄對於給定的備份,但我希望能夠通過一個SQL查詢來刪除這些文件以及(我知道他們的完整路徑,如它存儲在數據庫中),這樣它們就不會在磁盤上浪費空間。

程序「xp_delete_file」似乎不允許刪除特定文件。

我假設如果有一個程序刪除舊文件,應該有一些方法來刪除一個特定的文件。請不要擔心這裏的安全。

+0

您是否有備份文件名和路徑...? – Pandian 2013-04-24 09:36:27

+0

我會的。這很容易從數據庫中獲取。我只是想能夠在該路徑上調用一些「DELETE」(或等價物)。 – Nuno 2013-04-24 09:37:49

回答

4

這就是我所需要的。

xp_cmdshell 'del c:\backup\file.bak' 

它可能需要激活命令,通過:

EXEC sp_configure 'show advanced options', 1 
GO 

EXEC sp_configure 'xp_cmdshell', 1 
GO 

RECONFIGURE 
GO 
+0

作爲提示:xp_delete_file將連接到您指定的文件,請確認它是SQL Server備份文件,然後僅在指定的時間戳之前刪除它。 dos DEL命令很好,因爲'dumb'選項 - 而xp_delete_file提供了一些'額外'保護/邏輯。 – 2016-10-08 16:53:24

3
--Define a backup device and physical name. 
USE AdventureWorks2012 ; 
GO 
EXEC sp_addumpdevice 'disk', 'mybackupdisk', 'c:\backup\backup1.bak' ; 
GO 
--Delete the backup device and the physical name. 
USE AdventureWorks2012 ; 
GO 
EXEC sp_dropdevice ' mybackupdisk ', 'delfile' ; 
GO 

http://technet.microsoft.com/en-us/library/ms188711.aspx

+0

我正在使用這種方法,但我無法從服務器上刪除文件。 – rahularyansharma 2014-05-02 17:12:42

+0

你有錯誤嗎?也許你需要有足夠的權限。需要成爲diskadmin固定服務器角色的成員資格。 http://technet.microsoft.com/en-us/library/ms188903.aspx – Alexey 2014-05-03 07:10:02

16

可能是舊的,但可能幫助別人。 xp_delete_file可用於刪除特定的備份文件。試試下面的代碼:

EXECUTE master.dbo.xp_delete_file 0,N'c:\backup\backup1.bak' 
1

創建一個備份設備,具有指向備份文件的物理名:

exec master..sp_addumpdevice @devtype = 'disk', 
@logicalname = '<logical_name>', 
@physicalname = '<path + physical filename>' 

然後,執行:

exec master..sp_dropdevice '<logical_name>', delfile 

和你文件已經消失了!

物理文件名可以在表中找到msdb..backupmediafamily