domingo, 19 de octubre de 2014

Oracle 10g - Crear Vistas Materializadas


Vamos a suponer que tenemos un esquema que se llama Origen_tabla y otro que se llama Destino_tabla donde se va a alojar la vista materializada. 
Primero creamos una tabla sobre el esquema Origen_tabla llama tabla de la siguiente manera:

create table tabla (campo NUMBER PRIMARY KEY);

Luego creamos los log sobre la tabla para ser utilizados por la vista materializada:

CREATE MATERIALIZED VIEW LOG ON tabla

Luego le damos permisos sobre esta tabla al usuario Destino_tabla de la siguiente manera:

grant select on tabla to Destino_tabla
grant select on mlog$_tabla to Destino_tabla

Este ultimo permiso es muy importante para luego poder refrescar la vista materializada. Cuando creamos un log para una tabla con el comando create materialized view log nos crea una tabla con la información de los movimientos que la misma sufre. En caso de que no encontrar el nombre correcto de la tabla donde genera los logs se puede ejecutar la siguiente consulta:

select * from user_objects where object_name like '%MLOG%'

Y nos retorna todas las tablas que tienen un log creado.
El paso siguiente es conectarnos al usuario Destino_tabla y crear una vista materializada sobre la tabla del esquema Origen_tabla:

CREATE MATERIALIZED VIEW  tabla_view TABLESPACE name_tablespace BUILD IMMEDIATE REFRESH ON DEMAND 
as SELECT campo FROM origen_tabla.tabla;

Esto crea una vista materializada llamada "tabla_view" que se va a actualizar de forma manual.
El ultimo paso es crear un procedure que permita actualizar la vista materializada: 

CREATE OR REPLACE PROCEDURE destino_tabla.refresco_vm IS
BEGIN
   dms_mview.refresh('tabla_view');
   COMMIT;
END refresco;

Con esto creamos una vista materializada en un esquema en particular.

No hay comentarios:

Publicar un comentario