Prezados

Os dados são extraídos de uma base de dados, e estes são montados\tratados 
através de um SELECT no qual irá carregar a base STAGE. Logo após os STAGE 
estive carregado ai entra o ODI carregando a base OLAP.

1 - Necessito diariamente ter todos (tenho tabelas com mais 138 Milhões de 
registro) os dados do STAGE atualizados, para que posteriormente o ODI comece a 
tratar\carregar as tabelas FATOS e DIMENSÕES - numa segunda fase.

 
Segue exemplo de parte do SELECT que utilizo:

insert /*+ APPEND PARALLEL(DEGREE 12 INSTANCES DEFAULT) */ into TESTE
SELECT
         ROWNUM AS ID_PESSOA_AQUISICAO,
          qry.SEQ_MUNICIPIO,
          qry.SEQ_ORGAO,
          qry.SEQ_REMESSA,
          qry.SEQ_PESSOA,
          qry.COD_PROCESSO_AQUISICAO,
          qry.DSC_TIPO_COMISSAO_LICITACAO,
          qry.NUM_DECRETO_PORTARIA,
          qry.NUM_ATO_NOMEACAO,
          qry.SEQ_TEMPO_ATO_NOMEACAO,
          qry.DSC_CARGO,
          qry.DSC_NATUREZA_CARGO

>________________________________
> De: J. Laurindo Chiappa <jlchia...@yahoo.com.br>
>Para: oracle_br@yahoogrupos.com.br 
>Enviadas: Segunda-feira, 25 de Fevereiro de 2013 12:23
>Assunto: [oracle_br] Re: Carga ETL
> 
>
>  
>Explica um pouco melhor : esse SELECT que vai recuperar os dados busca os 
>dados em outras instâncias via dblink, é isso ? OU os dados já estarão 
>carregados (via algum processo anterior, provavelmente) em tabelas STAGE/de 
>trabalho nesse mesmo database ?? Essas  'n tabelas', são tabelas DESTINO, a 
>serem carregadas, OU são as tabelas de origem dos dados ?? De quantas 
>tabelas-destino a serem carregadas estamos falando ? Se existem tabelas-stage 
>e/ou tabelas remotas a buscar os dados, mais ou menos quantas ? É possível um 
>único SELECT buscar todos os dados, ou não, não hpa nenhum tipo de 
>relacionamento entre as tabelas-destino e as origem ??
>DEPENDENDO do que vc disser a gente pode fazer recomendações, mas algumas best 
>practices se impõem :
>
>a) uma solução de ETL fora do database, não escrita por vc mesmo (como 
>datastage, warehouse builder, etc, etc, etc) te dá a vantagem de ser mais 
>rápida para implementar, se houver expertise nela (já que vc escreve menos), E 
>via de regra a customização é feita sem programação, numa GUIzinha da tool,  
>MAS nem sempre ela te dá a máxima performance (já que nem Todas conseguem usar 
>todos os recursos do RDBMS Oracle), além de terem um CUSTO não-desprezível, 
>seja em licenciamento seja em valor homem-hora para instalar e configurar
>
>b) SE os dados-stage vêm de outras fontes e num formato de arquivo-texto, é 
>via de regra INDEFENSÁVEL a opção de se criar tabelas-stage e carregar os 
>dados pra lá via sql*loader ou quetais : no século XXI, o ideal é acessar os 
>arquivos-texto como se fossem tabelas Oracle via EXTERNAL TABLES
>
>c) SEJA QUAL FOR a solução de ETL adotada (externa ou Customizada/escrita por 
>vc mesmo), ela ** TEM ** que onde recomendado/possível/viável usar os recursos 
>do RDBMS Oracle, como insert em direct-mode, constraints em novalidate, 
>Paralelismo (de SQL e/ou DIY, via múltiplas sessões simultãneas), MERGE, 
>Particionamento (ie, swap de tabelas em partições, carga referenciando a 
>partição, etc, etc), e outras
>
>d) se vc optar por solução desenvolvida aí E for feita dentro do banco (em 
>PL/SQL provavelmente), as principais Recomendações são vc :
>
>- EVITAR CURSORES A (quase) QUALQUER CUSTO, pois isso implica em context 
>switch, não-otimização de trechos SQL separados, etc : o negócio é mesmo 
>INSERT INTO tabelasdestino (SELECT em questão), SEM loops e cursores 
>
>- programar a carga para uma janela com menos utilização
>
>- evitar SQL dinâmico : SQL dinâmico NECESSARIAMENTE IMPLICA em hard parse, 
>mais gasto de CPU... E já que vc vai ter POUCO código para cada tabela a 
>carregar, não vejo como impossível vc simplesmente escrever na sua procedure 
>PL/SQL de carga os INSERTs.. INTO necessários.
>O que vc PODE fazer é pedir para o próprio RDBMS te "escrever" o código, tipo :
>
>no sqlplus, vc pede um SPOOL rotina.sql
>configura o sqlplus para não trazer infos extras/cabeçalho
>SELECT 'INSERT INTO ' || table_name || ' SELECT * FROM tabela' FROM DBA_TABLES 
>WHERE owner='nomedodono' and TABLE_NAME in (lista das tabelas);
>spool off
>
>Depois carregaa isso num editor de texto, mete CREATE PROCEDURE e faz as 
>pequenas edições necessárias, e é isso ...
>
>[]s
>
>Chiappa
>
>--- Em oracle_br@yahoogrupos.com.br, Samuel Santos  escreveu
>>
>> PessoALL
>> 
>> Tenho o seguinte cenário de ETL para que seja realizado diariamente (este 
>> será realizado após as 20hrs). 
>> Este procedimento trata-se de carga de dados insert into (através de um 
>> SELECT) que deverá ser realizado em n's tabelas.
>> 
>> O que vocês sugerem a realizar?
>> 
>> Virew Materializada (ser puder enviar exemplos de criação, agendamentos, 
>> incremento ou não), enfim qual a melhor forma?
>> Procedure?
>> 
>>  
>> Desde já agradeço o apoio de todos.
>> 
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>
>
> 
>
>

[As partes desta mensagem que não continham texto foram removidas]

Responder a