Oracle
 sql >> Base de données >  >> RDS >> Oracle

qu'est-ce que les vues matérialisées dans oracle?

Qu'est-ce que les vues matérialisées dans Oracle

Une vue matérialisée est un objet de base de données qui contient les résultats d'une requête. C'est différent de la vue oracle simple. Ces vues matérialisées contiennent des données stockées et lorsque vous interrogez la vue matérialisée, elle renvoie des données à partir des données stockées. La clause FROM de la requête peut nommer des tables, des vues et d'autres vues matérialisées. Collectivement, ces objets sont appelés tables principales (terme de réplication) ou tables détaillées (terme d'entreposage de données). Cette référence utilise des "tables maîtresses" pour la cohérence. Les bases de données contenant les tables maîtres sont appelées bases de données maîtres.

Lorsque vous créez une vue matérialisée, Oracle Database crée une table interne et au moins un index Oracle, et peut créer une vue, le tout dans le schéma de la vue matérialisée. Oracle Database utilise ces objets pour gérer les données de la vue matérialisée. Vous devez disposer des privilèges nécessaires pour créer ces objets.

Privilèges requis pour créer une vue matérialisée

L'utilisateur doit avoir CRÉER UNE VUE MATÉRIALISÉE pour créer une vue matérialisée

Syntaxe générale

CREATE MATERIALIZED VIEW
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
[ON PREBUILT TABLE]
AS
;

Explication de chaque terme

CONSTRUIRE [IMMÉDIAT | DIFFÉRÉ] Nous pouvons spécifier de remplir immédiatement Ou nous pouvons spécifier DEFERRED pour remplir lors de la première actualisation demandée.
ACTUALISER [RAPIDE | COMPLET | FORCER ] Il y a trois options ici. Chacune expliquée ci-dessous

1) FAST :Un rafraîchissement rapide est tenté. Si les journaux des vues matérialisées ne sont pas présents par rapport aux tables source à l'avance, la création échoue.


2) COMPLET :Le segment de table supportant la vue matérialisée est tronqué et repeuplé complètement à l'aide de la requête associée.


3)FORCE :Un rafraîchissement rapide est tenté. Si cela n'est pas possible, une actualisation complète est effectuée.

ON [COMMIT | DEMANDE ] Nous pouvons spécifier ON COMMIT afin que l'actualisation soit déclenchée par une modification de données validée dans l'une des tables dépendantes. Ou nous pouvons spécifier ON DEMAND afin que l'actualisation soit initiée par une demande manuelle ou une tâche planifiée.
[[ACTIVER | DÉSACTIVER] RÉÉCRITURE DE LA REQUÊTE] La vue est éligible pour la réécriture de la requête
CREATE MATERIALIZED VIEW mv_test
BUILD IMMEDIATE
REFRESH complete
ON demand AS
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP,DEPT
where EMP.DEPTNO= DEPT.DEPTNO;

Actualisation de la vue matérialisée

Nous pouvons actualiser la vue matérialisée via le package PLSQL DBMS_MVIEW

Le package DBMS_MVIEW contient trois API pour effectuer des opérations d'actualisation :

DBMS_MVIEW.REFRESH

Actualiser une ou plusieurs vues matérialisées.

DBMS_MVIEW.REFRESH_ALL_MVIEWS

Actualiser toutes les vues matérialisées.

DBMS_MVIEW.REFRESH_DEPENDENT

Actualise toutes les vues matérialisées qui dépendent d'une table maître ou d'une vue matérialisée spécifiée ou d'une liste de tables maîtres ou de vues matérialisées.

EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Here C stands for Complete refresh

Si vous essayez d'effectuer une actualisation rapide, utilisez la commande ci-dessous

EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Here F stands for fast Refresh

Cela générera une erreur, car il n'y a pas de journal de vue matérialisé. nous allons vérifier le journal des vues matérialisées ci-dessous

Avec Oracle 12c, Oracle a introduit une nouvelle API DBMS_SYNC_REFRESH pour l'actualisation

Qu'est-ce qu'Oracle Materialized View Log

Lorsque des modifications DML sont apportées aux données de la table principale, Oracle Database stocke les lignes décrivant ces modifications dans le journal des vues matérialisées puis utilise le journal des vues matérialisées pour actualiser les vues matérialisées en fonction de la table maître. Ce processus est appelé actualisation incrémentielle ou rapide. Sans journal de vue matérialisée, Oracle Database doit réexécuter la requête de vue matérialisée pour actualiser la vue matérialisée. Ce processus s'appelle une actualisation complète. En règle générale, une actualisation rapide prend moins de temps qu'une actualisation complète.

Un journal des vues matérialisées se trouve dans la base de données master dans le même schéma que la table master. Une table maître ne peut avoir qu'un seul journal de vues matérialisées défini dessus. Oracle Database peut utiliser ce journal de vues matérialisées pour effectuer des actualisations rapides pour toutes les vues matérialisées à actualisation rapide basées sur la table maître.

Pour actualiser rapidement une vue de jointure matérialisée, vous devez créer un journal de vue matérialisée pour chacune des tables référencées par la vue matérialisée.

Actualiser le groupe

Un groupe d'actualisation est une collection d'une ou plusieurs vues matérialisées qu'Oracle actualise dans une transaction atomique, garantissant que les relations entre les tables maîtres sont préservées

Exemples :

CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH complete ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where 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 [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW LOG ON 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');

 

Comment vérifier l'état de la vue matérialisée

SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;

 

Option d'actualisation hors place pour la vue matérialisée

Avec 12c Release 1, une nouvelle option d'actualisation est disponible pour améliorer les performances et la disponibilité de l'actualisation des vues matérialisées. Cette option d'actualisation est appelée actualisation hors place car elle utilise des tables externes lors de l'actualisation par opposition à l'actualisation "sur place" existante qui applique directement les modifications à la table conteneur de la vue matérialisée. L'option d'actualisation hors place fonctionne avec toutes les méthodes d'actualisation existantes, telles que FAST ('F'), COMPLETE ('C'), PCT ('P') et FORCE ('?').

L'actualisation hors place est particulièrement efficace lors de la gestion de situations avec de grandes quantités de modifications de données, où les instructions DML conventionnelles ne s'adaptent pas bien. Cela vous permet également d'atteindre un très haut degré de disponibilité, car les vues matérialisées en cours d'actualisation peuvent être utilisées pour un accès direct et la réécriture des requêtes lors de l'exécution des instructions d'actualisation.

Dans l'actualisation hors place, la totalité ou les parties affectées d'une vue matérialisée sont calculées dans une ou plusieurs tables externes.

exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false)
;

Différence entre la vue matérialisée et la vue Oracle

Comme expliqué ci-dessus Vues matérialisées sont basés sur le disque et sont mis à jour périodiquement en fonction de la définition de la requête. Dans la vue matérialisée, l'ensemble de résultats est stocké dans la table de la vue matérialisée

Vues sont uniquement virtuels et exécutent la définition de la requête à chaque accès. Dans la vue, aucun ensemble de résultats n'est stocké et il accède à la table sous-jacente à chaque accès à la vue

Lit également
Oracle rejoint
Sous-requêtes Oracle
https://en.wikipedia.org/wiki/Materialized_view