terça-feira, 5 de novembro de 2013

Estrutura BEGIN/END no PL/SQL

Para atualizações dinâmicas com select no PL/SQL são utilizados estruturas com BEGIN/END. Segue o formato padrão:


  1. -- Created on 05/11/2013 by BOAH
  2. DECLARE
  3.   -- Local variables here
  4.   i INTEGER;
  5. BEGIN
  6.   -- Test statements here
  7.   FOR i IN (SELECT * FROM torder) LOOP
  8.     UPDATE.... WHERE tu_id=i.id
  9.     DELETE....  WHERE tu_id=i.id
  10.     DBMS_OUTPUT.put_line('Atualizado: '|| i.id)--print result
  11.   END LOOP;
  12. END;

sexta-feira, 25 de outubro de 2013

Massacrando no Terminal do Linux

Durante minha experiência de trabalho na Levier, tive a oportunidade de trabalhar com uma profissional de ponta. A Karina é uma analista/programadora daquelas de tirar o chapéu, se eu não tivesse visto a velocidade com que ela opera um terminal linux provavelmente não acreditaria. Durante uma atualização via script sh (shell) no cliente fizemos um acompanhamento para evitar erros no cliente. Durante essa operação era feito um ssh para acessar o servidor de testes(IP.11) e produção(IP.9) e do servidor de produção um ssh para o servidor do cliente case houvesse problemas. O acompanhamento era feito por um team viewer direto na máquina do cliente enquanto ele rodava o script.
Durante a operação verificamos uma atualização falha devido a um script mais antigo ter sido rodado. Para corrigir a falha foi necessário comparar todos os arquivos de todas as pastas. No terminal shell do Linux isso pode ser feito rapidamente com um comando. Além das comparações de pastas foram comparados arquivos para verificar as diferenças usando comando diff, acesso mysql pelo terminal, e, além disso, alguns arquivos foram editados on line por editores como vi, nano e pico no próprio terminal. Outros arquivos foram copiados diretamente via scp, pois como haviam problemas o cliente liberou o acesso. Uma hora depois haviam sido corrigidos em torno de 35 arquivos. A base do cliente foi compactada pelo próprio terminal e copiada para o nosso servidor via scp. Segue, agora alguns dos comandos utilizados durante a operação.

Comparação de arquivos:
  1. diff arquivo1 arquivo2

Criar um arquivo com as diferenças:
  1. diff arquivo1 arquivo2 >> diferencas.txt

Busca por palavra chave em arquivos dentro de pastas e subpastas:
  1. grep -R 'palavra' pasta/ | more

Compara todas as pastas:
  1. diff -qrbw

O -bw ignora espaços em branco (white) e linhas (b).

Para usar o editor vi:
  1. vi nome_arquivo

Para usar o editor nano:
  1. nano nome_arquivo

Para usar o editor pico:
  1. pico nome_arquivo

Acesso ao Banco de Dados
  1. mysql -uroot -p

O -u indica o usuário e o root é o nome do usuário que pode ser substituído por outro usuário ativo. O -p é a senha é possivel colocar a senha diretamente ao lado do -p como é feito com o usuário mas como o comando ficará armazenado em history não é indicado.

Para mostrar as bases ativas:
  1. show database

Para acessar uma das bases:
  1. use nome_db

Para rodar um script sql diretamente no terminal linux antes de acessar a base:
  1. mysql nome_db --user=marcelo -p < script.sql

mysql import => também pode ser usado para importação

Para criar um back up do banco remoto:
  1. mysqldump nome_db > back_up.sql

Para acompanhar o mysqldump:
-c => gera sql (insert completo)
-t => no create
-d => esqueleto do banco

Outra opção seria:
  1. mysqldump -u[usuario] -p[senha] nome_db > back_up.sql

Compactar o arquivo
  1. tar -fvzx back_up.sql

Copia remota:
  1. scp root@200.195.161.50:/home/usuario/cliente/arquivo.tgz

O IP nesse caso era um IP externo. O inicio 200.195 indica uma máquina dentro do território brasileiro.





Outros comandos que utilizei para desenvolvimento:
Para baixar projeto do svn:
  1. svn co http://ip/pasta/projeto

Para evitar conflitos de desenvolvimento no Netbeans é necessário apagar arquivos do controle do svn:
  1. rm -rf pasta/projeto/nbproject

Mudar permissões de usuário para pasta e subpastas:
  1. chmod -R 777 pasta/

Para mudar o dono da pasta:
  1. chown -R novo_usuario pasta/