Migração entre SGBDs

Propaganda
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
●
Falta de documentação;
●
Utilização de tipos binários;
●
etc.
(notação Húngara);
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
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,
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
declarações
BEGIN
corpo
-- comentário
CREATE OR REPLACE FUNCTION nome()
RETURNS void AS $func$
DECLARE
declarações
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
Download