【问题标题】:Delete Specific Backup file through SQL通过 SQL 删除特定备份文件
【发布时间】:2013-04-17 18:56:33
【问题描述】:

我一直在研究如何通过 SQL 查询删除特定备份文件,但我只找到有关“删除早于某个日期的备份”的结果。那不是我想要的。我想保留旧备份,但我希望能够通过其 ID 删除特定备份。

我可以轻松地从 msdb 表中删除条目及其给定备份的还原历史记录,但我也希望能够通过 SQL 查询删除文件(我知道它们的完整路径,因为它存储在数据库中),因此它们不会一直浪费磁盘空间。

“xp_delete_file”过程似乎不允许删除特定文件。

我假设如果有删除旧文件的过程,应该有一些方法可以删除特定文件。请不要担心这里的安全问题。

【问题讨论】:

  • 您是否有备份文件名和路径...?
  • 我愿意。这很容易从数据库中获取。我只是希望能够在该路径上调用一些“DELETE”(或等效项)。

标签: sql-server backup


【解决方案1】:

可能年纪大了,但可能会帮助某人。 xp_delete_file 可用于删除特定的备份文件。试试下面的代码:

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

【讨论】:

  • 7 年后,我正在将接受的答案从我自己的下面改为这个。不确定这在 SQL Server 2008 R2 中是否可用,但在这一点上,我认为这是值得接受的答案。非常感谢!
【解决方案2】:
--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

【讨论】:

  • 我正在使用这种方法,但我无法从服务器中删除文件。
  • 您是否收到错误消息?也许你需要有足够的权限。需要具有 diskadmin 固定服务器角色的成员身份。 technet.microsoft.com/en-us/library/ms188903.aspx
【解决方案3】:

这是我需要的。

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

可能需要通过以下方式激活命令:

EXEC sp_configure 'show advanced options', 1
GO

EXEC sp_configure 'xp_cmdshell', 1
GO

RECONFIGURE
GO

【讨论】:

  • 作为提示:xp_delete_file 将连接到您指定的文件,验证它是 SQL Server 备份文件,然后仅在它比指定的时间戳更旧时删除它。 dos DEL 命令可以用作“哑”选项 - 而 xp_delete_file 提供了一些“额外”保护/逻辑。
【解决方案4】:

创建一个备份设备,其物理名称指向备份文件:

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

然后,执行:

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

你的文件已经消失了!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多