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 😉