2013-04-24 96 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