SQL para DBAs

Quem me conhece, sabe que eu sempre implico com os vícios dos DBAs que iniciam a sua carreira no desenvolvimento. Mas os DBAs que começam como sysadmin também tem seus vícios. Um dos pontos fracos costuma ser a baixa familiaridade com o SQL.

Bom, vou mostrar aqui um alguns exemplos de SQLs que tive que desenvolver recentemente. Alguns foram feitos para ajudar a equipe de desenvolvimento, outros para resolverem problemas de performance e tem um que foi feito por solicitação dos  sysadmins. Na verdade, eu deveria mesmo é organizar estes scripts de uma forma lógica, mas são coisas realmente simples para merecerem tanto coidado…

Então chega de blá, blá, blá e vamos a eles:

  • Conversão de NOT IN em NOT EXISTS numa carga de dados. É muito comum você precisar carregar periodicamente uma tabela com os dados de uma outra. Isso ocorre muito na integração entre sistemas. Eu sei, eu sei, usar visões materializadas pode ser um processo bem mais inteligente. Infelizmente nem sempre estas decisões estão na nossa mão. Vejamos o caso:
Você tem de carregar a tabela2, com os dados da tabela1 sem repetir os dados que já estejam lá. Utilizar o NOT IN é bem intuitivo, mas quando a tabela2 é grande, se torna um pesadelo, pois a subconsulta uma vez para cada registro na tabela1 e não consegue utilizar índices para isso. Um verdadeiro pesadelo. Então vamos a solução clássica:
  • Pegar apenas o primeiro e o último nome de um campo com nome completo:
  • Limpar caracteres inválidos de telefones. Sim, tem muita gente que gosta de armazenar telefones, CEP, RG, CPF com caracteres não numéricos. Não é o correto, mas muita gente faz. Então, para fazer uma limpeza, vamos utilizar um pouco de expressões regulares, que são pouco exploradas por muitos DBAs e até mesmo desenvolvedores:
  • Selecionar apenas e-mails válidos. Eu sei, a validação deveria ser feita na carga dos dados, mas nem sempre acontece. Aqui, mais um caso clássico de uso de expressões regulares:
  • Agora uma forma de saber se o número de sessões num nó do Oracle RAC estão relativamente bem balanceadas. Aqui estou utilizando funções de janelas (que já abordamos aqui antes, mas com o Postgres), algo muito bacana, utilizado exaustivamente em consultas complexas com BI:
Aqui, um valor entre digamos 0,9 e 1,1 para o campo VAR significa que o nó está relativamente bem balanceado. Esta consulta foi utilizada para uma ferramenta de monitoramento do Oracle RAC.

OBS: Os scripts aqui foram escritos e testados em Oracle 10g e 11g, sorry.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *