Você está na página 1de 55

Migração entre SGBDs

Hugo
Roger
Migração entre SGBDs
[agenda]
● Introdução
● Por que migrar?
● Principais desafios
● Antes de migrar
● Durante a migração
● Migrações
– Oracle x PostgreSQL
– SQLServer x PostgreSQL
Migração entre SGBDs
[Introdução]
● Projeto de Migração,

● Fazer uma avaliação do SGBDs


existentes,

● Definição dos critérios de avaliação,

● Avaliação dos produtos,

● Definição das estratégias de migração.


Migração entre SGBDs
[Por que migrar?]
● Diminuição de custos;

● Desempenho;

● Suporte;

● Segurança;

● Imposição;
Migração entre SGBDs
[Principais desafios]
● Apoio da diretoria?
– Suporte as mudanças;
– Suporte Financeiro.

● Qualificação da área técnica?


– Preparação e Treinamento;
– Consultoria Externa.
Migração entre SGBDs
[Antes de migrar]
● Estudar a documentação dos SGBDs e
identificar as diferenças de sintaxe e
funcionalidades;
● Realizar backup enquanto ainda é tempo;
● Utilizar um servidor de testes. Nunca em
produção diretamente;
● Verificar localização de caracteres
(importantíssimo);
● Verificar espaço de armazenamento: entre
SGBDs diferentes isso pode variar;
– Investimento em Hardware?
Migração entre SGBDs
[Durante a migração]
● Registrar todo o processo;
● Migrar antes tabelas e índices;
● Adaptar primeiro os sistemas não críticos;
– não utilizam Stored Procedures;
– não dependem de extensões específicas...
● Importar Tabelas, Dados e Procedures
separadamente;
● Homologar separadamente cada etapa
antes de prosseguir...
MIGRAÇÃO

ORACLE
x
POSTGRESQL
Migração Oracle x PostgreSQL
[Por que migrar?]
Migração Oracle x PostgreSQL
[Por que migrar?]
Migração Oracle x PostgreSQL
[Principais desafios]
● Extensões específicas do SGBD;
● Não utilização do Padrão ANSI SQL;
● Utilização de Mixed case (notação Húngara);
● Falta de documentação;
● Utilização de tipos binários;
● etc.
Migração Oracle x PostgreSQL
[Diferenças – tipos de dados]

VARCHAR2(size) VARCHAR(size)

max. 4kb, min. 1 min. 4b + string

NUMBER(p,s) NUMERIC(p,s)

p[1,38], s[-84,127] sem limite


Migração Oracle x PostgreSQL
[Diferenças - JOIN]

SELECT SELECT

t1.*, t2.* t1.*, t2.*


FROM FROM

t1, t2 t1 LEFT JOIN t2

WHERE ON

t1.id=t2.id(+) t1.id=t2.id
Migração Oracle x PostgreSQL
[Diferenças - funções]

DECODE(sexo, CASE
'M', WHEN sexo='M'
'Masculino, THEN 'Masculino'
'F', WHEN sexo='F'
'Feminino' THEN 'Feminino'
) END

NVL COALESCE
Migração Oracle x PostgreSQL
[Diferenças - UNION]
SELECT id SELECT id
FROM t1 FROM t1
MINUS EXCEPT
SELECT t1_id SELECT t1_id
FROM t2; FROM t2;
Migração Oracle x PostgreSQL
[Diferenças – LIMIT e OFFSET]
SELECT * SELECT *
FROM t1 FROM t1
WHERE LIMIT 15, 3
ROWNUM > 3 AND ou
ROWNUM <= 15 SELECT *
FROM t1
LIMIT 15
OFFSET 3
Migração Oracle x PostgreSQL
[Diferenças]
● O catálogo de sistema SYS e SYSTEM do
Oracle é equivalente ao pg_catalog e
information_schema do PostgreSQL;
● PostgreSQL é sensível ao caso. Todos os
nomes que devem ser maiúsculos devem
estar entre (“);
● PostgreSQL não faz uso da tabela “DUAL”;
● PostgreSQL não possui visões
materializadas...
Migração Oracle x PostgreSQL
[PL/SQL x PLpg/SQL]
● Ambos possuem PL/Java, funções C. O
PostgreSQL também suporta (se
compilado para isso) outras linguagens:
PL/Perl, PL/PHP, PL/Python etc.
● Não existe procedure no PostgreSQL.
Utiliza-se uma function que retorna um
void;
● Uma trigger no PostgreSQL chama apenas
uma function...
Migração Oracle x PostgreSQL
[PL/SQL x PLpg/SQL]

CREATE OR REPLACE PROCEDURE nome IS


CREATE OR REPLACE FUNCTION nome()
declarações RETURNS void AS $func$
BEGIN DECLARE
corpo declarações
-- comentário BEGIN
END; corpo
/ -- comentário
show errors; END;

$func$ LANGUAGE plpgsql;


Migração Oracle x PostgreSQL
[Storage - PostgreSQL]
● O conceito de espaço de tabela se
refere a uma pasta que é gerenciada
pelo SGBD. Não é possível definir
datafile específico;
● Não implementa explicitamente o
conceito de extensão e segmentos;
● Ainda não é possível especificar o local
de armazenamento separado para áreas
temporárias (rollback, ordenação,
indexação etc.);
Migração Oracle x PostgreSQL
[Backup]
● O conceito de DUMP é semelhante em
ambos;
– no PostgreSQL permite redirecionamento via
pipe.
● O conceito de cópia de arquivo de dados
é semelhante em ambos;
● O PostgreSQL não possui uam ferramenta
de flashback;
● O PostgreSQL não possui ferramenta
nativa tipo RMAN...
Migração Oracle x PostgreSQL
[Ferramenta - ora2pg.pl]
Migração Oracle x PostgreSQL
[Ferramenta - ora2pg.pl]
● Escrito em Perl. Depende dos módulos
DBI, DBD::Pg e DBD::Oracle;
● Importa dados e definições do Oracle
para um arquivo texto ou diretamente
para um banco PostgreSQL;
● Suporta a extração de DDL de tabelas,
índices, constraints, views, trigges,
procedures, functions, packages e grants;
Migração Oracle x PostgreSQL
[Ferramenta - ora2pg.pl]
● Dados do DUMP Oracle podem estar no
formato INSERT ou COPY;
● Corrige nomes de tipos e dados
diferentes;
● Extrai o código do corpo de uma trigger
em uma function;
● Funções em PL/SQL, geralmente,
necessitam de edição manual;
● ...
Migração Oracle x PostgreSQL
[Ferramenta - DBI-Link]
Migração Oracle x PostgreSQL
[Ferramenta - DBI-Link]
● Permite acessar tabelas e dados de
outros SGBDs via Perl;
● Requer PostgreSQL 8.0 ou superior;
● Acesso transparente a tabelas de banco
de dados remotos (Oracle, MSSQL,
MySQL);
● ...
MIGRAÇÃO

SQL SERVER
x
POSTGRESQL
Migração SQLServer x PostgreSQL
[Motivação]

● SGBD OpenSource X SGBD Proprietário

● Postgresql SGBD bastante completo


Migração SQLServer x PostgreSQL
[Motivação]
Migração SQLServer x PostgreSQL
[Dificuldades]

● Falta de documentação oficial migração

● Necessário bom conhecimento nos dois


SGBD's

● Dois bancos não seguem o mesmo


padrão de linguagem (SQL, T-SQL)

● SQLServer permite integrações


específicas entre seus produtos (.Net)
Migração SQLServer x PostgreSQL
[Etapas – Migração Estrutura]

● SCHEMA (tabelas, chaves)


– Case sensitive

– Tipo de dados (poucas diferenças)


● datetime -> timestamp
● identity - > serial
● Money -> numeric

– ALTER TABLE
Migração SQLServer x PostgreSQL
[Etapas – Migração Dados]
● Dados são dados

● Verificar se os tipo de dados alterados


no schema precisam tratamento

● Verificar terminadores / delimitadores de


arquivo se plataforma for diferente
(dos2unix)
Migração SQLServer x PostgreSQL
[Etapas – Store Procedures ]
Migração SQLServer x PostgreSQL
[Etapas – Store Procedures ]
Migração SQLServer x PostgreSQL
[Etapas – Linguagem]

● Comandos, operadores e funções


próprios da linguagem
– TOP -> LIMIT
– Datediff() -> (Date – Date)
– Len() - > Length()
– isNull() -> Coalesce()
– contatenação (+) -> ||
– left outer join (*=) -> left outer join
– interpretação LIKE é case sensitive
Migração SQLServer x PostgreSQL
[Ferramentas - DTS]
Migração SQLServer x PostgreSQL
[Ferramentas - DTS]
Migração SQLServer x PostgreSQL
[Ferramentas - DTS]
Migração SQLServer x PostgreSQL
[Ferramentas - DTS]
Migração SQLServer x PostgreSQL
[Ferramentas - DTS]
MIGRAÇÃO

PostgreSQL 7.4.17
x
PostgreSQL 8.0
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● É um SGBD;
SGBD
● No início se chamava Postgres;
● Código Aberto;
● Compatível com os padrões
SQL92/SQL96;
SQL92/SQL96
● Nasceu na Universidade Berkeley
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Sob a licença BSD;


BSD
● Patrocinado pelo DARPA,
DARPA e outros órgãos
USA;
● Tornando-se público 1987;
● Release 8.2.4;
8.2.4
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Transparente para o Administrador;

● SGBDs Diferentes;

● Mesma Plataforma;
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Roda nativamente na Microsoft Windows


como um servidor;
● Pode rodar como um serviço Windows;
● No Windows não tem os benefícios de
anos de uso em ambientes de produção
que o PostgreSQL tem nas plataformas
Unix;
● Já PostgreSQL tem nativamente suportado
clientes Windows por anos.
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Tem maior compatibilidade com o padrão


SQL ANSI;
● TABLESPACE: pode mudar o local de
armazenamento de índices e tabelas;
tabelas
● Os tipo de dados de colunas pode agora
serem trocados com ALTER TABLE;
TABLE
● Antes só era possível dropando a coluna e
readicionando o coluna;
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Adicionou a habilidade para prolongar o


vacuum para reduzir impacto da
performance;
● Use IPv6 ::1/128 para localhost por
default pg_hba.conf;
● Use formato CIDR em pg_hba.conf;
● Ouve o localhost por default;
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Permite que os arquivos de configuração


fique fora do diretório de dados;

● /etc/postgresql/8.2/main/postgresql.conf;
PostgreSQL 7.4.17
x
PostgreSQL 8.0

● Limpar as senhas de usuário MD5 quando


um usuário é renameado;
● PostgreSQL usa o nome de usuário como
um salt quando criptografa senha via
MD5.
MD5
● Quando o nome de usuário é trocado,
uma nova senha deve ser assinada para
que o usuário seja habilitado para logar;
PostgreSQL 7.4.17
x
PostgreSQL 8.0

usuário = HUGO senha = 123456

senha + MD5 = asf9y20saf3

senha + MD5 + salt (HUGO) = wqf1y9sbhf61bp


PostgreSQL 7.4.17
x
PostgreSQL 8.0

usuário = JOSE senha = 123456

senha + MD5 = asf9y20saf3

senha + MD5 + salt (HUGO) =


PostgreSQL 7.4.17
x
PostgreSQL 8.0

usuário = JOSE senha =

senha + MD5 =

senha + MD5 + salt (HUGO) =


PostgreSQL 7.4.17
x
PostgreSQL 8.0

usuário = JOSE senha = 123456

Não
mudou
senha + MD5 = asf9y20saf3

Mudou

senha + MD5 + salt (JOSE) =s51k091bnfiz97


Migração SQLServer x PostgreSQL
[Conclusão]

● Em um processo de migração de banco


de dados, existem diversos fatores que
devem ser levados em consideração e o
sucesso de uma migração é reflexo de
uma completa análise destes fatores,
sejam eles técnicos (diferenças entre
SGBD's) ou não (apoio da diretoria).
Migração entre SGBDs
[Bibliografia]
● http://tellesr.multiply.com/video/item/5
● http://psoug.org/reference/pseudocols.html
● http://www.postgresql.org
● http://www.oracle.org
● http://pgfoundry.org/projects/dbi-link/
● http://freshmeat.net/projects/ora2pg/
● http://pgdocptbr.sourceforge.net/pg80/
● http://www.devmedia.com.br/articles/viewcomp.asp?comp=3967
● http://www.postgresql.org/docs/techdocs.29
● http://www.postgresql.org/docs/8.2/static/release-8-0.html;
● http://www.devmedia.com.br/articles/viewcomp.asp?comp=1490&vt
=-1