Qué son las vistas materializadas en Oracle
Una vista materializada es un objeto de base de datos que contiene los resultados de una consulta. Es diferente de la vista simple de Oracle. Estas vistas materializadas tienen datos almacenados y cuando consulta la vista materializada, devuelve datos de los datos almacenados. La cláusula FROM de la consulta puede nombrar tablas, vistas y otras vistas materializadas. En conjunto, estos objetos se denominan tablas maestras (un término de replicación) o tablas de detalles (un término de almacenamiento de datos). Esta referencia utiliza "tablas maestras" para mantener la coherencia. Las bases de datos que contienen las tablas maestras se denominan bases de datos maestras.
Cuando crea una vista materializada, Oracle Database crea una tabla interna y al menos un índice de Oracle, y puede crear una vista, todo en el esquema de la vista materializada. Oracle Database utiliza estos objetos para mantener los datos de vista materializados. Debe tener los privilegios necesarios para crear estos objetos.
Privilegios necesarios para crear una vista materializada
El usuario debe tener CREAR VISTA MATERIALIZADA para crear materializar vista
Sintaxis general
CREATE MATERIALIZED VIEW BUILD [IMMEDIATE | DEFERRED] REFRESH [FAST | COMPLETE | FORCE ] ON [COMMIT | DEMAND ] [[ENABLE | DISABLE] QUERY REWRITE] [ON PREBUILT TABLE] AS ;
Explicación de cada término
CONSTRUIR [INMEDIATO | DIFERIDO] | Podemos especificar que se complete inmediatamente O podemos especificar DIFERIDO para que se complete en la primera actualización solicitada. |
ACTUALIZAR [RÁPIDO | COMPLETO | FUERZA ] | Hay tres opciones aquí. Cada una se explica a continuación 1) RÁPIDO:se intenta una actualización rápida. Si los registros de vista materializados no están presentes en las tablas de origen por adelantado, la creación falla. 2) COMPLETO:el segmento de la tabla que admite la vista materializada se trunca y se vuelve a llenar por completo mediante la consulta asociada. 3) FORZAR:Se intenta una actualización rápida. Si no es posible, se realiza una actualización completa. |
ON [CONFIAR | DEMANDA ] | Podemos especificar ON COMMIT para que la actualización se active mediante un cambio de datos confirmado en una de las tablas dependientes. O podemos especificar ON DEMAND para que la actualización se inicie mediante una solicitud manual o una tarea programada. |
[[HABILITAR | DESHABILITAR] CONSULTA REESCRIBIR] | La vista es elegible para la reescritura 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;
Actualización de vista materializada
Podemos actualizar la vista materializada a través del paquete PLSQL DBMS_MVIEW
El paquete DBMS_MVIEW contiene tres API para realizar operaciones de actualización:
DBMS_MVIEW.REFRESH
Actualizar una o más vistas materializadas.
DBMS_MVIEW.REFRESH_ALL_MVIEWS
Actualizar todas las vistas materializadas.
DBMS_MVIEW.REFRESH_DEPENDENT
Actualizar todas las vistas materializadas que dependen de una tabla maestra específica o una vista materializada o una lista de tablas maestras o vistas materializadas.
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Here C stands for Complete refresh
Si intenta hacer una actualización rápida, use el siguiente comando
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Here F stands for fast Refresh
Lanzará un error, ya que no hay un registro de vista materializado. estaremos revisando el registro de vista materializado a continuación
Con Oracle 12c, Oracle ha introducido la nueva API DBMS_SYNC_REFRESH para actualizar
¿Qué es el registro de vista materializada de Oracle?
Cuando se realizan cambios DML en los datos de la tabla maestra, Oracle Database almacena filas que describen esos cambios en el registro de vista materializada y luego utiliza el registro de vistas materializadas para actualizar las vistas materializadas en función de la tabla maestra. Este proceso se denomina actualización incremental o rápida. Sin un registro de vista materializada, Oracle Database debe volver a ejecutar la consulta de vista materializada para actualizar la vista materializada. Este proceso se denomina actualización completa. Por lo general, una actualización rápida lleva menos tiempo que una actualización completa.
Un registro de vista materializado se encuentra en la base de datos maestra en el mismo esquema que la tabla maestra. Una tabla maestra solo puede tener un registro de vista materializado definido en ella. Oracle Database puede usar este registro de vista materializada para realizar actualizaciones rápidas para todas las vistas materializadas de actualización rápida basadas en la tabla maestra.
Para actualizar rápidamente una vista de unión materializada, debe crear un registro de vista materializada para cada una de las tablas a las que hace referencia la vista materializada.
Actualizar grupo
Un grupo de actualización es una colección de una o más vistas materializadas que Oracle actualiza en una transacción atómica, lo que garantiza que se conserven las relaciones entre las tablas maestras
Ejemplos:
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');
Cómo comprobar el estado de la vista materializada
SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;
Opción de actualización fuera de lugar para la vista materializada
Con la versión 1 de 12c, hay disponible una nueva opción de actualización para mejorar el rendimiento y la disponibilidad de la actualización de la vista materializada. Esta opción de actualización se denomina actualización fuera de lugar porque utiliza tablas externas durante la actualización en lugar de la actualización "en el lugar" existente que aplica cambios directamente a la tabla del contenedor de vista materializada. La opción de actualización fuera de lugar funciona con todos los métodos de actualización existentes, como FAST ('F'), COMPLETE ('C'), PCT ('P') y FORCE ('?').
La actualización fuera de lugar es particularmente efectiva cuando se manejan situaciones con grandes cantidades de cambios de datos, donde las declaraciones DML convencionales no escalan bien. También le permite lograr un alto grado de disponibilidad porque las vistas materializadas que se actualizan se pueden usar para el acceso directo y la reescritura de consultas durante la ejecución de instrucciones de actualización.
En la actualización fuera de lugar, las partes enteras o afectadas de una vista materializada se calculan en una o más tablas externas.
exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false) ;
Diferencia entre la vista materializada y la vista de Oracle
Como se explicó anteriormente Vistas materializadas se basan en disco y se actualizan periódicamente según la definición de la consulta. En la vista materializada, el conjunto de resultados se almacena en la tabla de vista materializada
Visualizaciones son solo virtuales y ejecutan la definición de consulta cada vez que se accede a ellos. En vista, no se almacena ningún conjunto de resultados y accede a la tabla subyacente cada vez que se accede a la vista
También lee
Uniones de Oracle
Subconsultas de Oracle
https://en.wikipedia.org/wiki/Materialized_view