У меня есть довольно простой план обслуживания, который делает полную резервную копию моей базы данных в сетевом местоположении. работает отлично.
Я хочу заархивировать файл резервной копии ПОСЛЕ того, как резервное копирование было выполнено.
Есть ли способ сделать это в плане обслуживания? может быть, используя 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
.