[oracle_br] Re: Agendamento View Materializada

2016-06-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Opa : bom, quando vc diz "cabeçalho" na verdade vc quer se referir ao DDL de 
criação da view materializada, ao CREATE MATERIALIZED VIEW em si, certo ? View 
não tem "cabeçalho" nenhum...
 Então, vc tem dois tipos de REFRESH automático, o REFRESH ON COMMIT (que 
atualiza a view materializada sempre que houver um COMMIT) e o REFRESH com 
cláusula START WITH + NEXT (que atualiza baseado num Período de tempo que vc 
indica) : a primeira coisa vc tem que considerar para o REFRESH ON COMMIT é o 
overhead em CADA transação (pois o COMMIT só termina depois de refrescar a(s) 
vm(s) , e para o REFRESH auto-programado com cláusula de NEXT é que nem sempre 
é possível/viável vc ter a view "desatualiza" enquanto não chega a data/hora do 
refresh... 
  OU SEJA, para as views que teu cliente PRECISA que sejam sempre 100% 
atualizadas ele TEM que mensurar e ter capacidade para suportar o tempo de 
COMMIT alongado, E para as views que suportem operação com dados defasados por 
um período, ele TEM que definir na criação da vm qual seria esse período... 
PODEM haver casos onde os dados só precisam estar atualizados com o dia 
anterior, digamos, aí vc bota pra refrescar á noite, E podem ter casos onde 
isso não é viável Varia...
  
  Respondendo, então , isso posto :
  
  a) absolutamente NÂO EXISTE PADRÃO pra isso, cada caso é um caso, é o seu 
cliente que tem que mensurar para quais vms ele suporta overhead, para quais 
pode haver alguma defasagem NÂO EXISTE PADRÃO, é sempre baseado no 
levantamento com o Cliente...
  
  b) depende do caso : 
http://oraclehack.blogspot.com.br/2013/02/create-fast-refreshable-materialized.html
 por exemplo mostra uma query complexa do tipo clássico (ie, usa funções no 
WHERE ou faz JOIN) que pôde ter a condição de FAST REFRESH ativada com o 
recurso de ROWID, mas isso (Óbvio) não é solução para qualquer tipo de refresh 
fast em SQLs complexos Não tem jeito, a resposta TEM que ser DEPENDE...
  
  c) sim, para os casos em que é viável REFRESH programado e/ou ON COMMIT, é 
Claro que é melhor pro cliente que o próprio banco já faça o necessário, é um 
trabalho a menos pra ele...
  
  []s
  
Chiappa

Re: [oracle_br] Agendamento View Materializada

2016-06-22 Por tôpico Neto pr neto...@gmail.com [oracle_br]
Rafael
Primeiro, acredito que voce tem que informar aqui,  qual o critério para
atualização das V. Materializadas (por dia, horas, por commit na tabelas,
exclusão de dados) ?

Já criei v. materializadas que na sua criação, indicam qual a forma de
atualização, exemplo (atualização a cada commit na tabela):

---

create materialized view mv2
  refresh fast on commit
  ENABLE QUERY REWRITE
  as
select
  t_key ,
  count(*)   as row_count ,
  count(amt) as amt_count
from t2
group by t_key
;
--

Segue abaixo algumas possibilidades para indicar a forma de atualização via
cabeçalho:

create materialized view nome_visão
 [build [deferred | immediate]]
 [refresh [complete | fast | force]
 [on commit | on demand]]
 [start with date] [next date]]
 [for update]
 [[enable | disable] query rewrite]
  as select 

 Um item importante é deixar o comando:  ENABLE QUERY REWRITE  ... que
permite ao otimizador reescrever queries, que podem se beneficiar da V.
Materializada.

Neto

Em 22 de junho de 2016 17:36, Rafael Mendonca raffaell.t...@yahoo.com
[oracle_br]  escreveu:

>
>
> Cenário:
>
> Oracle 11.2.0.4 Enteprise Edition + grid infraestructure(ASM) standalone
> server
> AIX 64 bits
>
>
> Senhores, tenho algumas dúvidas em relação aos agendamentos das views
> materializadas e gostaria da ajuda de vocês.
>
> Estou em um cliente que possui centenas de  MVs. Para **CADA** MV os
> desenvolvedores deste cliente pede para o DBA criar um JOB, um PROGRAM, um
> SCHEDULER para executar uma PROCEDURE com o código de REFRESH da MV, ou
> seja, todos os refreshes de MV's são feitas por DBMS_SCHEDULER.
>
> Como nunca tive muito convívio com MV's, sei que existe a possibilidade no
> próprio cabeçalho da view materializada ser configurado o período de
> atualização de acordo com a sua necessidade: Por commit, por demanda, por
> agendamento (horario) etc, o TIPO de ATUALIZAÇÃO: FAST, FULL etc.
>
> O que eu quero evitar em minha base de dados é que o CLIENTE perca a mania
> de estar sempre precisando criar um JOB/PROGRAM/SCHEDULER/PROCEDURE para o
> agendamento do REFRESH da view e comece a ser feito no próprio cabeçalho da
> view.
>
> a) Vocês seguem quais padrões para tal?
>
> b) Existe a possibilidade de realizar um REFRESH no modo FAST sendo uma
> view do tipo complexa?
>
> c) Vocês concordam com a minha ideia de evitar essa gama de criação de
> objetos para uma view ser atualizada?
>
>
> Fico no aguardo dos comentários.
>
> :)
>
>
>
>
>
>
>
>
>
> 
>


[oracle_br] Agendamento View Materializada

2016-06-22 Por tôpico Rafael Mendonca raffaell.t...@yahoo.com [oracle_br]
Cenário:
Oracle 11.2.0.4 Enteprise Edition + grid infraestructure(ASM) standalone server 
AIX 64 bits

Senhores, tenho algumas dúvidas em relação aos agendamentos das views 
materializadas e gostaria da ajuda de vocês.
Estou em um cliente que possui centenas de  MVs. Para **CADA** MV os 
desenvolvedores deste cliente pede para o DBA criar um JOB, um PROGRAM, um 
SCHEDULER para executar uma PROCEDURE com o código de REFRESH da MV, ou seja, 
todos os refreshes de MV's são feitas por DBMS_SCHEDULER.
Como nunca tive muito convívio com MV's, sei que existe a possibilidade no 
próprio cabeçalho da view materializada ser configurado o período de 
atualização de acordo com a sua necessidade: Por commit, por demanda, por 
agendamento (horario) etc, o TIPO de ATUALIZAÇÃO: FAST, FULL etc.
O que eu quero evitar em minha base de dados é que o CLIENTE perca a mania de 
estar sempre precisando criar um JOB/PROGRAM/SCHEDULER/PROCEDURE para o 
agendamento do REFRESH da view e comece a ser feito no próprio cabeçalho da 
view.
a) Vocês seguem quais padrões para tal?
b) Existe a possibilidade de realizar um REFRESH no modo FAST sendo uma view do 
tipo complexa?  

c) Vocês concordam com a minha ideia de evitar essa gama de criação de objetos 
para uma view ser atualizada?

Fico no aguardo dos comentários.
:)