DBMS_MVIEW: Manutenção e Gerenciamento de Materialized Views no Oracle
Introdução
Materialized Views (MViews) são objetos poderosos no Oracle Database que armazenam os resultados de uma consulta e podem ser referenciados como tabelas. Elas melhoram o desempenho de consultas ao pré-calcular e armazenar os resultados, reduzindo a necessidade de processamento repetitivo de grandes conjuntos de dados. O pacote DBMS_MVIEW
no Oracle 19c oferece uma série de funcionalidades para facilitar a manutenção e o gerenciamento eficientes dessas visões materializadas.
Principais Funções do DBMS_MVIEW
- Refresh de Materialized Views: O DBMS_MVIEW oferece procedimentos para atualizar (refresh) as MViews, mantendo-as sincronizadas com os dados mais recentes. O procedimento
DBMS_MVIEW.REFRESH
é essencial para esse propósito e pode ser usado para atualizar todas as MViews ou uma específica. - Gestão de Log: O gerenciamento de log é crucial para manter a consistência dos dados nas MViews. Os logs de materialized view registram as alterações na tabela de origem, permitindo uma atualização eficiente da MView. O DBMS_MVIEW oferece a função
DBMS_MVIEW.LOG
para criar e gerenciar esses logs. - Fast Refresh: O Oracle suporta dois métodos de atualização de MViews: Complete Refresh e Fast Refresh. O Fast Refresh é geralmente preferido, pois atualiza apenas as linhas afetadas na MView, economizando tempo e recursos. O DBMS_MVIEW possui funcionalidades específicas para suportar Fast Refresh.
Exemplos Práticos
Criando as tabelas
-- Criar tabela EMPLOYEES
CREATE TABLE EMPLOYEES (
EMPLOYEE_ID NUMBER,
FIRST_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
SALARY NUMBER
);
-- Inserir dados na tabela EMPLOYEES
INSERT INTO EMPLOYEES VALUES (1, 'John', 'Doe', 60000);
INSERT INTO EMPLOYEES VALUES (2, 'Jane', 'Smith', 55000);
INSERT INTO EMPLOYEES VALUES (3, 'Robert', 'Johnson', 70000);
INSERT INTO EMPLOYEES VALUES (4, 'Emily', 'Williams', 48000);
INSERT INTO EMPLOYEES VALUES (5, 'Michael', 'Davis', 62000);
-- Criar tabela SALES
CREATE TABLE SALES (
PRODUCT_ID NUMBER,
QUANTITY_SOLD NUMBER
);
-- Inserir dados na tabela SALES
INSERT INTO SALES VALUES (101, 50);
INSERT INTO SALES VALUES (102, 30);
INSERT INTO SALES VALUES (103, 20);
INSERT INTO SALES VALUES (104, 45);
INSERT INTO SALES VALUES (105, 60);
Criando uma Materialized View
CREATE MATERIALIZED VIEW MY_MVIEW
AS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE SALARY > 50000;
CREATE MATERIALIZED VIEW HR.SALES_MVIEW
AS
SELECT PRODUCT_ID, SUM(QUANTITY_SOLD) AS TOTAL_SALES
FROM SALES
GROUP BY PRODUCT_ID;
Criando um Log para a MView
EXEC DBMS_MVIEW.LOG('HR.EMPLOYEES', 'MY_MVIEW');
EXEC DBMS_MVIEW.LOG('HR.PRODUCTS', 'HR.SALES_MVIEW');
Exemplo de desativação de um log para uma MView
EXEC DBMS_MVIEW.PURGE_LOG('HR.PRODUCTS', 'HR.SALES_MVIEW');
Atualizando uma MView usando Fast Refresh
EXEC DBMS_MVIEW.REFRESH('MY_MVIEW', 'F');
EXEC DBMS_MVIEW.REFRESH('HR.SALES_MVIEW', 'FAST');
Exemplo de especificação de método de Fast Refresh
EXEC DBMS_MVIEW.REFRESH('HR.PRODUCTS_MVIEW', 'FAST', 'TRUNCATE');
Conclusão
O pacote DBMS_MVIEW
no Oracle 19c fornece ferramentas robustas para a manutenção e gerenciamento eficiente de Materialized Views. Ao utilizar as funcionalidades oferecidas por este pacote, os administradores de banco de dados podem otimizar o desempenho do sistema e garantir que as MViews estejam sempre atualizadas.
Espero que este artigo tenha sido útil e interessante para você.
Abs
Referências
- Oracle Database PL/SQL Packages and Types Reference, 19c Edition
- Oracle Database Advanced Replication
- Oracle Database Data Warehousing Guide, 19c Edition