CREATE MATERIALIZED VIEW-Anweisung (Oracle)

Bei Oracle gibt es für die Erstellung materialisierter Sichten die CREATE MATERIALIZED VIEW-Anweisung mit einer Reihe von Konfigurationsmöglichkeiten. Gelöscht werden diese Sichten mit dem DROP-Befehl.

Syntax der CREATE MATERIALIZED VIEW-Anweisung (Auszug):

   <CREATE MATERIALIZED VIEW-Anweisung (Oracle, Auszug)> ::=
        CREATE MATERTALIZED VIEW sichtname
             [(<Spaltendefinition> [, <Spaltendefinition>]...)
              [<build_clause>]
              <refresh_clause> 
              AS <Unterabfrage?>;

   <refresh_clause> ::=     NEVER REFRESH 
                        | { REFRESH [ FAST | COMPLETE | FORCE ] 
                                    [ ON DEMAND | ON COMMIT ]
                                    [ START WITH date ] [ NEXT date ] }


   <build_clause>   ::= BUILD { IMMEDIATE|DEFFERED}

Zum Füllen der Sicht bzw. der Festlegung, wann das Anfrageergebnis in der Sicht materialisiert wird, bietet ORACLE an:

  • BUILD IMMEDIATE erzwingt das sofortige Füllen,
  • BUILD DEFERRED lässt das Füllen zu einem späteren Zeitpunkt zu.

Mit der Refresh-Klausel wird der Zeitpunkt der Aktualisierung der materialisierten Daten bei Manipulationen der Basisdaten in den zugrunde liegenden Tabellen wie auch die Art der Aktualisierung spezifiziert.

Bei ORACLE werden vier Refresh-Arten unterschieden:

  • NEVER REFRESH: Es wird nie eine Aktualisierung der materialisierten Daten durchgeführt.
  • COMPLETE: Der SELECT-Ausdruck wird vollständig neu ausgewertet und alle Datensätze aus den Tabellen unabhängig von irgendwelchen Änderungen erneut ermittelt.
  • FAST: In Abhängigkeit von den Änderungen in den zugrunde liegenden Tabellen, die in LOG-Dateien protokolliert werden, werden nur die von diesen Änderungen betroffenen Datensätze der materialisierte Sicht aktualisiert. Diese inkrementelle Aktualisierung spart erheblich Zeit gegenüber der vollständigen Rematerialisierung im COMPLETE-Modus. Die FAST-Option ist bei ORACLE nur bei sehr speziellen materialisierten Sichten anwendbar (siehe ORACLE-Online-Hilfe). Aus der wissenschaftlichen Diskussion heraus sind diese Restriktionen nicht zwingend.
  • FORCE: Ist ein FAST-Refresh möglich, so wird er durchgeführt, sonst ein COMPLETE-Refresh. Das DBMS trifft diese Entscheidung.
Bei einer inkrementellen Änderung über die REFRESH FAST-Option ist die Verwendung von LOG-Tabellen erforderlich, in denen die Änderungsoperationen aller der Sichtdefinition zugrunde liegenden Tabellen protokolliert werden. Für jede dieser Tabellen muss eine LOG-Tabelle erstellt werden. Protokolliert werden die Änderungen (INSERT, UPDATE, DELETE? ) durch vom DBMS automatisch generierte Trigger auf den Tabellen. Eine LOG-Tabelle wird durch die folgende Anweisung angelegt:
CREATE MATERIALIZED VIEW LOG ON Basistabelle WITH ...
Welche Attribute nun für die Protokollierung der betroffenen Tupel genutzt werden sollen, kann in der WITH-Klausel spezifiziert werden. Sinnvoll erscheinen u.a. PRIMARY KEY für den Primärschlüssel bzw. ROWID für den Tupelidentifikator. Die Forderung nach LOG-Tabellen ist nicht die einzige Restriktion der Sichtanfragen für eine inkrementelle Aktualisierbarkeit.

Als Aktualisierungszeitpunkte bietet ORACLE an:

  • ON COMMIT: Die Aktualisierung wird automatisch zum Transaktionsende (COMMIT-Anweisung) durchgeführt.
  • ON DEMAND: Die Aktualisierung wird automatisch durchgeführt, wenn spezielle Prozeduren des Package DBMS_MVIEW zur Aktualisierung von Sichten aufgerufen werden.
  • NEXT date: Es wird ein Intervall für die nächste und die weiteren Aktualisierung spezifiziert.
  • Mit der START WITH-Option kann ein Starttermin für die Aktualisierungen definiert werden.

Beispiele (Oracle):

    CREATE MATERIALIZED VIEW Angestellte_Abteilung_mv (Mitarbeitername, Privates_Telefon, Abteilung) 
REFRESH FAST ON COMMIT AS SELECT Nachname ||', '|| Vorname, Telefon_priv, Abteilungen.Name FROM Angestellte, Abteilungen WHERE Angestellte.Abt_nr = Abteilungen.Abt_nr AND Gehalt > 3000;

Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorien: SQL, C