Che cosa sono le viste materializzate in Oracle
Una vista materializzata è un oggetto database che contiene i risultati di una query. È diverso dalla semplice visione dell'oracolo. Queste viste materializzate hanno dati archiviati e quando si interroga la vista materializzata, restituisce i dati dai dati archiviati. La clausola FROM della query può denominare tabelle, viste e altre viste materializzate. Collettivamente questi oggetti sono chiamati tabelle master (un termine di replica) o tabelle di dettaglio (un termine di data warehousing). Questo riferimento utilizza "tabelle master" per coerenza. I database contenenti le tabelle master sono chiamati database master.
Quando crei una vista materializzata, Oracle Database crea una tabella interna e almeno un indice Oracle e può creare una vista, il tutto nello schema della vista materializzata. Oracle Database utilizza questi oggetti per mantenere i dati di visualizzazione materializzati. Devi disporre dei privilegi necessari per creare questi oggetti.
Privilegi richiesti per creare una vista materializzata
L'utente deve avere CREA VISUALIZZAZIONE MATERIALIZZATA per creare una vista materializzata
Sintassi generale
CREA VIEWBUILD MATERIALIZZATO [IMMEDIATO | RINVIATO]AGGIORNA [VELOCE | COMPLETO | FORZA ]SU [COMMIT | RICHIESTA ][[ABILITA | DISABLE] QUERY REWRITE][ON PREBUILT TABLE]COME;
Spiegazione di ogni termine
BUILD [IMMEDIATO | RINVIATO] | Possiamo specificare di popolare immediatamente Oppure possiamo specificare DEFERRED per popolare al primo aggiornamento richiesto. |
AGGIORNA [VELOCE | COMPLETO | FORZA ] | Ci sono tre opzioni qui.Ognuna spiegata di seguito 1) VELOCE:viene tentato un aggiornamento rapido. Se i log delle viste materializzate non sono presenti in anticipo rispetto alle tabelle di origine, la creazione non riesce. 2) COMPLETO:il segmento della tabella che supporta la vista materializzata viene troncato e ripopolato completamente utilizzando la query associata. 3)FORCE:Viene tentato un aggiornamento rapido. Se non è possibile, viene eseguito un aggiornamento completo. |
ON [COMMIT | DOMANDA] | Possiamo specificare ON COMMIT in modo che l'aggiornamento venga attivato da una modifica dei dati confermata in una delle tabelle dipendenti Oppure possiamo specificare ON DEMAND in modo che l'aggiornamento venga avviato da una richiesta manuale o da un'attività pianificata. |
[[ABILITA | DISABILITA] QUERY REWRITE] | La vista è idonea per la riscrittura della query |
CREA VISUALIZZAZIONE MATERIALIZZATA mv_test
BUILD IMMEDIATE
REFRESH completo
ON demand AS
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
DA EMP,DEPT
dove EMP.DEPTNO=DEPT.DEPTNO;
Aggiornamento vista materializzato
Possiamo aggiornare la vista materializzata tramite il pacchetto PLSQL DBMS_MVIEW
Il pacchetto DBMS_MVIEW contiene tre API per eseguire operazioni di aggiornamento:
DBMS_MVIEW.REFRESH
Aggiorna una o più viste materializzate.
DBMS_MVIEW.REFRESH_ALL_MVIEWS
Aggiorna tutte le visualizzazioni materializzate.
DBMS_MVIEW.REFRESH_DEPENDENT
Aggiorna tutte le viste materializzate che dipendono da una tabella master specificata o da una vista materializzata o da un elenco di tabelle master o viste materializzate.
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Qui C sta per Aggiornamento completo
Se provi ad eseguire un aggiornamento rapido, utilizza il comando seguente
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Qui F sta per aggiornamento veloce
Verrà generato un errore, poiché non esiste un registro di visualizzazione materializzato. controlleremo il registro delle viste materializzate di seguito
Con Oracle 12c, Oracle ha introdotto la nuova API DBMS_SYNC_REFRESH per l'aggiornamento
Cos'è Oracle Materialized View Log
Quando vengono apportate modifiche DML ai dati della tabella master, Oracle Database archivia le righe che descrivono tali modifiche nel registro della vista materializzata e quindi utilizza il registro delle viste materializzate per aggiornare le viste materializzate in base alla tabella principale. Questo processo è chiamato aggiornamento incrementale o rapido. Senza un log della vista materializzata, Oracle Database deve rieseguire la query della vista materializzata per aggiornare la vista materializzata. Questo processo è chiamato aggiornamento completo. Di solito, un aggiornamento rapido richiede meno tempo di un aggiornamento completo.
Un registro della vista materializzata si trova nel database master nello stesso schema della tabella master. Una tabella principale può avere un solo registro della vista materializzata definito su di essa. Oracle Database può utilizzare questo registro delle viste materializzate per eseguire aggiornamenti rapidi per tutte le viste materializzate ad aggiornamento rapido basate sulla tabella principale.
Per aggiornare rapidamente una vista di unione materializzata, devi creare un registro della vista materializzata per ciascuna delle tabelle a cui fa riferimento la vista materializzata.
Aggiorna gruppo
Un gruppo di aggiornamento è una raccolta di una o più viste materializzate che Oracle aggiorna in una transazione atomica, garantendo che le relazioni tra le tabelle master siano preservate
Esempi:
CREA VISUALIZZAZIONE MATERIALIZZATA mv_test
TABLESPACE test_data
BUILD IMMEDIATE
AGGIORNAMENTO completo SU COMMIT AS
SELECT a.name, b.salary FROM [email protected]_LINK a, [email protected]_LINK b dove 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 example@ sqldat.com_LINK a, [email protected]_LINK b dove a.emp_id=b.emp_id;CREA LOG VISUALIZZA MATERIALIZZATO SU 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');
Come controllare lo stato della vista materializzata
SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
DA USER_MVIEWS ORDINE PER MVIEW_NAME;
Opzione di aggiornamento fuori luogo per la visualizzazione materializzata
Con 12c Release 1, è disponibile una nuova opzione di aggiornamento per migliorare le prestazioni e la disponibilità dell'aggiornamento delle viste materializzate. Questa opzione di aggiornamento è denominata aggiornamento fuori luogo perché utilizza tabelle esterne durante l'aggiornamento anziché l'aggiornamento "sul posto" esistente che applica direttamente le modifiche alla tabella del contenitore della vista materializzata. L'opzione di aggiornamento fuori luogo funziona con tutti i metodi di aggiornamento esistenti, come FAST ('F'), COMPLETE ('C'), PCT ('P') e FORCE ('?').
L'aggiornamento fuori luogo è particolarmente efficace quando si gestiscono situazioni con grandi quantità di modifiche ai dati, in cui le istruzioni DML convenzionali non si adattano bene. Consente inoltre di ottenere un livello di disponibilità molto elevato poiché le viste materializzate che vengono aggiornate possono essere utilizzate per l'accesso diretto e la riscrittura delle query durante l'esecuzione delle istruzioni di aggiornamento.
Nell'aggiornamento fuori luogo, le parti intere o interessate di una vista materializzata vengono calcolate in una o più tabelle esterne.
exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false);
Differenza tra vista materializzata e vista Oracle
Come spiegato sopra Viste materializzate sono basati su disco e vengono aggiornati periodicamente in base alla definizione della query. Nella vista materializzata, il set di risultati viene archiviato nella tabella della vista materializzata
Viste sono solo virtuali ed eseguono la definizione della query ogni volta che vi si accede. Nella visualizzazione non viene memorizzato alcun set di risultati e accede alla tabella sottostante ogni volta che si accede alla visualizzazione
Legge anche
Oracle Joins
Subquery Oracle
https://en.wikipedia.org/wiki/Materialized_view