Baseado parte na documentação Oracle (manuais e notas do Suporte), 
parte na minha experiência, so EXP em geral, e das suas experiências, 
eu digo o seguinte : primeiro, quando o exp foi criado (no tempo em 
que os dinossauros andavam pela Terra, lá pela versão 6 do bd :), o 
bd Oracle já rodava em múltiplas plataformas, E portanto o formato de 
bloco, de datafile, o formato físico enfim já era diferente entre as 
plataformas, E mesmo na mesma plataforma mas entre versões de bd 
diferentes os formatos podem/podiam mudar, então o paradigma 
principal, a função cruz do exp era e é sem ** COMPATÍVEL ** entre 
SOs/plataformas diferentes e entre versões diferentes do banco 
(versão origem sendo MENOR OU IGUAL á destino, é claro), NOS CASOS EM 
QUE os bancos não tinham comunicação de rede confiável e boa entre si 
(pois senão se usava dblinks e SQLs entre os bancos, nessa versão 
isso já existia - ASSIM SENDO, a sua opção de usar exp+imp pruma 
migração NO MESMO BANCO certamente é questionável...).  Por causa 
disso, , TODAS as opções que poderiam acrescer performance mas 
interferir na compatibilidade foram sempre limadas dele, não era e 
não é só a performance em si o escopo desse cara - nessa toada, o 
export ** sempre ** gera comandos SQL dentro dum .DMP (só quem grava 
blocos diretamente é o nosso amigo RMAN), via de regra NÃO gera esses 
SQLs (tanto os DMLs, como INSERT, quanto os DDLs, como CREATE INDEX) 
em modo APPEND (pois sabe-se lá se o banco destino é archive ou não, 
se está usando bd hot incremental ou não), não usa paralelismo (sabe-
se lá se o bd destino o aceita, se não é bd Standard onde parallel 
não funciona), não usa array processing (ou o usa bem pequeno), 
normalmente gera UM INSERT pra cada registro a criar... 
 Essas 2 últimas características, INCLUSIVE, ajudam a explicar o 
porque do CREATE TABLE nnn as (SELECT from outrabela) ser via de 
regra *** MUITO muito *** mais rápido que exp+imp, pois com o CREATE :
 - normalmente ele é executado no sql*plus, que JÁ APLICA array 
processing automaticamente (pequeno, com 15 regs normalmente, mas 
aplica), o imp é uma linha lógica por vez
 - um comando SQL como CREATE é atômico, é uma "coisa" única que é 
executada (e portanto parseada) apenas uma vez, enquanto o imp tem um 
** cursor *8, que deve ser aberto, E cujos valores de bind DEVEM ser 
informados pra cada linha a inserir.... isso NÂO É "grátis" o 
processamento no banco, isso exige SIM CPU extra, um pouco de RAM 
extra.... Pra vc comprovar que é isso mesmo, pesquise em 
http://asktom.oracle.com por PERFORMANCE SQL PROCEDURAL que vc acha n 
exemplos onde um único comando SQL dá um ** BANHO ** de performance 
na opção procedural linha a linha
 
 ==> e é claro, SE além disso tudo vc ainda usar modo APPEND, aí é 
até covardia, o CREATE dá de goleada...
 
 Outra coisa é que o nosso amigo exp e seu companheiro imp foram 
criado lá no período jurássico e cfrme a Terra foi girando e as eras 
passando ele NEM SEMPRE foi atualizado correspondentemente, ** 
PRINCIPALMENTE ** na versão 8i em diante do banco, onde OUTRAS opções 
foram agregadas ao banco (exemplo, dump de dados com o logminer, 
cópia de arquivos via transport tablespace, envio de dados com MVs e 
STREAMS e stanbys diversos), com essa evolução  de outros métodos o 
exp/imp pura e simplesmente foi aos poucos ficando LEGADO, até que 
finalmente na versão 10g ficou mesmo obsoleto. Assim sendo, TODA e 
QUALQUER feature de banco criada na 8i ou após vc pode SIM ter 
senões, falhas, bugs lógicos (ou mesmo físicos!!) se for aplicado 
exp/imp num bd que as use - como exemplos, sem ser lista total e 
completa, eu citaria MVs, SQL types, object/nested tables, 
directories, tabelas externas, funções analíticas, opções "avançadas" 
de SQL como WITH clause, column subquery, subquery na cláusula FROM , 
etc... Assim sim, no caso específico da MV o exp/imp usa a sintaxe 8i 
anterior de CREATE SNAPSHOT, fatalmente pode dar enrosco - desse 
modo, eu se vou usar exp/imp ** E ** o banco em questão possui 
features pós-8i, eu COM ABSOLUTA CERTEZA testo antes...

Ainda outra, também como resquício da sua antiguidade, exp e imp tem 
DIVERSAS opções que hohe em dia não se justificam mais (como 
COMPRESS, que hoje em dia com as tablespaces LMT rulando não faz 
sentido), E tem diversos outros que interferem MUITO positivamente na 
performance, TRANQUILAMENTE poderiam estar ativos como default mas 
não estão, como DIRECT, BUFFER, RECORDLENGTH, a pessoa que usará o 
programa TEM QUE ter estudado no manual de Utilities quais são e o 
que fazem as opções, pra poder usar as melhores 

 E finalmente, ainda em nome da compatibilidade, pra poder rodar na 
maioria dos hardwares, o exp e o imp são SERIAIS, ie : primeiro 
trabalham a primeira tabela, só depois a segunda, só depois a 
terceira..... Hoje em dia qquer servidor minimamente decente tem 
capacidade pra fazer mais que isso.

 Então o resumo da ópera é :

- usar o exp/imp só onde REALMENTE for preciso (ie, não há 
possibilidade de se aplicar outros comandos/opções/utilitários)
- testar se vc tem feats pós-8i
- sabendo que o exp/imp NÃO usam todas as opções possíveis de 
performance por questões de compatibilidade, VC AS USAR onde 
adequado , principalmente constraints criadas sem serem validadas 
(pois já o foram no bd origem), APPEND mode e paralelismo
- sabendo que o exp/imp é serial, dar uma paralelizada rodando vários 

 []s
 
  Chiappa
  

--- Em oracle_br@yahoogrupos.com.br, "Everton Dias" 
<[EMAIL PROTECTED]> escreveu
>
> Pessoal, uma ferramenta muito utilizada é o exp / imp, porém o 
mesmo apesar 
> de simples requer algum conhecimento de seu funcionamento, tanto 
para evitar 
> surpresas quanto para se tirar o máximo de proveito da ferramenta, 
como por 
> exemplo:
> 
> - Fiz um export de alguns schemas e os importei em outro db, porém 
depois 
> notei que as materialized views se transformaram em tabelas na base 
de 
> destino....pra mim isto foi um surpresa.
> 
> - Como em uma de minhas migrações eu estava trocando a base para 
outra base 
> na mesma máquina (trocando de storage e aproveitando para 
reorganizar os 
> objetos) notei que as tabelas maiores poderiam ser levadas 
**MUITO** mais 
> rapidamente se fossem levadas com create table as select ao invés 
de export 
> impor... o que pra mim tb foi uma surpresa.
> 
> Como cada dia que uso esta ferramenta descubro opções e detalhes 
como estes, 
> gostaria de compartilhar este conhecimento e também pedir para que 
os 
> colegas compartilhem pontos como estes... acredito que seria muito 
> interessante.
> 
> Por exemplo, alguem tem algum roteiro, check list, ou curiosidade  
sobre 
> migrações com exp / imp ?
> 
> Obrigado.
> 
> _________________________________________________________________
> MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br
>


Responder a