Скопируйте файл из одного каталога в другой по дате - PullRequest
3 голосов
/ 04 февраля 2009

У меня есть это задание SQL (в SQL Server 2005), которое создает резервную копию каждые шесть (6) часов, имя файла резервной копии основывается на отметке времени, поэтому создается уникальное имя файла (dbname_yyyymmddhhmmss.bak). Теперь мой вопрос Как я узнаю, используя xp_cmdshell, если файлу три дня, и на основании моего скрипта я хочу удалить резервную копию (.bak), которой три дня. Может ли кто-нибудь там помочь мне, спасибо заранее. Ура!

Ответы [ 4 ]

4 голосов
/ 04 февраля 2009

Я согласен, что xp_cmdshell - не лучшая альтернатива для работы. Если вы похожи на меня и вам не нравятся планы обслуживания / trust, вы, вероятно, можете написать консольное приложение C #, где поддержка файловой системы намного сильнее, чем то, что вы можете делать в DOS (или использовать T-SQL для анализа выходных данных). xp_cmdshell 'DIR ...'), а затем запланируйте это в запланированной задаче Windows, чтобы вам не приходилось беспокоиться об эскалации привилегий из учетной записи службы / прокси-сервера SQL Server. Хотя все удобно складывать в одну упаковку, вам не всегда нужно, чтобы парень, который менял масло, делал вас пирогом с заварным кремом.

1 голос
/ 04 февраля 2009

Это не совсем ответ на ваши вопросы, но вы можете сделать это непосредственно в SqlServer 2005 с Планом обслуживания (Обозреватель объектов -> Управление -> Планы обслуживания).

Обычно я создаю один План обслуживания, включающий две задачи: одну «Задачу очистки обслуживания», которая удаляет старые резервные копии через x дней, после чего следует «Задача резервного копирования базы данных».

1 голос
/ 04 февраля 2009

На самом деле это не та задача, которая подходит для xp_cmdshell. Включение этой функции в SQL Server также имеет последствия для безопасности.

То, чего вы хотите добиться, будет гораздо лучше подходить для служб интеграции SQL Server (SSIS). Доступны компоненты, которые можно использовать для управления резервными копиями и их выполнения, а также компоненты «Задачи файловой системы», которые можно использовать для перемещения и удаления данных.

Вы можете использовать комбинацию Задачи Файловой Системы, переменных и выражений, чтобы извлечь имя файла резервной копии, извлечь компонент даты и определить, сколько лет файлу. Затем вы можете предпринять соответствующие действия с файлом.

Надеюсь, это поможет, но, пожалуйста, не стесняйтесь задавать дополнительные вопросы, если вам требуется дополнительная информация.

Cheers, Джон

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

Вы можете написать сборку .NET и вызвать ее из SQL Server. Было бы довольно легко написать это так, чтобы табличная функция возвращала все файлы в определенном каталоге с именем файла и датой файла.

...