O que são visualizações materializadas no oracle
Uma visão materializada é um objeto de banco de dados que contém os resultados de uma consulta. É diferente da visão simples do oráculo. Essas visualizações materializadas possuem dados armazenados e quando você consulta a visualização materializada, ela retorna dados dos dados armazenados. A cláusula FROM da consulta pode nomear tabelas, visualizações e outras visualizações materializadas. Coletivamente, esses objetos são chamados de tabelas mestras (um termo de replicação) ou tabelas de detalhes (um termo de armazenamento de dados). Esta referência usa “tabelas mestras” para consistência. Os bancos de dados que contêm as tabelas mestres são chamados de bancos de dados mestres.
Quando você cria uma visão materializada, o Oracle Database cria uma tabela interna e pelo menos um índice Oracle, podendo criar uma visão, todas no esquema da visão materializada. O Oracle Database usa esses objetos para manter os dados de visualização materializados. Você deve ter os privilégios necessários para criar esses objetos.
Privilégios necessários para criar visualização materializada
O usuário deve ter CRIAR VISUALIZAÇÃO MATERIALIZADA para criar visualização de materialização
Sintaxe geral
CREATE MATERIALIZED VIEW BUILD [IMMEDIATE | DEFERRED] REFRESH [FAST | COMPLETE | FORCE ] ON [COMMIT | DEMAND ] [[ENABLE | DISABLE] QUERY REWRITE] [ON PREBUILT TABLE] AS ;
Explicação de cada termo
CONSTRUIR [IMEDIATO | DIFERIDO] | Podemos especificar para preencher imediatamente Ou podemos especificar DEFERRED para preencher na primeira atualização solicitada. |
Atualizar [RÁPIDO | COMPLETO | FORÇA ] | Existem três opções aqui. Cada uma explicada abaixo 1) FAST :Tentativa de atualização rápida. Se os logs de exibição materializados não estiverem presentes nas tabelas de origem com antecedência, a criação falhará. 2) COMPLETO :O segmento da tabela que suporta a visualização materializada é truncado e repovoado completamente usando a consulta associada. 3)FORCE:Tentativa de atualização rápida. Se não for possível, uma atualização completa é executada. |
ON [COMMIT | DEMANDA] | Podemos especificar ON COMMIT para que a atualização seja acionada por uma alteração de dados confirmada em uma das tabelas dependentes Ou podemos especificar ON DEMAND para que a atualização seja iniciada por uma solicitação manual ou uma tarefa agendada. |
[[HABILITAR | DESATIVAR] QUERY REWRITE] | A visualização está qualificada para reescrita de consulta |
CREATE MATERIALIZED VIEW mv_test
BUILD IMMEDIATE
REFRESH complete
ON demand AS
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP,DEPT
where EMP.DEPTNO= DEPT.DEPTNO;
Atualização da visualização materializada
Podemos atualizar a visão materializada através do pacote PLSQL DBMS_MVIEW
O pacote DBMS_MVIEW contém três APIs para realizar operações de atualização:
DBMS_MVIEW.REFRESH
Atualize uma ou mais visualizações materializadas.
DBMS_MVIEW.REFRESH_ALL_MVIEWS
Atualize todas as visualizações materializadas.
DBMS_MVIEW.REFRESH_DEPENDENT
Atualize todas as exibições materializadas que dependem de uma tabela mestre especificada ou exibição materializada ou lista de tabelas mestre ou exibições materializadas.
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Here C stands for Complete refresh
Se você tentar fazer uma atualização rápida, usando o comando abaixo
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Here F stands for fast Refresh
Ele lançará um erro, pois não há log de visualização materializado. estaremos verificando o log de visualização materializada abaixo
Com o Oracle 12c, a Oracle introduziu a nova API DBMS_SYNC_REFRESH para atualização
O que é Log de Visualização Materializada da Oracle
Quando alterações DML são feitas nos dados da tabela mestre, o Oracle Database armazena linhas que descrevem essas alterações no log de visualização materializado e, em seguida, usa o log de visualização materializada para atualizar visualizações materializadas com base na tabela mestre. Esse processo é chamado de atualização incremental ou rápida. Sem um log de visualização materializada, o Oracle Database deve executar novamente a consulta de visualização materializada para atualizar a visualização materializada. Esse processo é chamado de atualização completa. Normalmente, uma atualização rápida leva menos tempo do que uma atualização completa.
Um log de exibição materializado está localizado no banco de dados mestre no mesmo esquema da tabela mestre. Uma tabela mestre pode ter apenas um log de visão materializado definido nela. O Oracle Database pode usar esse log de visualização materializada para realizar atualizações rápidas para todas as visualizações materializadas de atualização rápida com base na tabela mestre.
Para atualizar rapidamente uma visualização de junção materializada, você deve criar um log de visualização materializada para cada uma das tabelas referenciadas pela visualização materializada.
Atualizar grupo
Um grupo de atualização é uma coleção de uma ou mais visualizações materializadas que o Oracle atualiza em uma transação atômica, garantindo que os relacionamentos entre as tabelas mestras sejam preservados
Exemplos:
CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH complete ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH force ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW LOG ON emp;exec DBMS_REFRESH.MAKE(name=>'test_grp', -
list=>'test_mv1,test_mv2','mv_test' -
next_date => sysdate, -
interval => 'null');exec DBMS_REFRESH.REFRESH('test_grp');
Como verificar o status da visualização materializada
SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;
Opção de atualização fora do local para visualização materializada
Com o 12c Release 1, uma nova opção de atualização está disponível para melhorar o desempenho e a disponibilidade da atualização da visualização materializada. Essa opção de atualização é chamada de atualização fora do local porque usa tabelas externas durante a atualização, em oposição à atualização "no local" existente que aplica diretamente as alterações à tabela de contêiner de exibição materializada. A opção de atualização fora do local funciona com todos os métodos de atualização existentes, como FAST ('F'), COMPLETE ('C'), PCT ('P') e FORCE ('?').
A atualização fora do local é particularmente eficaz ao lidar com situações com grandes quantidades de alterações de dados, nas quais as instruções DML convencionais não são bem dimensionadas. Ele também permite que você alcance um grau muito alto de disponibilidade porque as visualizações materializadas que estão sendo atualizadas podem ser usadas para acesso direto e reescrita de consulta durante a execução de instruções de atualização.
Na atualização fora do local, as partes inteiras ou afetadas de uma visualização materializada são computadas em uma ou mais tabelas externas.
exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false) ;
Diferença entre Visualização Materializada e Visualização Oracle
Conforme explicado acima Visualizações materializadas são baseados em disco e atualizados periodicamente com base na definição da consulta.Na visualização materializada, o conjunto de resultados é armazenado na tabela de visualização materializada
Visualizações são apenas virtuais e executam a definição da consulta sempre que são acessadas. Na visualização, nenhum conjunto de resultados é armazenado e acessa a tabela subjacente sempre que a visualização é acessada
Também lê
Oracle Joins
Subconsultas do Oracle
https://en.wikipedia.org/wiki/Materialized_view