Migrando de Oracle para PostgreSQL - Presentation Transcript
Fábio Telles
– Chefe de Desenvolvimento - DTI (Prefeitura
Diadema)
Fernando Ike
- Assistente do DTI (Prefeitura Diadema)
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.
●
Antes de 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
●
NUMBER > NUMERIC
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
●
UNION
MINUS > EXCEPT
●
Clausula LIMIT e OFSET:
ROWNUM, ROWID > LIMIT, OFSET, OID
●
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.
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.
Storage
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.
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
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.
●
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
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).
Referências
Oracle http://www.oracle.com
PostgreSQL http://www.postgresql.org
TechDocs (Migração) http://www.postgresql.org/docs/techdocs.3
Ora2Pg http://www.samse.fr/GPL/ora2pg/ora2pg.html
DBILink http://pgfoundry.org/projects/dbilink/
História de horror de Migração para PostgreSQL
http://www.frankhilliard.com/horrorstory.cfm
Contatos
Fábio Telles
<fabio.telles@diadema.sp.gov.br>
<fabio.telles@gmail.com>
Fernando Ike
<fernando.ike@diadema.sp.gov.br>
<fernando.ike@gmail.com>
0 comments
Post a comment