none
Descompactar arquivos através do SQL Server 2008 RRS feed

  • Pergunta

  • Boa tarde pessoal beleza?
    Estou precisando de uma força de  voces, estou recebendo alguns arquivos de usuarios e estão vindo zipados com o 7zip, estou querendo automarizar para descompactar e fazer a inserção no banco de dados.
    Estava procurando e achei a Proc XP_UnPackCab mas ela só funciona no SQL 2000 alguem sabe me diser por qual Proc ela foi substituida ou como consigo descompactar mesmo que utilizando o Winrar ou winzip.

    Valeu....
    terça-feira, 9 de fevereiro de 2010 17:28

Respostas

  • Pessoal Boa tarde...

    Agradeço a força de vocês consegui resolver da seguinte maneira:


    Utilizando o GZIP , um sistema de compactação por linha de comando originário do UNIX e bastante leve , prático e eficiente.

    Para “zipar”
    master..xp_cmdshell 'gzip d:\database\backup\database.bak'

    Vc pode utilizar a sintaxe -1 , compactação leve é rápida e -9 forte e mais lenta , sem estes parâmetros o sistema escolhe o melhor algoritmo para seu servidor
     
    Para “dezipar”
    master..xp_cmdshell 'gzip –d –f d:\database\backup\database.bak.gz'
    Onde –d = decompress e –f de force , sobrescreve arquivos com mesmo nome
     
    O gzip deve ficar na raiz do disco onde está os databases do servidor dependendo das variáveis de ambiente que seu servidor tem , talvez seja necessário passar o caminho completo do GZIP , exemplo d:\gzip.exe

    Quem me deu essa dica foi um Amigo Juarez Tomazeli.


    Muito obrigado pela força, espero que outras pessoas tambem possam utilizar.
    • Marcado como Resposta Maurício Vaz sexta-feira, 12 de fevereiro de 2010 15:49
    quinta-feira, 11 de fevereiro de 2010 19:02

Todas as Respostas

  • Maurício,

    Recentemente foi postado aqui no fórum uma dúvida parecida com o sua sobre a utilização do 7zip para compactação de arquivos, faça uma busca.

    Existem um artigo no SQL Server Central.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 9 de fevereiro de 2010 18:26
  • Boa tarde

    Acredito que o caminho mais simples seria você criar um Job para executar esta tarefa, mas pode ser feito pelo SQLCMD, etc.






    Espero ter ajudado
    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    terça-feira, 9 de fevereiro de 2010 18:30
  • Grande Juninior, obrigado.
    Vi algo sobre utilizando o SSIS, estou instalando aqui vamos ver se ____ vou procurar novamente aqui no forum...
    Obrigado!
    terça-feira, 9 de fevereiro de 2010 18:33
  • O SSIS é uma boa alternativa.
    Por ele você pode disparar as command line tools que em geral vem com os programas de Zip (o Winrar tem por ex), dai você usa em conjunto a FileSystem task, onde você consegue programar visualmente a copia, exclusão, etc, dos arquivos e pastas.

    Se precisar de um exemplo disso me escreva, dai eu monto e posto aqui no blog pra você.

    Obrigado,


    Rafael Veronezi
    Database Administrator | BI Analyst
    Twitter: ravero
    Blog: http://raver0.wordpress.com
    quarta-feira, 10 de fevereiro de 2010 03:51
  • Crie um ASSEMBLY e associe o mesmo a um SP, este ASSEMBLY será um DLL que descompacta o seu zip, então faça os seguintes passos:
    1 - Criar a DLL no visual Studio para descompactar o arquivo código vb.net (http://www.macoratti.net/vbn5_pck.htm)
    2 - Criar um assembly associando a DLL a uma procedure
         CREATE ASSEMBLY MEUZIP
          FROM 'C:\MINHAPASTA\MEUDESCOMPACTADOR.DLL'
    WITH PERMISSION_SET = SAFE
    3 - Criar a procedure associando ao assembly
        CREATE PROCEDURE SP_DESCOMPACTA AS EXTERNAL NAME MEUZIP.DESCOMPACTAR.




    pronto agora só da o exec na procedure e descompactar

    Obs. simplifiquei a explicação mais este é o caminho.
    Marquinhos Não esqueça de qualificar a resposta.
    • Sugerido como Resposta Fausto.Branco sexta-feira, 12 de fevereiro de 2010 11:43
    quarta-feira, 10 de fevereiro de 2010 11:02
  • Marquinhos,

    O Assembly é uma boa opção, ainda mais pela praticidade em utilizar o Visual Studio para se desenvolver a funcionalidade e depois integrar no SQL Server.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 10 de fevereiro de 2010 11:27
  • Pessoal Boa tarde...

    Agradeço a força de vocês consegui resolver da seguinte maneira:


    Utilizando o GZIP , um sistema de compactação por linha de comando originário do UNIX e bastante leve , prático e eficiente.

    Para “zipar”
    master..xp_cmdshell 'gzip d:\database\backup\database.bak'

    Vc pode utilizar a sintaxe -1 , compactação leve é rápida e -9 forte e mais lenta , sem estes parâmetros o sistema escolhe o melhor algoritmo para seu servidor
     
    Para “dezipar”
    master..xp_cmdshell 'gzip –d –f d:\database\backup\database.bak.gz'
    Onde –d = decompress e –f de force , sobrescreve arquivos com mesmo nome
     
    O gzip deve ficar na raiz do disco onde está os databases do servidor dependendo das variáveis de ambiente que seu servidor tem , talvez seja necessário passar o caminho completo do GZIP , exemplo d:\gzip.exe

    Quem me deu essa dica foi um Amigo Juarez Tomazeli.


    Muito obrigado pela força, espero que outras pessoas tambem possam utilizar.
    • Marcado como Resposta Maurício Vaz sexta-feira, 12 de fevereiro de 2010 15:49
    quinta-feira, 11 de fevereiro de 2010 19:02
  • Maurício, IMHO, eu prefiro a dica do Marquinhos44. CLR é muito mais seguro do que você deixar o cmdshell "aberto" no seu servidor, dependendo dos direitos que o usuário do AD que o SQLServer está usando pode deixar uma "porteira" aberta p/ executar qualquer comando DOS, qualquer um MESMO.
    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    sexta-feira, 12 de fevereiro de 2010 11:46
  • Bom Dia,

    Independente da solução eu veria com muita cautela, pois, "descompactar arquivos no SQL Server" pode não ser uma boa idéia. Em princípio, um servidor de banco de dados deve gravar e recuperar dados. A tarefa de descompactar arquivos não é pertinente a um SGBD. Penso que no caso do SQL Server 2008, fora as atividades normais de compilação de SPs, queries em paralelo, etc há mais uma agravante. Diversas features são CPU Intensive como a criptografia de dados ou de banco de dados (TDE), compactação de dados, sparse_columns, etc.

    A própria descompactação de arquivos também é CPU Intensive. Seria complicado de explicar que o SQL Server está fazendo mal suas funções básicas de gravar e recuperar dados porque está ocupado descompactando arquivos. Ainda que haja CPU para fazer bem as duas coisas, pensemos na questão da escalabilidade. Se a tarefa de descompactar arquivos está no SQL Server juntamente com as demais atividades, você terá que escalar o servidor de banco. Só que escalar um servidor de banco pode ser mais caro do que separar o processamento por exemplo. Caso as atividades de descompactação estivessem em outro lugar, você poderia colocar outros servidores para trabalhar essa tarefa.

    Essa solução pode servir para pequenas coisas ou trabalhos provisórios, mas não consideraria adotá-la para algo que precise "crescer". Você pode ter grandes problemas no futuro. Se a DLL está em CLR ? Por que não usar o código e montar um serviço de descompactação ? Você teria o mesmo "esforço" mas poderia mover esse serviço facilmente para outro servidor se quisesse.

    [ ]s,

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

    Encontrando índices não utilizados
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!945.entry


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 12 de fevereiro de 2010 14:05
  • Boa tarde,

    eu estou a tentar criar criar um job que comprima o backup com o 7-Zip. É possível fazer isso com esta DLL?

     

    Abraço

    terça-feira, 27 de abril de 2010 13:31