Social Icons

25 de mai. de 2012

Comparando schemas ou objetos de Bancos de Dados diferentes


Olá pessoal,

     No artigo de hoje vou apresentar uma funcionalidade muito útil do SQL Developer 3.1, que eu acredito que pouca gente conhece (pois não existia em versões anteriores da ferramenta), e que pode ajudar DBAs e/ou Desenvolvedores, a comparar a estrutura de objetos de schemas de Bancos de Dados distintos. Na versão em português do SQL Developer 3.1, esta funcionalidade chama-se Diferenças em Bancos de Dados e está localizada no menu Ferramentas. Ela é ótima para comparar objetos entre 2 ambientes de BD, tais como os ambientes de Desenvolvimento ou Homologação e o ambiente de Produção.

     Ao comparar os objetos a ferramenta exibe uma janela contendo o script DDL do objeto  na origem e no destino e destaca o que está diferente entre os 2 BDs. Para efetuar os testes, o único detalhe para que tudo funcione corretamente, é: conecte-se no BD destino sempre com o usuário  dono do(s) objeto(s) ou esquema a ser(em) comparado(s). Se você tentar se conectar no BD destino com o usuário SYS, por exemplo, você não verá os resultados da comparação. Além de não funcionar, a ferramenta não exibirá aviso algum e você poderá pensar que trata-se de um bug (eu passei por isso)!

    Para demonstrar a funcionalidade, seguiremos o passo-a-passo abaixo para comparar a estrutura da tabela EMPLOYEES, do schema HR, entre um BD de produção, chamado BD_PROD, e um BD de homologação, chamado BD_HOMOLOG:
 
Observações: Para seguir o passo-a-passo abaixo é necessário ter o schema HR instalado nos BDs de origem e destino. Para mais informações, leia o artigo Instalando o schema de exemplo HR.


Passo-a-passo

1- Clique no menu Ferramentas do SQL Developer (somente versão 3.1) e depois clique em Diferenças em Bancos de Dados;

2- Ao abrir a tela da Imagem 01, selecione nos campos Conexão de Origem Conexão de Destino, os nomes das conexões dos BDs que você deseja comparar e clique em seguida no botão Próximo;
   
Imagem 01 - Etapa 1 da comparação
  
3- Ao aparecer a tela da Imagem 02, deixe marcado somente o campo Tabelas e clique no botão Próximo;
   
Imagem 02 - Etapa 2 da comparação


4Ao aparecer a tela da Imagem 03, efetue os seguintes procedimentos:
     a) Campo Nome: digite o valor EMPLOYEES
     b) Campo Esquema: selecione o valor HR
     c) Campo Tipo: selecione o valor TABLE
     d) Clique no botão que contém a imagem do sinal  , para finalizar a seleção da tabela a ser comparada

Imagem 03  - Etapa 3 da comparação

5Ao aparecer a tela da Imagem 04 clique no botão Finalizar:



6- Pronto! A tela da Imagem 05 mostra os resultados da comparação. O painel esquerdo inferior exibe o script DDL do objeto na conexão de origem, e o painel direito inferior exibe o script DDL do objeto na conexão de destino. As linhas com destaque em lilás indicam as diferenças do objeto.


Imagem 05 - Resultados da comparação

 
Bom pessoal, por hoje é só!

[]s
  

18 de mai. de 2012

TCC com Datamart em Oracle Database


Olá pessoal,
 
     No artigo de hoje estou escrevendo para compartilhar o Trabalho de Conclusão de Curso (TCC) do amigo DBA Luciano Barros Pires, que propõe a criação de um ambiente de Data Mart para armazenar resumos sobre o Resultado das Eleições Gerais de 2006. Os parágrafos abaixo descrevem resumidamente o TCC e foram escritos pelo próprio Luciano. Eu participei fazendo apenas uma pequena revisão.
  
     Em todos os anos em que ocorrem Eleições, muitos pedidos são protocolados no Tribunal Regional Eleitoral do Estado de São Paulo (TRE-SP) requerendo-se os resultados das eleições. Tais pedidos têm, em sua maioria, como requerente, os candidatos aos pleitos das eleições de Deputado Federal, Deputado Estadual, Senador, Governador e Presidente. Cada um desses cargos têm seus vices ou suplentes, conforme o caso.

     Os requerentes sempre desejam saber quantos votos receberam em cada Zona Eleitoral (ZE), Seção Eleitoral (as salas) ou Local de Votação (as escolas). Com essas informações, o candidato pode montar uma mapa eleitoral com os seus resultados, para verificar onde obteve menos votos e saber onde terá que trabalhar para conseguir mais votos nas próximas eleições. É possível também, identificar eleitores por faixa etária, escolaridade etc.

     O volume de dados para obter todas essas informações é imenso e muito dificil de ser tratado, tanto que nesse TCC, a intenção era mostrar o resultado no Estado inteiro de SP, porém, para fins apenas didáticos, tive que mudá-lo para contemplar apenas uma ZE com muitos municípios.

     O trabalho aborda conceitos gerais sobre Bancos de Dados, Modelagem Entidade-Relacionamento, Modelagem Dimensional (ver imagem 1),  SQL, Data Warehouse, ETL e Datamart e seu objetivo era montar um  Datamart com informações, que até o momento de sua conclusão não estavam disponíveis, usando ferramentas livres desde o Sistema Operacional (SO) até a aplicação. Ele contempla a instalação e configuração dos seguintes softwares: SO Linux,  Banco de Dados Oracle Express Edition 10GR2 (com Oracle Apex) e o BROffice para manipulação dos dados.


Imagem 1: Tabelas fato e dimensões do Data Mart
   
    Para baixar o TCC clique no link TCC_oracle_resultados_eleicoes.zip. O arquivo está compactado e protegido com senha. Para recebê-la assine a newsletter que encontra-se no painel direito deste blog.
   
 
Boa leitura e até o próximo artigo!
  

8 de mai. de 2012

SQL padrão ANSI X padrão Oracle: Qual é mais rápido?


ATUALIZADO EM 12/03/2015


Olá pessoal,

     No artigo de hoje explicarei em detalhes a resposta de uma pergunta que é realizada por alunos em quase toda turma presencial de SQL ou SQL Tuning que eu leciono: Existe diferença de desempenho entre instruções SQL escritas no padrão ANSI ou no padrão Oracle? Antes de dar a resposta, vamos entender primeiro o que é SQL e o que são os padrões ANSI SQL e Oracle

     Resumindo, a Structured Query Language, mais conhecida pela sigla SQL, é uma linguagem que foi desenvolvida no início dos anos 70, pela IBM, para manipular bancos de dados relacionais. A partir de então, diversos fabricantes de Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDRs), como por exemplo a Oracle, começaram a desenvolver versões próprias da linguagem SQL (chamadas de dialetos ou extensões) e isso levou à necessidade da criação de uma linguagem SQL padronizada.

     Com a sua popularização e sucesso, organizações como o Instituto Americano Nacional de Padrões (ANSI) e a Organização Internacional de Padronização (ISO), resolveram padronizar a linguagem SQL. Em 1986 foi criado um padrão ANSI e em 1987 foi criado um padrão ISO. A partir de então, surgiram várias versões do padrão SQL, onde cada versão acrescenta novos comandos ou funcionalidades. Seguem abaixo alguns detalhes sobre algumas versões do padrão ANSI:
   
          - SQL-86
               - Primeira versão da linguagem, lançada em 1986, consiste basicamente na versão inicial da linguagem criada pela IBM.
   
          - SQL-92
              - Lançada em 1992, inclui novos recursos tais como tabelas temporárias, novas funções, expressões nomeadas, valores únicos, instrução CASE etc.

          - SQL:1999 (SQL3)
               - Lançada em 1999, foi a versão que teve mais recursos novos significativos, entre eles: a implementação de expressões regulares, recursos de orientação a objetos, queries recursivas, triggers, novos tipos de dados (boolean, LOB, array e outros), novos predicados etc.
  
          - SQL:2003
               - Lançada em 2003, inclui suporte básico ao padrão XML, sequências padronizadas, instrução MERGE, colunas com valores auto-incrementais etc.

          - SQL:2006:
               - Lançada em 2006, não inclui mudanças significativas para as funções e comandos SQL. Contempla basicamente a interação entre SQL e XML

 
     Atualmente, os principais fabricantes de SGBDRs, implementam em seus Bancos de Dados, além das instruções SQL referentes ao seu "dialeto", as instruções SQL do padrão ANSI mais recente. No caso de instruções SQL no SGBD Oracle, o que o pessoal costuma chamar de padrão Oracle, é o dialeto SQL da Oracle. As instruções dos dialetos normalmente surgem quando o fabricante necessita implementar recursos no SGBD, que ainda não possuem instruções correspondentes no padrão ANSI . 

     Um exemplo muito utilizado de comando SQL do dialeto Oracle, é a ligação OUTER JOIN, que o pessoal costuma escrever utilizando o caractere +. Vejam a diferença nos exemplos abaixo e na imagem 01:
   
          Instrução SQL com ligação representando LEFT JOIN utilizando o dialeto Oracle:

          SELECT      e.first_name || e.last_name NAME, 
                              D.DEPARTMENT_NAME 
          FROM         HR.EMPLOYEES E,
                              HR.DEPARTMENTS D
          WHERE      E.DEPARTMENT_ID = D.DEPARTMENT_ID (+);

   
          Instrução SQL com ligação representando LEFT JOIN utilizando o padrão ANSI:

          SELECT        E.FIRST_NAME || E.LAST_NAME NAME, 
                                D.DEPARTMENT_NAME 
          FROM          HR.EMPLOYEES E
          LEFT JOIN  HR.DEPARTMENTS D
                   ON      E.DEPARTMENT_ID = D.DEPARTMENT_ID;




Imagem 01 - Instrução SQL no padrão Oracle e padrão ANSI
  

     Agora que já sabemos o que é o padrão Oracle e o que é o padrão ANSI, vou comentar sobre alguns itens que me fazem defender o uso do padrão ANSI, antes de falar especificamente sobre a performance dos 2 padrões:

             1- Permite que você migre a aplicação contendo as instruções SQL para outro BD sem ter que fazer qualquer alteração;

             2- As ligações entre colunas são mais fáceis de serem identificadas, pois ficam fora da cláusula WHERE, separadas das condições de filtro. Essa característica pode muitas vezes facilitar manutenções futuras e evitar queries ruins. Já vi muita gente escrever queries no padrão Oracle e esquecer de incluir na cláusula WHERE a(s) coluna(s) necessária(s) para efetuar a ligação correta entre 2 tabelas. Neste caso, para evitar linhas duplicadas resultantes do produto cartesiano gerado pela falta da(s) coluna(s) necessária(s) na ligação, o desenvolvedor inclui a cláusula DISTINCT, "uma grande gambiarra para corrigir um erro de programação, que gera degradação da performance da query". Ligações no padrão ANSI forçam a inclusão de uma cláusula ON que obrigam a inclusão de uma ligação entre as tabelas;
   
     Bom... agora quanto à performance, de um modo geral, não há diferença entre o plano de execução gerado nos 2 padrões, até porque, internamente, muitas instruções escritas no padrão ANSI são convertidas para o dialeto Oracle, porém o padrão ANSI tem uma vantagem bastante conhecida, como por exemplo, permitir fazer um FULL OUTER JOIN com melhor performance e com menor complexidade do que a alternativa correspondente no dialeto Oracle. Nas Imagens 02 e 03 vemos uma instrução SQL equivalente e seu respectivo plano de execução nos padrões Oracle e ANSI. Nelas podemos observar (destacado em vermelho) que o custo da instrução SQL no padrão ANSI (7) é bem menor que o do dialeto Oracle (15) e isso implica em melhor desempenho na primeira.

Imagem 02 - Full Outer Join no dialeto Oracle

Imagem 03 - Full Outer Join no padrão ANSI

      O padrão ANSI é ensinado atualmente nos treinamentos oficiais de instruções SQL da Oracle e nos meus treinamentos Aprendendo SQL! Por todos os motivos que citei neste artigo, sugiro fortemente a utilização do padrão ANSI!
  
        
Bom pessoal, por hoje é só! Espero que tenham gostado!

[]s


Referências:
  - SQL: http://pt.wikipedia.org/wiki/SQL
  - ANSI SQL: http://allthingsoracle.com/ansi-sql/   
  - Padrão SQL e sua Evolução: http://www.ic.unicamp.br/~geovane/mo410-091/Ch05-PadraoSQL-art.pdf
  - História do Padrão SQL: http://www.altabooks.com.br/capitulos_amostra/sql_cap_amostra.pdf
  - Oracle Database SQL Reference: http://docs.oracle.com/cd/B12037_01/server.101/b10759/queries006.htm

  - Oracle Database SQL Language Reference 11GR2:  
   http://docs.oracle.com/cd/E11882_01/server.112/e10592/queries006.htm#i2054062
  - Execution Plans: Part 1 Finding plans     
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702 

2 de mai. de 2012

E-book gratuito sobre Arquitetura do Banco de Dados Oracle


Olá pessoal,

     No artigo de hoje compartilharei com vocês mais um livro eletrônico (E-book) gratuito sobre Bancos de Dados.

     O livro chama-se Expert Oracle Database Architecture, está na 2ª edição e contempla as versões 9i, 10g e 11g do Oracle. Ele é da editora Apress, foi escrito pelo mestre Thomas Kyte e está sendo compartilhado gratuitamente pela empresa Red Gate Software (o preço oficial do livro é U$41.99). Para baixar o e-Book, clique aqui para efetuar um cadastro no site da Red Gate e em seguida, obter acesso ao download.
  
   O livro aborda conceitos gerais sobre a arquitetura do Banco de Dados Oracle, incluindo: arquivos, estruturas de memória, processos, concorrência, bloqueios, transações, tabelas, índices, tipos de dados e muito mais.

   Recomendo fortemente a leitura deste livro, pois foi um dos mais completos e esclarecedores que eu já li.  Nele encontrei respostas para várias dúvidas que eu tinha.





Por hoje é só!

[]s
     
 

LINKS ÚTEIS

Total de visualizações de página

Seguidores

Meu One Drive (antigo Sky Drive)