55
Migração entre SGBDs Hugo Roger

Migracao-Oracle-SQLServer-para-Postgres

Embed Size (px)

Citation preview

Page 1: Migracao-Oracle-SQLServer-para-Postgres

Migração entre SGBDs

Hugo

Roger

Page 2: Migracao-Oracle-SQLServer-para-Postgres

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

Page 3: Migracao-Oracle-SQLServer-para-Postgres

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.

Page 4: Migracao-Oracle-SQLServer-para-Postgres

Migração entre SGBDs[Por que migrar?]

● Diminuição de custos;

● Desempenho;

● Suporte;

● Segurança;

● Imposição;

Page 5: Migracao-Oracle-SQLServer-para-Postgres

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.

Page 6: Migracao-Oracle-SQLServer-para-Postgres

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?

Page 7: Migracao-Oracle-SQLServer-para-Postgres

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

Page 8: Migracao-Oracle-SQLServer-para-Postgres

MIGRAÇÃO

ORACLEx

POSTGRESQL

Page 9: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Por que migrar?]

Page 10: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Por que migrar?]

Page 11: Migracao-Oracle-SQLServer-para-Postgres

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.

Page 12: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Diferenças – tipos de dados]

VARCHAR2(size)

max. 4kb, min. 1

NUMBER(p,s)

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

VARCHAR(size)

min. 4b + string

NUMERIC(p,s)

sem limite

Page 13: Migracao-Oracle-SQLServer-para-Postgres

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

SELECT

t1.*, t2.*

FROM

t1, t2

WHERE

t1.id=t2.id(+)

SELECT

t1.*, t2.*

FROM

t1 LEFT JOIN t2

ON

t1.id=t2.id

Page 14: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Diferenças - funções]

DECODE(sexo,

'M',

'Masculino,

'F',

'Feminino'

)

NVL

CASE

WHEN sexo='M'

THEN 'Masculino'

WHEN sexo='F'

THEN 'Feminino'

END

COALESCE

Page 15: Migracao-Oracle-SQLServer-para-Postgres

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

SELECT id

FROM t1

MINUS

SELECT t1_id

FROM t2;

SELECT id

FROM t1

EXCEPT

SELECT t1_id

FROM t2;

Page 16: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Diferenças – LIMIT e OFFSET]

SELECT *

FROM t1

WHERE

ROWNUM > 3 AND

ROWNUM <= 15

SELECT *

FROM t1

LIMIT 15, 3

ou

SELECT *

FROM t1

LIMIT 15

OFFSET 3

Page 17: Migracao-Oracle-SQLServer-para-Postgres

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

Page 18: Migracao-Oracle-SQLServer-para-Postgres

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

Page 19: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[PL/SQL x PLpg/SQL]

CREATE OR REPLACE PROCEDURE nome IS

declarações

BEGIN

corpo

-- comentário

END;

/

show errors;

CREATE OR REPLACE FUNCTION nome() RETURNS void AS $func$

DECLARE

declarações

BEGIN

corpo

-- comentário

END;

$func$ LANGUAGE plpgsql;

Page 20: Migracao-Oracle-SQLServer-para-Postgres

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.);

Page 21: Migracao-Oracle-SQLServer-para-Postgres

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

Page 22: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Ferramenta - ora2pg.pl]

Page 23: Migracao-Oracle-SQLServer-para-Postgres

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;

Page 24: Migracao-Oracle-SQLServer-para-Postgres

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;

● ...

Page 25: Migracao-Oracle-SQLServer-para-Postgres

Migração Oracle x PostgreSQL[Ferramenta - DBI-Link]

Page 26: Migracao-Oracle-SQLServer-para-Postgres

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);

● ...

Page 27: Migracao-Oracle-SQLServer-para-Postgres

MIGRAÇÃO

SQL SERVERx

POSTGRESQL

Page 28: Migracao-Oracle-SQLServer-para-Postgres

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

● SGBD OpenSource X SGBD Proprietário

● Postgresql SGBD bastante completo

Page 29: Migracao-Oracle-SQLServer-para-Postgres

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

Page 30: Migracao-Oracle-SQLServer-para-Postgres

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)

Page 31: Migracao-Oracle-SQLServer-para-Postgres

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

Page 32: Migracao-Oracle-SQLServer-para-Postgres

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)

Page 33: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Etapas – Store Procedures ]

Page 34: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Etapas – Store Procedures ]

Page 35: Migracao-Oracle-SQLServer-para-Postgres

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

Page 36: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Ferramentas - DTS]

Page 37: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Ferramentas - DTS]

Page 38: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Ferramentas - DTS]

Page 39: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Ferramentas - DTS]

Page 40: Migracao-Oracle-SQLServer-para-Postgres

Migração SQLServer x PostgreSQL[Ferramentas - DTS]

Page 41: Migracao-Oracle-SQLServer-para-Postgres

MIGRAÇÃO

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 42: Migracao-Oracle-SQLServer-para-Postgres

PostgreSQL 7.4.17x

PostgreSQL 8.0

● É um SGBDSGBD;● No início se chamava Postgres;● Código Aberto;● Compatível com os padrões

SQL92/SQL96SQL92/SQL96;● Nasceu na Universidade Berkeley

Page 43: Migracao-Oracle-SQLServer-para-Postgres

● Sob a licença BSDBSD;● Patrocinado pelo DARPADARPA, e outros órgãos

USA;● Tornando-se público 1987;● Release 8.2.4Release 8.2.4;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 44: Migracao-Oracle-SQLServer-para-Postgres

● Transparente para o Administrador;

● SGBDs Diferentes;

● Mesma Plataforma;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 45: Migracao-Oracle-SQLServer-para-Postgres

● Roda nativamente na Microsoft Windows como um servidor;

● Pode rodar como um serviçoserviço Windows;● No Windows não tem os benefícios de No Windows não tem os benefícios de

anos de uso em ambientes de produção anos de uso em ambientes de produção que o PostgreSQL tem nas plataformas que o PostgreSQL tem nas plataformas Unix;Unix;

● Já PostgreSQL tem nativamente suportado clientesclientes Windows por anos.

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 46: Migracao-Oracle-SQLServer-para-Postgres

● Tem maior compatibilidade com o padrão SQL ANSI;

● TABLESPACE:TABLESPACE: pode mudar o local de armazenamento de índices e tabelasíndices e tabelas;

● Os tipo de dados de colunas pode agora serem trocados com ALTER TABLEALTER TABLE;

● Antes só era possível dropandodropando a coluna e readicionandoreadicionando o coluna;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 47: Migracao-Oracle-SQLServer-para-Postgres

● Adicionou a habilidade para prolongar o vacuumvacuum para reduzir impacto da performance;

● Use IPv6 ::1/128IPv6 ::1/128 para localhost por default pg_hba.conf;

● Use formato CIDRCIDR em pg_hba.conf;● Ouve o localhostlocalhost por default;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 48: Migracao-Oracle-SQLServer-para-Postgres

● Permite que os arquivos de configuraçãoarquivos de configuração fique fora do diretório de dados;

● /etc/postgresql/8.2/main/postgresql.conf;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 49: Migracao-Oracle-SQLServer-para-Postgres

● Limpar as senhassenhas de usuário MD5MD5 quando um usuário é renameado;

● PostgreSQL usa o nome de usuárionome de usuário como um saltsalt quando criptografa senha via MD5MD5.

● Quando o nome de usuário é trocado,trocado, uma nova senha deve ser assinadaassinada para que o usuário seja habilitado para logar;

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 50: Migracao-Oracle-SQLServer-para-Postgres

usuário = HUGO senha = 123456

senha + MD5 = asf9y20saf3

senha + MD5 + salt (HUGO)salt (HUGO) = wqf1y9sbhf61bp

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 51: Migracao-Oracle-SQLServer-para-Postgres

usuário = JOSE senha = 123456

senha + MD5 = asf9y20saf3

senha + MD5 + salt (HUGO) =

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 52: Migracao-Oracle-SQLServer-para-Postgres

usuário = JOSE senha =

senha + MD5 =

senha + MD5 + salt (HUGO) =

PostgreSQL 7.4.17x

PostgreSQL 8.0

Page 53: Migracao-Oracle-SQLServer-para-Postgres

usuário = JOSE senha = 123456

senha + MD5 = asf9y20saf3

senha + MD5 + salt (JOSEsalt (JOSE)) =s51k091bnfiz97

PostgreSQL 7.4.17x

PostgreSQL 8.0

Não mudou

Mudou

Page 54: Migracao-Oracle-SQLServer-para-Postgres

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).

Page 55: Migracao-Oracle-SQLServer-para-Postgres

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