1. Documentación en Tahiti -> Masters Book List -> Data Warehousing Guide -> 9 Basic Materialized Views
2. Este objetivo nos demanda que conozcamos el procedimiento para crear una vista materializada en un entorno distribuido, esto es, crear una MVIEW en una BD distinta a la BD donde está la/s tabla/s maestra/s. Para ello, es necesario crear un DATABASE LINK para poder acceder a las tablas maestras, y luego el resto del procedimiento es prácticamente idéntico.
Vamos a utilizar la tabla EMPLOYEES del esquema HR en la BD OCM para crear una MVIEW en la BD de OEM. Este es el resumen de los pasos:
· Instalamos esquema HR en la BD de OCM
· Creamos una MVIEW LOG en la tabla EMPLOYEES (BD OCM)
· Creamos un DB LINK en la BD de OEM apuntando (BD OEM)
· Creamos la MVIEW de réplica de la tabla EMPLOYESS (BD OEM)
# Primero creamos el schema de ejemplo HR sino lo tenemos en la BD De OCM cd $ORACLE_HOME/demo/schema/human_resources -- Ejecutamos el script de creación del esquema HR SQL> @hr_main.sql specify password for HR as parameter 1: Enter value for 1: hr specify default tablespeace for HR as parameter 2: Enter value for 2: USERS specify temporary tablespace for HR as parameter 3: Enter value for 3: TEMP specify password for SYS as parameter 4: Enter value for 4: ************ specify log path as parameter 5: Enter value for 5: /tmp/ # Creamos el DB LINK en la BD de OEM # Lo primero es añadir la entrada OCM al fichero tnsnames.ora si no la tenemos vi $ORACLE_HOME/network/admin/tnsnames.ora # Añadimos estas lineas OCM= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=ocm.dbajunior.com)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=OCM))) # Comprobamos que tenemos conectividad tnsping ocm
-- Creamos la MVIEW LOG sobre la tabla EMPLOYEES CREATE MATERIALIZED VIEW LOG ON EMPLOYEES; -- Creamos el DB LINK CREATE PUBLIC DATABASE LINK OCM CONNECT TO HR IDENTIFIED BY "hr" USING 'OCM'; -- Probamos la conectividad SELECT COUNT(*) FROM EMPLOYEES@OCM; -- Creamos la MVIEW EMP apuntando a la tabla EMPLOYEES CREATE MATERIALIZED VIEW EMP REFRESH FAST AS SELECT * FROM EMPLOYEES@OCM; -- Probamos el Fast Refresh EXEC DBMS_MVIEW.REFRESH('EMP','F');
3. Una funcionalidad pendiente que nos habíamos dejado y puede resultar interesante consiste en los grupos de refresco (Materalized View Refresh Group). Podemos crear un grupo de vistas materializadas y refrescarlas de forma conjunta para que los datos sean consistentes entre ellos.
-- Creamos una MVIEW LOG en la tabla DEPARTMENTS (BD OCM) CREATE MATERIALIZED VIEW LOG ON DEPARTMENTS; -- Creamos una segunda vista materializada en la BD de OEM CREATE MATERIALIZED VIEW DEP REFRESH FAST AS SELECT * FROM DEPARTMENTS@OCM; -- Creamos el grupo de refresco -- La información se puede consultar en estas dos vistas -- · DBA_REFRESH -- · DBA_REFRESH_CHILDREN BEGIN DBMS_REFRESH.MAKE ( NAME => 'REFRESH_GROUP_TEST', LIST => 'EMP,DEP', NEXT_DATE => SYSDATE, INTERVAL => 'SYSDATE+1/1440', IMPLICIT_DESTROY => TRUE); END; / -- Limpiamos el entorno (OEM) EXEC DBMS_REFRESH.DESTROY('REFRESH_GROUP_TEST'); DROP MATERIALIZED VIEW EMP; DROP MATERIALIZED VIEW DEP; DROP PUBLIC DATABASE LINK OCM; -- Borramos las MVIEW LOG en OCM DROP MATERIALIZED VIEW LOG ON EMPLOYEES; DROP MATERIALIZED VIEW LOG ON DEPARTMENTS;