REFRESH GROUP
Refresh group (RefGroup) é uma das milhares de funcionalidades que nosso querido Oracle DB possui.
O RefGroup serve para agrupar materialized views e atualizá-las de maneira única. O que pode facilitar a vida do DBA mas complicar o entendimento do banco por novos administradores.
Alguns problemas decorrentes de RefGroups.
no uso de RefGroups é que:
– O tempo de refresh da MView passa a ser do grupo na qual ela faz parte;
– O Enterprise Manager (versões antigas) não enxerga isto;
– A MView não precisa ter uma JOB associada ( o que dificulta encontrar aonde ela é atualizada );
Neste artigo exibirei como criar um RefGroup e como atualizar as views dele, algo bem simples 🙂
CRIANDO UM REFRESH GROUP
Para criar um RefGroup usaremos a biblioteca DBMS_REFRESH e será necessário termos uma MaterializedView.
CRIANDO UMA MATERIALIZED VIEW
Como o foco de nosso artigo é Refresh Groups, vou criar uma tabela bem simples com uma Materialized View atualizada de 10 em 10 minutos.
Para isto, executei:
Criando uma materialized view, o Oracle já cria uma Job e um grupo de atualização ( com apenas a MView criada ).
Com nossa materialized view criada, vamos verificar de quanto em quanto tempo ela será atualizada. Para verificar isto, podemos ver as jobs cadastradas em USER_JOBS
Como previsto, ao criar nossa Materialized View com a opção NEXT, o banco criou uma job para fazer a atualização.
CRIANDO (FINALMENTE) O REFRESH GROUP
Agora que temos uma tabela e uma materialized view, podemos pensar no nosso Refresh Group.
Para criar um refresh group, usamos:
* Observe que não é sempre necessário criar uma refresh group. Estamos criando apenas para exemplificar o agrupamento de várias mviews em um só job.
No parâmetro LIST poderíamos ter informado o nome das Materialized Views, mas resolvi deixar para adicionar separadamente para vermos como funciona.
Para vermos os RefGroups cadastrados podemos executar:
e para ver os filhos de cada RefGroup:
Como ficou no nosso exemplo?
* Veja que nosso grupo CERTBD_REFGROUP não possui MViews associadas.
ADICIONANDO MATERIALIZED VIEW A UM REFGROUP
Agora que temos um grupo de atualização ( RefGroup ) que atualiza de minuto em minuto, vamos colocar nossa MView dentro dele e fazer com que ela seja atualizada na mesma forma:
E agora, como será que ficou nossos “Refresh Children”?
REMOVENDO UM REFRESH GROUP CHILDREN
Para remover uma Materialized View do RefGroup, usamos a proc SUBTRACT.
REMOVENDO UM REFRESH GROUP
Muito simples, você precisa apenas do nome do grupo:
Para maiores detalhes dos parâmetros do DBMS_REFRESH, por favor, acesse:
http://docs.oracle.com/cd/E11882_01/server.112/e10707/rarrefreshpac.htm
Pessoal, este artigo é realmente muuuiiito pequeno sobre o conteúdo, mas espero que este possa ter ajudado em algum ponto no uso de Refresh Groups.
Caso existe algo incoerente, por favor, me ajudem a corrigir 😉