SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
Fernando Ike de Oliveira
Antes de Tudo...

●    Migrar projetos são difícies

●    Compatilidade e compatibilidade por camadas são uma ilusão 

●    Migrar usando ferramentas mágicas não são tão mágicas assim

●    Tem um bom suporte contratado para ajudar na migração.

● Sim, migrar é doloroso, sacrificante, difícil. Porém pode ser bem 
compensador.
Boas práticas

●    Evitar utilizar extenções específicas de um SGBD.

●    Utilizar ao máximo a sintaxe padrão ANSI SQL.

● Evite o uso de mixed case (notação Húngara), use minúsculas para 
nomes de objetos e maiúsculas para palavras reservadas.

●    Documentar rigorosamente todo o código armazenado no banco.

●    Utilizar tipos de dados binários somente quando necessário.
Pensando em migrar...

● Leia atentamente toda a documentação dos SGBDs e identifique 
diferenças na sintaxe e funcionalidades utilizadas.

●    Realizar Backup antes de realizar qualquer teste.

●    Realizar testes em um servidor de teste.

●    Verificar codificação de caracteres e localização.

● Verificar espaço em disco disponível, o espaço ocupado pelo banco 
pode variar de SGBD para SGBD.
Durante a migração
●    Registre todo o processo.

●    Migre primeiros sistemas não críticos.

●    Migre primeiro o que é mais simples como tabelas e índices.

● Se possível,  gere scripts em texto puro com todo DDL e DML
 .
● Importe tabelas, dados e constraints separadamente.




●    Habilitar e checar logs durante exportações e importações.

●    Migre primeiro o que é mais simples como tabelas e índices.

●    Homologue cada etapa antes de prosseguir.
Oracle != PostgreSQL
Tipos de dados
●   varchar2                  → varchar, text

●   number                    → numeric, bigint, int, smallint, double
                                precision

●   clob, long                → varchar, text

●   nchar, nvarchar2, nclob   → varchar, text

●   binary_float/binary_double → real/double precision

●   blob, raw, long raw       → bytea (migração adicional)

●   date                      → date, timestamp
Oracle != PostgreSQL
JOIN
● FROM t1, t2                              > FROM t1 LEFT OUTER JOIN t2
      WHERE t1.id = t2.id(+)         ON t1.id = t2.id

Funções:
● DECODE (sexo, 'M',                     >  CASE WHEN sexo = 'M' then 'Masculino'
      'Masculino,'F','Feminino')        WHEN sexo = 'F' then 'Feminino' END

●NVL                                      > COALESCE
● sysdate, systimestamp                   > current_date, current_timestamp, localtimestamp

UNION
 MINUS
●                                          > EXCEPT

Clausula LIMIT e OFSET:
 ROWNUM, ROWID
●                                       > LIMIT, OFFSET, OID
Oracle != PostgreSQL
Localização

         NLS CALENDAR                 —
         NLS COMP                     lc collate = ’pt_BR’
         NLS CURRENCY                 lc monetary
         NLS DATE FORMAT              DateStyle
         NLS DATE LANGUAGE             lc messages, lc time (8.4?)
         NLS NCHAR                   —
         NLS NUMERIC CHARACTERS      lc numeric
         NLS SORT                    lc collate
         NLS TERRITORY                LANG, lc *
         NLS LANG, NLS LANGUAGE      LANG, client encoding
SQL
● Catálogo de sistema SYS e SYSTEM  do Oracle são equivalentes ao 
pg_catalog e information_schema no PostgreSQL.

 PostgreSQL é Sensitive Case. Todos nomes de objetos com letras 
●


maiúsculas devem estar entre aspas.

● O PostgreSQL não necessita do uso da tabela “DUAL”. Pode ser 
criada uma para manter a compatibilidade.

● Implementação de hierarquia entre tabelas, XML, Database Link e 
outras funções avançadas possuem diferenças.

● O PostgreSQL não possui  visões materializadas. No entanto é 
possível contornar este problema com gatilhos e funções.
PL/SQL X PLpg/SQL

● Ambos possuem PL/Java, funções em C dentro do banco. No PostgreSQL 
há outras linguagens como PL/Perl, PL/Pyhton, etc.

● Não existem procedures no PostgreSQL, no entanto uma função pode ser 
utilizada retornando o tipo VOID.

● Não existem valores DEFAULT para parâmetos recebidos no PL/SQL, no 
entanto é possível utilizar sobrecarga de funções.

● Não existem Packages no PostgreSQL, no entanto os objetos podem ser 
organizados num esquema separado. Variáveis de nível de pacote podem 
ser armazenadas em tabelas temporárias mantidas durante a sessão.
PL/SQL X PLpg/SQL



● Cursores não são necessários no PostgreSQL. A consulta deve ser 
declarada junto a cláusula FOR do laço.

● O corpo da função deve estar delimitado com marcas de dólar no 
PostgreSQL

● Os gatilhos no PostgreSQL chamam uma e apenas uma função, não 
havendo código em seu corpo.
Armazenamento
● O conceito de Espaço de Tabelas no PostgreSQL se refere a uma pasta que 
é gerenciada pelo SGBD. Não é possível definir DataFiles específicos. A 
única influência sobre os DataFiles é especificar o formato de 
armazenamento nas colunas com valores grandes.

● O PostgreSQL não tem implementado explicitamente o conceito de 
extensões e segmentos.

● Ainda não é possível especificar o local de armazenamento separado para 
áreas temporárias (para operações de Rollback, Ordenação, Indexação, etc). 
Estas áreas ficam todas no mesmo local que o catálogo do sistema.
Backup
● Conceito de Redo no Oracle é semelhante ao conceito de WAL no 
PostgreSQL.

●    Conceito de DUMP é semelhante em ambos.

●    DUMP no PostgreSQL permite redirecionamento via pipe. 

●    Conceito de cópia de arquivos de dados é semelhante em ambos.

●    Conceito de Stand By é semelhante em ambos.

●    O PostgreSQL não possui uma ferramenta de FlashBack.

●    O PostgreSQL não possui ferramenta nativa no estilo do RMAN.
Segurança

●    GRANT e REVOKE tem funcionalidade semelhante.

● SCHEMAS não são automaticamente atrelados ao usuário no PostgreSQL. 
Eles precisam ser criados manualmente. Depois disso se comporta de maneira 
parecida. No entanto um esquema pode possuir objetos de outro dono se ele 
tiver as permissões necessárias para isso.

● O ROLE “connect” no Oracle é realizado através do pg_hba.conf no 
PostgreSQL.
Segurança

● O ROLE “resource” no Oracle é semelhante a possuir privilégio para criar 
objetos num esquema do PostgreSQL.

●    O Role DBA é no Oracle é semelhante ao superusuário do PostgreSQL.

● O Role SYS é no Oracle é semelhante ao usuário POSTGRES no 
PostgreSQL.

* Os GROUPs foram convertidos  para ROLEs  na versão 8.1
w
Clusters

●    Um cluster não é somente um Oracle RAC.

●    Similar ao RAC é o PgCluster

●    Stand by em ambos são equivalente

●    Não tem ainda um similar ao Oracle Dataguard (em desenvolvimento)

●    Pool de conexões usando PgPool{­2} e PgBouncer
DBlink


●    Conecta em outros instâncias PostgreSQL.

● Presente como extensão no diretório contrib do código­fonte ou como um 
pacote separado nas principais distribuições Linux.

●    Possível inserir, alterar, remover qualquer informação remota
Lógica da Migração - Ora2pg
Ora2pg
●    Feito em PERL. Depende dos módulos DBI, DBD::Pg e DBD::Oracle.

● Importa dados e definições do Oracle para um arquivo texto ou direto 
para um banco no PostgreSQL.

● Suporte a extração de DDL de tabelas, indices, constraints, views, 
triggers, procedures, functions, packages e grants.

●    Dados podem ser exportados no formato INSERT ou COPY.
Ora2pg

● Pode ser selecionado um esquema ou tabela específico para ser 
importado. 

●    Corrige nomes de tipos de dados diferentes.

●    Extrai o código do corpo de triggers numa função.

●    Algumas funções com nome diferente precisam.

 Funções em PL/SQL geralmente precisam de um pouco de edição 
●


manual.

●    Funções SQL diferentes precisam de edição manual.
DBI-Link
 SQL 2003/MED

­ Pl/Perl Untrusted.

­ DBI/DBD.

­  Mapeamento  de  tabelas  remotas  utilizando  Views  +  Rules  + 
Triggers.

­  Acesso  Transparente  a  tabelas  de  Banco  de  Dados  Remotos 
(Oracle, MSSQL, MySQL).
Orafce


●    Um grande conjunto de funções compatíveis com Oracle

●    Disponíveis para as principais distribuições

●    Fácil instalação e uso

●    Documentação: 
    ­ http://www.postgres.cz/index.php/Oracle_functionality_(en)
Pg::snapshot


●    Desenvolvido em Perl e PL/Perl

●    Fornece visões materializadas

●    Os dados podem ser do Oracle ou PostgreSQL
Postgres Plus


●    Um PostgreSQL modificado pela EnterpriseDB

●    É incrementado com extensões SQL adotadas pela Oracle 

●    Produto pago
Como você pode contribuir


●    Porte de projetos são fonte de idéias para novas funções

●  Registre  suas  experiências  em  migração  e  disponibileze  na 
internet (Wiki).

●    Contribuia com orafce e ora2pg.

●    Contribua com Pl/pgSQL e PL/Java.
Referências

Oracle ­ http://www.oracle.com
PostgreSQL ­ http://www.postgresql.org
Migração ­
http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#Oracle

Ora2Pg ­ http://www.samse.fr/GPL/ora2pg/ora2pg.html 
DBI­Link ­ http://pgfoundry.org/projects/dbi­link/ 
História de horror de Migração para PostgreSQL ­
 http://www.frankhilliard.com/horrorstory.cfm 
Orafce ­ http://pgfoundry.org/projects/orafce/
EnterpriseDB ­ http://www.enterprisedb.com
Pg::Snapshot ­ http://pgfoundry.org/projects/snapshot/
Outras referências



●    Oracle: Ask Tom: http://asktom.oracle.com/

●    PostgreSQL: Ask Tom brazuca:
     http://www.midstorm.org/~telles
TODO


●   Diferenças do PL/Java

●   Migrar a palestra para Latex

●   Diferenças de Cluster

●   Exemplos
Contatos


Fernando Ike
<fernando.ike@gmail.com>

Más contenido relacionado

La actualidad más candente

La actualidad más candente (6)

Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
CouchDB Presentation
CouchDB PresentationCouchDB Presentation
CouchDB Presentation
 
Jpa, hibernate and jpql
Jpa, hibernate and jpqlJpa, hibernate and jpql
Jpa, hibernate and jpql
 
JPA com Hibernate
JPA com HibernateJPA com Hibernate
JPA com Hibernate
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 

Similar a Oracle para PostgreSQL: Conseguir migrar e não parar UTI

Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universoelliando dias
 
Solisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlSolisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlLeonardo Medeiros Martins
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLFernando Ike
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código abertoSuissa
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFabio Telles Rodriguez
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLpgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLRaphael Silva
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 

Similar a Oracle para PostgreSQL: Conseguir migrar e não parar UTI (20)

Oracle T Opgsql
Oracle T OpgsqlOracle T Opgsql
Oracle T Opgsql
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
Solisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlSolisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para Postgresql
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQL
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Postgres nuvens
Postgres nuvensPostgres nuvens
Postgres nuvens
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISL
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLpgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
 
Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 

Más de Fernando Ike

Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro ServiçosFernando Ike
 
(Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? (Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? Fernando Ike
 
Containers and Databases
Containers and DatabasesContainers and Databases
Containers and DatabasesFernando Ike
 
Infraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsInfraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsFernando Ike
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemFernando Ike
 
DevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyDevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyFernando Ike
 
Blameless: A culpa não é sua
Blameless: A culpa não é suaBlameless: A culpa não é sua
Blameless: A culpa não é suaFernando Ike
 
DevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIDevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIFernando Ike
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm ClusterFernando Ike
 
DevOps - Por onde começar
DevOps - Por onde começarDevOps - Por onde começar
DevOps - Por onde começarFernando Ike
 
DevOps Anti-Patterns
DevOps Anti-PatternsDevOps Anti-Patterns
DevOps Anti-PatternsFernando Ike
 
A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? Fernando Ike
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Akamai Cloud Security
Akamai Cloud SecurityAkamai Cloud Security
Akamai Cloud SecurityFernando Ike
 
Management 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeManagement 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeFernando Ike
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Docker e postgresql
Docker e postgresqlDocker e postgresql
Docker e postgresqlFernando Ike
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
Banco caiu! E a gora?
Banco caiu! E a gora?Banco caiu! E a gora?
Banco caiu! E a gora?Fernando Ike
 

Más de Fernando Ike (20)

Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro Serviços
 
(Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? (Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora?
 
Containers and Databases
Containers and DatabasesContainers and Databases
Containers and Databases
 
Infraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsInfraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile Trends
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvem
 
DevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyDevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus Party
 
Blameless: A culpa não é sua
Blameless: A culpa não é suaBlameless: A culpa não é sua
Blameless: A culpa não é sua
 
DevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIDevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TI
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm Cluster
 
DevOps - Por onde começar
DevOps - Por onde começarDevOps - Por onde começar
DevOps - Por onde começar
 
DevOps Anti-Patterns
DevOps Anti-PatternsDevOps Anti-Patterns
DevOps Anti-Patterns
 
A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu?
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Akamai Cloud Security
Akamai Cloud SecurityAkamai Cloud Security
Akamai Cloud Security
 
Management 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeManagement 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidade
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Devops
DevopsDevops
Devops
 
Docker e postgresql
Docker e postgresqlDocker e postgresql
Docker e postgresql
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Banco caiu! E a gora?
Banco caiu! E a gora?Banco caiu! E a gora?
Banco caiu! E a gora?
 

Oracle para PostgreSQL: Conseguir migrar e não parar UTI