• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 

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

on

  • 4,814 views

Migração de Oracle para PostgreSQL mostrando o que é viável, ferramentas, casos, etc

Migração de Oracle para PostgreSQL mostrando o que é viável, ferramentas, casos, etc

Statistics

Views

Total Views
4,814
Views on SlideShare
4,794
Embed Views
20

Actions

Likes
1
Downloads
70
Comments
0

1 Embed 20

http://www.slideshare.net 20

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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>