Подтвердить что ты не робот

Выполнение задачи очистки SQL-запросов, но не удаление

У меня есть план обслуживания, который, как предполагается, проходит через папку BACKUP и удаляет все .bak старше 5 дней. Когда я запускаю задание, это дает мне успешное сообщение, но старые .bak файлы все еще присутствуют.

Я пробовал шаг по следующему вопросу: https://serverfault.com/info/245493/sql-maintenance-cleanup-task-success-but-not-deleting-files

Result is column IsDamaged = 0

Я проверил следующий вопрос, и это не моя проблема: https://serverfault.com/info/94094/maintenance-cleanup-tasks-running-successfully-but-not-deleting-back-up-files

Я также попытался удалить План работы и обслуживания и воссоздать, но безрезультатно.

Любые идеи?

4b9b3361

Ответ 1

Попробуйте выполнить следующие проверки:

  • Используйте *. * для расширения файла или bak без точки, оба из которых я нашел, работаю, если другие проблемы также верны.
  • Убедитесь, что путь - это просто путь к тому, где находятся ваши резервные копии, но с обратной косой чертой в конце.
  • Убедитесь, что при создании резервной копии убедитесь, что флажок отмечен.

Ответ 2

Это часто вызвано проблемами разрешения. Задача очистки, похоже, не делает ничего полезного в том случае, если разрешения запрещают учетную запись, под которой этот шаг выполняется при удалении файлов.

Вы можете проверить это следующим образом:

  • В SQL Server Management Studio щелкните правой кнопкой мыши ваш план обслуживания и выберите "Изменить"
  • Найдите задачу Maintenance Cleanup, которая используется для удаления ваших файлов bak и нажмите кнопку "View T-SQL". Скопируйте script в буфер обмена - это будет что-то вроде "EXECUTE master.dbo.xp_delete_file..."
  • Подключитесь к серверу с помощью учетной записи Windows, которая имеет необходимые разрешения для папки, содержащей резервные копии, и запустите SQL
  • Если файлы bak очищаются, это означает, что задача плана обслуживания настроена правильно и у вас есть проблема с разрешениями.
  • В Management Studio откройте окно свойств для задания (Агент SQL Server > Задания), нажмите кнопку "Изменить" на первом шаге. Раздел "Запуск от имени" укажет, какая учетная запись выполняет задание.

Ответ 3

Была такая же проблема. Culprit - расширение .Bak. Измените это на Bak, и вы должны быть хорошими.

Ответ 4

Я поставлю мне 2 цента, просто по этой проблеме, новое развертывание с SQL 2012. Резервные задания работают правильно, однако задачи очистки для журналов и старых резервных копий ничего не сделали, хотя были успешно завершены.

Проблема, на мой взгляд, среди этих глупых вещей, я установил расширение как .bak и .txt, однако, как только я изменил их на .bak и .txt (в столицах), он начал работать.

Надеюсь, что это поможет кому-то, кто устраняет аналогичную проблему.

Ответ 5

У меня были аналогичные проблемы с заданиями раньше. Случаи, с которыми я столкнулся, не удалялись, потому что местоположение не было явно задано, когда я прошел через графический интерфейс. Даже если я ничего не изменил, когда местоположение пути не было конкретно указано, было похоже, что он не знал, где искать обработку удаления, поэтому никаких удалений не было. Он поддерживал все в порядке, и все было хорошо, но оно не очищалось, как указано в мастере/форме.

Ответ 6

У меня была такая же проблема, и я попытался ее решить. Я думаю, что я пробовал каждую комбинацию, но это не сработало. Обратите внимание, что файл xp_delete_document недокументирован и, очевидно, очень глючит.

Но то, что я сделал и могу помочь вам, - это изменить шаг на шаг PowerShell.

Чтобы удалить файлы старше 30 дней, вы можете использовать следующее:

get-childitem c:\sqlbackup -recurse | где {$.lastwritetime -lt (get-date).adddays(-30) -and -not $.psiscontainer} |% {remove-item $_. fullname -force -whatif}

Обратите внимание на то, что добавлено, чтобы вы могли проверить.

Но в моем случае этого было недостаточно. Возникла проблема с подходом PowerShell. У учетной записи, на которой запущен агент SQL, не было прав на удаление файлов. При правильной настройке прав все работало как шарм.

Удачи.

Ответ 7

Я обнаружил, что мне пришлось менять свою частоту до нескольких дней с 1 недели, а затем удалять старые резервные копии. Почему, я не знаю, но это решило проблему.

Ответ 8

Убедитесь, что вы создали планы обслуживания в правильном SQL Server. Чтобы быть более подробно,

Если у вас есть SQL Server 2005 и вы создаете maint. планы в рамках этого SQL Server 2005, вы ТОЛЬКО сможете "очистить" (удалить) резервную копию (bak) и журнал транзакций (trn), сгенерированный/резервный с сервера SQL Server 2005. Если вы попытаетесь очистить эти бак или trn от 2008, 2008 R2, 2012 или новее, это не сработает. (Из-за информации заголовка файла). То есть 2005 не распознает эти файлы в 2008 году или более новый формат!

Однако вы всегда можете очистить эти файлы, создав maint. планы под SQL Server 2008 и "очистка" этих файлов с 2005 по 2012 год (проверено).

Это означает, 1. 2005 год может только очистить bak/trn в формате 2005 года 2. 2008 год может очистить формат 2005 ~ 2012

У меня не было шанса испытать 2000 (слишком старый) или 2014 (слишком новый). Но я думаю, 2014 год должен работать с 2008 года.

Ответ 9

Чтобы выбросить 2 цента в... моя ошибка, когда я попытался удалить файлы обслуживания. Хотя я правильно установил расширение и расположение файлов, я забыл установить его из резервных файлов в файлы плана обслуживания.

Ответ 10

Проблема сводила меня с ума. У меня есть работа, хотя другие серверы используют план обслуживания без проблем. Я скопировал T-SQL script и сделал sp заменой dbo на sys. Меня устраивает. script для чтения

Create Procedure bk_removeTLogBackupFiles
as
Declare @DeleteDate varchar(50)
Declare @DeleteExecuteSQL varchar(1000)
Set @DeleteDate = cast(DATEADD(day,-7,GetDate()) as varchar(50))
Set   @DeleteExecuteSQL =
'EXECUTE master.sys.xp_delete_file 0,N''\\Backupserver\BackupFolder\' + @@servername + '\User'',N''trn'',N' + quotename(@DeleteDate,'''') +  ',1'


Execute (@DeleteExecuteSQL)

Это общий script я использую для всех своих резервных копий, идущих на определенный сервер с безопасностью в папке сервера\папка, отсортированной в папки для пользовательской системы и т.д. Не так много, но это сработало для меня.