Configure and Manage Distributed Materialized Views

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;