Выполнение задачи очистки 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
Я также попытался удалить План работы и обслуживания и воссоздать, но безрезультатно.
Любые идеи?
Ответы
Ответ 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 я использую для всех своих резервных копий, идущих на определенный сервер с безопасностью в папке сервера\папка, отсортированной в папки для пользовательской системы и т.д.
Не так много, но это сработало для меня.