Задача очистки обслуживания SQL работает, но не удаляется - PullRequest
36 голосов
/ 16 марта 2011

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

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

Result is column IsDamaged = 0

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

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

Есть идеи?

Ответы [ 10 ]

50 голосов
/ 25 июля 2011

Попробуйте эти проверки:

  1. Используйте *. * Для расширения файла или бак без точки, обе из которых я считаю работающими, если и другие проблемы верны
  2. Убедитесь, что путь - это просто путь к вашим резервным копиям, но с обратной косой чертой в конце.
  3. Убедитесь, что флажок проверки отмечен при создании резервной копии.
5 голосов
/ 25 марта 2014

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

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

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

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

2 голосов
/ 28 июля 2014

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

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

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

2 голосов
/ 17 июля 2014

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

Если у вас есть SQL Server 2005, и вы создаете maint.В соответствии с планами SQL Server 2005 вы сможете ТОЛЬКО «очистить» (удалить) те резервные копии (bak) и журнал транзакций (trn), которые были созданы / скопированы с сервера SQL Server 2005.Если вы попытались очистить эти bak или 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 года.

1 голос
/ 09 июля 2014

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

1 голос
/ 19 июля 2013

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

Но я помог вам и поменяю шаг на шаг PowerShell.

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

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

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

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

Удачи

1 голос
/ 16 марта 2011

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

0 голосов
/ 04 февраля 2014

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

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)

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

0 голосов
/ 08 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...