У нас есть план обслуживания базы данных, который предусматривает еженощное полное резервное копирование всех пользовательских баз данных. Срок действия резервных копий истекает через семь дней, и они копируются на диск с расширением файла «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, я вижу довольно много различий:
Ссылка на сайт: http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx
Это всего лишь выстрел, но меня укусило добавление "." в поле расширения файла при создании планов обслуживания. Проверьте, есть ли у вас «.bak» вместо «bak».