Hoje ao dar suporte em um pacote DTS 2000, me deparei com um problema inédito para mim. O pacote apresentava um VBScript que executava um programa desenvolvido em C++, recebendo alguns parâmetros. Este programa ,por sua vez, gerava um arquivo TXT que era consumido pelo pacote. O problema era que o a geração do TXT era tão rápida, que quando o passo de transformação acontecia o arquivo TXT ainda estava em uso pelo programa extrator. Outro fator que contribuía para o problema, era o fato que o VBScript não aguarda o fim da execução para ir para o próximo passo: assim que o Wscript.Shell executava o Run, o Script Task já estava finalizado.
Para minha surpresa, o VBScript (assim como o VB até a sua versão 6), não tem exatamente uma função de timer ou sleep, como temos em outras linguagens. Existem algumas funções e algoritmos que podem ser implementados para este fim, mas uma função nativa não existe. Então como resolver o problema? Antes da importação do arquivo, havia um passo de Sql Script Task que fazia um purge da tabela stage que recebia os dados antes de serem transferidos para a tabela final. Como estou estudando para a certificação, me lembrei de um comando aprendido no training kit da Microsoft Press, o comando WAITFOR.
O comando tem basicamente duas variações: WAITFOR DELAY e WAITFOR TIME.
O WAITFOR DELAY faz com que o escopo onde o comando está sendo executado fique em espera pelo tempo determinado. Por exemplo, se quisermos que o SQL SERVER espere por 5 segundos antes de executar os comandos subseqüentes, podemos implementar assim:
WAITFOR DELAY '00:00:05'
TRUNCATE TABLE tmp_logDiscador_stage
O WAITFOR TIME, faz com que o comando execute em um determinado momento. Por exemplo se queremos que um determinado comando execute as 22:30:
WAITFOR TIME '22:30'
TRUNCATE TABLE tmp_logDiscador_stage
Dentro do Script Task subseqüente ao passo onde o programa extrator era executado, inseri o WAIT FOR TIME, com um timer de 10 segundos. Problema resolvido, e mais um usuário feliz. Até a próxima!
Nenhum comentário:
Postar um comentário
Leave your comment here!