none
Zipar Backup do SQL Server via DOS RRS feed

  • Pergunta

  • Pessoal boa tarde,

    Gostaria pedir ajuda aos demais colegas porque eu não estou a conseguir ZIPAR UM ARQUIVO.BAK.

    Então eu gostaria de executar um arquivo .bat que possa compactar o meu backup do dia.

    alquei sabe como desenvolver esse código?

    eu não sei e estou precisando galera!

    segunda-feira, 14 de junho de 2010 17:21

Todas as Respostas

  • Mdji

    Se vc usa o SQL 2008, vc pode usar a compressao nativa, caso contrario pode instalar um software de compressao (winzip, winrar...) e fazer um bat compactalo, segue um link com exemplo de linha de comando para o winzip

    http://www.memecode.com/docs/winzip.html

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    segunda-feira, 14 de junho de 2010 18:08
    Moderador
  • mdji,

    Isso mesmo, o Marcelo esta correto, alias em relação ao SQL Server 2008, eu escrevi um artigo para a Revista SQL Magazine, sobre compressão e compactação de dados, procure a edição 68, com certeza poderá ajudar.

    Agora se você deseja realmente utilizar um programa de compactação, recomendo o winzip, fazendo uso da xp_cmdshell você poderá realizar este tipo de procedimento.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    segunda-feira, 14 de junho de 2010 18:40
    Moderador
  • Boa Tarde,

    Minhas experiências com Winzip e xp_cmdshell não são boas. Quando usamos a xp_cmdshell ela utilizará área de memória do SQL Server (MemToLeave) que é bem restrita (256MB by Default). Mesmo havendo muito memória no Buffer Pool essa memória não é utilizada pela xp_cmdshell. Se for possível utilizar a BAT eu recomendo. Evite a xp_cmdshell.

    Quando tiramos a compactação da xp_cmdshell imediatamente diminui a quantidade de DUMPs de memória e instalabilidades no SQL Server como MOVEs inesperados. Claro que a xp_cmdshell sozinha não faz esse estrago todo, mas contribui significativamente.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Simulado para o Exame 70-433 - MCTS: Microsoft SQL Server 2008 - Database Development – Parte 03
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!1077.entry


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 14 de junho de 2010 19:38
  • Maia,

    Eu desconhecia esta situação que você identificou, utilizei muito pouco o XP_Cmdshell neste tipo de procedimento, é bom saber!!!!

    Em relação a área de memória(MenToLeave) eu não consigo entender o porque a Microsoft não aumenta um pouco esta limitação de 256 Mbs, pois se conseguir instânciar uma quantidade de informações superior este valor, seria o caso de tentar melhorar isso.

    Por outro lado, penso que pode ser um risco aumentar esta área, pois poderemos estar forçando uma sobrecarga no SQL Server para realizar o processamento do que esta alocado, sendo assim, derrubando o próprio serviço e correndo o risco de perda de dados.

    O que você acha?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    segunda-feira, 14 de junho de 2010 22:48
    Moderador
  • Além dos problemas citados pelo gustavo. No meu ambiente, quando mais de um job roda ao mesmo tempo compactando um arquivo através de um comando cmdshell que utiliza o fillzip, esses processos ficam agarrados no servidor. Quando isso acontece, tenho que logar no servidor e matar os processos do fillzip.

    Estava tentando criar um código em C# e fazer um deploy de uma procedure no SQL Server(CLR). Entretanto, não obtive sucesso.

    Caso alguém já tenha feito algo parecido, seria de grande ajuda.


    Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/ - Novo Post: Passo a passo para encontrar as querys mais demoradas do Banco de Dados
    segunda-feira, 14 de junho de 2010 22:52
  • Fabrício,

    Então, por isso a melhor solução seria trabalhar com compressão de dados ou backup compactado no SQL Server 2008, ao invês de ficar utilizando ferramentas e processos externos para realizar este tipo de compactação.

    Acredito que você esteja utilizando o SQL Server 2005!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    segunda-feira, 14 de junho de 2010 22:54
    Moderador
  • Ainda estou utilizando o SQL Server 2005 sim.

    A compressão de backup foi resolvida no sql server 2008, mas também tenho esse problema para compactar relatórios gerados via SSIS e SSRS.


    Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/ - Novo Post: Passo a passo para encontrar as querys mais demoradas do Banco de Dados
    terça-feira, 15 de junho de 2010 01:37
  • Pessoal bom dia,

    Quero agradecer a colaboração de todos, mais eu ainda não consegui resolver o meu problema o SQL Server que eu estou usar é o 2005.

    Alguem tem algum arquivo .BAT pronto.

    para que eu possa utilizar, uma observação pessoal é que todos os BKP do dia eu salvo com a data do dia...

    como seria mais ou menos o arquivo .BAT para fazer isso automatico? porque eu estou penssar criar esse arquivo e colocar no Agendador do Windows.

    terça-feira, 15 de junho de 2010 12:04
  • No meu ambiente utilizo a seguinte procedure para zipar um arquivo. O Filzip precisa estar instalado no caminho C:\Filzip\Filzip.exe.

     CREATE PROCEDURE [dbo].[stpCompacta_Arquivo] ( @Nm_Zip varchar(1000), @Nm_Arquivo varchar(1000), @Falhar tinyint)
    AS BEGIN

     DECLARE @Comando varchar(3000)

     SET @Comando = 'C:\Filzip\Filzip.exe -a -r "'+@Nm_Zip+'" "'+@Nm_Arquivo+'"'

     EXEC master..xp_cmdshell @Comando, no_output
     
     IF (OBJECT_ID('TempDB..#Diretorio') IS NOT NULL) DROP TABLE #Diretorio
     CREATE TABLE #Diretorio ( Arquivo varchar(5000) )

     DECLARE @Index tinyint
     SET @Index = Len(@Nm_Zip) - charIndex('\',Reverse(@Nm_Zip))

     DECLARE @Pasta varchar(1000)
     SET @Pasta = SubString(@Nm_Zip,1,@Index)
     
     SET @Comando = 'dir /b "'+@Pasta+'"'

     INSERT INTO #Diretorio
     EXEC Master..XP_CmdShell @Comando

     DECLARE @Zip varchar(1000)
     SET @Zip = SubString(@Nm_Zip,@Index+2,Len(@Nm_Zip))

     IF (NOT EXISTS (SELECT * FROM #Diretorio WHERE Arquivo = @Zip) AND @Falhar = 1) SELECT 1/0
     

     


    Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/
    segunda-feira, 5 de julho de 2010 12:56