高分求助:sql server 2005:EXECUTE master.dbo.xp_delete_file

junlintianxia07 2010-06-17 10:15:47
我们可以设置只保留3天内的备份数据,那么必须删除3天前的数据备份文件。在“备份数据”作业属性窗口的步骤栏目里,建立第二个步骤命名为“删除旧有备份”。同样类型为“T-SQL”,命令窗口里填入一下SQL语句:

DECLARE @OLDDATE DATETIME
SELECT @OLDDATE=GETDATE()-3
EXECUTE master.dbo.xp_delete_file 0,N'D:\BACKUP',N'bak',@olddate

这样可以删除D:\BACKUP下面的bak 格式的备份文件, 其中第一个步骤中备份文件名字:
SELECT @filename = 'D:\BACKUP\SQL-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DATEPART(mm,@date) as varchar)+'-'+CAST(DATEPART(dd,@date) as varchar)+'.bak'

但是 我现在在文件夹下面的换成了是rar格式的文件
如何修改这段代码
文件名字如下:
cpmedical_all.bak_2010613225.rar
cpmedical_all.bak_2010614225.rar
cpmedical_all.bak_2010615225.rar
cpmedical_all.bak_2010616225.rar
这些文件是最近4天的 压缩后的备份文件, 我如何修改这段EXECUTE master.dbo.xp_delete_file
我试着换成 EXECUTE master.dbo.xp_delete_file 0,N'I:\sql2005back\rar\cpmedical\all',N'rar','3',执行了后,说是参数无效,请高人写出详细代码 谢谢!!!!
...全文
888 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xman_78tom 2010-06-17
  • 打赏
  • 举报
回复
写个 del_oldfiles.vbs 脚本删除老文件。
用法:del_oldfiles.vbs fullpath ext days
fullpath -- 文件所在的完全路径;ext -- 文件的扩展名;days -- 早于多少天

在 SQL Server 中,可以通过 exec xp_cmdshell 'cscript.exe del_oldfiles.vbs d:\backup rar 3' 调用。

strDrive = left(WScript.Arguments(0), 2)
strPath = replace(right(WScript.Arguments(0), len(WScript.Arguments(0))-2),"\","\\") & "\\"
strExtension = WScript.Arguments(1)
intDays = WScript.Arguments(2)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objConvertedDate = CreateObject("WbemScripting.SWbemDateTime")

Set colFiles = objWMIService.ExecQuery("select * from CIM_DataFile where drive='" &_
strDrive & "' and path='" & strPath & "'")
For Each objFile in colFiles
objConvertedDate.Value = objFile.CreationDate
dtCreationDate = objConvertedDate.GetVarDate(LOCAL_TIME)
If DateAdd("d", intDays, dtCreationDate) < Now and objFile.Extension = strExtension Then
' Wscript.Echo objFile.Name & ", " & DateDiff("d", dtCreationDate, Now)
objFile.delete()
End If
Next
htl258_Tony 2010-06-17
  • 打赏
  • 举报
回复
DECLARE @filename  NVARCHAR(100)   
DECLARE @cmd NVARCHAR(100)

SET @filename = 'D:\BACKUP\cpmedical_all.bak_'
+ LTRIM(DATEPART(yy,GETDATE()))
+ LTRIM(DATEPART(mm,GETDATE()))
+ LTRIM(DATEPART(dd,GETDATE()-3))
+ '225.rar'
SET @cmd = 'del '+@filename
EXEC master..xp_cmdshell @cmd
GO
永生天地 2010-06-17
  • 打赏
  • 举报
回复

declare @data_3ago nvarchar(50)
declare @cmd varchar(50)

set @data_3ago ='D:\BACKUP\cpmedical_all.bak_'+convert(varchar(10),getdate()-3,112)+'225.rar'
set @cmd = 'del '+ @data_3ago
exec master..xp_cmdshell @cmd

go
--在d盘创建文件测试结果
/*
output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL

(所影响的行数为 1 行)
*/
永生天地 2010-06-17
  • 打赏
  • 举报
回复
 declare @data_3ago nvarchar(50)   
declare @cmd varchar(50)

set @data_3ago ='D:\BACKUP\cpmedical_all.bak_'+convert(varchar(10),getdate()-3,112)+'.rar'
set @cmd = 'del '+ @data_3ago
exec master..xp_cmdshell @cmd
go
/*
output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
找不到 D:\BACKUP\cpmedical_all.bak_20100614.rar
NULL

(所影响的行数为 2 行)
*/
永生天地 2010-06-17
  • 打赏
  • 举报
回复
declare @data_3ago nvarchar(50)
declare @cmd varchar(50)

set @data_3ago ='D:\BACKUP\cpmedical_all.bak_'+convert(varchar(10),getdate()-3,112)+'.rar'
set @cmd = 'del '+ @data_3ago
exec master..xp_cmdshell @cmd
go
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
再顶!
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
EXEC master..xp_cmdshell N'del I:\文件名.rar',NO_OUTPUT
你这句意思是删除指定的文件,如何按日期删除三天前的呢? 按照我目前文件名的格式的话呢?
cpmedical_all.bak_2010613225.rar
cpmedical_all.bak_2010614225.rar
cpmedical_all.bak_2010615225.rar
cpmedical_all.bak_2010616225.rar
谢谢了
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
现在我是想删掉3天前的rar文件,无论是dos 也好,sql 也好,只要实现了就好啊,高人帮帮忙! 谢谢!
htl258_Tony 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 junlintianxia07 的回复:]
引用 1 楼 htl258 的回复:
参考:http://blog.csdn.net/htl258/archive/2010/04/18/5498882.aspx

第一、三个存储过程

高人,你的sql 我看不太明白,麻烦你给我详细说下吧,谢谢!
[/Quote]

那里用的是DOS命令,调用xp_cmdshell过程。
EXEC master..xp_cmdshell N'del I:\文件名.rar',NO_OUTPUT
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
参考:http://blog.csdn.net/htl258/archive/2010/04/18/5498882.aspx

第一、三个存储过程
[/Quote]
高人,你的sql 我看不太明白,麻烦你给我详细说下吧,谢谢!
Garnett_KG 2010-06-17
  • 打赏
  • 举报
回复
xp_delete_file貌似只对标准的bak文件有效(RESTORE HEADERONLY可以返回数据的),而对普通文件无效。
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 garnett_kg 的回复:]
SQL code

DECLARE @OLDDATE DATETIME
SELECT @OLDDATE=GETDATE()-3
EXECUTE master.dbo.xp_delete_file 0,N'I:\sql2005back\rar\cpmedical\all',N'rar',@olddate
[/Quote]
我试了下,sql server 提示说是命令已完成,但是结果还是那些文件,并没有删除掉过期文件
帮忙解释下这个存储过程参数的含义吧, 是不是跟我命名的压缩文件的名称有关系,无法删除呢?
Garnett_KG 2010-06-17
  • 打赏
  • 举报
回复

DECLARE @OLDDATE DATETIME
SELECT @OLDDATE=GETDATE()-3
EXECUTE master.dbo.xp_delete_file 0,N'I:\sql2005back\rar\cpmedical\all',N'rar',@olddate
htl258_Tony 2010-06-17
  • 打赏
  • 举报
回复
junlintianxia07 2010-06-17
  • 打赏
  • 举报
回复
顶楼上各位高人,最终我采用的办法是 14楼大哥的,谢谢各位了!

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧