Materialized View - Refresh Fast - With Filter

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pessoal, boa tarde.
Tudo bem?


Estou numa missão aqui, que é a seguinte:
  • Criar uma Materialized View, com Join de 2 tabelas, e filtro, onde não utilizo apenas a PK das tabelas no filtro
.
Nota importante: O Refresh deve, obrigatóriamente, ser FAST.

A querie desta materialized view, seria mais ou menos assim:

Selecionar tudo

select a.coluna1,
       , a.coluna2
       , a.coluna3
       , b.coluna1
       , b.coluna2
       , b.coluna3
from tabela_a a
      , tabela_b b
where a.pk = b.fk
   and b.tipo in (1,2);


Andei lendo alguns fóruns e até a documentação, mas, gostaria também de saber se algum dos foristas passou por isso, em se fazer um REFRESH FAST, em uma MV com essas características.

Versão: 11.2.0.3.0 - Master Site (Onde criarei a MView Log)
Versão: 10.2.0.5.0 - Snap Site (Onde criarei a MV)

Desde já grato,

Trevisolli
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pessoa, boa tarde.

Consegui resolver o REFRESH FAST, da Mview, com 2 tabelas (joins), seguindo os passos abaixo (após algumas pesquisas):

1) Criar MVIEW LOG, no master site, para a tabela A, com Rowid;

Selecionar tudo

   create materialized view log on "owner"."tabela_a"  with rowid;
2) Criar MVIEW LOG, no master site, para a tabela B, com Rowid e a coluna que participa do filtro;

Selecionar tudo

  create materialized view log on "owner"."tabela_b" with rowid (tipo); 
3) Criar a Materialized View, no snap site, obedecendo as seguintes regras:
  • 3.1 Adicionar o Rowd de ambas as tabelas na querie
  • 3.2 Adicionar as joins entre PK e FK
  • 3.3 Adicionar o filtro na querie

Selecionar tudo

create materialized view owner.mv_lista
refresh fast 
start with sysdate next sysdate+3/(24) 
as
select a.rowid as arowid 
       , a.coluna1,
       , a.coluna2
       , a.coluna3
       , b.rowid as browid
       , b.coluna1
       , b.coluna2
       , b.coluna3
from tabela_a a
      , tabela_b b
where a.pk = b.fk
   and b.tipo in (1,2);
4) Refresh fast da MV:

Selecionar tudo

begin
 dbms_snapshot.refresh('owner.mv_lista','fast');
end;
Espero ter ajudado ai. Grande abraço,

Trevisolli
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Show Trevisolli !!! :-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes