Como posso fazer isso em um plano de manutenção?

1

Eu tenho um plano de manutenção bastante simples que faz um backup completo do meu banco de dados para um local de rede. funciona perfeitamente.

Eu estou querendo 7zip o arquivo de backup após o backup foi feito.

Existe uma maneira de fazer isso em um plano de manutenção? talvez usando o powershell?

EDITAR:

Eu não tenho acesso ao drive de rede. pense nisso como outro disco rígido, não como um servidor. é tecnicamente minha unidade Z: \ mapeada.

    
por Pure.Krome 20.09.2009 / 10:09

3 respostas

2

Um trabalho do SQL Agent pode executar cmd.exe scripts.

Um plano de manutenção pode executar trabalhos do SQL Agent.

(Basta criar o trabalho do agente sem agendar.)

    
por 20.09.2009 / 11:29
2

Combinando o que Richard e nray disseram, inicie um script de arquivamento baseado em 7zip no final do backup do SQL (por meio de um trabalho do SQL Agent).

Você pode usar o arquivo CMD / batch seguinte como referência ou mesmo adaptá-lo conforme necessário (é opensource - e culpar qualquer bug em mim;)

Ziparcy is a WINNT shell script that can be scheduled to create/update an encrypted zip/archive of your files (and directory structure).

This script leverages two other free utilities: 7-zip and wget.

    
por 02.12.2009 / 19:45
1

O script %ProgramFiles%-Zipz.exe em um script como as menções do @Richard foi meu primeiro pensamento, mas você disse que está fazendo o backup do seu backup pela rede.

Isso significa que você deseja executar a compactação no servidor de arquivos, não no SQL Server (onde o SQLAgent é executado); caso contrário, você estará transmitindo todos esses dados de volta para% TEMP% no servidor SQL para compactar apenas para retornar os bits compactados ao servidor de arquivos.

Se isso for verdade, suas opções são executar 7z.exe no servidor de arquivos no final do backup, talvez por um destes métodos:

  • psexec \FILESERVER C:-Zipz.exe a todays-full-sql-backup.7z 200909201800_db.bak ou algo parecido. Você precisa definir o nome do arquivo .bak que deseja compactar de alguma forma.

  • Uma tarefa agendada no servidor de arquivos, definida para ser executada depois que o backup tiver tempo suficiente para ser concluído.

  • Remoto do PowerShell 2, mas isso não é algo que eu tentei - muito novo.

Outras ideias - por que você precisa de um arquivo 7z? É uma solução para compactar o diretório que você está fazendo backup? Você tem espaço para fazer backup localmente no servidor sql, 7zip o arquivo e depois enviá-lo pela rede?

Editar: Para determinar o nome do arquivo de backup , você pode trapacear um pouco. Você não precisa saber o nome todo . Você pode tentar algo como "para cada arquivo chamado 2009MMDD * _MyDatabaseName_DB.bak, zip este arquivo, copie-o para \ server \ share, verifique se há erros, exclua o arquivo".

Aqui estão os ossos mais básicos de um script UNTESTED , algo como

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-Zipz.exe" a %%A %%A.7z
    move %%A.7z "%NET_SHARE%\%%A.7z"
    rem   #CHECK FOR ERRORS MAYBE?
    del /q %%A
)
popd

A instrução for deve sempre encontrar um arquivo por dia para zipar e excluir. Essa funky %date:~0,4% syntax é chamada de substrings variáveis, se você nunca viu antes - está na ajuda. Você pode preferir forfiles.exe a for .

    
por 20.09.2009 / 13:19