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

Как я могу сделать это с планом обслуживания

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

Я хочу заархивировать файл резервной копии ПОСЛЕ того, как резервное копирование было выполнено.

Есть ли способ сделать это в плане обслуживания? может быть, используя PowerShell?

РЕДАКТИРОВАТЬ:

У меня нет доступа к сетевому диску. просто думайте об этом как о другом жестком диске, а не о сервере. Технически это мой сопоставленный диск Z: \.

Объединив сказанное Ричардом и nray, запустите сценарий архивирования на основе 7zip в конце резервного копирования SQL (через задание агента SQL).

Вы можете использовать следующий CMD / пакетный файл в качестве справочника или даже адаптировать его по мере необходимости (это открытый исходный код - и винить в любых ошибках меня;)

Ziparcy представляет собой сценарий оболочки WINNT, который можно запланировать для создания / обновления зашифрованного zip / архива ваших файлов (и структуры каталогов).

Этот скрипт использует две другие бесплатные утилиты: 7-zip и wget.

Задание агента SQL может выполняться cmd.exe скрипты.

План обслуживания может выполнять задания агента SQL.

(Просто создайте задание агента без расписания.)

Сценарии %ProgramFiles%\7-Zip\7z.exe в сценарии, о котором упоминает @Richard, была моя первая мысль, но вы сказали, что транслируете резервную копию по сети.

Это означает, что вы хотите выполнить сжатие на файловом сервере, а не на сервере SQL (на котором работает SQLAgent), иначе вы будете передавать все эти данные обратно в% TEMP% на сервере SQL, чтобы сжать их, просто чтобы вернуть сжатые биты на файловый сервер.

Если это правда, тогда вы можете выполнить 7z.exe на файловом сервере в конце резервного копирования, возможно, одним из следующих способов:

  • psexec \\FILESERVER C:\7-Zip\7z.exe a todays-full-sql-backup.7z 200909201800_db.bak или что-то вроде того. Вам нужно определить имя файла .bak, который вы хотите как-то сжать.

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

  • Удаленное взаимодействие PowerShell 2, но это не то, что я пробовал - слишком ново.

Другие идеи - зачем нужен архив 7z? Это решение для сжатия каталога, в который выполняется резервное копирование? Есть ли у вас место для локального резервного копирования на сервере sql, 7zip файла и его отправки по сети?


Редактировать: Чтобы определить имя файла резервной копии можно немного схитрить. Вам не нужно знать все название. Вы можете попробовать что-то вроде «для каждого файла с именем 2009MMDD * _MyDatabaseName_DB.bak заархивируйте этот файл, скопируйте его в \ server \ share, проверьте наличие ошибок, удалите файл».

Вот самые голые кости НЕПРОВЕРЕННЫЙ сценарий оболочки, что-то вроде,

set DB_NAME=MyDatabaseName
set BAK_DIR=<wherever your backup gets created>
set NET_SHARE=\\Server\Share

:GET_NAME_DATE_PART
rem   #This depends entirely how Windows writes dates in your part of the world
rem   #if I were you I'd probably get some utility (now.exe?) to extract yyyymmdd 
rem   #from today's date. On our locale %date% looks like 2009-09-20
set YYYY=%date:~0,4%
set MM=%date:~5,2%
set DD=%date:~8,2%

:ARCHIVE_BAK_FILE
pushd "%BAK_DIR%"
for %%A in (%YYYY%%MM%%DD%*_%DB_NAME%_DB.BAK) do (
    "C:\Program Files\7-Zip\7z.exe" a %%A %%A.7z
    move %%A.7z "%NET_SHARE%\%%A.7z"
    rem   #CHECK FOR ERRORS MAYBE?
    del /q %%A
)
popd

В for оператор должен всегда находить только один файл в день для архивирования и удаления. Это фанк %date:~0,4% синтаксис называется переменными подстроками, если вы его раньше не видели - он находится в справке. Вы могли бы предпочесть forfiles.exe к for.