Назад | Перейти на главную страницу

План резервного копирования SQL Server 2008 R2 не удаляет файлы старше X дней, установленных в плане обслуживания

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

Проблема в том, что задание не удаляет какие-либо наборы резервных копий старше семи дней (то же самое касается задания, которое создает резервную копию журнала транзакций).

Для всех баз данных, для которых выполняется резервное копирование, установлена ​​модель восстановления «Полное».

Агент SQL Server входит в систему как локальная система, и «СИСТЕМА» имеет полные права на папки, в которых хранятся эти резервные копии.

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

Если я создаю тестовый план обслуживания для удаления текстовых файлов в каталоге и запускаю сгенерированный T-SQL, команда завершается успешно, но текстовый файл в каталоге не удаляется.

EXECUTE master.dbo.xp_delete_file 0,N'D:\TEST',N'.txt'

Я знаю, что это проблема прав, но с нашей стороны все в порядке.

У кого-нибудь есть идеи?

Спасибо.

Насколько я понимаю, вы удаляете их в плане обслуживания с помощью специальных Задача очистки при обслуживании .. или через "Выполнить задачу оператора T-SQL"? Хотя это не должно иметь значения.

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

Я сомневаюсь, что это проблема с разрешением, поскольку вы в первую очередь можете создавать резервные копии. Но проверьте, если SQLServerMSSQLUser$... группа имеет полный доступ - так я имею ко всем хранилищам «резервных копий» (эти разрешения должны быть настроены автоматически, если вы установите эту папку в качестве места назначения резервного копирования по умолчанию во время первоначальной настройки).


Насколько мне известно xp_delete_file недокументирован, и я не нашел на него ссылок в книгах по SQL. По-видимому, SQL Server проверяет, какой это файл перед его удалением - он работает только с собственными файлами (я думаю, чтобы предотвратить неправильное использование / безопасность). Вот формат и параметры:

EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'D:\SQLbackups\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
N'2011-06-15T15:10:04', -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)

Глядя на ваш пример оператора SQL, я вижу довольно много различий:

  • В первом параметре у вас 0 (резервные копии файлов), но вы пытаетесь удалить текстовый файл
  • Расширение файла должно исключать точку
  • Вы должны указать дату истечения срока действия (файлы старше указанной даты будут удалены)

Ссылка на сайт: http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx

Это всего лишь выстрел, но меня укусило добавление "." в поле расширения файла при создании планов обслуживания. Проверьте, есть ли у вас «.bak» вместо «bak».