我一直在研究如何通过SQL查询 删除特定的备份文件,但我只找到关于"删除比日期更早的备份"的结果。那不是我想要的。我希望保留旧的备份,但我希望能够根据其ID删除特定的备份。
我可以很容易地从msdb表中删除条目及其给定备份的恢复历史记录,但我希望能够通过SQL查询(我知道它们的完整路径,因为它存储在数据库中)删除文件,以便它们不会继续浪费磁盘空间。
过程"xp_delete_file"似乎不允许删除一个特定的文件。
我认为,如果有一个删除旧文件的过程,应该有一些方法来删除特定的文件。请不要担心这里的安全问题。
可能老了,但可能会帮助别人。xp_delete_file可用于删除指定的备份文件。试试下面的代码:
EXECUTE master.dbo.xp_delete_file 0,N'c:backupbackup1.bak'
--Define a backup device and physical name.
USE AdventureWorks2012 ;
GO
EXEC sp_addumpdevice 'disk', 'mybackupdisk', 'c:backupbackup1.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 这就是我需要的。
xp_cmdshell 'del c:backupfile.bak'
可能需要激活该命令,通过:
EXEC sp_configure 'show advanced options', 1
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
创建一个备份设备,其物理名称指向备份文件:
exec master..sp_addumpdevice @devtype = 'disk',
@logicalname = '<logical_name>',
@physicalname = '<path + physical filename>'
之后,执行:
exec master..sp_dropdevice '<logical_name>', delfile
你的文件不见了!
物理文件名可以在表'msdb.. backupmedifamily '中找到