Páginas

3 de jan. de 2012

Qual é o melhor Banco de Dados: ORACLE ou SQL SERVER?


Olá pessoal,
  
     Estou escrevendo este artigo para fazer um comparativo e comentar sobre algumas vantagens e recursos dos 2 bancos de dados (BDs) mais utilizados nas grandes empresas brasileiras: Oracle e SQL Server, conforme pesquisa realizada em 2005 pelo Grupo Impacta (ver Figura 1). Embora a pesquisa de 2005 não seja tão recente, ela foi a mais confiável e concisa que eu encontrei para demonstrar a nossa realidade.

Figura 1 - BDs mais utilizados nas grandes empresas brasileiras (Grupo Impacta 2005)

     Conheço os 2 BDs que vou comentar neste artigo, porém conheço muito melhor o BD Oracle, por isso, gostaria que os profissionais que estiverem lendo este artigo, deixem comentários que possam acrescentar mais detalhes sobre o SQL Server e recursos que existam nele e que não tenham itens correspondentes no Oracle. 
   
     Seguem abaixo as principais características de cada BD:
   
SQL Server:
     - SGBD comercializado atualmente pela Microsoft. Nasceu em 1988, a partir de uma parceria entre Microsoft, Sybase e Aston-Tate;
     - Última versão (até a data da publicação deste artigo): SQL Server 2008;
     - Custo de uma licença da versão Enterprise por CPU: aprox. U$ 28.000 por CPU;
     - Pode ser instalado somente em SO Windows;
     - Possui ferramentas de administração com interface gráfica excelentes, que possibilitam um gerenciamento mais fácil e produtivo. Ex.: SQL Server Management Studio 2008;
     - Como toda ferramenta Microsoft, o BD SQL Server em geral, é mais fácil de administrar e de programar do que em Oracle;
     - 2 recursos que acho bastante interessantes em SQL Server e que não existem correspondência no Oracle, são:
           a) Divisão lógica de uma instância contendo vários BDs. No Oracle temos apenas vários schemas. O SQL Server possui uma camada extra onde cada BD pode conter vários usuários ou schemas. Desse modo, podemos organizar e gerenciar melhor schemas correlacionados, pertencentes a uma mesma aplicação, em um BD isolado dos demais schemas do BD;
           b)  Possui um schema do sistema chamado MODEL que serve como template para schemas de usuários. Se por exemplo, o schema MODEL tiver 2 tabelas e uma visão, ao criar um novo schema de usuário, ele será criado com estes mesmos objetos.

Oracle:
     -  SGBD comercializado atualmente pela Oracle, que nasceu em 1979 e que foi o primeiro BD relacional comercializado no mundo;
     - Última versão: Oracle Database 11G;
     - Custo de uma licença da versão Enterprise por CPU: U$ 47.500 (até 2 core);
     - Pode ser instalado em múltiplas plataformas desde 1985. Entre as principais, podemos citar: Unix, Linux, HP/UX, BIM AIX, IBM VMS e Windows;
     - Possui ferramentas de administração com interface gráfica menos amigáveis que as do SQL Server. Isso vem mudando e melhorando a cada nova versão do Oracle. No 10G, o Enterprise Manager possui muitos recursos e sua interface gráfica evoluiu muito, mas ainda acho que as ferramentas da Microsoft são mais intuitivas e mais produtivas. No Oracle o DBA costuma gerenciar muitas atividades do BD através de conjuntos de scripts;
     - Possui uma documentação muito bem detalhada, o que de início até assusta, mas permite que você conheça muito bem o BD e todos os seus recursos;
     - Possui mais recursos de segurança e performance que o SQL Server. Exemplos:
           a) Por padrão, o Oracle não commita transações. Isso permite que você desfaça as alterações de uma instrução SQL, caso ela tenha sido submetido erroneamente. No SQL, por padrão as intruções SQL são auto-commitadas, o que facilita o trabalho geral dos desenvolvedores, mas que dificulta o trabalho de recuperação por danos acidentais e o controle transacional;   
            b) Por padrão, o Oracle permite efetuar leitura consistente de dados. Esse recurso permite que um usuário "B" leia os dados de uma linha de uma tabela, no mesmo momento em que ela está sendo alterada por um usuário "A", sem que o usuário "B" visualize os dados que estão sendo alterados pelo "A". Não há bloqueio de leitura nem risco do usuário "B" visualizar os dados que ainda não foram commitados pelo usuário "A". No SQL Server esse não é o comportamento padrão do BD e para garantir a leitura consistente, o SGBD efetua bloqueios nas linhas acessadas/alteradas, portanto, desenvolvedores inexperientes poderão desenvolver aplicações com sérios problemas de performance no acesso concorrente, se não tiverem os conhecimentos necessários para contornar bloqueios de leitura aos dados;
           c) Arquitetura mais flexível e com mais recursos para otimização de performance. No Oracle é possível criar e gerenciar diversas estruturas de memória no BD. É possível, por exemplo, definir estruturas de armazenamento com tamanhos de blocos que podem variar de 2k à 32k. No SQL Server só é possível criar estruturas de armazenamento de 8k. Em Oracle, sistemas OLAP e índices em geral, são otimizados com tamanhos de blocos maiores (32k);
           d) Possui Packages, que são objetos que permitem (entre diversos outros benefícios) agrupar e encapsular código de stored procedures e funções;
           e) Possui Sequences (que já li em alguns blogs que será implementado no SQL Server 2012). Sequences possuem muito mais recursos do que colunas de auto-incremento, existentes em SQL Server, para definir valores de chaves-primárias. Um exemplo que posso citar é o cache de Sequences, que permite otimizar a performance de inserções que necessitam de um valor único para compor a chave-primária (ver artigo Otimizando SQL utilizando cache em sequences);
          f) O Oracle possui mais tipos de índices que o SQL Server. Índices permitem otimizar consultas em BD. 2 exemplos que vou citar no Oracle que não existem itens correspondentes no SQL Server são: índices BITMAP (que permitem otimizar consultas em colunas com baixa cardinalidade) e índices Baseados em função (que permitem indexar funções em colunas);
          g) Permite criar um ou mais processos chamados listeners, que são utilizados para conectar clientes remotos ao BD. Uma das vantagens de ter este tipo de processo é que a conexão ao BD pode ser distribuída entre diversos listeners, ou seja, podemos configurar múltiplos listeners para grupos menores de usuários, para ouvir em portas diferentes, com o objetivo de evitar gargalos de conexão ao BD quando temos muitos usuários (normalmente mais de 200 conexões por segundo) se conectando ao mesmo tempo;
         h) O Oracle possui um modelo de controle de acesso concorrente chamado multiversion read consistency (MVRC) que é um dos melhores modelos do mercado para permitir um controle de acesso concorrente com menor contenção de linhas e consequentemente, melhor performance quando há acesso concorrente aos dados. No Oracle o controle de bloqueios é realizado através da gravação de indicadores de bloqueio no nível das linhas, já no SQL Server existe um componente chamado Lock Manager para fazer o mesmo trabalho. No Lock Manager há uma sobrecarga maior para gerenciar uma grande qtde. de bloqueios, que consequentemente pode degradar a performance de uma grande quantidade de atualizações concorrentes.
   
    
CONCLUSÃO:
     A percepção que eu tenho é que a Microsoft tem um histórico de manter o foco na entrega de produtos mais fáceis de se utilizar e de gerenciar. A Oracle, por sua vez, tem foco na entrega de produtos quer priorizam a segurança e uma vasta gama de recursos.
  
     Ambos são ótimos BDs e cada um tem suas vantagens e desvantagens. O SQL Server tem a principal vantagem de ter um custo menor, aproximadamente metade do preço de um Oracle. No SGBD SQL Server, todas as funcionalidades (Ex.: Particionamento de tabelas) estão inclusas no seu valor de licenciamento inicial, enquanto que, no SGBD Oracle, é necessário adquirir licenças adicionais (chamadas Options), que tornam o produto da Oracle até 10 vezes mais caro que o produto da Microsoft. Outra vantagem do SQL Server é a facilidade de uso e gerenciamento. Eu, particularmente, quando comecei a trabalhar com Oracle, achava tudo muito difícil. As ferramentas do SQL Server eram mais produtivas e mais intuitivas.
     O Oracle tem um custo mais alto que o SQL Server e é mais difícil de administrar, porém é um produto que possui mais recursos de segurança e performance, que podem ser muito importantes e cruciais para empresas que possuem aplicações críticas e que possuem muitos dados e muitos usuários concorrentes, em geral.
   
    Para finalizar, vou responder agora a questão que é o título deste artigo: Qual é o melhor BD: Oracle ou SQL Server?
    R.: Bom... isso depende da necessidade!  De um modo geral, acredito que o SQL Server é mais indicado para pequenas e médias empresas ou pequenas e médias aplicações, devido ao custo menor desse BD e porque normalmente as aplicações que são executadas nestes ambientes possuem menor quantidade e complexidade de requisitos. O Oracle, por sua vez, é mais indicado para grandes empresas ou grandes aplicações, que possuem requisitos de negócios mais complexos e críticos, e que possuem grana para pagar pelos recursos de segurança e performance adicionais que este grande BD oferece!
  
     
Por hoje é só! Deixem seus comentários!

[]s
  
  

Referências:
   - http://www.linhadecodigo.com.br/artigo/2412/Análise-de-desempenho-entre-os-bancos-de-dados-SQL-Sever-x-Oracle.aspx
   - http://www.dba-oracle.com/t_sql_server_vs_oracle_terminology.htm
   - http://stackoverflow.com/questions/2322260/basic-differences-between-oracle-and-sql-server
   - http://pt.wikipedia.org/wiki/Oracle_(banco_de_dados)
   - http://msdn.microsoft.com/pt-br/library/ms175049.aspx
   - http://en.wikipedia.org/wiki/Microsoft_SQL_Server

33 comentários:

  1. Fabio,

    belo artigo. Parabéns!

    Abraços
    capin

    ResponderExcluir
  2. Muito bem escrito este artigo. Parabéns mesmo.
    Grande Abraço
    Diogo Cata Preta

    ResponderExcluir
  3. Fábio,

    Quando eu comecei a trabalhar na área de T.I. também comecei com o SQL Server 2000, 2005 e fiz formação MCM do SQL Server 2008 na Ka Solution.
    Trabalhei durante uns três anos como suporte e depois virei DBA e Desenvolvedor SQL Server, porém hoje trabalho apenas com Oracle e como você mesmo diz no começo é bem difícil entender a estrutura do Oracle e coisas do tipo, mas depois que aprende é até difícil de querer voltar á trabalhar com o SQL Server.
    Excelente artigo, parabéns.

    Abraços

    Sandro

    ResponderExcluir
  4. O pessoal comenta muito a questão do Cluster do Oracle, vc poderia comentar sobre o assunto Fábio, para que aqueles que não conhecem como eu não conheço, possam ter suas dúvidas sanadas.


    Dizem que o Cluster do Oracle é mais "poderoso" em relação ao SQL Server, em que ponto isso é verdade ou não?


    Grato.

    ResponderExcluir
    Respostas
    1. Selim, não conheço o cluster do SQL Server, então não posso comentar nada a respeito deste assunto. Quanto ao cluster da Oracle, sugiro a leitura do artigo http://victor-dba.blogspot.com.br/2012/05/oracle-clusterware-conceitos-e.html

      []s

      Excluir
  5. Muito bom mesmo, bem elaborado o assunto e um texto bem trabalhado.
    Ajudou bastante.

    Ednelson Amaral Guinho

    ResponderExcluir
    Respostas
    1. Obrigado Ednelson pelos comentários. É muito bom saber que os artigos estão ajudando muitos profissionais!

      []s

      Excluir
  6. Olá Fábio, bom tarde.

    Me chamo Marcelo Luiz e Gostaria de tirar uma dúvida (se possível) referente aos Comandos:

    Begin / Commit / Rollback.


    Semana passada eu estava fazendo testes em minha maquina com uma base de um cliente aqui da empresa, simulando todo o ambiente. Em nosso software trabalhamos com integração entre sistemas, e como não tinha a base de um dos sistemas resolvi excluir pelo comando Delete a integração entre eles. Feito isto percebi que os sistemas começaram a apresentar algumas falhas (é até comum excluirmos o caminho de integração pelo BD, porém neste caso creio que alguma tabela foi afetada ao ponto de apresentar tais erros), e ai vem a dúvida:


    - Há uma forma de eu voltar essas ações como DELETE, INSERT e UPDATE pelo Rollback no Oracle e no SQL SERVER?
    (Um colega de trabalho comentou que há como usar a clausula Begin no inicio do comando e efetiva-la caso o resultado seja o esperado, mais não soube explicar como é feito o uso, ele disse que sem isso o BD irá "commitar" de forma automatica o comando e assim não há como voltar).




    Grato pela atenção.

    ResponderExcluir
    Respostas
    1. Boa tarde Marcelo,

      Tanto no Oracle qto SQL Server toda vez que vc executa um comando COMMIT ou ROLLBACK, vc finaliza uma transação. O comando BEGIN não influencia muito no q vc está querendo aqui, ele apenas sinaliza o início de um bloco, que pode conter um ou muitos comandos e uma ou muitas transações.

      No SQL Server existe um COMMIT automático habilitado por padrão para cada comando que vc executar, portanto, cada instrução SQL no SQL Server corresponde a uma transação (mas isso pode ser alterado). Já no Oracle, por padrão, isso não existe. A transação só finaliza após fechar sessão ou após um COMMIT ou ROLLBACK.

      Se vc quer voltar o estado anterior de uma transação no Oracle, vc pode escolher entre usar Flashback, recuperar um backup ou ainda recuperar os dados a partir dos logs usando uma ferramenta como por exemplo o logminer. O caminho mais fácil, mas que nem sempre vc conseguirá usar, é o Flashback. Não dá para extender o assunto aqui, vc terá q pesquisar muita coisa para aprender a voltar isso (sugiro a leitura do artigo http://www.fabioprado.net/2012/12/recuperando-dados-com-flashback.html). Qto ao recuperar o estado anterior no SQL Server, acredito que só não exista a opção do Flashback, mas não sou especialista neste SGBD, portanto, sugiro que procure ajuda com profissionais que sejam especialistas em SQL Server, ok?

      []s

      Excluir
  7. Fabio, mudando de assunto, tu saberias me dizer como acessar um banco de dados DataFlex via ODBC?

    Bom criei um programa em Delphi que precisa acessar um banco DataFlex, porém baixei um driver trial no site da DataAccess e não funcionou, o Delphi não consegue se conectar nas tabelas.

    Agradeço muito.

    ResponderExcluir
    Respostas
    1. Renato, infelizmente não posso te ajudar! Nunca mexi com Dataflex e sei quase nada sobre Delphi!

      Excluir
  8. Ervaldo - teça feira - 30-julho-2013

    muito bom artigo

    ResponderExcluir
  9. Pessoal, 2 novidades boas p/ os 2 SGBDs:
    - No Oracle 12c, existe um novo recurso chamado Pluggable Database que é similar ao item "a) Divisão lógica de uma instância contendo vários BDs" que eu citei neste artigo ao falar do SQL Server. Este recurso é muito bom e irá facilitar e muito a vida dos DBAs que trabalham com Oracle! Até que enfim isso foi implementado no Oracle!
    - No SQL Server 2012 realmente foi implementado o uso de SEQUENCES (ver item "e) Possui Sequences" do SGBD Oracle neste artigo).

    []s

    ResponderExcluir
  10. Parabéns muito bom seu artigo...........

    ResponderExcluir
  11. Maria Rita de Cássia

    Gostei muito do seu artigo muito bem elaborado parabéns!!!

    ResponderExcluir
  12. Artigo elaborado de forma clara. Parabéns!

    ResponderExcluir
  13. Amigo pde me abrir a mente, me formei em SI alguns anos e fiquei parado, agora quero retornar ao mercado de trabalho e estou querendo fazer uma pós para me tornar um DBA Oracle, o que me diz sobre isso? ou pode me orientar como devo prosseguir? já que está na ativa e compreende minha necessidade....

    ResponderExcluir
    Respostas
    1. Leia o artigo http://www.fabioprado.net/2012/08/a-carreira-de-um-dba-requisitos.html. Lá nos comentários já respondi questões semelhantes.

      []s

      Excluir
  14. Fabio perdoando meu pouco conhecimento em banco me esclareça:
    1- Para praticar posso ter o SQL Server e o Oracle instalados na mesma máquina?
    2- Se desinstalar um SGBD todo banco criado por ele também é deletado?
    3 - Em um sistema ERP o banco de dados e a coisa mais importante?
    Valeu!

    ResponderExcluir
    Respostas
    1. Anônimo, seguem abaixo as respostas:
      1- Sim
      2- Depende do modo que vc fizer a desinstalação. Se for SQL Server vc consegue depois reutilizar os datafiles. Se for Oracle 12c, ao utilizar a arquitetura Multitenant vc também conseguirá!
      3- O BD é o motor de qq sistema. Os carros não funcionam sem um motor e existem motores de várias potências!

      Excluir
  15. Pessoal, vejam no slide 11 de uma pesquisa atual da FGV em mais de 6000 empresas, que o Oracle ainda se mantém na liderança em ambientes corporativos brasileiros: http://eaesp.fgvsp.br/sites/eaesp.fgvsp.br/files/arquivos/pesti-gvcia2015ppt.pdf.

    []s

    ResponderExcluir
  16. Fabio, estou pensando em fazer os Cursos Oracle da Impacta. O que você acha ?

    ResponderExcluir
    Respostas
    1. Deixe a sua pergunta no artigo http://www.fabioprado.net/2012/10/treinamentos-em-bancos-de-dados-oracle.html, ok?
      []s

      Excluir
  17. Teoricamente concordo com o artigo, mas vale ressaltar que na prática tudo muda. A questão não é "Qual é o melhor", mas qual se encaixa melhor para o negócio. Em vários cenários o SQL é mais aceitável, como por exemplo, ambiente de manufatura, assim como existem cenários em que o Oracle domina, sem chance para o SQL.
    De qualquer forma, parabéns pelo artigo.

    ResponderExcluir
  18. Parabéns, pelo artigo muito legal. sucesso ai Fábio

    ResponderExcluir
  19. Bom dia, Fábio!
    Inicialmente parabéns pelo artigo!
    Na sua opinião, qual a melhor sistema entre SQL server e Oracle serve, para coletar informações de clientes das redes sociais?
    A empresa é de médio porte.
    Obrigado

    ResponderExcluir
    Respostas
    1. Obrigado pelos comentários. Para dar uma resposta melhor eu precisava saber mais detalhes da sua aplicação. Sem muitos detalhes eu diria que para essa finalidade talvez um BD nao estruturado, NoSQL, seria melhor!
      []s

      Excluir