O documento fornece diretrizes e considerações sobre a migração de bancos de dados Oracle para PostgreSQL, abordando diferenças de sintaxe, tipos de dados, funções, segurança e outras funcionalidades entre os sistemas de gerenciamento de bancos de dados. Ele também discute ferramentas como Ora2pg e DBI-Link que podem auxiliar no processo de migração.
3. 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.
4.
5. 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.
7. 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.
8. 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
9. 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
10. 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
15. 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.
16. 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.
19. 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
20. DBlink
● Conecta em outros instâncias PostgreSQL.
● Presente como extensão no diretório contrib do códigofonte ou como um
pacote separado nas principais distribuições Linux.
● Possível inserir, alterar, remover qualquer informação remota
22. 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.
23. 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.
26. 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)
27. Pg::snapshot
● Desenvolvido em Perl e PL/Perl
● Fornece visões materializadas
● Os dados podem ser do Oracle ou PostgreSQL
28. Postgres Plus
● Um PostgreSQL modificado pela EnterpriseDB
● É incrementado com extensões SQL adotadas pela Oracle
● Produto pago
29.
30. 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.