Was sind materialisierte Ansichten in Oracle
Eine materialisierte Ansicht ist ein Datenbankobjekt, das die Ergebnisse einer Abfrage enthält. Es unterscheidet sich von der einfachen Orakelansicht. In diesen materialisierten Ansichten sind Daten gespeichert, und wenn Sie die materialisierte Ansicht abfragen, gibt sie Daten aus den gespeicherten Daten zurück. Die FROM-Klausel der Abfrage kann Tabellen, Ansichten und andere materialisierte Ansichten benennen. Zusammen werden diese Objekte als Mastertabellen (ein Replikationsbegriff) oder Detailtabellen (ein Data-Warehousing-Begriff) bezeichnet. Diese Referenz verwendet „Master-Tabellen“ aus Gründen der Konsistenz. Die Datenbanken, die die Master-Tabellen enthalten, werden Master-Datenbanken genannt.
Wenn Sie eine materialisierte Ansicht erstellen, erstellt Oracle Database eine interne Tabelle und mindestens einen Oracle-Index und möglicherweise eine Ansicht, alle im Schema der materialisierten Ansicht. Oracle Database verwendet diese Objekte, um die materialisierten Ansichtsdaten zu verwalten. Sie müssen über die zum Erstellen dieser Objekte erforderlichen Berechtigungen verfügen.
Berechtigungen erforderlich, um materialisierte Ansichten zu erstellen
Der Benutzer muss über MATERIALISIERTE ANSICHT ERSTELLEN verfügen um eine Materialisierungsansicht zu erstellen
Allgemeine Syntax
MATERIALISIERTE VIEWBUILD ERSTELLEN [SOFORT | VERZÖGERT]AKTUALISIEREN [SCHNELL | VOLLSTÄNDIG | FORCE ]ON [COMMIT | ANFORDERUNG ][[FREIGABE | DEAKTIVIEREN] QUERY REWRITE][ON PREBUILT TABLE]AS;
Erklärung der einzelnen Begriffe
ERSTELLEN [SOFORT | VERZÖGERT] | Wir können angeben, dass sie sofort gefüllt werden sollen, oder wir können DEFERRED angeben, damit sie bei der ersten angeforderten Aktualisierung gefüllt werden. |
AKTUALISIEREN [SCHNELL | VOLLSTÄNDIG | FORCE ] | Hier gibt es drei Optionen. Jede wird unten erklärt 1) SCHNELL:Es wird eine schnelle Aktualisierung versucht. Wenn die Protokolle der materialisierten Ansicht nicht im Voraus für die Quelltabellen vorhanden sind, schlägt die Erstellung fehl. 2) COMPLETE :Das Tabellensegment, das die materialisierte Ansicht unterstützt, wird abgeschnitten und mithilfe der zugehörigen Abfrage vollständig neu ausgefüllt. 3) FORCE :Eine schnelle Aktualisierung wird versucht. Wenn dies nicht möglich ist, wird eine vollständige Aktualisierung durchgeführt. |
EIN [COMMIT | NACHFRAGE ] | Wir können ON COMMIT angeben, sodass die Aktualisierung durch eine festgeschriebene Datenänderung in einer der abhängigen Tabellen ausgelöst wird, oder wir können ON DEMAND angeben, sodass die Aktualisierung durch eine manuelle Anforderung oder eine geplante Aufgabe initiiert wird. |
[[AKTIVIEREN | DISABLE] QUERY REWRITE] | Die Ansicht kann umgeschrieben werden |
MATERIALISIERTE ANSICHT ERSTELLEN mv_test
SOFORT ERSTELLEN
AKTUALISIEREN abgeschlossen
ON Demand AS
EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,ABTEIL.DNAME AUSWÄHLEN
FROM EMP,ABTEILUNG
wobei EMP.ABTEILNR=ABTEIL.ABTEILNR;
Aktualisierung der materialisierten Ansicht
Wir können die materialisierte Ansicht über das PLSQL-Paket DBMS_MVIEW
aktualisierenDas DBMS_MVIEW-Paket enthält drei APIs zum Ausführen von Aktualisierungsvorgängen:
DBMS_MVIEW.REFRESH
Aktualisieren Sie eine oder mehrere materialisierte Ansichten.
DBMS_MVIEW.REFRESH_ALL_MVIEWS
Alle materialisierten Ansichten aktualisieren.
DBMS_MVIEW.REFRESH_DEPENDENT
Alle materialisierten Ansichten aktualisieren, die von einer angegebenen Haupttabelle oder materialisierten Ansicht oder einer Liste von Haupttabellen oder materialisierten Ansichten abhängen.
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Hier steht C für Vollständige Aktualisierung
Wenn Sie versuchen, eine schnelle Aktualisierung durchzuführen, verwenden Sie den folgenden Befehl
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
F steht hier für Fast Refresh
Es wird ein Fehler ausgegeben, da es kein materialisiertes Ansichtsprotokoll gibt. Wir werden unten das Materialized-View-Log prüfen
Mit Oracle 12c hat Oracle die neue API DBMS_SYNC_REFRESH zur Aktualisierung eingeführt
Was ist Oracle Materialized View Log
Wenn DML-Änderungen an Stammtabellendaten vorgenommen werden, speichert Oracle Database Zeilen, die diese Änderungen im materialisierten Ansichtsprotokoll beschreiben und verwendet dann das materialisierte Ansichtsprotokoll, um materialisierte Ansichten basierend auf der Master-Tabelle zu aktualisieren. Dieser Vorgang wird als inkrementelle oder schnelle Aktualisierung bezeichnet. Ohne ein materialisiertes Ansichtsprotokoll muss Oracle Database die materialisierte Ansichtsabfrage erneut ausführen, um die materialisierte Ansicht zu aktualisieren. Dieser Vorgang wird als vollständige Aktualisierung bezeichnet. Normalerweise dauert eine schnelle Aktualisierung weniger Zeit als eine vollständige Aktualisierung.
Ein materialisiertes Ansichtsprotokoll befindet sich in der Master-Datenbank im selben Schema wie die Master-Tabelle. Für eine Haupttabelle kann nur ein materialisiertes Ansichtsprotokoll definiert sein. Oracle Database kann dieses materialisierte Ansichtsprotokoll verwenden, um schnelle Aktualisierungen für alle schnell aktualisierbaren materialisierten Ansichten basierend auf der Master-Tabelle durchzuführen.
Um eine materialisierte Join-Ansicht schnell zu aktualisieren, müssen Sie ein materialisiertes Ansichtsprotokoll für jede der Tabellen erstellen, auf die von der materialisierten Ansicht verwiesen wird.
Gruppe aktualisieren
Eine Aktualisierungsgruppe ist eine Sammlung von einer oder mehreren materialisierten Ansichten, die Oracle in einer atomaren Transaktion aktualisiert, um sicherzustellen, dass die Beziehungen zwischen den Mastertabellen erhalten bleiben
Beispiele:
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 SOFORT
REFRESH force ON COMMIT AS
SELECT a.name,b.salary FROM example@ sqldat.com_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');
Überprüfen des Status der materialisierten Ansicht
SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;
Out-of-Place-Aktualisierungsoption für materialisierte Ansicht
Mit 12c Release 1 ist eine neue Aktualisierungsoption verfügbar, um die Leistung und Verfügbarkeit der Aktualisierung der materialisierten Ansicht zu verbessern. Diese Aktualisierungsoption wird als Out-of-Place-Aktualisierung bezeichnet, da sie während der Aktualisierung externe Tabellen verwendet, im Gegensatz zur vorhandenen „In-Place“-Aktualisierung, die Änderungen direkt auf die Containertabelle der materialisierten Ansicht anwendet. Die Out-of-Place-Refresh-Option funktioniert mit allen vorhandenen Refresh-Methoden wie FAST ('F'), COMPLETE ('C'), PCT ('P') und FORCE ('?').
Die Out-of-Place-Aktualisierung ist besonders effektiv, wenn Situationen mit großen Mengen an Datenänderungen behandelt werden, in denen herkömmliche DML-Anweisungen nicht gut skalieren. Es ermöglicht Ihnen auch, einen sehr hohen Grad an Verfügbarkeit zu erreichen, da die aktualisierten materialisierten Ansichten für den direkten Zugriff und das Umschreiben von Abfragen während der Ausführung von Aktualisierungsanweisungen verwendet werden können.
Bei der Out-of-Place-Aktualisierung werden die gesamten oder betroffenen Teile einer materialisierten Ansicht in eine oder mehrere externe Tabellen berechnet.
exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false);
Unterschied zwischen materialisierter Ansicht und Oracle-Ansicht
Wie oben erklärt Materialisierte Aufrufe sind festplattenbasiert und werden basierend auf der Abfragedefinition regelmäßig aktualisiert. In der materialisierten Ansicht wird die Ergebnismenge in der Materialized View-Tabelle gespeichert
Aufrufe sind nur virtuell und führen die Abfragedefinition bei jedem Zugriff aus. In der Ansicht wird kein Ergebnissatz gespeichert und es wird bei jedem Zugriff auf die Ansicht auf die zugrunde liegende Tabelle zugegriffen
Liest auch
Oracle-Joins
Oracle-Unterabfragen
https://en.wikipedia.org/wiki/Materialized_view