1

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

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

我一直在寻找解决方案:

  1. 不使用 XP_DELETE_FILE 命令,或
  2. 在我运行 XP_DELETE_FILE 之前检查文件访问权限。

但我没有这样的运气。任何人有任何想法或解决方案,我会很高兴地感谢他们。

问候

代码示例:

      -- 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
4

2 回答 2

0

你想删除什么样的文件?

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

也许如果您发布一些删除代码会更容易提供帮助

于 2012-05-22T08:34:59.867 回答
0

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

于 2012-05-22T09:22:38.443 回答