Upload
bronislaw105
View
404
Download
0
Embed Size (px)
Citation preview
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
ORACLEx
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)
max. 4kb, min. 1
NUMBER(p,s)
p[1,38], s[-84,127]
VARCHAR(size)
min. 4b + string
NUMERIC(p,s)
sem limite
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
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
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;
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
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
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;
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 SERVERx
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.17x
PostgreSQL 8.0
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
● 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
● Transparente para o Administrador;
● SGBDs Diferentes;
● Mesma Plataforma;
PostgreSQL 7.4.17x
PostgreSQL 8.0
● 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
● 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
● 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
● 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
● 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
usuário = HUGO senha = 123456
senha + MD5 = asf9y20saf3
senha + MD5 + salt (HUGO)salt (HUGO) = wqf1y9sbhf61bp
PostgreSQL 7.4.17x
PostgreSQL 8.0
usuário = JOSE senha = 123456
senha + MD5 = asf9y20saf3
senha + MD5 + salt (HUGO) =
PostgreSQL 7.4.17x
PostgreSQL 8.0
usuário = JOSE senha =
senha + MD5 =
senha + MD5 + salt (HUGO) =
PostgreSQL 7.4.17x
PostgreSQL 8.0
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
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