Microsoft SQL Server 2005 XP_DELETE_FILE

时间:2012-05-22 08:03:35

标签: sql-server

我有继承系统的不幸,这给我带来了很多问题。它在SQL Server 2005上运行,我遇到的问题是在数据库维护计划中。清理例程正在使用未记录的XP_DELETE_FILE命令,并且每晚或多或少地陷入困境。

看来我们的夜间备份程序(我无法控制)正在备份XP_DELETE_FILE命令试图删除的文件。与失败或简单地绕过文件相反,它似乎会挂起。这意味着不会执行维护计划中的其他步骤。

我一直在寻找解决方案:

  1. 不使用XP_DELETE_FILE命令或
  2. 在运行XP_DELETE_FILE之前检查文件访问权限。
  3. 但我没有这么幸运。任何人都有任何想法或解决方案,我很乐意欣赏他们。

    此致

    代码示例:

          -- Delete old backup files
      IF (@CurrentCommandOutput02 = 0 AND @Verify = 'N' AND @CurrentCleanupDate IS NOT NULL)
      OR (@CurrentCommandOutput02 = 0 AND @Verify = 'Y' AND @CurrentCommandOutput03 = 0 AND @CurrentCleanupDate IS NOT NULL)
      BEGIN
        IF @BackupSoftware IS NULL
        BEGIN
          SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_delete_file 0, N''' + REPLACE(@CurrentDirectory,'''','''''') + ''', ''' + @CurrentFileExtension + ''', ''' + CONVERT(nvarchar(19),@CurrentCleanupDate,126) + ''' IF @ReturnCode <> 0 RAISERROR(''Error deleting files.'', 16, 1)'
        END
    
        IF @BackupSoftware = 'LITESPEED'
        BEGIN
          SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_slssqlmaint N''-MAINTDEL -DELFOLDER "' + REPLACE(@CurrentDirectory,'''','''''') + '" -DELEXTENSION "' + @CurrentFileExtension + '" -DELUNIT "' + CAST(DATEDIFF(mi,@CurrentCleanupDate,GETDATE()) + 1 AS nvarchar) + '" -DELUNITTYPE "minutes" -DELUSEAGE'' IF @ReturnCode <> 0 RAISERROR(''Error deleting LiteSpeed backup files.'', 16, 1)'
        END
    
        EXECUTE @CurrentCommandOutput04 = [dbo].[CommandExecute] @CurrentCommand04, '', 1, @Execute
        SET @Error = @@ERROR
        IF @Error <> 0 SET @CurrentCommandOutput04 = @Error
      END
    

2 个答案:

答案 0 :(得分:0)

您要删除哪种文件?

xp_delete_file是来自SQL 2000的SP。它检查要删除的文件的第一行,以验证它是SQL备份文件还是SQL报告文件。它不会根据文件扩展名进行检查。

如果您发布一些删除代码,可能会更容易提供帮助

答案 1 :(得分:0)

我建议使用CLR函数来执行文件操作。创建一个操作文件的程序集(例如,使用File.Delete,在系统中加载此程序集并使用EXTERNAL_ACCESS进行标记,并使用您添加的CLR函数而不是已弃用的未记录的XP。请参阅{{ 3}}