quinta-feira, 9 de maio de 2013

Recomeço

Boa tarde a todos!

Como vocês podem ver faz algum tempo que não tenho publicado artigos novos neste blog. Isto se deve ao fato de que a minha carreira deu uma grande virada nos últimos meses e eu estava em dedicação exclusiva tanto a carreira como a organizar alguns aspectos da minha vida particular. No entanto, nunca perdi a vontade de escrever e quero começar novamente a compartilhar artigos neste blog.

Para quem não sabe, eu fui admitido na Oracle como Consultor de Vendas e Arquiteto de Soluções. Nestes últimos meses tenho visitado diversas empresas para estudar seus ambientes e propor melhorias utilizando as tecnologias Oracle. Graças a este trabalho eu adquiri um know how muito grande tanto dos produtos que nós oferecemos como também das dificuldades que encontramos nas empresas com relação a TI.

O meu foco, portanto, de agora em diante será publicar artigos que tenham essa visão de solucionar os problemas mais frequentes de TI que tenho encontrado na vida prática, pois vejo que ainda existem muitas dúvidas com relação ao que a tecnologia pode oferecer para vocês.

O primeiro artigo que eu tenho em mente irá trazer para vocês alguns esclarecimentos sobre a tecnologia do Data Guard, a solução oficial da Oracle para continuidade de negócios do banco de dados, enfatizando um comparativo desta tecnologia com as demais soluções do mercado.

Além disso, pretendo na sequência destrinchar a Arquitetura de Máxima Disponibilidade (do inglês, MAA - Maximum Availability Architecture), mostrando os pontos principais desta arquitetura que promete eliminar todas as causas de downtime da TI de sua empresa.

Estarei também aceitando sugestões de temas nos comentários deste post.

Então fiquem ligados que muita coisa interessante está por vir.

Até breve!

quarta-feira, 15 de agosto de 2012

Optimizer Extensible Interface

Hoje convido a todos a ler o meu mais novo artigo publicado na Oracle Technology Network:

Extendendo o otimizador do oracle 11g para obter estatísticas de funções pipelined

Este artigo trata de um recurso avançado do Oracle para adicionar estatísticas a funções pipelined, que sem isso seriam apenas estimadas gerando planos nem sempre ótimos. Eu entendo que esta é uma feature muito interessante e pouco conhecida, e com alguns tweaks pode ser adaptada para obter estatísticas de qualquer objeto/coleção tratado com o operador TABLE.

Para maiores informações, recomendo a leitura do artigo do Adrian Billington abaixo:

setting cardinality for pipelined and table functions

E para quem quiser conhecer mais artigos técnicos publicados pela OTN, acessem o link abaixo:

http://www.oracle.com/technetwork/pt/articles/index.html

quarta-feira, 18 de julho de 2012

Despivotando

Recentemente eu comecei a participar nos forums da Oracle Technology Network para ajudar a comunidade (e também ser ajudado). Há pouco tempo atrás respondi uma pergunta interessante que gostaria de compartilhar com vocês, pois mostra o uso de uma nova feature do Oracle 11g: a clausula UNPIVOT do SELECT.

O objetivo da pergunta era, dado uma tabela com N colunas, mostrar através de uma query quais colunas tem valores nulos e em quais linhas. A principio uma solução simples porém trabalhosa, como apontado pelo OP, seria fazer uma query com diversas clausulas OR testando cada coluna isoladamente por NULL. Porém isso ainda envolveria um trabalho adicional para analisar o result set e identificar quais são as colunas nulas, possivelmente envolvendo uma infinidade de CASEs, ou ainda, substituindo o OR por UNION ALL e criando uma query monstruosa.

Pois bem, é aí que entra a mágica do UNPIVOT. Em uma única clausula podemos transformar todas as colunas separadas numa única coluna e varrer apenas esta coluna pelos valores nulos. Infelizmente não tenho o Oracle 11g disponível aqui para postar o resultado, mas encorajo vocês a executarem o código abaixo:

select * from (select rownum row_num, case when dbms_random.value < 0.5 then null else dbms_random.value end a, case when dbms_random.value < 0.5 then null else dbms_random.value end b, case when dbms_random.value < 0.5 then null else dbms_random.value end c, case when dbms_random.value < 0.5 then null else dbms_random.value end d, case when dbms_random.value < 0.5 then null else dbms_random.value end e from dual connect by level <= 10) unpivot include nulls (my_value for my_column in(a, b, c, d, e)) where my_value is null;


Para quem quiser acessar a pergunta original, basta seguir o link:

https://forums.oracle.com/forums/message.jspa?messageID=10434991

segunda-feira, 16 de julho de 2012

Publicações na Oracle Technology Network

Hoje tenho o prazer de divulgar a vocês o resultado positivo do meu último trabalho: a publicação de dois artigos meus na Oracle Technology Network. Estes artigos tratam basicamente da relação das trocas de contexto com a performance de procedimentos e os mecanismos para otimizá-las. Para quem quiser conferir, basta seguir os links abaixo:



Além disto, para quem tem vocação para a escrita e gostaria de compartilhar seu conhecimento nas tecnologias da Oracle, gostaria de fazer o convite para enviarem artigos para a OTN. Os detalhes estão no link abaixo:


Para finalizar, agradeço o apoio que me foi dado pela publicação destes artigos e fiquem ligados que em breve devo apresentar novos tópicos tanto neste blog como na OTN.

domingo, 24 de junho de 2012

Habilitando as setas no sqlplus para Linux

Hoje vou postar um truque rápido que me ajudou muito nos últimos dias. Quem já utilizou o sqlplus em Windows e depois migrou para Linux já deve ter percebido uma limitação irritante da versão para Linux que é a falta da usabilidade das setas do teclado, tanto para navegar na linha atual (setas direita e esquerda) como para buscar um comando no histórico (setas para cima e para baixo).

Pois bem, hoje vou apresentar um simples utilitário que "devolve" essa capacidade para o sqlplus. Ele é chamado de rlwrap.

Como estou usando uma variante do Ubuntu (o Lubuntu para ser mais exato), vou mostrar como instalá-lo utilizando o apt-get. Porém acredito que outras distribuições também devem ter pacotes disponíveis para ele (ex.: usando o yum no RHEL). Vamos a sua instalação:


paulo@sayuri:~$ sudo apt-get install rlwrap
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  rlwrap
<...>


Uma vez concluída a instalação vamos modificar o comando sqlplus para ser chamado pelo rlwrap:


paulo@sayuri:~$ alias sqlplus='rlwrap sqlplus'

Pronto! Agora basta invocar o sqlplus normalmente pela linha de comando e as setas estarão disponíveis.