2009-02-04 4 views
3

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

ответ

1

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

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

+0

Это точно правильный ответ. –

+0

Да, но он не включает filecopy с xp_cmdshell в соответствии с запросом ... – mbaechtold

+0

Привет, Tini, может быть, так, но ваше решение достигает цели задачи в исходном вопросе более эффективным и безопасным образом. не заставляй меня забрать тот момент, который я тебе назначил ;-) –

1

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

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

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

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

Cheers, Джон

0

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

4

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

Смежные вопросы