quarta-feira, 22 de setembro de 2010

Profissionais Windows x Linha de Comando

Interessante esse tema, para ser sincero nem acho que nem tenho condições de estar escrevendo algum artigo para Windows, pois não conheço quase nada, porem tenho vários colegas de profissão que são profissionais em Windows e trabalham com o Mesmo, só que dar uma ênfase aqui, estou falando de profissionais que trabalham com Servidores Windows.

Pois bem… não é difícil deduzir que sou um profissional especializado no Mundo Unix, HP-UX, Linux, AIX, etc, trabalho com consultoria, a maioria sendo cliente Totvs principalmente aplicado ao sistema Logix, e 99% das consultoria que faço é baseado em sistemas Unix, aconteceu que esses dias um cliente que tem a base em Windows Server me contatou para fazer um serviço em Banco de Dados Informix.

Bom aceitei o desafio a principio somente auxiliando o responsável pelo sistema, e o auxilio foi no sentido de ajudar a criar uma instancia, dbspaces, chunks, etc,… até ai tudo bem, mas ai me deparei com um problema interessante, para entendermos melhor o problema vou explicar como faço no Unix para resolver isso.

Quando se cria a instancia no informix o IDS já cria os logical logs dentro do rootdbs, então geralmente, não sendo uma regra, por questão de organização até e performance a gente cria um dbspace e um chunk somente para o logical log:

# onspaces –a –d llog –p /dblog/llog.000 –o 0 –s 1000106

e no windows não é diferente:

# onspaces –a –d llog –p C:\IFMXDATA\tst\llog.000 –o 0 –s 1000212

muito bem, depois a gente da uma organizada em tudo isso, primeiro criando mais 3 arquivos de logs para o dbspace llog:

# onparams –a –d llog

e para o Windows o mesmo procedimento

depois de criado os 3 logs, então movemos o ponto do logical log e do check point ate os logs que foram criados.

# onmode –l

# onmode –c

muito bem, movidos os ponteiros, entra aqui uma brincadeira em shell script que utilizo muito para simplificar as tarefas, nesse caso para remover os logs do rootdbs

# for i in `seq 6`
do
onparams –d –l $i –y
done

esse comando simplesmente remove os 6 primeiros logical logs que estão no rootdbs, simplifica não…

pois bem…

depois comento isso para o windows,

feito isso no linux, o normal é a gente encher agora o chunk criado para os logs de logs, o comando ja passei acima , porem já pensou um chunk de 500.000 paginas, sendo que cada logical log tem o tamanho de 5000 paginas, a gente teria que executar o comando 100 vezes. é ai que entra a linha de comando novamente:

um exemplo bem simples e rápido

while true
do
onparams –a –d llog
done;

na era que começar a dar a mensagem na console de que o chunk esta cheio, simplesmente aperte o ctrl-c para cancelar a execução do script…

um exemplo mais elaborado

x=1
while [ $x != 0 ]
do
onparams –a –d llog
x=`onstat –d |grep tstlog | awk ‘{print $6}’`
done

esse script já é mais elaborado, na hora que a coluna do onstat free chegar a 0 quer dizer que ja encheu os logs, então o valor do x vai retornar 0 ao while fazendo que o mesmo aborte o código.

magico não , isso é o mundo linux.

Porem retornando ao tema Windows, no atendimento a esse cliente, fiquei pensando e agora como vamos encher o log…

uma maneira seria fazer na unha, seta para cima e enter… ate encher o log ,mas o Windows não? tem como automatizar a tarefa… ? postei em alguns blog essa duvida, e no máximo o que me responderam foi , cria um arquivo .bat e insira um monte de vez o comando e depois rode o arquivo de lote, sinceramente  acho que foi a pior resposta que ouvi até hoje, porem continuei minha pesquisa no google por dias, e não consegui achar a solução desse problema, e também consultei alguns especialistas em plataforma Microsoft.

ontem instalando um servidor windows para teste, fiquei ainda pensando … caramba será que não tem maneira de automatizar isso mesmo?

foi ai que para minha surpresa resolvi digitar um for la no prompt do windows, pode parecer engraçado, mas o windows tem um for, me desculpem os usuários de windows que conhecem, pois eu nao conhecia, e resolvi ler o help do FOR e para minha surpresa, resolvi o primeiro problema…..

sim removi os 6 primeiros logs no windows com o comando FOR olhem só….

FOR /L %i IN (1,1,6) DO onparams –d –l %i –y

magico também, risos.

ai tinha o segundo problema que na verdade já tinha resolvido o segundo o com o primeiro ficando assim:

FOR /L %i IN (1,1,97) DO onparams –a –l llog

problema resolvido, o windows server até que foi interessante nesse caso, resolver um problema via prompt, confesso que para mim foi novidade sim, porem conhecimento adquirido.

Mas gostaria de destacar a não resolução desse problema pelos profissionais do Windows, eles mesmos não conhecem isso, so sabem mexer em mouse? mau costume……

abraços a todos e qualquer duvida estou a disposição.

2 comentários:

  1. Olá Amilcar!
    Legal este seu post, realmente este é um problema para quem está "mal acostumado" com as shells unix.

    Já passei por isso e nas raras vezes que preciso, faço um "hack" no windows um pouco diferente, coisa de preguiçoso na verdade, rs.
    Eu trago a shell do unix para o Windows!
    O nome do utilitário é cygwin (http://www.cygwin.com/) e é uma "mão na roda' .
    Normalmente faço uma copia da instalação pequena e básica dele e que já resolve meu problema.

    Não tenho certeza, mas se não me engano dá para fazer um esquema com ele onde você copia para um diretório qualquer, sua shell unix, a dll do cygwin e o binário do bash (versão para cygwin) e você roda sua shell sem problemas (limitado aos recursos do bash, claro).
    Mas honestamente, nunca testei desta forma... mas já li relatos na net que funciona!

    Abraço
    Cesar

    ResponderExcluir
  2. Ola Cesar, agradecido pelo comentario, achei muito interessante o seu comentario, com certeza assim que sobrar um tempo, vou estar testando cynwin, nao conhecia.

    abraços.

    ResponderExcluir