У меня было несчастье наследовать систему, которая вызывает у меня большие проблемы. Он работает на SQL Server 2005, и проблема у меня есть в плане обслуживания базы данных. Процедура очистки использует недокументированную команду XP_DELETE_FILE и задерживается на более или менее ночной основе.Microsoft SQL Server 2005 XP_DELETE_FILE
Похоже, что наша программа ночного резервного копирования (которой я не контролирую) создает резервную копию файла, который пытается удалить команда XP_DELETE_FILE. В отличие от отказа или просто обхода файла, он, похоже, зависает. Это означает, что дальнейшие шаги в плане обслуживания не выполняются.
Я искал решение для этого вдоль линий:
- Не используя команду XP_DELETE_FILE или
- Проверка прав доступа к файлу, прежде чем запускать 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
Он пытается удалить созданный SQL .BAK-файл. –
ОК, можете ли вы опубликовать результат строки, вызывающей процедуру xp_delete_file. Похоже, что вам не хватает одного параметра в конце – Diego
Это одна из проблем, она либо завершает команду, и поэтому там не является какой-либо ошибкой или просто сидит на этой команде столько, сколько я допускаю. Я убил ее в выходные дни после того, как сидел на этой команде в течение 38 часов! Это работает примерно раз в 4 дня или около того. это работать каждую ночь или, по крайней мере, чаще всего! –