Oracle Data Warehouse Technik im Fokus

Größe: px
Ab Seite anzeigen:

Download "Oracle Data Warehouse Technik im Fokus"

Transkript

1 Oracle Data Warehouse Technik im Fokus Praxis-Seminar, Oracle, März 2015

2 Die Themen Data Warehouse Architekturen für effiziente Informationsverarbeitung Partitionierung Schlüssel und Indizierung im Data Warehouse Partitionierung und Indizierung im Data Warehouse Star Query Transformation Komprimierung im Data Warehouse Query-Optimizer und System-Statistiken im Data Warehouse Speicher-Hierarchie Beispiel Flash Automatische Verwaltung von Daten im Data Warehouse (Heat Map) Information Lifecycle Management Parallelisierung Query Result Cache Materialized Views und Kennzahlenkonzepte Automatische Aktualisierung von Materialized Views Konzepte rund um Materialized Views Automatisches Query Rewrite Materialized Views und Hierarchisierung von Dimensionen Hilfsmittel bei der Verwaltung von Materialized Views Analytische SQL-Funktionen In-Memory Database im Data Warehouse Wo und wie macht In-Memory im Data Warehouse Sinn und was ändert sich? Laden und Updaten im Data Warehouse mit Bordmitteln der Datenbank ETL-Performance-Techniken in der Datenbank Set-Based ETL-Prüf- und Transformations Techniken in der Datenbank Umgang mit Schlüssel im Verlauf des Ladens Lade-Transaktionssteuerung innerhalb der Datenbank Lade-Tools ausserhalb der Datenbank Security und Mandantensteuerung im Data Warehouse Multi-strukturierte Daten mit JSON Big Data Analysen im Data Warehouse mit Big Data SQL R als universelles Analyse-Mittel Notwendige Dinge, die niemand macht: Metadatenverwaltung im Data Warehouse Die optimale Hardware für das Data Warehouse Cluster-Einsatz Monitoring Data Warehouse Zusammenfassung 2

3 Data Warehouse Architekturen für effiziente Informationsverarbeitung

4 Immer wieder auf den Punkt bringen! Eines unternehmensweites DWH muss mehr leisten: 1 Zentral und Unternehmensweit 2 Erklärende Mehrwerte Zusammenführen von Daten aus allen Geschäftsprozessen Ermöglichen einer integrierten Sicht auf das ganze Unternehmen und nicht nur einzelner Abteilungen Integration bedeute die Harmonisierung verschiedner Sichten 3 Historisierung Aufgrund der Vergangenheit Trends der Zukunft erkennen Nur wer die Geschichte kennt, kann die Zukunft verstehen Nicht nur aktuelle Realtime- sondern vor allem historische Daten sind dafür nötig Für alle, auch sachfremde Mitarbeiter verständliche Daten Zusätzliche Referenzdaten von außerhalb des Unternehmens Erklärungen statt Codes 4 Entkopplung von op. Systemen Nur In separierten Systemen simulieren Neue Daten-Kombinationen schaffen Realtime-freie zeitbezogene Messpunkte schaffen

5 Evolution des Data Warehouse DWH-Systeme werden zunehmend auch in einem operativen Sinn genutzt Überschaubar / aggregiert Hochvolumig / granular Operativ überschaubar Taktisch DWH Strategisch Jahr/Quartal/Monat Komplexe Informations- Ausarbeitung und Analysen Woche/Tag Periodische Berichte Stunde/Minute/Sekunde/Realtime oft und schnell wiederholbare Einzel-informationen 5

6 Was geschieht in einem Data Warehouse wirklich Service Logistik Controlling Einkauf Vertrieb Marketing Servicekunde Logistikaufwand Profitabilität Produkte&Trends Kundenhistorie Marketingsicht Integration Layer Enterprise Layer Core - DWH / Info Pool Referenzdaten (extern) (10%) Stammdaten (10%) Bewegungsdaten / Transaktionen (80%) Marketingsicht Sozialsituation Kundenhistorie Profitabilität Kunde Logistikaufwand für einen Kunden Produkte&Trends Servicekunde User View Layer Geschäfts- Objekte Kennzahlen Multidimensionale Sichten Themenbezogene Sichten Top 100 unternehmensweite Kennzahlen Es geht um Gesamtsichten Top 5 Geschäftsfelder Profitabilität eines Kunden Profitabilität eines Produktes über den gesamten Lebenszyklus Bedarfsprognose von sozialen Gruppen Aktualität und Entwicklung des eigenen Portfolios Eigene Marktstärke im Vergleich zu den Wettbewerbern

7 Informationsbeschaffung organisieren Integration Layer (Stage) Zusammenführen von Daten aus unterschiedlichen Vorsystemen Prüfen, harmonisieren, brauchbar machen Enterprise Layer (DWH-Kernschicht) Zentrale Ablage aller Informationen des Data Warehouse Prozess- /Referenz, Stammdaten Langlebig, strategisch User View Layer (Data Marts) Nach Sachgebieten sortierte analysefähiger Ausschnitt von Daten der Kernschicht Endbenutzerverständlich Analysezeitraum- und Projekt-bezogen, taktisch

8 Die 3-Schichten-Architektur Das Ziel der 3-Schichten-Architektur ist der Entwurf einer möglichst umfassenden, mehrere Unternehmens- und Themenbereiche abdeckenden stabilen Informationsablage, die in kurzer Zeit konsolidierte Berichte und Analysen für alle (!) Zielgruppen des Unternehmens bereitstellt. Schlagwörter: Stabilität Kurze Lieferzeit Konsolidiert Alle Zielgruppen

9 Normalisieren / Denormalisieren Grundprinzip der Warehouse-Modellierung / Granularisierung als Lösung Operative Daten PRODUKTDATEN PD4711 AMKLB KLABAUTER IIO??? EERWEERW EU-Wert i Müll, Altlast, unverständliche Daten Normalisierte Daten (DWH) Produktsparten Spartenname Spartennr Produktgruppen Gruppenname Gruppennr Produkte Produktname Produktenr Einzelpreis Granulare Daten Im DWH Neu sortierte Daten Produktdaten Produktname Produktenr Einzelpreis Gruppenname Gruppennr Spartenname Spartennr Verständliche Information (denormalisiert) 9

10 Ein vollständiges Bild über relevante Geschäftsobjekte Service Servicekunde Logistik Logistikaufwand Controlling Profitabilität Einkauf Produkte&Trends Vertrieb Kundenhistorie Marketing Marketingsicht Log Files Web-Clicks Mails Call-Center Verträge Berichte Integration Layer HDFS / NoSQL Enterprise Layer Core - DWH / Info Pool Referenzdaten (extern) (10%) Stammdaten (10%) Bewegungsdaten / Transaktionen (80%) Marketingsicht Sozialsituation Kundenhistorie Profitabilität Kunde Logistikaufwand für einen Kunden Produkte&Trends Servicekunde Multi-strukturierte Daten User View Layer Geschäfts- Objekte Kennzahlen Multidimensionale Sichten Themenbezogene Sichten Top 100 unternehmensweite Kennzahlen Es geht um Gesamtsichten Top 5 Geschäftsfelder Profitabilität eines Kunden Profitabilität eines Produktes über den gesamten Lebenszyklus Bedarfsprognose von sozialen Gruppen Aktualität und Entwicklung des eigenen Portfolios Eigene Marktstärke im Vergleich zu den Wettbewerbern

11 Flexibilität und schnelles Bereitstellen Service Servicekunde Logistik Logistikaufwand Controlling Profitabilität Einkauf Produkte&Trends Vertrieb Kundenhistorie Marketing Marketingsicht Log Files Web-Clicks Mails Call-Center Verträge Berichte Integration Layer T T T B B HDFS / NoSQL Enterprise Layer Core - DWH / Info Pool R R S S S B B Marketingsicht Sozialsituation Kundenhistorie Profitabilität Kunde Logistikaufwand für einen Kunden Produkte&Trends Servicekunde Multi-strukturierte Daten B B User View Layer D D D F D F F D Geschäfts- Objekte D D D Kennzahlen Zusammenhängender Abfragebereich Es geht um Gesamtsichten Breite der Datenmodelle

12 Flexibilität und schnelles Bereitstellen Service Servicekunde Logistik Logistikaufwand Controlling Profitabilität Einkauf Produkte&Trends Vertrieb Kundenhistorie Marketing Marketingsicht Log Files Web-Clicks Mails Call-Center Verträge Berichte Integration Layer T T T B B HDFS / NoSQL Enterprise Layer Core - DWH / Info Pool R R S S S B B Multi-strukturierte Daten B Strategische Daten B User View Layer D D D F D F F D D D D Taktische Daten Rolle der zentralen Schicht Sich aus Informationsvorat bedienen Schneller reagieren können Synchronisierung von User Views Vermeiden von Redundanzen Historische Sicht

13 Die Rolle multidimensionaler Sichten Buchhaltung: Es fehlen Daten Warum sind die Spediteursrechnungen so hoch? Sind alle Bestellungen korrekt bezahlt worden? Wie hoch sind die Versandkosten pro Lieferung? Was wurde storniert? Marketing: Absatzzahlen sind nicht aussagefähig Wie viel Kunden gibt es? Lohnt die Kundenkarte? Welche Segmentierung gibt es? Vertrieb: wünscht leichtere Auswertungen Was sind wichtige Produkte? Was sind rentable Sparten? Hat sich der Servicebereich gelohnt? Vertrieb SERVICE GmbH Management Marketing Buchhaltung Controlling Controlling: Vergleichbarkeit fehlt Was sind rentable Sparten? Wie rentabel sind einzelne Produkte? Was kosten Produkte im Einkauf? Wie teuer wurden Produkte verkauft? Management: Kennzahlen fehlen Wie hoch sind die liquiden Mittel? Wie hoch sind die Außenstände? 13

14 Die Rolle multidimensionaler Sichten Kunden Kundenkarte Segmentierung Produkte Sparten Vertrieb: wünscht leichtere Auswertungen Was sind wichtige Produkte? Was sind rentable Sparten? Hat sich der Servicebereich gelohnt? Unternehmensbereiche Marketing: Absatzzahlen sind nicht aussagefähig Wie viel Kunden gibt es? Lohnt die Kundenkarte? Welche Segmentierung gibt es? Vertrieb Buchhaltung: Es fehlen Daten Lieferung Warum sind die Spediteursrechnungen so hoch? Bestellung Sind alle Bestellungen korrekt bezahlt worden? Wie hoch sind die Versandkosten pro Lieferung? Was wurde storniert? Umsatz / Nicht-Umsatz SERVICE GmbH Management Marketing Buchhaltung Controlling Controlling: Vergleichbarkeit fehlt Was sind rentable Sparten? Wie rentabel sind einzelne Produkte? Was kosten Produkte im Einkauf? Wie teuer wurden Produkte verkauft? Management: Kennzahlen fehlen Wie hoch sind die liquiden Mittel? Wie hoch sind die Außenstände? Sparten Produkte Einkauf/ Verkauf Geldflüsse Gebundene Werte 14

15 Referenzdaten Stammdaten Wohnkategorien Wohnart_ID Wohnart Bildung und Berufe Bildungs_GRP Lieferanten Lieferanten_Art Lieferant Lieferant_ID Vertriebskanäle Kanal Kanal_ID Internet, Baumarkt, Partner, Kette... Berufs_GRP_ID Berufs_GRP Einkommenskategorien Eink_GRP_ID Einkomm_GRP Regionen Land Kreis Ort Kundenstamm Kunderart KD_Karten_ID PrivatKD_Art Skonto_Proz Gr_Haushalt Fam_Stand Geb_Dat Name Kunden_ID Dienstleistungen Vermittl_Art_ID Vermittl_Art Produktgruppen Produktgrp_ID Produktgruppe Finanzleistung Handwerksleistung Computer, Haushaltsware, KFT... Produktarten Produktart_ID Produktart Geschäftssegmente Segement_ID Segment Produkte Pref_Liefer_ID VK_Preis Produkt Produkt_ID Vermittlung, Handelsware IT-Ware, Baumarktware 15

16 D_Kunden Alle_Kunden Land Kreis Ort Kunderart Wohnart_ID Wohnart KD_Karten_ID PrivatKD_Art Skonto_Proz Bildungs_GRP Berufs_GRP_ID Berufs_GRP Gr_Haushalt Fam_Stand Geb_Dat Eink_GRP_ID Einkomm_GRP Name Kunden_ID Segment Beruf& Bildung Merkmal Familie D_Zeit Alle_Zeiten Jahr Quartal Monat Monats_i_Jahr Tag_i_Jahr Tages_ID Segmentierung nach Einkommen F_Einkaeufe Mitarbeiter_ID Produkt_ID Lieferanten_ID EK_Preis Menge Lieferzeit_ID Zeit_ID Y F_Verkaeufe Zeiit_Id Kauf_ID Produkt_ID Positions_ID Menge VK_Wert Discout_Proz Kunden_ID Filial_ID D_Lieferanten Alle_Lieferant Land Kreis Ort Lieferanten_Art Lieferant Lieferant_ID Sicht auf - Geschäftsobjekte - Sicht auf Kennzahlen - Drillpfade - Synchronisierungselemente D_Produkt Alle_Produkte Kanal Kanal_ID Produktart_ID Produktart Segement_ID Segment Vermittl_Art_ID Vermittl_Art Produktgrp_ID Produktgruppe Pref_Liefer_ID VK_Preis Produkt Produkt_ID Internet, Baumarkt, Partner, Kette... Vermittlung, Handelsware IT-Ware, Baumarktware Finanzleistung Handwerksleistung Computer, Haushaltsware, KFT... 16

17 Multidimensionales Modell (Star Schema) Einstiegspunkte für Anwender-Abfragen Artikel A1 A2 A3 A4 Art1 Art2 Art3 Art4 Star Schema Flexibel Graphisch auch für Business-User verständlich Farbe Blau Gelb Rot Lila 1 : n V1 V2 V3 V4 Verkäufe R1 R2 R3 R4 A1 A2 A3 A4 Maier Müller Schmid Engel R1 R2 R3 R4 Nord Sued West Ost Z1 Z2 Z3 Z4 Status P F P F 1 : n V1 V2 V3 V4 n : Schwach Mittel Hoch Schwach Wohndichte Kunde n : 1 Regionen Zeit Z1 Z2 Z3 Z Q3 Q3 Q3 Q3 17

18 Multidimensionales Modell (Star Schema) Einstiegspunkte für Anwender-Abfragen Artikel A1 A2 A3 A4 Art1 Art2 Art3 Art4 Farbe Blau Gelb Rot Lila Dimensionen (Kontext) Star Schema Flexibel Graphisch auch für Business-User verständlich 1 : n V1 V2 V3 V4 Verkäufe A1 A2 A3 A4 R1 R2 R3 R4 Maier Müller Schmid Engel R1 R2 R3 R4 Nord Sued West Ost Z1 Z2 Z3 Z4 Status P F P F Dimensionen (Kontext) 1 : n Kennzahlen V1 V2 V3 V4 n : (Numerische Messungen) Schwach Mittel Hoch Schwach Dimensionen (Kontext) Wohndichte Kunde n : 1 Regionen Zeit Z1 Z2 Z3 Z Q3 Q3 Q3 Q3 Dimensionen (Kontext) 18

19 H i e r a r c h i e Dimensionen Levelschlüssel Dim_Artikel Artikelsparte_Langname Artikelsparte Artikelgruppe_Langtext Sparte Parent Aggregation Levelschlüssel Levelschlüssel/ Objektname Business Key Künstlicher Dimension Key Artikelgruppe Artikel_Langtext Artikel Artikel_Schlüssel Dim_Schlüssel Fakten (Umsatz) Parent Aggregation Konsolidierungslevel Betrachtungslevel 19

20 Unbalanced Hierarchy Star Schema-Design - Modellierungstechniken Teile Parent Teil von Fakt Gelieferte Teile Bestellkosten Lieferant Factless Fact Benutzte Teile Count Region Ort Kreis Land Region Produkte Sparte Gruppe Produkt Verkauf Fakten Zeit Produkt Lieferanten Zeit Conformed Dimension Verkäufer Verkaufsanteil Kunde Segment Alter Bildung Conformed Dimension Intersection- Table (Degenerated Fact) 1:1 Lieferant Verkäufer KD_CRM Anschrift Kontakt Ja-Umsatz Ausgelagerte Dimension Fakt Umsatz pro Verkäufer Bonusgruppe Bonusprogramm Degenerated Dimension 20

21 Varianten von Analyseprozessen 1. Kennzahlen-gesteuertes Event-Processing 2. Klassisches Standard-Berichtswesen x Operativer Prozess DWH 3. Interaktives Ad-Hoc-Analysen 4. Analyse-Cycle Problem Definition Data Preparation Model Building Deployment

22 Anforderungen aus den Analyseprozessen Modell form Nähe zu Operativen Prozessen Dauer der Analyse- Phase 1. Kennzahlen-gesteuertes Event-Processing Keine Vorgaben eng Sekunden 2. Klassisches Standard-Berichtswesen Keine Vorgaben weit Bis zu 24 Std. 3. Interaktives Ad-Hoc-Analysen multidimensional weit Bis zu 24 Std. 4. Analyse-Cycle Flach, maschinen-lesbar Sehr weit Wochen bis zu mehreren Jahren 22

23 Anforderungen aus den Analyseprozessen + Technologie Modell form Nähe zu Operativen Prozessen Dauer der Analyse- Phase Technologie 1. Kennzahlen-gesteuertes Event-Processing Keine Vorgaben eng Sekunden Materialized Views als vorbereitete Profile (event. nosql) 2. Klassisches Standard-Berichtswesen Keine Vorgaben weit Bis zu 24 Std. Materialized Views in Verbindung mit ETL 3. Interaktives Ad-Hoc-Analysen 4. Analyse-Cycle Multidimensional Flach, maschinenlesbar weit Sehr weit Bis zu 24 Std. Wochen bis zu mehreren Jahren Star Schema -> In-Memory / event. Views Flexibilität für interaktive Analysen, Alle ausgewählten Felder sind schnell analog OLAP - Würfel Mining Tabellen -> In-Memory Die Mining-tabellen werden für den jeweiligen Analyse-Prozess einzeln und gezielt In-Memory geladen 23

24 Allgemeine Regeln für das Star Schema Star Schema einfach halten Für Endbenutzer überschaubarer Nicht mit zu vielen Dimensionsattributen überfrachten Code-Attribute vermeiden Attribute mit beschreibenden Inhalten verwenden Sprechende Columnnamen verwenden Level-bezogene Präfixe verwenden Operativ genutzte Daten in separate Tabellen auslagern 1:1-Beziehung zu Dimensionen Star Schema = Virtualisierungs- Kandidat bei In-Memory Überfrachtete Dimensionen aufspalten Bei zu vielen Attributen Bei sehr oft genutzten Selektionskriterien Dimensionen mit nur einem Attribut in die Faktentabelle verlagern Keine Snowflakes nutzen 24

25 User View Layer (Faktentabellen) So granular wie möglich aufbauen Performance-Thematik separat lösen Keine eigene Faktentabelle bilden, nur um eine höhere Aggregations-Ebene zu erhalten Keine separate Faktentabelle aus Performance-Gründen Verwandte Faktentabellen schaffen Über gemeinsam genutzte Dimensionen (Conformed Dimensions) Die Faktentabelle besitzt keinen eigenen PK Zugriff nur über die Foreign Key-Felder Sätze müssen nicht eindeutig sein

26 Integration Layer Arbeitsschicht für alles, was der technischen Bearbeitung unterliegt Überprüfung von Syntaktischer Korrektheit (Typ, Länge, NULL) Vollständigkeit der Daten und Mengenverhältnisse Gültige Wertebereichen Vorhandensein von Referenzdaten Eindeutigkeit (optional) Eliminierung von NULL-Werten...

27 Integration Layer Zusammenführung operativ getrennter Daten Bilden neuer Informationsobjekte mit dem Ziel der einfacheren Weiterverarbeitung (optional) Waisen-Management (optional) Bildung von Daten-Deltas (optional) Keine 1:1-Kopien Keine besonderen Datenmodell-Strukturen Wenn möglich, bereits beim Extrahieren Prüfungen und Wandlungen von Daten vornehmen Keine Indizes verwenden Stage ist leer, wenn nicht geladen wird

28 Enterprise Layer (DWH Kerndatenschicht) In Richtung 3. Normalform (3 NF) tendierend In Teilbereiche (Subject Areas) gegliedert aber sachgebietsübergreifend zusammenhängend Anwendungs- und Geschäftsprozess-neutral Dieselben Objekte werden in mehreren Geschäftsprozesse benötigt Daten müssen tauglich genug sein, um sie in allen Anwendungen zu verwenden Eindeutigkeit aller Objekte und Namen Redundanzfreiheit aller Informationen Langlebigkeit der Daten (Historisierung) Datenarten Stammdaten (historisiert) Referenzdaten externe / interne, allgemeine Sammlungen Bewegungsdaten / Transaktionslevel (angesammelt)

29 Regeln einer effizienten Data Warehouse Architektur Permanente Orientierung an den Informationsbedürfnissen der Benutzer Technisches und fachliches Monitoring von Inhalten und System Kompaktes Schichtenmodell schaffen Wege verkürzen Redundanzen in unterschiedlichen Schichten vermeiden Berechnungen / Aggregate so früh wie möglich durchführen Zusammenhängende Data Mart-Schicht Mehrfachnutzung von Dimensionen / Conformed Dimensions Geschickter Umgang mit sehr großen Faktentabellen / Vermeiden unnötiger Kopien Eher granulare Informationen auch in den Fakten-Tabellen Data Marts eventuell virtualisieren 29

30 Regeln einer effizienten Data Warehouse Architektur Granularisierte 3NF-DWH Schicht schafft Neutralität gegenüber Vorsystemen Flexibilität bei der Bereitstellung neuer Abfragemodelle Über Data Mart-Grenzen hinweg gemeinsam genutzte Berechnungen Aggregationen usw. so früh wie möglich umsetzen Alle Schichten in einem DB-Raum Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege In-Database-Aktivitäten (Prüfen/Laden) Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege 1:1 Kopien verhindern Bereits beim Lesen in die Vorsysteme einfache Prüf- und Filteraktivitäten Updates und einzelne Deletes vermeiden ETL wiederholbar aufbauen 30

31 E x t e r n e I n t e r n e D a t e n Szenario DWH - Gesamtsicht OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T T Referenzdaten Stammdaten Enterprise Layer Core - DWH / Info Pool R Partitionierte Transaktionsdaten nur wenn sie abgefragt werden R S S S Embedded Meta-Layer R Operational Data (virtuell) User View Layer (teils virtuell) Vorberechnete Kennzahlen C A MJ Q L JSON Unstructured JSON Data A Dimensionen als Views Fakten als In-Memory-Variante von Core-Transaktionen Kennzahlen-MAVs physikalisch R-Objekte physikalisch JSON-Objekte physikalisch JSON JSON Data Mining Statistikdaten HDFS / NoSQL Unstructured Data Oracle R

32 Grenzfälle: Wo Wünsche nach Verbesserungen entstehen Schichtenmodell ist Blaupause für Verantwortlichkeiten Integration Layer Enterprise Layer Core - DWH / Info Pool DWH- Admin User View Layer Fehlendes ganzheitliches Informationsmanagement Redundanzen, wenig Wiederverwendung, fehlende Synchronisation bei zusammenhängenden Themen Fehlende sachgebietsübergreifende Breite beim Informationsangebot Zu hohe Latenz-Zeiten Integration Layer Enterprise Layer Core - DWH / Info Pool DWH- Admin Zu geringe Flexibilität und Schnelligkeit in den Projekten bei der Umsetzung neuer Informations-Bedarfe User View Layer User View Layer User View Layer 32

33 Die Rolle der zentralen Schicht End-Anwender benötigen diese Schicht nicht! Integration Layer Aber: Sie hat eine strategische und taktische Bedeutung Enterprise Layer Core - DWH / Info Pool????????? Historisches Wissen (strategisch) Sachgebiets-übergreifende Zusammenhänge (Enterprise-View, strategisch) Projekt-taktische und Maintenance Aspekte: schnelles Erzeugen neuer Strukturen Integriertes Datenmodell verhindert Redundanzen Leichtere Organisation des Gesamt-ETL-Ablaufs: Einfacheres Normalisierung / Denormalisierungs-Schema User View Layer 33

34 Zugriff von Endbenutzern auf die zentrale Schicht Nicht akzeptiert werden Gründe wie Security-Gründe Hoheits-Denken des DB-Administrators Performance-Gründe Überkommene und unreflektierte Standard-Architekturen So haben wir das immer schon gemacht, Das steht in unserem Architektur-Blueprint Integration Layer Enterprise Layer Core - DWH / Info Pool????????? User View Layer 34

35 Partitionierung

36 Partitioning unterstützt viele Aufgaben Große Tabellen Tablespace Query Performance Partition Pruning Beschleunigung des Ladeprozesses Tablespace Tablespace Tablespace Tablespace Unterstützung ILM (Information Lifecycle Management) Leichterer Umgang mit Indizierung Tablespace Feld für Partitionierungs- Kriterium nach fachlichen oder organisatorischen Gesichtspunkten ausgewählt Range List Hash Unterstützung im Backup-Prozess Unterstützung bei der Aktualisierung von Materialized Views (Partition Change Tracking) Steuerung der Komprimierung Hochverfügbarkeit auch während des Ladens und Maintenance 36

37 Verschiedene Varianten Partitioning-Typen Range List Hash Reference Interval Interval-Reference System Virtual Column Subpartitioning-Typen Range - Hash Range - List Range - Range List - Range List - Hash List - List 37

38 Partitioning ist transparent Gesamte Tabelle selektieren SELECT * FROM orders; Abfrage nur auf eine Partition SELECT * FROM orders WHERE order_dat between to_date Partition (' ') Pruning: AND to_date (' '); Alle Partitionen werden selektiert Automatische Beschränkung auf betroffene Partition SQL-Abfrage ist von Partitionierung unabhängig Jan 2007 Feb 2007 Mär 2007 Apr 2007 Mai 2007 Jun

39 Partition Elimination / Dynamic Pruning Nicht angesprochene Partitionen werden nicht gelesen Subpartitions erlauben zusätzliche Eliminierung Range Bereichsabfragen mit Operatoren IN, LIKE, BETWEEN auf Partition Keys Hash Gleichheitsabfragen mit Operatoren =, IN auf Partition Keys List Range oder List auf Partition Keys 39

40 Range Partitioning - Partitionierung nach Wertebereichen Partitionierung nach Wertebereichen Für sortierte Wertebereiche LESS THAN: Angabe eines maximalen Wertes pro Partition CREATE TABLE F_Umsatz ( Artikel_ID number, Kunden_ID number, Zeit_ID DATE, Region_ID number, Umsatz number, Menge number ) PARTITION BY RANGE (Zeit_ID) ( PARTITION M1 VALUES LESS THAN (to_date(' ','yyyy-dd-mm')), PARTITION M2 VALUES LESS THAN (to_date(' ','yyyy-dd-mm')),... Jan 2007 Feb 2007 Mär 2007 Apr 2007 Mai 2007 Jun

41 Interval Partitioning Erweiterung der Range-Partitionierung Automatisierung für gleichgroße Range-Partitionen Mai Maidaten? Partitionierung wird als Metadaten-Information abgelegt Start-Partition ist dabei persistent Sobald neue Daten hinzukommen werden Segmente allokiert April März Februar Januar Aprildaten Märzdaten Februardaten Januardaten April März Februar Januar Produkte Lokale Indizes werden automatisch mitgepflegt Kunden Partition Key muss NUMBER oder DATE sein Partition-Typ muss RANGE sein 41

42 Interval Partitioning Syntax CREATE TABLE "BESTELLUNG" ( "BESTELLNR" NUMBER(10) NOT NULL, "KUNDENCODE" NUMBER(10), "BESTELLDATUM" DATE, "AUFTRAGSART" VARCHAR2(30)) PARTITION BY RANGE ("BESTELLDATUM") INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) ( PARTITION "Jan07" VALUES LESS THAN (TO_DATE(' :00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR,...) ; CREATE TABLE POSITION" ( "POSITIONSNR" NUMBER(10) NOT NULL, "BESTELLNR" NUMBER(10) "ARTIKELNUMMER" NUMBER) contraint FK_BEST FOREIGN KEY (BESTELLNR) REFERENCES BESTELLUNG PARTITION BY REFERENCE (FK_BEST); 42

43 Interval Partitioning Nachträgliches Ändern der Zyklen Range-partitionierte Tabellen können umgestellt werden Einfaches Metadaten Kommando Investitionsschutz Table F_Umsatz_Interval Q Q Oct 2006 Bisherige Range Partition Table Neue monatliche Interval Partitions ALTER TABLE F_Umsatz_Interval SET INTERVAL(NUMTOYMINTERVAL(1,'month');

44 List Partitioning Für diskrete, unsortierte Werte Angabe einer Werteliste pro Partition VALUES (DEFAULT) für alles andere Verhalten wie MAXVALUE in der Range-Partitionierung AMER EMEA APAC CREATE TABLE bestellung ( bestellnr number, auftragsart varchar2(40), land varchar2(2) ) PARTITION BY LIST (land) ( PARTITION EMEA VALUES ('DE','FR',[..]), PARTITION AMER VALUES ('US','CA',[..]), PARTITION APAC VALUES ('JP','CN',[..]), PARTITION OTHERS VALUES (DEFAULT) ) 44

45 Hash Partitioning - Gleichverteilung der Daten Partitionierung nach Hash-Wert des Partition Key Schlüsseltypen: Alle built-in Datentypen außer ROWID, LONG, LOB Ziel: Gleichverteilung der Daten Anzahl Partitionen: als Potenz von 2 empfohlen CREATE TABLE F_Umsatz_HASH ( Artikel_ID number, Kunden_ID number, Zeit_ID DATE, Region_ID number, Umsatz number, Menge number ) PARTITION BY HASH (Zeit_ID) PARTITIONS 4 45

46 Reference Partitioning Anwendung im DWH eher selten PK Beispiel abhängige Faktentabellen BestellNr KundenNr BestellDatum Bondaten (Kopf- / Positionsdaten) FK PK April BestellNr ArtikelNr Menge PosNr März Februar Januar Bestellungen April März Februar Januar BestellNr FK LieferNr April März Februar PosNr Bestell_Positionen Januar Auslieferungen 46

47 Interval-Reference Partitioning

48 Virtual Column Partitioning Produktnummer Menge Preis Abnehmer Anwendung im DWH eher selten IM ETL-Prozess würde man stattdessen eine zusätzliche Spalte erstellen Partitionierung einer Bestelltabelle nach den Produktgruppen. Die Nummer der Produktgruppen ist allerdings Bestandteil der Produktnummer ( Stelle). 4711GBEMP , GBEMP , GBEMP , LEERM , LEERM , LEERM , UAGBM , UAGBM , UAGBM ,70... substr(produktnummer,4,5) P1 P2 P3 Für alle Partitioning-/Subpartitioning-Varianten einsetzbar 49

49 Composite Partitioning Range... Range Range Range Hash Range - List Produkt JAN 07 FEB 07 MAR 07 List... List - Range List - Hash List - List Service Storno 50

50 ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID REGION_ID FK KANAL_ID FK UMSATZ FK MENGE UMSATZ_GESAMT Partitionierung im Star D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK Range-Partitioning nach Zeit Mehr als 80 % aller Partitionierungen sind so aufgebaut. D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ PK: Btree Index FK: Bitmap Index 51

51 ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID REGION_ID FK KANAL_ID FK UMSATZ FK MENGE UMSATZ_GESAMT Partitionierung im Star D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK Range-Partitioning nach Zeit List-Partitioning nach Vertriebskanal Mehr als 80 % aller Partitionierungen sind so aufgebaut. D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ PK: Btree Index FK: Bitmap Index 52

52 Beispiel Range-List CREATE TABLE f_umsatz_range_list (ARTIKEL_ID NUMBER(10), KUNDEN_ID NUMBER(10), ZEIT_ID DATE, REGION_ID NUMBER(10), KANAL_ID NUMBER(10), UMSATZ NUMBER(10), MENGE NUMBER(10), UMSATZ_GESAMT NUMBER(10) ) PARTITION BY RANGE (ZEIT_ID) SUBPARTITION BY LIST (KANAL_ID) SUBPARTITION TEMPLATE ( SUBPARTITION kanal1 VALUES (1), SUBPARTITION kanal2 VALUES (2), SUBPARTITION kanal3 VALUES (3), SUBPARTITION kanal4 VALUES (4), SUBPARTITION kanal5 VALUES (5), SUBPARTITION kanal6 VALUES (6), SUBPARTITION kanal7 VALUES (7) ) ( PARTITION jan10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION feb10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION nov11 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION dec11 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION next_month VALUES LESS THAN (MAXVALUE));

53 54 Beispiel List-List Beispiel für die nachfolgende Systemabfrage CREATE TABLE "BESTELLUNG" ( "BESTELLNR" NUMBER(10) NOT NULL, "KUNDENCODE" NUMBER(10), "BESTELLDATUM" DATE, "LIEFERDATUM" DATE, "BESTELL_TOTAL" NUMBER(12, 2), "AUFTRAGSART" VARCHAR2(30), "VERTRIEBSKANAL" NUMBER ) PARTITION BY LIST ("VERTRIEBSKANAL") SUBPARTITION BY LIST ("AUFTRAGSART") SUBPARTITION TEMPLATE ( SUBPARTITION Produkt VALUES ('ARTIKEL','TAUSCHWARE'), SUBPARTITION Service VALUES ('SERVICE','REISE'), SUBPARTITION Storno VALUES ('RETOURE','KOMMISSION'), SUBPARTITION Andere VALUES (default) ) ( PARTITION Telefon VALUES (1,2,3), PARTITION Aussendienst VALUES (4,5), PARTITION Web VALUES (6,7), PARTITION PARTNER VALUES (8,9,10) );

54 Systemabfragen col subpartition_name format a15 col partition_name format a15 col SUBPARTITION_POSITION format SELECT table_name, partition_name, subpartition_name, subpartition_position FROM user_tab_subpartitions; TABLE_NAME PARTITION_NAME SUBPARTITION_NA SUBPARTITION_POSITION BESTELLUNG Jan08 Jan08_ANDERE 4 BESTELLUNG Jan08 Jan08_STORNO 3 BESTELLUNG Jan08 Jan08_SERVICE 2 BESTELLUNG Jan08 Jan08_PRODUKT 1 BESTELLUNG Feb08 Feb08_ANDERE 4 BESTELLUNG Feb08 Feb08_STORNO 3 BESTELLUNG Feb08 Feb08_SERVICE 2 BESTELLUNG Feb08 Feb08_PRODUKT 1 BESTELLUNG Mar08 Mar08_ANDERE 4 BESTELLUNG Mar08 Mar08_STORNO 3 BESTELLUNG Mar08 Mar08_SERVICE 2 55

55 Partitionwise Join im DWH Das Partitionieren von Dimensionen ergibt heute oft nur eingeschränkt einen Sinn Oft zu klein im Vergleich zu einer Faktentabelle Fachlich ist meist kein gleiches Partitionierungskriterium zu finden Ausnahmen Abfragen über 2 große Tabellen z. B. große Faktentabellen Zahlungen Leistungen Bonköpfe 1 : n Bonpositionen 56

56 Verwaltung von Partitionen ADD PARTITION DROP PARTITION TRUNCATE PARTITION MOVE PARTITION SPLIT PARTITION MERGE PARTITION EXCHANGE PARTITION Verändern der Default-/ realen Attribute Partition Exchange Loading 57

57 Add / Rename / Truncate Partition Add Partition (Globale und lokale Indizes bleiben USABLE ) ALTER TABLE BESTELLUNG ADD PARTITION "NOV08" VALUES LESS THAN (to_date(' :00:00','SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR" Umbenennen einer Partition ALTER TABLE Bestellung RENAME PARTITION Andere TO Bestellung_Rest; Truncate einer Partition ALTER TABLE Bestellung TRUNCATE PARTITION Service DROP STORAGE; Ändern des Tablespace einer Partition (Wirkt sich nur auf künftige Partitionen aus) ALTER TABLE BESTELLUNG MODIFY DEFAULT ATTRIBUTES FOR PARTITION "Jan08" TABLESPACE TS_PAR_JAN ; 58

58 Moving Partition Fragmentierung beheben Umziehen in einen anderen Tablespace Komprimierung der Daten einer Partition CREATE TABLESPACE TS_PAR_Archiv DATAFILE D:\o11\oradata\o11\TS_PAR_Archiv.f' SIZE 10m REUSE; ALTER TABLE BESTELLUNG MOVE PARTITION "Jan08" TABLESPACE TS_PAR_Archiv; CREATE TABLESPACE TS_PAR_Archiv_Jan DATAFILE 'D:\o11\oradata\o11\TS_PAR_Archiv_Jan.f' SIZE 10m REUSE; TS_Gesamt P1 sub sub sub TS_Einzel_1 sub ALTER TABLE BESTELLUNG MOVE SUBPARTITION "Jan08_STORNO" TABLESPACE TS_PAR_Archiv_Jan; P2 P3 P4 P5 sub sub sub sub sub sub sub sub sub sub sub sub TS_Einzel_2 sub TS_Archiv Transparente MOVE PARTITION ONLINE Operation Gleichzeitig DML und Abfragen möglich Index Pflege für lokale und globale Indizes P6 sub sub sub sub sub sub P7 sub sub sub 59

59 Split und Merge von Partition ALTER TABLE Bestellung SPLIT PARTITION "Jan08" AT (to_date('15-jan-2008','dd-mon-yyyy')) INTO (PARTITION Jan08_1, PARTITION Jan08_2) UPDATE GLOBAL INDEXES; ALTER TABLE BESTELLUNG MERGE SUBPARTITIONS TELEFON_STORNO, TELEFON_ANDERE INTO SUBPARTITION TELEFON_OBJEKTE TABLESPACE TS_PAR; SELECT table_name, partition_name, high_value FROM user_tab_partitions WHERE table_name = 'BESTELLUNG '; sub1 subx ParX Par1 Par2 Nicht für Reference / Hash Partitioned Tables anwendbar Indizes werden UNUSABLE gesetzt sub2 Verschmolzen wird immer eine Liste von Partitionen / Subpartitionen Die neue Partition darf noch nicht existieren Funktioniert auch für Reference Partitioning, d.h. MERGE-Operation auf Parent Table wirkt sich auch auf die abhängige Tabelle aus 60

60 Erweiterte Partitionspflege Operationen Ein Operation bezieht sich auf mehrere Partitionen Parallelisiert Transparente Pflege lokaler und globaler Inidizes ALTER TABLE orders MERGE PARTITIONS Jan2009, Feb2009, Mar2009 INTO PARTITION Quarter1_2009 COMPRESS FOR ARCHIVE HIGH;

61 Ändern von Werten bei List Partitioning SQL> ALTER TABLE Bestellung 2 MODIFY PARTITION Produkt 3 ADD VALUES ('WARE'); Tabelle wurde geändert. SQL> ALTER TABLE Bestellung 2 MODIFY PARTITION Storno 3 DROP VALUES ('KOMMISSION'); Tabelle wurde geändert. SQL> SELECT partition_name, tablespace_name, high_value 2 FROM user_tab_partitions 3 WHERE table_name = 'BESTELLUNG'; PARTITION_NAME TABLESPACE_NAME HIGH_VALUE PRODUKT USERS 'ARTIKEL', 'TAUSCHWARE', 'PRODUKT', 'WARE' SERVICE USERS 'SERVICE', 'REISE' STORNO USERS 'RETOURE' ANDERE USERS default 62

62 Erstellen einer Tabelle aus einer Partition EXCHANGE SQL> CREATE TABLE Bestellung_Produkte AS 2 SELECT * FROM bestellung WHERE 1=2 SQL> / Tabelle wurde erstellt. TS_Gesamt SQL> ALTER TABLE Bestellung 2 EXCHANGE PARTITION Produkt 3 WITH TABLE Bestellung_Produkte; P1 sub sub sub P2 sub sub sub Die Zieltabelle muss existieren P3 sub sub sub P4 sub sub sub Tabelle X Allgemeine Syntax: P5 P6 P7 sub sub sub sub sub sub sub sub sub ALTER TABLE <Tabellen-Name> EXCHANGE PARTITION <Partition-Name> WITH TABLE <neue Tabelle> <including excluding> INDEXES <with without> VALIDATION EXCEPTIONS INTO <Schema.Tabellen-Name>; 63

63 Data Dictionary DBA_PART_TABLES Table-Level DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS DBA_PART_KEY_COLUMNS DBA_SUBPART_KEY_COLUMNS DBA_PART_COL_STATISTICS DBA_SUBPART_COL_STATISTICS Partition-/Subpartition-Level Partition-/Subpartition- Key- Informationen Statistiken und Histogramme per Partition / Subpartition 64

64 Wo und wie wird im DWH partitioniert Partitioning und Ladesteuerung laufen oft synchron Parallelisierung L a d e - A k t i v i t ä t e n Data Integration Layer T T T 20% PEL 80% Enterprise Information Layer R R S S S B B L e s e - A k t i v i t ä t e n Partition Pruning Parallelisierung User View Layer D F D D D R: Referenztabellen T: Transfertabellen S: Stammdaten B: Bewgungsdaten D: Dimensionen F: Fakten ILM Backup Vorbereitung Temporäre Tabellen (Prüfungen etc) Bewegungsdaten sind Partitioniert (80/20 Prinzip) Faktentabellen und Würfel können partitioniert sein 65

65 Wo wird Partitioning wieder vorkommen Indizierung Materialized Views Partition Exchange and Load Parallelisierung Life Cycle Management / Storage Management Bessere Verwaltung großer Tabellen Verbesserung der Verfügbarkeit und Performance Ressourcen werden geschont und geben Rechenkapazitäten frei Transparente Anwendung, d.h. Nutzung ohne Änderung an der Applikation Ermöglicht Information Lifecycle Management: Nutzung unterschiedlicher Storage-Klassen, je nach Zugriffshäufigkeit -> Einsparung von Storagekosten 66

66 Schlüssel und Indizierung im Data Warehouse

67 Warum künstliche Schlüssel verwenden? Gründe für den zusätzlichen Aufwand künstlicher Schlüssel sind: Integration In mehreren Vorsystemen gibt es unterschiedliche Schlüssel Stabilität Natürliche Schlüssel können sich ändern Geschäftsbereiche können sich ändern DWH langlebiger als operative Anwendungen Künstliche Schlüssel bedeuten Performance für das Star Schema 68

68 Umschlüsselung Anwendung 1 Verkaufsregion Einkommensgruppe Wohnart Berufsgruppe Anzahl Kinder Alter Name Kunden_NR Anwendung 2 Tel PLZ Ort Strasse Partnernummer Data Warehouse Verkaufsregion Einkommensgruppe Wohnart... PLZ Ort Kunden_NR Partnernummer Dim_Kd_NR Sequence Neuer Schlüssel 69

69 Regeln für künstliche Schlüssel in Dimensionen Schlüssel sind einfach zu benutzen und kurz, um Speicherplatz zu sparen Fehler zu vermeiden Nach Möglichkeit keine zusammengesetzten Schüssel Erfordert beim Zugriff unnötig viel Vorwissen zu den einzelnen Schlüsselbestandteilen Schlüsselbestandteile können leicht NULL-Wert annehmen, die Eindeutigkeit ist gefährdet Keine Felder wählen, die NULL werden können Spaltenwerte sollten stabil sein und sich nicht mehr ändern 70

70 B*Tree Index 4 Zugriffe bis zum Wert 1 Clustering Factor Zugriff über die RowID

71 Bitmap Zugriff auf Werte per Bit Stream Rowid Name Abschluss Rating AAAHfVAAJAAAKOKAAA Meier Klasse_10 5 AAAHfVAAJAAAKOKAAB Schubert Abitur 5 AAAHfVAAJAAAKOKAAC Klaus-Gustav Abitur 5 AAAHfVAAJAAAKOKAAD Schmidt Diplom 5 AAAHfVAAJAAAKOKAAE Langbein Doktor 5 AAAHfVAAJAAAKOKAAF Hund Klasse_10 5 AAAHfVAAJAAAKOKAAG Vogel Abitur 5 AAAHfVAAJAAAKOKAAH Messner Abitur 5 AAAHfVAAJAAAKOKAAA Abschluss= Klasse_10 1 Abschluss= Abitur 0 Abschluss= Diplom 0 Abschluss= Doktor 0 AAAHfVAAJAAAKOKAAB AAAHfVAAJAAAKOKAAC AAAHfVAAJAAAKOKAAD SELECT Name FROM KD_Table WHERE Abschluss= Diplom ; AAAHfVAAJAAAKOKAAE AAAHfVAAJAAAKOKAAF AAAHfVAAJAAAKOKAAG AAAHfVAAJAAAKOKAAH

72 Platzverbrauch im Vergleich CREATE TABLE I_Kunde (KD_NR Name Geb_Dat Bildungsgruppe KR_Rating_1_bis_Variabel number, varchar2(30), date, varchar2(30), number); Tests mit unterschiedlicher Kardinalität SELECT index_name,index_type blevel, leaf_blocks, distinct_keys FROM user_indexes; Anzahl Sätze Distinct Werte Prozent Leaf_ Blocks BTree Leaf_ Blocks bitmap Bildungsgruppe Bildungsgruppe Geb_Dat KR_Rating_1_bis_Variabe KD_NR

73 Aktualisieren von Indexen OLTP-Option: Rebuild Index Operation ALTER INDEX index_name REBUILD [ NOLOGGING ]; Schneller als DROP / CREATE NOLOGGING-Klausel Fragmentierung wird beseitigt Wenig hilfreich im DWH Änderungen aber oft als Batch-Lauf durchgeführt Zunächst DROP INDEX (beschleunigt den Batch-Lauf) Dann Neuerstellen des Index Oder 1. INDEX auf Unusable setzen [Alter index index_name usable] 2. ETL-Massen-Load 3. INDEX Rebuild [Alter index index_name rebuild] 74

74 Indexed-organized Tabellen Index organized Tables (IOT) Blöcke sind entsprechend einer Btree-artigen Organisation abgelegt Jeder Leaf-Block speichert sowohl Werte eines Schlüssel und von nicht-schlüssel-feldern -Schneller Random Zugriff (Einzelsatzlesen) - Schneller Range-Scan weil die Daten bereits geclustert sind - Spart Platz, weil kein Platz für separaten Index benötigt wird Heap Tables Blöcke sind nach einem Heap-Mechanisums abgelegt (Zufallsverfahren) Schlüsselwerte sind zusätzlich in einer Btree-Indey-Struktur abgelegt Alle Zugriffe in der Regel über einen separaten Index Relevanz für das DWH gering Zwingt zur Eindeutigkeit der Sätze Erfordert bei Massen Import eine Orientierung an der Index-Struktur und Constraintprüfung -> bremst aus Ausnahmen: sehr große Dimensionstabellen

75 Partitionierung und Indizierung im Data Warehouse

76 Partitioning und Indizes Lokale Indizes Nicht-partitionierte oder partitionierte globale Indizes USABLE oder UNUSABLE Index Segmente Nicht-persistenter Index Status Losgelöst von der Tabelle Partielle lokale und globale Indizes Erwirkt spezielle Metadaten auf [Sub]Partitionsebene Interagiert mit dem USABLE/UNUSABLE Status für lokale Indizes Indizierung jederzeit anpassbar

77 Bestelldatum Kundennummer Auftragsart Partition Key Bestelldatum Prefixed / Non Prefixed Indexes Partitionierte Tabelle Bestellung Local Index Indiziert nach Bestelldatum Prefixed local Index Indiziert nach Bestelldatum, Kundennummer Non-Prefixed Indiziert nach Auftragsart Im DWH relevante Variante Einfacher Index Gut für Management der Partitionen Gut für nicht Part-Key gesteuerte Abfragen 78

78 Globale Indexe CREATE TABLE f_umsatz_range (ARTIKEL_ID NUMBER(10), KUNDEN_ID NUMBER(10), ZEIT_ID DATE, REGION_ID NUMBER(10), KANAL_ID NUMBER(10), UMSATZ NUMBER(10), MENGE NUMBER(10), UMSATZ_GESAMT NUMBER(10) ) PARTITION BY RANGE (ZEIT_ID) ( PARTITION jan10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION feb10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION mar10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION dec11 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION next_month VALUES LESS THAN (MAXVALUE)); CREATE INDEX idx_umsatz_range on f_umsatz_range (Kunden_id) GLOBAL PARTITION BY RANGE (Kunden_id) ( PARTITION index100 VALUES LESS THAN (100), PARTITION index500 VALUES LESS THAN (500), PARTITION index1000 VALUES LESS THAN (1000), PARTITION index_max VALUES LESS THAN (MAXVALUE) );

79 Lokale Indizes CREATE TABLE f_umsatz_range (ARTIKEL_ID NUMBER(10), KUNDEN_ID NUMBER(10), ZEIT_ID DATE, REGION_ID NUMBER(10), KANAL_ID NUMBER(10), UMSATZ NUMBER(10), MENGE NUMBER(10), UMSATZ_GESAMT NUMBER(10) ) PARTITION BY RANGE (ZEIT_ID) ( PARTITION jan10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION feb10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION mar10 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION dec11 VALUES LESS THAN (TO_DATE(' ','SYYYY-MM-DD')), PARTITION next_month VALUES LESS THAN (MAXVALUE)); CREATE INDEX idx_artikel_id ON F_Umsatz_range (Artikel_id) LOCAL; CREATE INDEX idx_region_id ON F_Umsatz_range (region_id) LOCAL; 80

80 Indizes anzeigen lassen Welche Indexe gibt es für eine Tabelle SELECT index_name, partitioned FROM user_indexes WHERE table_name = 'BESTELLUNG_RANGE'; INDEX_NAME PAR PK_DATE_BESTELL YES Auflistung von Index-Partitionen SELECT ip.index_name, ip.composite, ip.partition_name, ip.high_value FROM user_ind_partitions ip, user_indexes ui WHERE ip.index_name = ui.index_name AND ui.table_name = 'BESTELLUNG'; INDEX_NAME COM PARTITION_NAME HIGH_VALUE BEST_DAT NO Feb07 TO_DATE(' BEST_DAT NO Jan07 TO_DATE(' BEST_DAT NO Mar07 TO_DATE(' BEST_DAT NO Apr07 TO_DATE('

81 Partielle lokale und globale Indizes

82 Operationen auf lokale Indizes Änderungs-Operationen wie ADD, DROP, SPLIT, MERGE werden von der Tabelle auf den Index übertragen Rebuild Partiton Index Rebuild Subpartiton Index Verschieben auf einen anderen Table ALTER TABLE <table_name> MODIFY PARTITION <partition_name> REBUILD UNUSABLE LOCAL INDEXES; ALTER TABLE <table_name> MODIFY SUBPARTITION <subpartition_name> REBUILD UNUSABLE LOCAL INDEXES; ALTER INDEX <index_name> REBUILD PARTITION <partition_name> TABLESPACE <new_tablespace_name>; 83

83 Asynchrone Global Index Pflege Nach DROP oder TRUNCATE PARTITION bleibt der globale Index auch ohne Index Pfege valide Betroffene Partitionen sind intern bekannt und werden während des Zugriffs herausgefiltert Verzögerte Global Index Pflege Anstoß durch ALTER INDEX REBUILD COALESCE Automatisierbar in einem Datenbank-Job

84 Star Query Transformation

85 86 Beispiel Star Schema D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION PK D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT PK PK: Btree Index FK: Bitmap Index D_KUNDE KUNDEN_ID PK KUNDENNR GESCHLECHT VORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENART BILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSON FIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMER PLZ ORT KUNDENKARTE ZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR

86 Star Query Transformation Optimierung für Joins mit großen Faktentabellen SELECT sum(summe) FROM F_Umsatz U, D_Artikel A, D_Region R, D_Zeit Z, D_Kunde K WHERE U.FK_Kunden_ID AND U.FK_Datum_ID AND U.FK_Ort_ID AND U.FK_Artikel_Nummer = K.Kunden_ID = Z.Datum_ID = R.Ort_ID = A.Nummer AND Z.JAHR_NUMMER = 2008 AND A.GRUPPE_NR = 3 AND K.KUNDENART = 8 AND R.REGION_Name IN ('MITTE','SUED','NORD'); 87

87 STAR_TRANSFORMATION_ENABLED=FALSE; Abgelaufen: 00:00: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (2) 00:00:13 1 SORT AGGREGATE NESTED LOOPS 3 NESTED LOOPS (2) 00:00:13 * 4 HASH JOIN (2) 00:00:13 * 5 HASH JOIN (2) 00:00:13 * 6 TABLE ACCESS FULL D_ZEIT (0) 00:00:01 * 7 HASH JOIN (2) 00:00:13 * 8 TABLE ACCESS FULL D_KUNDE (0) 00:00:01 9 TABLE ACCESS FULL F_UMSATZ 1010K 18M 1001 (2) 00:00:13 * 10 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 * 11 INDEX UNIQUE SCAN PK_REGION 1 0 (0) 00:00:01 * 12 TABLE ACCESS BY INDEX ROWID D_REGION (0) 00:00:

88 STAR_TRANSFORMATION_ENABLED=TRUE; Abgelaufen: 00:00: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (2) 00:00:03 1 SORT AGGREGATE TABLE ACCESS BY INDEX ROWID F_UMSATZ (2) 00:00:03 3 BITMAP CONVERSION TO ROWIDS 4 BITMAP AND 5 BITMAP MERGE 6 BITMAP KEY ITERATION * 7 TABLE ACCESS FULL D_KUNDE (0) 00:00:01 * 8 BITMAP INDEX RANGE SCAN IDX_FK_KUNDEN_ID_BM 9 BITMAP MERGE 10 BITMAP KEY ITERATION * 11 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 * 12 BITMAP INDEX RANGE SCAN IDX_FK_ARTIKEL_NUMMER_BM 13 BITMAP MERGE 14 BITMAP KEY ITERATION * 15 TABLE ACCESS FULL D_ZEIT (0) 00:00:01 * 16 BITMAP INDEX RANGE SCAN IDX_FK_DATUM_ID_BM 17 BITMAP MERGE 18 BITMAP KEY ITERATION * 19 TABLE ACCESS FULL D_REGION (0) 00:00:01 * 20 BITMAP INDEX RANGE SCAN IDX_FK_ORT_ID_BM

89 Star Query Transformation 1. Zugriff auf die Faktentabelle und Lookup mit den Filterkriterien auf Dimension 1 zur Erzeugung eines Bitmap entsprechend der Primary Keys 2. Wiederholen für alle Dimensionen 3. AND-Verknüpfung der Bitmaps und Suchen nach den Faktentabellen- Row IDs 4. Zugriff mit gefundenen Row IDs auf die Faktentabelle 5. Evtl. Join-back auf die Dimensionen für die restlichen Spalten, die benötigt werden. Es findet zu keinem Zeitpunkt ein Full Table Scan auf der Faktentabelle statt 90

90 Bedingungen für die Star-Transformation STAR_TRANSFORMATION_ENABLED=TRUE Keine Bind Variable im SELECT Statement, kein CONNECT BY und kein START WITH verwenden Die Faktentabelle Muss mehr als Sätze haben (Stand 10g) Kann keine View sein Kann keine Remote-Tabelle sein Muss mehr als 2 Bitmap Indizes haben Die Foreign Key Felder müssen als Bitmap Index definiert sein (Faktentabelle) Ein Foreign Key Constraint als solches muss nicht definiert sein 91

91 Indizierung im Star D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION PK D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT PK PK: Btree Index FK: Bitmap Index D_KUNDE KUNDEN_ID PK KUNDENNR GESCHLECHT VORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENART BILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSON FIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMER PLZ ORT KUNDENKARTE ZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR 92

92 Werden Index immer gebraucht? Im DWH gibt es eine grundsätzlich andere Verwendung von Indexen OLTP Einzelne Selects Einzelne Inserts Oft Verwaltung über Contraints (z. B. Unique Key) DWH Selects über Datenbereiche Massen-Inserts Möglichkeiten im Verlauf des ETL- Prozesses alter index PK_BESTELLNR_PART_RANGE_HASH monitoring usage SELECT INDEX_NAME, TABLE_NAME, MONITORING, USED FROM SYS.V$OBJECT_USAGE => Im DWH eher Bitmap-Indexe als Btree Usage-Monitor zeigt, ob ein Index wirklich genutzt wurde

93 Wo und wie wird im DWH indiziert L a d e - A k t i v i t ä t e n L e s e - A k t i v i t ä t e n Data Integration Layer Enterprise Information Layer User View Layer Process neutral / 3 NF Keine Indexe B*tree für Eindeutigkeit und als Primary Key Bitmaps Bitmaps B*tree für Primary Keys In den Dimensionen Tabellen

94 Komprimierung im Data Warehouse

95 Bedingungen im Data Warehouse Kompressionskonzept Komprimierung besonders wichtig, da große Datenmengen Besonders grasser Unterschied zwischen Daten, die häufig gelesen werden Sehr wenige Daten, die selten bis kaum gelesen werden Sehr viele Lese- und Schreib-Operationen sind bestimmbar Massen-Schreibaktionen können explizit auch zum Komprimieren genutzt werden Updates kommen seltener vor 96

96 Das Datenwachstum beherrschen Komprimieren: Verwaltung und Kosten reduzieren Kompressions Typ: Einsatz für: Faktor Basic Compression OLTP Compression SecureFiles Compression Index Compression Backup Compression Hybrid Columnar Compression Data Warehousing Hybrid Columnar Compression Archival Read only Tabellen und Partitionen in Data Warehouse 2-4 Umgebungen oder inaktive Daten-Partitionen in OLTP Umgebungen. Aktive Tabellen und Partitionen in OLTP und Data Warehouse 2-4 Umgebungen. Non-relational Daten in OLTP und Data Warehouse Umgebungen. 2-4 Indizes auf Tabellen in OLTP und Data Warehouse Umgebungen. 2 Alle Umgebungen. 2 Read only Tabellen und Partitionen in Data Warehouse Umgebungen. Inaktive Daten Partitionen in OLTP und Data Warehousing Umgebungen

97 Anwendung für Komprimierung Nicht nur für Indizes Strukturierte Daten in Tabellen (bzw. Partitionen) mit DIRECT Load Mit Advanced Compression auch für Unstrukturierte Datentypen (SecureFiles) Konventionelles DML (OLTP Compression) DataPump Daten und RMAN Redo Traffic mit Data Guard Redo Logs Standby Backups 98

98 OLTP Tabellen Kompression Block-Level Batch Komprimierung leerer Block initial unkomprimierter Block komprimierter Block teilweise komprimierter Block komprimierter Block Legende Header Daten Freier Platz unkomprimierte Daten komprimierte Daten 99

99 Tabellen-Komprimierung in 11g Komprimierungseinstellung durch CREATE TABLE beim Neuanlegen ALTER TABLE MOVE COMPRESS bei existierenden Daten ALTER TABLE MOVE PARTITION COMPRESS bei Partitionen Beispiel Syntax CREATE TABLE sales_history( ) COMPRESS FOR BASIC OLTP Im Enterprise Manager 100

100 Hybrid Columnar Compression (HCC) Neue Kombination der Anordnung nach Spalten und Zeilen höhere Compression Ratio möglich Verschiedene Level Designed für Daten, die nicht häufig verändert werden C1 BLOCK HEADER CU HEADER C2 Designed für Umgebungen mit Low Concurrency Logical Compression Unit (CU) Komprimierung nur während Bulk Loads! Verfügbar für Storage wie Exadata, ZFS oder Pillar BLOCK HEADER BLOCK HEADER BLOCK HEADER C3 C4 C5 C5 C6 C7 C8

101 Compression Advisor Welchen Komprimierungsfaktor kann ich erwarten? Einsatz des Package DBMS_COMPRESSION ab 11gR2 Ohne zusätzliche Installation Unterstützt partitionierte/nicht partitionierte Tabellen Funktionen: Erstellt temporäre Objekte um Komprimierungsratio zu berechnen Analysiert Zeilen auf Komprimierungstyp Einsatz auch für HCC Komprimierung

102 Syntaxänderung in 12c Änderungen für Basic, OLTP und HCC Compression BASIC OLTP CREATE TABLE sales_history( ) ROW STORE COMPRESS BASIC; CREATE TABLE sales_history( ) ROW STORE COMPRESS ADVANCED; Beispiel für HCC CREATE TABLE sales_history( ) COLUMN STORE COMPRESS FOR QUERY HIGH;

103 Erweiterungen in 12c Aufhebung des 255 Spalten Limits DBMS_COMPRESSION Advisor jetzt auch für Securefile LOBs begin DBMS_COMPRESSION.GET_COMPRESSION_RATIO ( SCRATCHTBSNAME => 'USERS', TABOWNER => 'SH', TABNAME => 'BASIC_LOB', LOBNAME => 'TEXT', PARTNAME => '', COMPTYPE => 128,

104 Online Operationen in 12c Online Operationen für MOVE PARTITION Weniger Sperren Grundlage für ILM Operationen Beispiele SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001 ROW STORE COMPRESS ADVANCED ONLINE; SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001 TABLESPACE example ONLINE;

105 Zusammenfassung Anwendung der Komprimierung Bei Tabellen mit grösstem Speicherplatzverbrauch Speicherplatzeinsparung immer abhängig von den Daten und dem Ladevorgang Komprimierungsratio (Quotient aus unkomprimierten und komprimierten Daten) variiert Bessere Ratio durch: Verwendung von größeren DB Blöcken Erhöhung der Daten-Redundanz z.b. durch Laden von sortierten Daten Daten werden erst in der SGA beim Zugriff entpackt -> Bessere Ausnutzung von I/O

106 Query-Optimizer und System-Statistiken im Data Warehouse

107 Statistiken sammeln Regelmäßig aktuelle Statistiken sind wichtig für gute Ausführungspläne Ständiges Aktualisieren belastet das System Best Practice im DWH Statistiken in Verbindung mit dem ETL-Prozesse aktualisieren. Nur diejenigen Tabellen, Partitionen und Indexe aktualisieren, die aktuell geladen bzw. verändert wurden. => Automatisiertes Aktualisieren sollte genau überlegt werden DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>); DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>, Partname=><PARTITION_NAME>, GRANULARITY=>'PARTITION'); DBMS_STATS.GATHER_INDEX_STATS(Ownname=><OWNER>,Indexname=><TABLE_NAME>); 108

108 Sammeln von Statistiken Tabellen -> GATHER_TABLE_STATS EXEC DBMS_STATS.GATHER_TABLE_STATS ( 'PART','BESTELLUNG_PART_RANGE', estimate_percent=>100); Indexe -> GATHER_INDEX_STATS Schema -> GATHER_SCHEMA_STATS EXEC dbms_stats.gather_schema_stats( ownname => 'PERF', estimate_percent => 5,block_sample => TRUE) Automatisiertes Sammeln für ein Schema Begin dbms_stats.gather_schema_stats( ownname => 'PERF',options => 'GATHER AUTO',estimate_percent => 5,block_sample => TRUE); end; EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS( 'OE',DBMS_STATS.AUTO_SAMPLE_SIZE);

109 Sammeln von Column-bezogenen Statistiken (Historgramme) Sinnvoll bei komplexen where-bedingungen und starker Ungleich- Verteilung der Werte innerhalb einer Spalte begin DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH', Tabname=>'F_UMSATZ', METHOD_OPT => 'FOR COLUMNS SIZE AUTO KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID, KANAL_ID ); end; begin DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH', Tabname=>'F_UMSATZ', METHOD_OPT => 'FOR COLUMNS SIZE 20 KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID ); end;

110 Abfrage der Art Histogramme HEIGHT BALANCED: Aufteilung aller Werte in n-gruppen Hier kann der Grenzwert der jeweiligen Grueppen abgefragt werden FREQUENCY: Auflistung der Menge pro vorkommenden Wert SELECT column_name, num_distinct, num_buckets, histogram FROM user_tab_col_statistics WHERE table_name = 'F_UMSATZ'; COLUMN_NAME NUM_DISTINCT NUM_BUCKETS HISTOGRAM ARTIKEL_ID HEIGHT BALANCED KUNDEN_ID HEIGHT BALANCED ZEIT_ID HEIGHT BALANCED REGION_ID HEIGHT BALANCED KANAL_ID 7 7 FREQUENCY

111 Histogramme machen Sinn wenn Histogramme machen Sinn wenn Wenn Spalten ungleichmäßig verteilte Werte haben und in der WHERE-Klausel von Abfragen vorkommen Spalten die seltener abgefragt werden, und daher keine Indexe haben Histogramme nicht anlegen bei Gleich verteilten Spaltenwerten Nicht für alle Spalten einer Tabelle zu viel Overhead PKs oder indizierten Spalten Spalten, die nicht abgefragt werden

112 Dynamic Sampling Zusätzliche Hilfen für den Optimizer Werte von 1 10 (Default 2) Setting alter system set optimizer_dynamic_sampling=4; Manuelles Setzen ist sinnvoll wenn SQL seriell System wählt automatisch den Einstellwert bei Parallelisierung Testen Sinnvoll bei komplexen WHERE-Klauseln

113 Inkrementelles Statistiksammeln (11g) 11g: Incremental Global Statistics Synapsis Struktur in SYSAUX Tablespace Sehr schnelles Erzeugen der globalen Statistiken ohne die komplette Tabelle zu lesen DBMS_STATS.SET_TABLE_PREFS(<OWNER>, <TABLE_NAME>, 'INCREMENTAL', TRUE); Inkrementelles Aktualisieren einschalten DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>, DEGREE=><DESIRED_DEGREE>); Initiales einmaliges Sammeln DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>, Partname=><SUBPARTITION_NAME>, GRANULARITY=>'SUBPARTITION', DEGREE=><DESIRED_DEGREE>); Inkrementelles Sammeln geschieht automatisch über EXEC DBMS_STATS.GATHER_TABLE_STATS( DWH1','UMSATZ'); 114 Oracle Database Performance Tuning Guide 11g Release 2 / Chapter 13 - Managing Optimizer Statistics

114 Anwendung im DWH bei partitionierten Tabellen Partition Tag 1 Globale Statistiken regelmäßig sammeln Partition Tag 2 Z. B. einmal im Monat Partition Tag 3 Partition Tag 4 Partition Tag 5 Partition Tag 7 Globale tatistiken Einschalten des Incremental - Modus für die entsprechende Tabelle: EXEC DBMS_STATS.SET_TABLE_PREFS( DWH', UMSATZ, 'INCREMENTAL','TRUE'); Partition Tag 8 Partition Tag 9 Nach jedem Laden einer neuen Partition, die Statistiken aktualisieren: ETL Partition Tag 10 Partition Tag n Neu hinzugefügte Partiton verfälscht Statistiken EXEC DBMS_STATS.GATHER_TABLE_STATS('DWH','UMSATZ'); 115

115 Empfehlungen Dynamic Sampling auf einen höheren Wert setzen (z. B. 4) Bei großen pratitionierten Tabellen mit Inkrementellem Statistik-Sammeln arbeiten. Histogramme gezielt für Spalten mit ungleich verteilten Werten verwenden, wenn sie oft abgefragt werden. Große Tabellen in dem Kontext des ETL-Prozesses aktualisieren -> ETL-Gesamt-Konzept

116 Speicher-Hierarchie Beispiel Flash

117 Datennutzung und Speicherhierarchien Memory 60% aller Abfragen Flash Technology 35% aller Abfragen SAS drives < 10% aller Daten SATA drives < 50% aller Daten mal schneller mal schneller 5% aller Abfragen Off-line Data Archives 100% aller Daten

118 Flash Cache Transparente Erweiterung des Buffer Caches Hot Data 16 GB SGA Memory 120 GB Flash Cache Warm Data Cold Data 360 GB Magnetic Disks Extended Buffer Cache Install Flash Drive in the Host Server Set two init.ora parameters: db_flash_cache_file = <filename> Specifies the path to the flash disk db_flash_cache_size=<size> Specifies the amount of flash disk to use Flash Disks oder Cards in den Server-Maschinen SSD wirken als Level 2 Cache (SGA ist Level 1) 119

119 Hausgemachte Engpässe und Lösungen Hauptspeicher / RAM Internal Bus Internal Bus CPUs Sinnvolle Positionierung von Flash-Speicher Direkt adressierbar durch Server-CPUs Für die Datenbank sichtbar Dynamischer Flash-Index Flash-Speicher Public-SAN Controller Controller Controller Controller Physikalische Grenzen Drehgeschwindigkeit von Platten Anzahl Platten pro Controller Distanz und Remote-Netz-Topologie SSD SSD SSD Disk-Arrays SSD 120

120 Automatische Verwaltung von Daten im Data Warehouse (Heat Map)

121 Heat Map Was wird getrackt Active Frequent Access Occasional Access Dormant HOT Actively updated Infrequently updated, Frequently Queried Infrequent access for query and updates Long term analytics & compliance COLD Ebenen Auf Segment Ebene Welche Tabellen und Partitionen werden verwendet? Auf Block Ebene Welche Veränderung auf Block Ebene liegen vor? Umfassend Verfolgung von Lese- und Schreib - Operationen Unterscheidet zwischen Lookups und Full Table Scans Schliesst Operationen wie Statistic Gathering, DDLs oder Tabellen Redefinition aus Performant 122

122 Zugriffsmuster verstehen Datenbank heat map

123 Heat Map Enterprise Manager 124

124 Heat Map Wie funktioniert das? Syntax für Produktion SQL> ALTER SYSTEM SET heat_map = 'ON'; SQL> ALTER SYSTEM SET heat_map = 'OFF'; SQL> ALTER SESSION SET heat_map = 'ON'; SQL> ALTER SESSION SET heat_map = 'OFF';

125 Heat Map für Tabellen und Partitionen Segment Level Tracking ORDER S Welche Tabellen und Partitionen werden wie verwendet? Aktueller Ausschnitt aus DBA_HEAT_MAP_SEG_HISTOGRAM OWNER OBJECT_NAME TRACK_TIME WRI FUL LOO SH CUSTOMERS_PK :48 NO NO YES SCOTT DEPT :48 NO YES NO SCOTT EMP :30 YES YES NO SCOTT EMP :48 NO YES NO SCOTT EMP :47 NO YES NO SCOTT PK_EMP :30 NO NO YES SCOTT PK_EMP :48 NO NO YES 126

126 Heat Map für Blöcke Row Level Tracking ORDER S Letzte Änderung auf Block Ebene Beispiel: Letzte Änderung an Tabelle CUSTOMERS mit DBMS_HEAT_MAP TABLESPACE FNO BLOCK_ID WRITETIME USERS :45 USERS :45 USERS :45 USERS :45 USERS :45 127

127 Heat Map Einschalten über Initialisierungsparameter HEAT_MAP SQL> ALTER SYSTEM SET heat_map = 'ON' 'OFF'; SQL> ALTER SESSION SET heat_map = 'ON' 'OFF'; Voraussetzung für Automatische Daten Optimierung Administration und Monitoring über V$Views Data Dictionary Views Packages Graphische Implementierung im Enterprise Manager 128

128 Heat Map für Daten Komprimierung Weniger Speicherplatz und Vorteile durch Komprimierung Hot Data X Advanced Row Compression Warm Data X Columnar Query Compression Archive Data X Columnar Archive Compression 129

129 Oracle Advanced Compression Oracle Advanced Compression Neuigkeiten Oracle Database 11g OLTP Compression Oracle Database 12c Advanced Row Compression Secure Files Compression Secure Files De-duplication Hybrid Columnar Compression neu neu neu Advanced LOB Compression Advanced LOB Deduplication Columnar Store Compression Heat Map (Segment und Row Level) Automatische Daten Optimierung Zeitliche Komponente (temporal) (Verbesserungen)

130 Zeilenkomprimierung auf Basis der Nutzung Background Row Compression ORDER S ALTER TABLE EMPLOYEE ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER 1 DAY OF NO MODIFICATION 131

131 Partitionierung in 12c Core Funktionalität Interval - Reference Partitionierung Partielle Indizes Indizes auf gleiche Spaltenmenge Manageability Kaskadierendes TRUNCATE/EXCHANGE für Reference Partitionierung Mehr Online Operationen (siehe ILM Features) Maintenance Operationen auf mehreren Partitionen Asynchrone Global Index Maintenance Operationen nach DROP PARTITION und TRUNCATE PARTITION 132

132 Für Partitionen Automatische Daten Optimierung mit HCC ORDER S ALTER TABLE ORDERS ILM ADD POLICY COLUMN STORE COMPRESS FOR QUERY HIGH SEGMENT AFTER 30 DAYS OF NO MODIFICATION Optimierte Nutzung für Zeilen bzw. Spalten Speicherung innerhalb einer Tabelle Row Format für schnelle INSERT und Lade- Operationen Optimiertes Columnar Format für die Analyse und Reporting 133

133 Automatic Data Optimization Storage tiering how it works SQL> ALTER TABLE employee ILM ADD POLICY TIER TO LOW_COST_TABLESPACE 1. Tables grow in size ILM policies compress data 2. Tablespace containing partitions reaches ILM tiering threshold 3. Partitions are moved to different tablespace on lower spec disk group 134

134 Automatische Daten Optimierung OLTP Reporting Compliance & Reporting 10x komprimiert 15x komprimiert Automatische ONLINE Konvertierung Im Quartal Im Jahr Jahre zuvor Advanced Row Compression für OLTP Columnar Query Compression für schnelle Analysen Columnar Archive Compression für max. Kompression 135

135 Backup & Recovery OLTP Reporting Compliance & Reporting 10x compressed 15x compressed Online Move zu READ ONLY Tablespace => Einmaliges Backup erforderlich Read / Write Tablespace Read-mostly Daten verlagert zu READONLY Tablespace READONLY TBS 136

136 Deklarative SQL Syntax Erweiterung Automatische Daten Optimierung Active Frequent Access Occasional Access Dormant OLTP Compression (2-4x) Nur für spezielle Zeilen Cached im DRAM & FLASH Warehouse Compression (10x) High Performance Storage Warehouse Compression (10x) Low Cost Storage Archive Compression (15-50X) Archival Storage ALTER TABLE ILM ADD POLICY Syntax für OLTP Kompression after 2 days of no update Syntax für HCC (Query low) after 1 week of no update Syntax für Storage Tiering tier to SATA Tablespace Syntax für HCC (archive high) after 6 months no access 137

137 Parallelisierung 138

138 Parallele Ausführung Ressourcen Parallel Execution Query Coordinator (QC) Parallel Execution Server Pool (PS) Messages Einteilung der Arbeitsmenge in kleinere Einheiten (Granules) Partitionen von Tabellen oder Indizes können diese Granules bilden Erfahrungswerte: Datenobjekte < 200 MB sollten keine Parallelisierung nutzen Objekte < 200 MB > 5 GB = Parallelisierungsgrad (DOP) 4 Objekte > 5 GB = DOP 32 Angaben variieren nach Systemauslastung und Hardware Konfiguration 139

139 SQL Parallel Execution Plan SELECT c.cust_name, s.purchase_date, s.amount FROM sales s, customers c WHERE s.cust_id = c.cust_id; Query Coordinator ID Operation Name TQ IN-OUT PQ Distribution 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC {RANDOM} Q1,01 P->S 3 HASH JOIN Q1,01 PCWP 4 PX RECEIVE Q1,01 PCWP 5 PX SEND BROADCAST Q1,01 P->P BROADCAST 6 PX BLOCK ITERATOR Q1,01 PCWP 7 TABLE ACCESS FULL CUSTOMERS Q1,01 PCWP 8 PX BLOCK ITERATOR Q1,01 PCWP 9 TABLE ACCESS FULL SALES Q1,01 PCWP Parallel Server leisten die Hauptarbeit 140

140 Execution Plan Partition Hash All über dem Join & Einfaches PQ Set bezeichnet Partition-wise Join ID Operation Name Pstart Pstop TQ PQ Distrib 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10001 Q1,01 QC (RAND) 3 SORT GROUP BY Q1,01 4 PX RECEIVE Q1,01 5 PX SEND HASH :TQ10000 Q1,00 HASH 6 SORT GROUP BY Q1,00 7 PX PARTITION HASH ALL Q1,00 8 HASH JOIN Q1,00 9 TABLE ACCESS FULL Customers Q1,00 10 TABLE ACCESS FULL Sales Q1,00 141

141 Parallelisierung und Skalierung Abfragen SELECT Join Operationen Sort Operationen GROUP BY DDL CREATE TABLE/MV CREATE INDEX Online Index Rebuild DML Parallelisierbare Operationen INSERT UPDATE / DELETE MOVE / SPLIT PARTITION serial 100% parallel SQL SQL 50% 100% 50% CPU CPU I/O I/O Ein SQL Statement wird vom Optimizer in kleinere Arbeitsschritte aufgeteilt und läuft skalierbar ab 142

142 Voraussetzungen für Parallelisierung Hardware-Architektur Symmetric Multiprocessors (SMP) Clusters (RAC, Grid Computing) Massively Parallel Processing (MPP) Ausreichend I/O-Bandbreite Geringe oder mittlere CPU-Auslastung Systeme mit CPU-Auslastungen von weniger als 30% Genügend Hauptspeicher für speicherintensive Prozesse Sortierung Hashing I/O-Puffer 143

143 Funktionen für Parallelisierung Automated Degree of Parallelism (DOP) Anpassung über Schwellwert und Systemressourcen Parallel Statement Queuing Zwingend parallel auszuführende Statements werden geparkt Bei genügend freien Ressourcen wird das Statement automatisch aufgeweckt und parallel ausgeführt In-Memory Parallel Execution = weniger Disk I/O Im RAC werden Daten aus den Buffer Caches genutzt Optimale Systemauslastung Mehr Parallelisierung, weniger Aufwand = Performance 144

144 Degree of Parallelism (DOP) Automatic Degree of Parallelism PARALLEL_DEGREE_POLICY = AUTO Degree of Parallelism manuell festlegen ALTER TABLE sales PARALLEL 8; ALTER TABLE customers PARALLEL 4; Default Parallelism ALTER TABLE sales PARALLEL; SI : DOP = RAC: DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT 145

145 Parallel Degree Policy Ausführungsplan Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (9) 00:00:03 1 VIEW (9) 00:00:03 2 WINDOW SORT (9) 00:00:03 3 HASH GROUP BY (9) 00:00:03 * 4 HASH JOIN 51M 1367M (2) 00:00:03 5 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 6 TABLE ACCESS FULL F_UMSATZ 51M 341M (2) 00:00: Predicate Information (identified by operation id): access("u"."artikel_id"="a"."artikel_id") Note automatic DOP: Computed Degree of Parallelism is 1 Note automatic DOP: skipped because of IO calibrate statistics are missing 146

146 Automatischer Parallelisierungsgrad Bisher erfolgt das Tunen der Parallelisierung manuell Nur einen DOP zu haben ist nicht für alle Queries geeignet Zuviel Parallelisierung kann das System überlasten Automated Degree of Parallelism in 11g entscheidet automatisch, Ob ein Statement parallel ausgeführt wird oder nicht Welchen DOP das Statement nutzt Der Optimizer leitet den passenden DOP von den nötigen Ressourcen des Statements ab Kosten aller Scan-Operationen Maximales Limit der Parallelisierung wird berücksichtigt 147

147 Automatischer Parallelisierungsgrad Wie funktioniert das? SQL Statement Statement wird geparsed Optimizer ermittelt den Execution Plan Geschätzte Ausführung dauert länger als Schwellwert Optimizer bestimmt den idealen DOP PARALLEL_MIN_TIME_THRESHOLD (default =10s) Geschätzte Ausführung dauert nicht länger als Schwellwert Statement wird seriell ausgeführt Tatsächlicher DOP = MIN(PARALLEL_DEGREE_LIMIT, idealer DOP) PARALLEL_DEGREE_LIMIT (default =CPU) Statement wird parallel ausgeführt 148

148 Parallel Statement Queuing Mit Automatic Degree of Parallelism können mehr Statements parallel arbeiten ABER: Potentielle Systemüberlastung Parallel Statement Queuing entscheidet automatisch, ob ein Statement sofort ausgeführt werden kann oder nicht Sobald ein paralleles Statement startet wird geprfüt, ob genügend Parallel Server (Parallel Query Slaves) vorhanden sind Wenn nicht, wird das Statement in die Queue geschoben Sobald genügend Parallel Server verfügbar sind, wird das Statement aus der Queue geholt und ausgeführt 149

149 Parallel Statement Queuing Wie funktioniert das? SQL Statements Statement wird geparsed Oracle ermittelt automatisch den DOP Wenn zu wenig Parallel Server vorhanden sind, landet das Wenn genügend Parallel Server vorhanden sind, wird das Statement sofort ausgeführt FIFO Queue Wenn wieder genügend Parallel Server vorhanden sind, wird erste Statement aus der Queue geholt und ausgeführt

150 In-Memory Parallel Execution Data Warehouse-Umgebungen haben große Hauptspeicher, die nicht immer genutzt werden Ein Algorithmus plaziert Objektfragmente (Partitionen) in den Hauptspeicher der verschiedenen Knoten Mehr Daten im Hauptspeicher bei Einsatz von Kompression Parallel Servers (PQ Slaves) arbeiten auf den jeweiligen Knoten Automatic Degree of Parallelism erforderlich 151

151 In-Memory Parallel Execution SQL Statement Die Größe der angeforderten Tabelle wird bestimmt Die Tabelle eignet sich für In- Memory Parallel Execution Fragmente der Tabelle werden in den Buffer Cache jedes einzelnen Knotens gelesen Tabelle ist sehr klein Tabelle ist sehr groß In den Buffer Cache irgendeines Knotens lesen Immer direkt von Disk lesen Nur Parallel Server auf demselben RAC-Knoten werden auf die einzelnen Fragemente zugreifen 152

152 Parameter für Parallel Query Oracle V Neue Parameter parallel_degree_limit = 'CPU' (CPU IO integer) parallel_degree_policy = MANUAL (MANUAL LIMITED AUTO) parallel_force_local = FALSE (FALSE TRUE) parallel_min_time_threshold = AUTO (AUTO integer) parallel_servers_target = 8 (0 - max_servers) Parameter parallel_adaptive_multi_user = TRUE (TRUE FALSE) parallel_execution_message_size = 2148 ( ) parallel_instance_group = ' ' () parallel_max_servers = 20 (0-3600) pro Instanz parallel_min_percent = 0 (1-100) % parallel_min_servers = 0 (0 - max_servers) parallel_threads_per_cpu = 2 (1-4 8) pro core Veraltete Parameter parallel_automatic_tuning = FALSE (FALSE TRUE) parallel_io_cap_enabled = FALSE (FALSE TRUE) 153

153 Parameter für Parallel Query Oracle V Parameter parallel_degree_limit = 'CPU' (CPU IO integer) parallel_degree_policy = MANUAL (MANUAL LIMITED AUTO ADAPTIVE) parallel_force_local = FALSE (FALSE TRUE) parallel_min_time_threshold = AUTO (AUTO integer) parallel_servers_target = 8 (0 - max_servers) parallel_adaptive_multi_user = TRUE (TRUE FALSE) parallel_execution_message_size = 2148 ( ) parallel_instance_group = ' ' () parallel_max_servers = 20 (0-3600) pro Instanz parallel_min_percent = 0 (1-100) % parallel_min_servers = 0 (0 - max_servers) parallel_threads_per_cpu = 2 (1-4 8) pro core Veraltete Parameter parallel_automatic_tuning = FALSE (FALSE TRUE) parallel_io_cap_enabled = FALSE (FALSE TRUE) 154

154 Query Result Cache 155

155 Konzept und Einsatz des Result Cache Eigener Cache im Shared Pool Keine Installation notwendig Automatischer Refresh bei Datenänderungen Einfaches Setup und Monitoring der Cache-Nutzung Der Query Result Cache ist anwendbar für SQL-Abfragen PL/SQL-Funktionen 156

156 Implementierung und Nutzung Anwendung steuerbar über Initialisierungsparameter RESULT_CACHE_MODE Falls RESULT_CACHE_MODE=MANUAL gesetzt ist, dann einen Hint im Statement einfügen wie z.b. SELECT /*+ result_cache */ count(*) FROM sales Falls RESULT_CACHE_MODE=FORCE gesetzt ist, dann erfolgt ein automatisches Einfügen des Hints im Root-SELECT SELECT count(*) FROM sales

157 Parameter zum Result Cache RESULT_CACHE_MAX_RESULT 5 (%) RESULT_CACHE_MAX_SIZE RESULT_CACHE_MODE RESULT_CACHE_REMOTE_EXPIRATION abhängig vom OS MANUAL/FORCE 0 (min) RESULT_CACHE_MAX_SIZE: Gesamtgröße des reservierten Bereichs für den Result Cache im Shared Pool RESULT_CACHE_MAX_RESULT: Prozentualer Anteil am gesamten Result Cache für die einzelnen Ergebnisse RESULT_CACHE_REMOTE_EXPIRATION: Zeitdauer bei Remote Objekt-Nutzung, wie lange das Resultat in Minuten im Cache verbleibt 158

158 Beispiel mit Hints SQL> SELECT /*+ result_cache */ COUNT(*), SUM(salary) FROM hr.bigemp group by department_id ORDER BY department_id; Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (2) 00:00:34 1 RESULT CACHE 91myw5c1bud0mcn64g3d0ykdhm 2 SORT GROUP BY (2) 00:00:34 3 TABLE ACCESS FULL BIGEMP 876K 4280K 2201 (1) 00:00:34 Statistics recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 696 bytes sent via SQL*Net to client 419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 12 rows processed 159

159 V$RESULT_CACHE_OBJECTS SQL> SELECT name, type, row_count, invalidations, scan_count FROM v$result_cache_objects; NAME TYPE ROW_COUNT INVALIDATIONS SCAN_COUNT HR.GET_DATUM Dependency SCOTT.EMP Dependency HR.BIGEMP Dependency "HR"."GET_DATUM"::8. Result "GET_DATUM"#27dda668 fe0cf492 #1 SELECT /*+ result_ca Result che */ COUNT(*), SUM(salary) FROM hr.bigemp group by department_id OR DER BY department 160

160 Materialized Views und Kennzahlenkonzepte 161

161 Prinzip und Aufgabenstellung - Summentabellen Basistabelle Summentabelle Complete Refresh Incremental Refresh? Änderungen stale 162

162 Aufgaben der Materialized Views (MAVs) Erleichtern das Management von Summentabellen Wegfall von Erstellungsprozeduren Einfache Steuerung des Zeitpunktes zur Aktualisierung Eventuell Beschleunigung der Aktualisierung (inkrementelles Refresh) Abfrage-Performance optimieren Variable Kennzahlensysteme aufbauen Mehrstufige MAVs Abfragegruppen zusammenfassen (Kategorisierung) Geschäftsobjekt-bezogene MAVs 163

163 MAV-Erstellung und erstmaliges Füllen Parameter des create Befehles I/II: BUILD IMMEDIATE (direkt bei der Erstellung, default) Problematisch bei großen Basistabellen und im Rahmen von Entwicklung / Test BUILD DEFERRED (Erstellung beim ersten Refresh) Sinnvoll bei erster Überführung neuer MAV-Definitionen in die Produktionsumgebung ON PREBUILD Sinnvoll, wenn es separate Erstellungroutinen gibt, die ihr Ergebnis nur in einer Tabelle ablegen können, man aber die Rewrite-Vorteile der MAVs nutzen will Kopie von normalen Views (analog zum vorigen Punkt) 164

164 Refresh-Funktionen Parameter des create Befehles II/II: Refresh wie: COMPLETE Immer vollständiges Neuladen aus den Basistabellen FAST (inkrementell) Nur bei vorhandenem MAV Log auf der Basistabelle FORCE (inkrementell oder komplett, default) Je nach der zu erwartenden Refresh-Dauer NEVER Vorhalten historischer Bestände oder bei separater Prozedur Refresh wann : ON COMMIT (oft bei OLTP) Commit einer Transaktion auf der Basistabelle ON DEMAND (sinnvoll im DWH, default) 165

165 Star Schema zum Testen D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID D_REGION REGION_ID ORT_ID ORT_NAME KREIS_ID KREIS_NUMMER KREIS_NAME LAND_NAME LAND_ID LAND_NUMMER REGION_NAME REGION_NUMMER F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM STATUS D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID D_KUNDE KUNDEN_ID VORNAME NACHNAME GEBDAT BRANCHE WOHNART KUNDENART BILDUNG EINKOMMENSGRUPPE ORTNR BERUFSGRUPPE BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR PLZ ORT 166

166 Beispiel einer Materialized View CREATE MATERIALIZED VIEW MV_Standard BUILD IMMEDIATE REFRESH COMPLETE ON DEMAND ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; 167

167 Data Dictionary Views für MAVs Weitreichende Informationen über Zustand der MAVs und ihrer dazugehörigen Basistabellen ALL_MVIEWS DBA_MVIEWS USER_MVIEWS USER_MVIEW_DETAIL_RELATIONS USER_MVIEW_DETAIL_SUBPARTITION Mit 11g wurde der Detailgrad in diesen Views erhöht, vor allem bei partitionierten Tabellen (Staleness etc.) 168

168 Testen und Ablaufbedingungen für MAV set autotrace on; -- Anzeige des Ausführungsplans show parameter query query_rewrite_enabled TRUE -- erlaubt das Query Rewrite query_rewrite_integrity STALE_TOLERATED -- erlaubt Query Rewrite, auch wenn -- die Daten in der Basistabelle -- nicht mehr aktuell sind query_rewrite_integrity TRUSTED -- auch deklarierte -- Basis-Informantionen gelten -- als korrekt (z. B. Views oder -- prebuild) query_rewrite_integrity ENFORCED -- Daten müssen stimmen -- Ändern der Parameter mit ALTER SESSION SET query_rewrite_enabled=true; ALTER SESSION SET query_rewrite_enabled=false;

169 Automatische Aktualisierung von Materialized Views 170

170 Basis- Tabellen Aufeinander Aufbauende M-Views DBMS_MVIEW (Refresh-Funktion) Umsatz Prod. Gr und Jahr SUM/Jahr U Prod.A U Prod B SUM/Monat JOIN D_Zeit FAKT D_PROD Refresh-Funktionen DBMS_MVIEW.REFRESH() DBMS_MVIEW.REFRESH_DEPENDENT() DBMS_MVIEW.REFRESH_ALL_MVIEW() Refresh-Methoden (optional) COMPLETE (C) FAST (F) FORCE (default) (?) PARTITIONED (P) Transaktionsverhalten (optional) ATOMIC_REFRESH REFRESH_AFTER_ERRORS NESTED Bsp.: EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD,'C');

171 DBMS_MVIEW (Refresh-Funktion) ATOMIC_REFRESH => TRUE FALSE Refresh vollzieht sich in einer Transaktion Im Fehlerfall wird die Transaktion zurückgerollt REFRESH_AFTER_ERRORS => TRUE FALSE Refresh von mehreren Materialized Views läuft weiter bzw. bricht ab, wenn bei einer MAV ein Fehler aufgetreten ist NESTED Eine Materialized View und alle von ihr abhängigen MAVs werden aktualisiert EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD,'C'); EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE); EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE, nested => TRUE); EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',nested=>TRUE); 172

172 Fast Refresh-Varianten Aktualisierung über MAV Logs MAV1 MAV2 MAV3 Aktualisierung über Partition Change Tracking (PCT) komplett Partition 1 Partition 2 Partition 3 MAV1 MAV2 inkrementell Partition 4 Partition 5 MAV Log Basistabelle WITH ROWID SEQUENCE INCLUDING NEW VALUES Partition 6 Basistabelle Join Dependency Expression Partition Key Partition Marker 173

173 Fast Refresh mit MAV Log --- MAV Log auf Tabelle D_Artikel DROP MATERIALIZED VIEW LOG ON d_artikel; CREATE MATERIALIZED VIEW LOG ON d_artikel WITH ROWID, SEQUENCE (dimension_key, nummer, artikel_name, artikel_id, gruppe_nr, gruppe_name, sparte_name, sparte_nr) INCLUDING NEW VALUES; --- MAV Log auf Tabelle D_Zeit DROP MATERIALIZED VIEW LOG ON d_zeit; CREATE MATERIALIZED VIEW LOG ON d_zeit WITH ROWID, SEQUENCE (datum_id, datum_desc, tag_des_monats, tag_des_jahres, woche_des_jahres, monats_nummer, monat_desc, quartals_nummer, jahr_nummer) INCLUDING NEW VALUES; --- MAV Log auf Tabelle F_Umsatz DROP MATERIALIZED VIEW LOG ON f_umsatz; CREATE MATERIALIZED VIEW LOG ON f_umsatz WITH ROWID, SEQUENCE (umsatz, menge, umsatz_nach_rabatt, rabatt_wert_firmenkunde, Rabatt_wert_privatkunde, bestell_datum, artikel_id, kunde_id, region_id, zeit_id) INCLUDING NEW VALUES; 174

174 Fast Refresh mit MAV Log CREATE MATERIALIZED VIEW MV_Standard_Fast_Refresh BUILD IMMEDIATE REFRESH FAST ON DEMAND ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; SQL> SELECT mview_name, update_log, stale_since, staleness 2 FROM user_mviews where mview_name = 'MV_STANDARD_FAST_REFRESH'; MVIEW_NAME UPDATE_LOG STALE_SI STALENESS MV_STANDARD_FAST_REFRESH FRESH 175

175 PCT Refresh mit Partition Key Der Partitioning Key der Basistabelle ist in dem SELECT- und eventuell in dem GROUP BY-Teil, aber nicht in der WHERE-Klausel der MAV enthalten Führt zur Aggregierung auf der Ebene des Partitioning Keys Höhere Datenmenge als ohne PCT SQL> SELECT count(*) 2 FROM MV_Standard_PCT_Richtig; COUNT(*) CREATE MATERIALIZED VIEW MV_Standard_PCT_Richtig AS SELECT u.bestell_datum, z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz_par u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY u.bestell_datum, z.jahr_nummer, z.monat_desc, a.artikel_id; 176

176 PCT Refresh Join Dependency Expression Partitioning Key kommt in der Join Condition vor und eine Spalte der Basistabelle im SELECT-Teil der MAV CREATE MATERIALIZED VIEW MV_Standard_PCT_Falsch AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz_par u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id and u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; CREATE MATERIALIZED VIEW MV_Standard_PCT_Richtig AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz_par u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id and u.bestell_datum = z.datum_desc GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; 177

177 PCT Refresh mit Partition Marker Die Partitionmarker-Funktion liefert pro Partition einen Wert, der beliebige Level für die Aggregationen in der MAV erlaubt SQL> SELECT count(*) FROM MV_Standard_PCT_Par_MARKER; COUNT(*) CREATE MATERIALIZED VIEW MV_Standard_PCT_Par_MARKER AS SELECT dbms_mview.pmarker(u.rowid) AS pmark, z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz_par u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id and u.bestell_datum = z.datum_desc GROUP BY z.jahr_nummer,z.monat_desc,a.artikel_id, dbms_mview.pmarker(u.rowid) ; 178

178 PCT Refresh und MAV Log Refresh Fast Refresh über MAV Logs funktioniert nicht, wenn Partitionen hinzukommen oder gelöscht werden Für bestimmte MAVs funktioniert das Log-Verfahren nicht, z.b. Verwendung der RANK-Funktion PCT Refresh ist schneller, wenn viele Änderungen pro Partition gemacht wurden PCT Refresh lässt sich parallelisieren MAVs können bei PCT trotz Staleness mancher Partionen für Query Rewrite genutzt werden 179

179 Refresh Performance Tipps Optimizer-Statistiken immer aktuell halten Nach jedem Laden aktualisieren DBMS_STATS auch über MAVs laufen lassen ATOMIC_REFRESH auf FALSE setzen PCT nutzen, wo es geht Auch die MAV kann partitioniert werden (bringt zusätzliche Performance beim Refresh) Parallele Ausführung verwenden Mit REFRESH_ALL arbeiten DB organisiert sich die Abarbeitung selbst und parallelisiert automatisch bei Bedarf Berücksichtigt auch Abhängigkeiten zwischen einzelnen MAVs 180

180 Nutzenpotenziale durch MAV heben Wartbarkeit und Wiederverwendbarkeit Konzept erstellen als Grundlage für MAVs Komplexität reduzierne der einzelnen SQL Keine MAV für einzelne Abfrage Einfache Pflege Aufeinander Aufbauende MAV Einsatz der Automatismen prüfen (refresh) Verwendung der MAV mit System Views prüfen Performance im ETL Trennung von unterschiedlichen Aufgaben (Join, Aggregation) Abhängige Elemente nutzen Effiziente Nutzung Unterstützende Elemente nutzen (Dimensionen) Partitionierung prüfen 181

181 Konzepte rund um Materialized Views 182

182 Prinzip: Nested Materialized Views Umsatz aggregiert auf Jahreslevel Umsatz aggregiert auf Monatslevel sum / count D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID 183

183 Prinzip: Nested Materialized Views CREATE MATERIALIZED VIEW MV_Umsatz_Monat ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc,a.artikel_id; CREATE MATERIALIZED VIEW MV_Umsatz_Jahr ENABLE QUERY REWRITE AS SELECT Jahr, sum(summe) Summe, ID artikel_id, count(summe) FROM MV_Umsatz_Monat GROUP BY jahr,id; 184

184 Vorteil: Minimierung von Komplexität Liefere die Artikel mit dem größten Umsatz im November 2006 CREATE MATERIALIZED VIEW MV_Umsatz_Komplex ENABLE QUERY REWRITE AS SELECT a.artikel_name, sum(u.umsatz) FROM f_umsatz u, d_artikel a WHERE a.artikel_id = u.artikel_id GROUP BY a.artikel_name HAVING sum(u.umsatz) --> kein Fast Refresh möglich IN (SELECT max(u.umsatz) FROM f_umsatz u, d_zeit z WHERE u.zeit_id = z.datum_id AND z.monat_desc = 'November' AND z.jahr_nummer = '2006' GROUP BY u.artikel_id); 185

185 Vorteil: Minimierung von Komplexität Minimierung von Komplexität Liefere die Artikel mit dem größten Umsatz im November 2006 CREATE MATERIALIZED VIEW MV_Umsatz_KOMBINATION REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT artikel, umsatz_summe FROM MV_Umsatz_Komplex_SUB1 WHERE umsatz_summe IN (SELECT umsatz_max FROM MV_Umsatz_Komplex_SUB2); CREATE MATERIALIZED VIEW MV_Umsatz_Komplex_SUB1 ENABLE QUERY REWRITE AS SELECT a.artikel_name Artikel, sum(u.umsatz)umsatz_summe, count(u.umsatz), count(*) FROM f_umsatz u, d_artikel a WHERE a.artikel_id = u.artikel_id GROUP BY a.artikel_name; CREATE MATERIALIZED VIEW MV_Umsatz_Komplex_SUB2 ENABLE QUERY REWRITE AS SELECT u.artikel_id, max(u.umsatz) umsatz_max FROM f_umsatz u, d_zeit z WHERE u.zeit_id = z.datum_id AND z.monat_desc = 'November' AND z.jahr_nummer = '2006' GROUP BY u.artikel_id; 186

186 Kennzahlen standardisieren Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz Materialized View Level 4 Summierung/Jahr Materialized View Level 3 Umsatz Prod.Gr A Umsatz Prod.Gr B Summierung/Monat Materialized View Level 2 Aufwändige Join-Operation Materialized View Level 1 DIM_Zeit FAKT_Umsatz DIM_Produkte Basistabellen 187

187 Kennzahlen standardisieren Kennzahlen nur als Materialized Views Automatisches Refresh anstatt ETL Standardisierte und stimmige Kennzahlen Wiederverwenden von bereits aggregierten Daten User View Layer L1 L2 L3 L4

188 Beispiel Level 4 Mv_EA_Finanz_Kum_Gruppe_Monat Produktgruppen-Sicht Finanz-Sicht / Berechnungen Jahres-Sicht Level 3 Mv_EA_Finanz_Kum_Monat LFD_Bestands_Wert / Produkt / Monat LFD_Saldo / Produkt / Monat Kumulierter EK / Produkt Kumulierter VK / Produkt Kumuliertes Saldo Mav_Einkauf_Verkauf_Diff_Jahr Level 2 Mv_EA_Menge_Kum_Monat Bestands-/Lager-Sicht / Berechnungen LFD_Bestands_Menge / Produkt / Monat VK_Menge / Produkt / Monat EK_Menge / Produkt / Monat Kumulierte EK Menge / Produkt Kumulierte VK Menge / Produkt Mav_Produkt_Monat_einkaeufe Level 1 Mav_Produkt_Monat_Verkaeufe F_EINKAEUFE F_POSITION F_KAUF EA: Einkauf/Verkauf Kum: kumuliert

189 BI-Tool Server + Caches Der Weg in die BI-Tools So viel wie möglich in der DB vorbereiten Verhindert unnötiges Kopieren Keine Verlagerung von Pseudo-ETL in die BI-Tools Standardisierte Kennzahlen User View Layer User View Layer So Millionen von Sätzen Oder so WenigeSätze

190 Konzept zur Verteilung von Materialized im Star Schema MAV_Region_Zeit_Artikel_Umsatz MAV_Region_Umsatz MAV_Region_Artikel_Umsatz D_REGION D_ZEIT F_UMSATZ D_ARTIKEL D_KUNDE MAV_Zeit_Umsatz MAV_Artikel_Umsatz MAV_Region_Zeit_Umsatz MAV_Kunde_Umsatz MAV_Kunde_Zeit_Umsatz 191

191 Zugriffspfade planen Sprechende Name Übersichtliche Darstellung 192 Ziele: Keine MAV für spezielle Abfrage von Herrn M Abfragestatistiken verwenden Nutzung überwachen (siehe Systemtabellen) Architektur auch für Pflege optimieren...

192 Automatisches Query Rewrite 193

193 Rewrite Prüfung Abarbeitungsreihenfolge Textvergleich der SELECT-Liste Reihenfolge spielt dabei keine Rolle Auflösung von möglichen Berechnungen Vergleich der Join-Bedingung Vergleich der GROUP BY-Klausel 194

194 Beispiel-MAV für die folgenden Abfragen CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz)summe, a.artikel_id ID, count(u.umsatz) FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID 195

195 Exaktes Text-Matching Umstellen der Spalten und avg() anstelle von sum() SELECT z.jahr_nummer Jahr, sum(u.umsatz)summe, a.artikel_id ID, z.monat_desc Monat FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; SELECT z.jahr_nummer Jahr, avg(u.umsatz) Schnitt, a.artikel_id ID, z.monat_desc Monat FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id; 196 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID

196 Prinzip Aggregate Rollup SELECT FROM z.jahr_nummer Jahr, --> Bezugsgröße in MAV ist Monat sum(u.umsatz) Summe, a.artikel_id ID, count(u.umsatz) f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, a.artikel_id; Abfragen lässt sich alles, was in der GROUP BY-Klausel der MAV zu finden ist 197 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID

197 Join Back-Methode SELECT FROM z.jahr_nummer Jahr, z.monat_desc Monat, a.artikel_name Artikel, sum(u.umsatz) Summe f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_name; Join Back-Tabelle muss einen Primary Key nutzen Ist nicht in der MAV-Definition enthalten 198 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID

198 Ausführungsplan Join Back-Methode Ohne Join Back Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT K 172 (5) 00:00:03 1 HASH GROUP BY K 172 (5) 00:00:03 * 2 HASH JOIN 100K 7031K 168 (3) 00:00:03 3 TABLE ACCESS FULL D_ZEIT (0) 00:00:01 * 4 HASH JOIN 100K 5273K 159 (2) 00:00:02 5 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 6 TABLE ACCESS FULL F_UMSATZ 100K 976K 155 (2) 00:00: Mit Join Back Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (14) 00:00:01 1 HASH GROUP BY (14) 00:00:01 * 2 HASH JOIN K 14 (8) 00:00:01 3 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 4 MAT_VIEW REWRITE ACCESS FULL MV_UMS_ART_ZEIT K 10 (0) 00:00:

199 Einfache Join-Bedingungen in MAVs Grundlage für flexiblere Abfragen Einfache Join-Bedingung CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, a.artikel_id ID, u.umsatz Umsatz FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id; SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id AND z.jahr_nummer = '2007' GROUP BY z.jahr_nummer, z.monat_desc; 200

200 Materialized Views und Hierarchisierung von Dimensionen 201

201 Dimensionale Tabelle als Optimizer-Hilfe Abfragen über alle Spalten der Dimensionstabelle Eine Definition für Dimensionen festlegen CREATE TABLE d_artikel ( dimension_key NUMBER(3) NOT NULL, nummer NUMBER(8), artikel_name VARCHAR2(50), artikel_nummer NUMBER(3), gruppe_nr NUMBER(3), gruppe_name VARCHAR2(50), sparte_name VARCHAR2(50), sparte_nr NUMBER(3)); CREATE DIMENSION d_artikel LEVEL artikel IS d_artikel.artikel_id LEVEL gruppe IS d_artikel.gruppe_nr LEVEL sparte IS d_artikel.sparte_nr HIERARCHY h_art (artikel CHILD OF gruppe CHILD OF sparte) ATTRIBUTE att_artikel LEVEL artikel DETERMINES d_artikel.artikel_name ATTRIBUTE att_gruppe LEVEL gruppe DETERMINES d_artikel.gruppe_name ATTRIBUTE att_sparte LEVEL sparte DETERMINES d_artikel.sparte_name; 202 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID

202 Dimensionale Tabelle als Optimizer-Hilfe Definition auf Artikelebene Abfrage auf Spartenebene CREATE MATERIALIZED VIEW MV_UMS_ART_Dim REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT a.artikel_id ID, sum(u.umsatz) Umsatz FROM f_umsatz u, d_artikel a WHERE a.artikel_id = u.artikel_id GROUP BY a.artikel_id; SELECT FROM WHERE GROUP BY a.sparte_name Sparte, sum(u.umsatz) Summe f_umsatz u, d_artikel a a.artikel_id = u.artikel_id a.sparte_name; 203 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID sum / count F_UMSATZ ARTIKEL_ID ZEIT_ID KUNDE_ID REGION_ID UMSATZ MENGE BESTELL_DATUM D_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID

203 Dimensionale Tabelle als Optimizer-Hilfe Ohne Rewrite auf Basis einer dimensionalen Tabelle Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (5) 00:00:02 1 HASH GROUP BY (5) 00:00:02 * 2 HASH JOIN 100K 2734K 158 (2) 00:00:02 3 TABLE ACCESS FULL D_ARTIKEL (0) 00:00:01 4 TABLE ACCESS FULL F_UMSATZ 100K 585K 154 (1) 00:00: Mit Rewrite auf Basis einer dimensionalen Tabelle Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (29) 00:00:01 1 HASH GROUP BY (29) 00:00:01 2 MERGE JOIN (17) 00:00:01 3 TABLE ACCESS BY INDEX ROWID D_ARTIKEL (0) 00:00:01 4 INDEX FULL SCAN PK_ART_ID 65 1 (0) 00:00:01 * 5 SORT JOIN (25) 00:00:01 6 MAT_VIEW REWRITE ACCESS FULL MV_UMS_ART_DIM (0) 00:00:

204 Prüfen der Stimmigkeit einer Dimension HIERARCHY-Klausel ATTRIBUTE-Klausel 1 : n-beziehung 1 : n-beziehung SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID funktionale Abhängigkeit funktionale Abhängigkeit funktionale Abhängigkeit 205

205 Prüfen der Stimmigkeit einer Dimension \ora-home\rdbms\admin\utldim.sql SQL> desc dimension_exceptions Name STATEMENT_ID OWNER TABLE_NAME DIMENSION_NAME RELATIONSHIP BAD_ROWID Legt Tabelle DIMENSION_EXCEPTIONS an DBMS_OLAP.VALIDATE_DIMENSION -- Prüfen der Dimension mit: variable stmt_id varchar2(30); execute :stmt_id := 'CUST_DIM_VAL'; execute dbms_dimension.validate_dimension ('MAV.D_ARTIKEL',FALSE,TRUE,:stmt_id ); -- Fehlermeldungen abfragen mit: SELECT distinct owner, table_name, dimension_name, relationship FROM dimension_exceptions WHERE statement_id = :stmt_id; 206

206 Hilfsmittel bei der Verwaltung von Materialized Views 207

207 EXPLAIN_MVIEW Auswertung start D:\O11\db11\RDBMS\ADMIN\utlxmv.sql SQL> desc MV_CAPABILITIES_TABLE; Name Null? Typ STATEMENT_ID VARCHAR2(30) MVOWNER VARCHAR2(30) MVNAME VARCHAR2(30) CAPABILITY_NAME VARCHAR2(30) POSSIBLE CHAR(1) RELATED_TEXT VARCHAR2(2000) RELATED_NUM NUMBER MSGNO NUMBER(38) MSGTXT VARCHAR2(2000) SEQ NUMBER 208

208 EXPLAIN_MVIEW-Routine Zeigt auf, welche Funktionen für die jeweilige MAV genutzt werden kann EXECUTE dbms_mview.explain_mview(_ 'SELECT sum(u.umsatz),a.artikel_name _ FROM f_umsatz u, d_artikel a _ WHERE a.artikel_id = u.artikel_id _ GROUP BY a.artikel_name'); 209

209 EXPLAIN_MVIEW-Routine SELECT capability_name, possible p, substr(related_text,1,20) obj, substr(msgtxt,1,100) erklaerung FROM mv_capabilities_table; CAPABILITY_NAME P OBJ ERKLAERUNG PCT N REFRESH_COMPLETE Y REFRESH_FAST N REWRITE Y PCT_TABLE N F_UMSATZ Relation ist keine partitionierte Tabelle PCT_TABLE N D_ARTIKEL Relation ist keine partitionierte Tabelle REFRESH_FAST_AFTER_INSERT N MAV.F_UMSATZ Detail-Tabelle enthσlt kein Materialized View-Log REFRESH_FAST_AFTER_INSERT N MAV.D_ARTIKEL Detail-Tabelle enthσlt kein Materialized View-Log REFRESH_FAST_AFTER_ONETAB_DML N SUM(U.UMSATZ) SUM(expr) ohne COUNT(expr) REFRESH_FAST_AFTER_ONETAB_DML N Siehe Grund, warum REFRESH_FAST_AFTER_INSERT deaktiviert ist REFRESH_FAST_AFTER_ONETAB_DML N COUNT(*) ist in SELECT-Liste nicht vorhanden CAPABILITY_NAME P OBJ ERKLAERUNG REFRESH_FAST_AFTER_ONETAB_DML N SUM(expr) ohne COUNT(expr) REFRESH_FAST_AFTER_ANY_DML N Siehe Grund, warum REFRESH_FAST_AFTER_ONETAB_DML deaktiviert ist REFRESH_FAST_PCT N PCT bei keiner der Detail-Tabellen in der Materialized View m glich REWRITE_FULL_TEXT_MATCH Y REWRITE_PARTIAL_TEXT_MATCH Y REWRITE_GENERAL Y REWRITE_PCT N Allgemeines Neuschreiben nicht m glich oder PCT bei keiner der Detail-Tabellen m glich PCT_TABLE_REWRITE N F_UMSATZ Relation ist keine partitionierte Tabelle PCT_TABLE_REWRITE N D_ARTIKEL Relation ist keine partitionierte Tabelle 210

210 EXPLAIN_REWRITE-Routine Angabe der Bedingungen für Query SQL> desc rewrite_table Name Null? Typ STATEMENT_ID VARCHAR2(30) MV_OWNER VARCHAR2(30) MV_NAME VARCHAR2(30) SEQUENCE NUMBER(38) QUERY VARCHAR2(4000) QUERY_BLOCK_NO NUMBER(38) REWRITTEN_TXT VARCHAR2(4000) MESSAGE VARCHAR2(512) PASS VARCHAR2(3) MV_IN_MSG VARCHAR2(30) MEASURE_IN_MSG VARCHAR2(30) JOIN_BACK_TBL VARCHAR2(4000) JOIN_BACK_COL VARCHAR2(4000) ORIGINAL_COST NUMBER(38) REWRITTEN_COST NUMBER(38) FLAGS NUMBER(38) RESERVED1 NUMBER(38) RESERVED2 VARCHAR2(10) 211

211 MAV-Definition EXPLAIN_REWRITE-Routine CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, a.artikel_id ID, FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id; select mv_name, message from rewrite_table; MV_UMS_ART_ZEIT_JOIN QSM-01150: Abfrage wurde nicht umgeschrieben DBMS_MVIEW.EXPLAIN_REWRITE begin dbms_mview.explain_rewrite(' SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id', 'MV_UMS_ART_Zeit_Join'); end; MV_UMS_ART_ZEIT_JOIN QSM-01082: Materialized View, MV_UMS_ART_ZEIT_JOIN, kann nicht mit Tabelle, F_UMSATZ, verknpft werden MV_UMS_ART_ZEIT_JOIN QSM-01102: Materialized View, MV_UMS_ART_ZEIT_JOIN, erfordert Join zurck zu Tabelle, F_UMSATZ, in Spalte, UMSATZ 212

212 Analytische SQL-Funktionen 213

213 Analytische Funktionen Einsatz bei dem Aufbau von festen, bekannten Kennzahlen Ideal in dem Zusammenspiel mit Materialized Views Lösung könnte auch mit reinem SQL erfolgen aber Analytische Funktionen machen die Abfrage schlanker Sie sind in der Regel schneller, weil man Mehrfachlesen von Tabellen verhindert Sie liefern mehr Flexibilität weil mit Gruppierungen gezielter umgegangen werden kann

214 215 Beispiel Star Schema D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION PK D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT PK PK: Btree Index FK: Bitmap Index D_KUNDE KUNDEN_ID PK KUNDENNR GESCHLECHT VORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENART BILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSON FIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMER PLZ ORT KUNDENKARTE ZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR

215 Gruppierungen auf unterschiedlichen Leveln Over Partition By Allgemeines Format Function(arg1,..., argn) OVER ( [PARTITION BY <...>] [ORDER BY <...>] [<window_clause>] ) Beispiel Beispiel: sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert

216 Einfaches Beispiel Mit nur einer Tabelle select Artikelname, Artikelgruppe, Wert, sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert from Artikel ; Beispieltabelle: create table Artikel ( Artikelname Artikelgruppe wert varchar2(10), varchar2(10), number); insert into Artikel values('schraube','beschlag',1); insert into Artikel values('winkel','beschlag',2); insert into Artikel values('mutter','beschlag',1); insert into Artikel values('kabel','elektro',6); insert into Artikel values('lampe','elektro',5); insert into Artikel values('klemme','elektro',2);... ARTIKELNAM ARTIKELGRU WERT GRUPPENGESAMTWERT Schraube Beschlag 2 12 Winkel Beschlag 2 12 Mutter Beschlag 1 12 Winkel Beschlag 2 12 Schraube Beschlag 1 12 Mutter Beschlag 1 12 Winkel Beschlag 2 12 Schraube Beschlag 1 12 Mutter Beschlag 1 12 Kabel Elektro 6 39 Kabel Elektro 6 39 Lampe Elektro 5 39 Klemme Elektro 2 39 Klemme Elektro 2 39 Lampe Elektro 5 39 Kabel Elektro 6 39 Lampe Elektro 5 39 Klemme Elektro 2 39

217 Abgrenzung gegenüber GROUP BY / Aggregationen Bei der GROUP BY Lösung müssen aller Felder in dem SELECT-Teil auch unter GROUP BY aufgelistet werden SQL> select sum(wert), artikelname, artikelgruppe from artikel group by artikelname; ERROR at line 1: ORA-00979: not a GROUP BY expression

218 Verhindern von Mehrfachlesen Mit analytischen Funktionen select Artikelname, Artikelgruppe, Wert, sum(wert) over (partition by Artikelname) Artikelgesamtwert, sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert, round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by Artikelgruppe))*100),0) Prozent from Artikel ; Ohne analytische Funktionen select wert_art, art.artikelname, wert_gr, art.artikelgruppe, round((art.wert_art/gr.wert_gr*100),0) Prozent from (select sum(wert) wert_art, artikelname,artikelgruppe from artikel group by artikelname,artikelgruppe) art, (select sum(wert) wert_gr, ARTIKELGRUPPE from artikel group by ARTIKELGRUPPE) gr where art.artikelgruppe = gr.artikelgruppe

219 Ohne analytische Funktionen Mit analytischen Funktionen ARTIKELNAM ARTIKELGRU WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT PROZENT Kabel Elektro Kabel Elektro Kabel Elektro Klemme Elektro Klemme Elektro Klemme Elektro Lampe Elektro Lampe Elektro Lampe Elektro Mutter Beschlag Mutter Beschlag Mutter Beschlag Schraube Beschlag Schraube Beschlag Schraube Beschlag Winkel Beschlag Winkel Beschlag Winkel Beschlag ARTIKELNAM ARTIKELGRU WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT PROZENT Kabel Elektro Kabel Elektro Kabel Elektro Klemme Elektro Klemme Elektro Klemme Elektro Lampe Elektro Lampe Elektro Lampe Elektro Mutter Beschlag Mutter Beschlag Mutter Beschlag Schraube Beschlag Schraube Beschlag Schraube Beschlag Winkel Beschlag Winkel Beschlag Winkel Beschlag

220 Verhindern von Doppellesen Mit analytischen Funktionen Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (40) 00:00:01 1 WINDOW SORT (40) 00:00:01 2 WINDOW SORT (40) 00:00:01 3 TABLE ACCESS FULL ARTIKEL (0) 00:00: Ohne analytische Funktionen Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (34) 00:00:01 * 1 HASH JOIN (34) 00:00:01 2 VIEW (25) 00:00:01 3 HASH GROUP BY (25) 00:00:01 4 TABLE ACCESS FULL ARTIKEL (0) 00:00:01 5 VIEW (25) 00:00:01 6 HASH GROUP BY (25) 00:00:01 7 TABLE ACCESS FULL ARTIKEL (0) 00:00:

221 Beispiel Mit mehreren Tabellen D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID PK F_UMSATZ ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT Wieviel Prozent machen der Gesamtumsatzes pro Artikel an dem Gesamtumsatz der zugehörigen Gruppe aus? Gesamtumsatz Einzelartikel im Vergleich zu durchschnittlichem Artikelumsatz pro Gruppe

222 Lösung 1 ohne analytische Funktion select Artikel, Artikel_Gesamt, Gruppe_Gesamt, round((artikel_gesamt/gruppe_gesamt*100),0) Prozent from ( with artikel_summe AS (SELECT a.artikel_name, sum(u.umsatz) Wert_p_Artikel FROM f_umsatz_2014 U, D_artikel a WHERE U.artikel_id = a.artikel_id group by a.artikel_name) SELECT distinct a.artikel_name Artikel, s.wert_p_artikel Artikel_Gesamt, sum(u.umsatz) over (partition by a.gruppe_name) Gruppe_Gesamt FROM f_umsatz_2014 U, D_artikel a, artikel_summe s WHERE U.artikel_id = a.artikel_id and a.artikel_name = s.artikel_name); Antwortzeit: 129 rows selected. Elapsed: 00:01:07.29

223 Lösung 2 mit sum() OVER (PARTITION...) select artikel, umsatz_pro_artikel, gruppe, sum(umsatz_pro_artikel) over (partition by Gruppe) Gruppe_Gesamt, round(umsatz_pro_artikel/(sum(umsatz_pro_artikel) over (partition by Gruppe))*100,0) Prozent from ( SELECT a.artikel_name Artikel, a.gruppe_name Gruppe, sum(u.umsatz) umsatz_pro_artikel FROM f_umsatz_2014 U, D_artikel a WHERE U.artikel_id = a.artikel_id group by a.artikel_name, a.gruppe_name ) Antwortzeit: Sub-Select liefert nach Gruppe gruppierte Artikel-Aggregationen 129 rows selected. Elapsed: 00:00:03.49

224 Lösung 3 kompakte Form SELECT a.artikel_name Artikel, a.gruppe_name Gruppe, sum(u.umsatz) umsatz_pro_artikel, sum(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name) Gesamt_Gruppen_Umsatz, round(((sum(u.umsatz))/(sum(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name))*100),2) Prozent FROM f_umsatz_2014 U, D_artikel a WHERE U.artikel_id = a.artikel_id group by a.gruppe_name, a.artikel_name Liefert nach Gruppe gruppierte Artikel-Aggregationen Antwortzeit: 129 rows selected. Elapsed: 00:00:03.83

225 Lösung 3 ausführliches Beispiel select * from ( SELECT a.artikel_name Artikel, a.gruppe_name Gruppe, sum(u.umsatz) umsatz_pro_artikel, sum(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name) Gesamt, rank() over (PARTITION BY a.gruppe_name order by a.artikel_name ) lfd_nr, count(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name) Anz_Art_pro_Gruppe, round(avg(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name),2) Schnitt_pro_Gruppe, sum(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name ORDER BY a.artikel_name) Kumuliert, round(((sum(u.umsatz))/(sum(sum(u.umsatz)) OVER (PARTITION BY a.gruppe_name))*100),2) Prozent FROM f_umsatz_2014 U, D_artikel a WHERE U.artikel_id = a.artikel_id group by a.gruppe_name, a.artikel_name ) where lfd_nr < 4 Gesamtsumme pro Artikel Gesamtsumme pro Artikel_Gruppe Aufsteigende Artikelsummenposition pro Artikel_Gruppe Liefert nach Gruppe gruppierte Artikel-Aggregationen Anzahl Artikelsummen pro Gruppe Durchschnittliche Anzahlsumme innerhalb einer Artikelgruppe Prozentanteil Artikelsumme an Gesamtgruppenwert Kumulierte Artikelsummen pro Gruppe

226 Analog: Vergleiche mit Durchschnittsmengen Gesamtumsatz Einzelartikel im Vergleich zu durchschnittlichem Artikelumsatz pro Gruppe select artikel, umsatz_pro_artikel, gruppe, avg(umsatz_pro_artikel) over (partition by Gruppe) Gruppe_Gesamt, round(umsatz_pro_artikel/(avg(umsatz_pro_artikel) over (partition by Gruppe))*100,0) Prozent from ( SELECT a.artikel_name Artikel, a.gruppe_name Gruppe, sum(u.umsatz) umsatz_pro_artikel FROM f_umsatz U, D_artikel a WHERE ) U.artikel_id group by a.artikel_name, a.gruppe_name = a.artikel_id

227 Year-To-Date Analysen - Auflistung von Umsatz pro Monat und Jahr - Kumulierung der Monatsumsätze von Jahresbeginn an select z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Umsatz, sum(sum(u.umsatz)) over (PARTITION by z.jahr_nummer order by z.monats_nummer) year_to_date from f_umsatz_2014 u, d_zeit z where z.zeit_id = u.zeit_id group by z.jahr_nummer, z.monats_nummer, z.monat_desc / F_UMSATZ ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID

228 Ausführungsplan Alle Tabellen werden nur einmal gelesen Ausführung der Kumulation am Ende kurz vor der Ausgabe Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (4) 00:00:03 1 WINDOW BUFFER (4) 00:00:03 2 SORT GROUP BY (4) 00:00:03 * 3 HASH JOIN K 186 (2) 00:00:03 4 TABLE ACCESS FULL D_ZEIT K 13 (0) 00:00:01 5 TABLE ACCESS FULL F_UMSATZ 100K 1171K 171 (1) 00:00:

229 Rank() Over Partition Ranking / Reihenfolgen Was ist das umsatzstärkste Quartal pro Jahr select * from (select sum(u.umsatz) Umsatz, z.jahr_nummer Jahr,z.Quartals_nummer "Top-Quartal", RANK() OVER (PARTITION by z.jahr_nummer ORDER BY sum(u.umsatz) DESC ) AS Rangfolge from f_umsatz u, d_zeit z where z.zeit_id = u.zeit_id -- and -- z.jahr_nummer between 2006 and 2011 group by z.jahr_nummer,z.quartals_nummer) where Rangfolge = 1 order by Jahr; F_UMSATZ ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID

230 Ranking ohne Partition SELECT * FROM (SELECT Artikel_Name as Artikel, sum(u.umsatz) AS Umsatz, RANK() OVER (ORDER BY sum(u.umsatz) DESC ) AS Rangfolge from F_umsatz U, D_Artikel A WHERE group by a.artikel_name) WHERE rownum < 11; U.artikel_id = a.artikel_id Rangfolge-Feld wird mitgeliefert ARTIKEL UMSATZ RANGFOLGE Wandspiegel 50x Kehrschaufel Waschbecken 40x Badewannenfaltwand 50x50x Duschbecken Die 10 umsatzstärksten Artikel D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID PK F_UMSATZ ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT

231 Alternative Version für Ranking ohne analytische Funktion select * from (SELECT * FROM (SELECT Artikel_Name as Artikel, sum(u.umsatz) AS Umsatz from F_umsatz U, D_Artikel A WHERE U.artikel_id = a.artikel_id group by a.artikel_name) order by Umsatz desc) where rownum < 11 ; 2 geschachtelte Sub-Selects weil die Klausel where rownum < 11 erst nach der Klausel ORDER BY UMSATZ wirken soll. Es fehlt das Rangfolgenfeld. Das müßte man jetzt zusätzlich noch Konstruieren.

232 Ranking Die 5 umsatzstärksten Bundesländer D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION F_UMSATZ ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT SELECT * FROM (SELECT R.land as Land, sum(u.umsatz) AS Umsatz, RANK() OVER (ORDER BY sum(u.umsatz) DESC ) AS Rangfolge from F_umsatz U, D_REGION R WHERE U.REGION_ID = r.region_id group by r.land) WHERE rownum < 6;

233 Ranking RANK Plätze werden aufsteigend vergeben Bei 2 gleichen Position bleibt der darauf folgende frei DENSRANK Plätze werden aufsteigend vergeben Bei 2 gleichen Position wird die darauf folgende Position belegt

234 Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene Partition By - Sortierung der Umsätze nach Top Artikel pro Artikelgruppe - Bilden der Rangfolge innerhalb einer Gruppe (SELECT artikel_name Artikel, gruppe_name Prod_Grp, sum(u.umsatz) AS Umsatz, RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(u.umsatz) DESC ) AS Rangfolge FROM f_umsatz U, d_artikel A WHERE U.artikel_id = a.artikel_id GROUP by a.gruppe_name,a.artikel_name ORDER by a.gruppe_name) D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID PK F_UMSATZ ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT

235 Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene Partition By - Sortierung der Umsätze nach Top 3 Artikel pro Artikelgruppe -Bilden der Rangfolge innerhalb einer Gruppe SELECT * FROM (SELECT artikel_name Artikel, gruppe_name Prod_Grp, sum(u.umsatz) AS Umsatz, RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(u.umsatz) DESC ) AS Rangfolge FROM f_umsatz U, d_artikel A WHERE U.artikel_id = a.artikel_id GROUP by a.gruppe_name,a.artikel_name ORDER by a.gruppe_name) WHERE Rangfolge < 4; D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR PK ARTIKEL_ID F_UMSATZ ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT

236 (Zeit-) Reihenvergleiche LAG() select z.jahr_nummer Jahr, z.monat_desc - Sortierung der Umsätze nach Monaten - Anzeigen des Vorjahresmonats Monat, sum(u.umsatz) Umsatz, LAG(sum(u.umsatz), 12) OVER (ORDER BY z.monat_desc) Vorjahresmonat, from f_umsatz u, d_zeit z where z.zeit_id = u.zeit_id group by z.jahr_nummer,z.monats_nummer,z.monat_desc F_UMSATZ ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID

237 Vergleich / Steigerung zum Vormonat select z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Umsatz, LAG(sum(u.umsatz)) OVER (ORDER BY z.monats_nummer) Vormonat, round(((sum(u.umsatz))/ NVL((LAG(sum(u.umsatz)) OVER (ORDER BY z.monats_nummer)),null)),2) Steigerung, sum(sum(u.umsatz)) over (PARTITION by z.jahr_nummer order by z.monats_nummer) year_to_date from f_umsatz_2014 u, d_zeit z where z.zeit_id = u.zeit_id group by z.jahr_nummer, z.monats_nummer, z.monat_desc /

238 Quartalsvergleiche select z.jahr_nummer Jahr, z.quartals_nummer Quartal, sum(u.umsatz) Umsatz_Quartal, lag(sum(u.umsatz)) over (ORDER BY z.quartals_nummer) Vor_Quartal, (sum(u.umsatz))/(lag(sum(u.umsatz)) over (ORDER BY z.quartals_nummer)) Steigerung from f_umsatz_2014 u, d_zeit z where z.zeit_id = u.zeit_id group by z.jahr_nummer, z.quartals_nummer /

239 Quartalsübersichten select z.jahr_nummer Jahr, z.quartals_nummer Quartal, sum(u.umsatz) Umsatz_Quartal, RANK() OVER (ORDER BY sum(u.umsatz) DESC ) AS Rangfolge, sum(sum(u.umsatz)) over (PARTITION by z.jahr_nummer ) Jahres_Umsatz, Sortiert nach Umsatzstärke der Quartale Anteil eines Quartals am Jahresumsatz Vorquartal Steigerung zu Vorquartal round(sum(u.umsatz)/( sum(sum(u.umsatz)) over (PARTITION by z.jahr_nummer ) ) * 100,2) Prozentualer_Jahresanteil, lag(sum(u.umsatz)) over (ORDER BY z.quartals_nummer) Vor_Quartal, round((sum(u.umsatz))/(lag(sum(u.umsatz)) over (ORDER BY z.quartals_nummer)),2) Steigerung from f_umsatz_2014 u, d_zeit z where z.zeit_id = u.zeit_id group by z.jahr_nummer, z.quartals_nummer /

240 Summenzeilen ausgeben GROUP BY ROLLUP / CUBE SELECT artikel_name Artikel, gruppe_name Prod_Grp, sum(u.umsatz) AS Umsatz FROM f_umsatz U, d_artikel A WHERE U.artikel_id = a.artikel_id GROUP by ROLLUP (a.gruppe_name,a.artikel_name) ORDER by a.gruppe_name ROLLUP Summenzeilen entsprechend der Felder unter GROUP BY CUBE Summenzeilen für alle Kombinationen SchraubenschluesselSet Heimwerker Stichsaege Heimwerker Wasserwaage_1m Heimwerker Heimwerker Abschleppseil KFZ-Zubehoer Aufkleber_D KFZ-Zubehoer Autatlas KFZ-Zubehoer ErsteHilfekoffer KFZ-Zubehoer Fahrradhalter KFZ-Zubehoer Felgenkappen KFZ-Zubehoer Gluebirnen_Set KFZ-Zubehoer Hydraulik_Wagenheber KFZ-Zubehoer KaelteSet KFZ-Zubehoer Oelfilter KFZ-Zubehoer Poliermittel KFZ-Zubehoer Reinigungsfilter KFZ-Zubehoer Reinigungstuecher KFZ-Zubehoer Sitzauflage KFZ-Zubehoer Universal_Wagenheber KFZ-Zubehoer Zusatzlicht_Front KFZ-Zubehoer KFZ-Zubehoer rows selected.

241 Ausgeben zusätzlicher Steuerinformation für programmiertes Auslesen des Ergebnisses SELECT artikel_name AS Artikel, gruppe_name AS Gruppe, sparte_name AS Sparte, sum(u.umsatz) AS Umsatz, GROUPING(Artikel_name) AS Art_g, GROUPING(gruppe_name) AS Grp_g, GROUPING(Sparte_name) AS Spr_g, GROUPING_ID(artikel_name,gruppe_name,sparte_name ) AS grouping_id FROM f_umsatz U, d_artikel A WHERE U.artikel_id = a.artikel_id GROUP by CUBE (a.sparte_name, a.gruppe_name,a.artikel_name) HAVING GROUPING(Artikel_name) = 1 OR GROUPING(gruppe_name) = 1 OR GROUPING(Sparte_name) = 1 ORDER by GROUPING(Artikel_name),GROUPING(gruppe_name),GROUPING(Sparte_name) /

242 Beispiel ART_G GRP_G SPR_G G ROUPING_ID Kombinationen von 0 und 1 werden genutzt um entsprechende Summenwerte anzuzeigen Grouping_ID sortiert die Kombinationsvarianten durch

243 In-Memory Database im Data Warehouse 244

244 Datenbank wahlweise im Hauptspeicher Keine Änderung der Anwendung Spaltenorientiert Komprimiert 2-20 fach Parallelisierung Nutzt bestehende DB-Architektur und Funktionalität Auf jeder Hardware möglich

245 Dual Format Database Beides Row- und Column- Format für dieselbe Tabelle Memory F_UMSATZ Row Format Memory F_UMSATZ Column Format Tabellen, Materialized Views, Partitionen Gleichzeitiges Lesen und Updaten, gesicherte Transaktionen Updates direkt persistiert Optimizer wählt optimalen Zugriff Analytics & Reporting können In-Memory Column-Format nutzen OLTP-Anwendungen mit umfangreicher Satzverarbeitung nutzen bewährtes Row Format Laden durch Hintergrundprozesse Bei erstmaligem Lesen oder Datenbank-Start ORA_W001_orcl / INMEMORY_MAX_POPULATE_SERVERS 246

246 Es ist nur ein Schalter!! Kein Migrationsprojekt D_ZEIT DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID PK D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION PK D_VERTRIEBSKANAL KANAL_ID PK VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE F_UMSATZ D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID ARTIKEL_ID FK KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT PK 50 Mio Sätze PK: Btree Index FK: Bitmap Index D_KUNDE KUNDEN_ID PK KUNDENNR GESCHLECHT VORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENART BILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSON FIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMER PLZ ORT KUNDENKARTE ZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR Laden in den InMemory-Speicher: Einfaches Markieren Danach einmal anfassen Alter table F_UMSATZ INMEMORY; Alter table D_ZEIT INMEMORY; Alter table D_VERTRIEBSKANAL INMEMORY; Alter table D_REGION INMEMORY; Alter table D_KUNDE INMEMORY; Alter table D_ARTIKEL INMEMORY; CREATE TABLE F_UMSATZ PARTITION BY RANGE (PARTITION p1 INMEMORY NO MEMCOMPRESS PARTITION p2 INMEMORY MEMCOMPRESS FOR DML, PARTITION p3 INMEMORY MEMCOMPRESS FOR QUERY, : PARTITION p200 INMEMORY MEMCOMPRESS FOR CAPACITY );

247 In-Memory im Data Warehouse Komplexe Abfragen auf viele Daten mit mehreren Joins Sub-Selects Groupings Analytische Funktionen Keine repräsentative Hardware: Laptop mit Intel i5-3320m 2,6 GHz CPU und 4 GB In-Memory-Storage Beispielabfrage Umsatz pro Region, Zeit, Vertriebskanal,, Berufsgruppe Sortiert nach Kriterien (Abf. 2) Stärkster Umsatzmonat pro #Joins #Where Condition Subselect Analytic Functions Grouping Ohne In-Memory P1 P4 Mit In-Memory ,35 27,00 1,10 0,53 Bundesland in 2010 (Abf. 8) ,66 35,03 1,00 0,54 P1 P4 Top 10 Artikel bezogen auf Umsatz in einem Jahr pro Bundesland in 2010 (Abf. 10) ,14 32,03 3,02 1,55

248 Kompressions-Varianten NO MEMCOMPRESS MEMCOMPRESS FOR DML MEMCOMPRESS FOR QUERY LOW MEMCOMPRESS FOR QUERY HIGH MEMCOMPRESS FOR CAPACITY LOW MEMCOMPRESS FOR CAPACITY HIGH The data is not compressed. This method optimizes the data for DML operations and compresses IM column store data the least (excluding NO MEMCOMPRESS). This method results in the best query performance. This method compresses IM column store data more than MEMCOMPRESS FOR DML but less than MEMCOMPRESS FOR QUERY HIGH. This method is the default when the INMEMORY clause is specified without a compression method in a CREATE or ALTER SQL statement or when MEMCOMPRESS FOR QUERY is specified without including either LOW or HIGH. This method results in excellent query performance. This method compresses IM column store data more than MEMCOMPRESS FOR QUERY LOW but less than MEMCOMPRESS FOR CAPACITY LOW. This method results in good query performance. This method compresses IM column store data more than MEMCOMPRESS FOR QUERY HIGH but less than MEMCOMPRESS FOR CAPACITY HIGH. This method is the default when MEMCOMPRESS FOR CAPACITY is specified without including either LOW or HIGH. This method results in fair query performance. This method compresses IM column store data the most. 249

249 Oracle In-Memory Advisor New In-Memory Advisor Analysiert bestehenden DB Workload über AWR & ASH Repository Liefert eine Liste von Objekten, die am meisten von In- Memory-Colume-Storage profitieren

250 Vector Register REGION Vektor-Scans Memory Example: Finde alle Verkäufe In der Region CA Jeder CPU Kern liest einzelne In-Memory Columns CPU Load multiple region values CA CA CA CA Vector Compare all values an 1 cycle SIMD Vektor Instruktionen Milliarden von Sätzen/Sekunde/Core 251

251 DateKey Amount Date DateKey Join-Verfahren: Bloom-Filter Example: Find all orders placed on Christmas eve DATE_DIM LINEORDER Erstellen von Filtertabellen (Bloom-Filter) Datekey is Type=d.d_date='December 24, 2013' Sum 252

252 Outlets In-Memory Aggregation Example: Report sales of footwear in outlet stores Products In-Memory Report Outline Sales Dynamisches Erstellen von In- Memory Aggregat-Objekten Footwear Stores $ Footwear $$ $$$ $ Outlets Sales 253

253 Wo und wie macht In-Memory im Data Warehouse Sinn und was ändert sich?

254 Zunächst ein wichtiges Prinzip: Verteilung von Tabellendaten über die Speicherhierarchie Umsatzdaten DISK SSD Flash In Memory Juni 14 Juni 14 Mai 14 Mai 14 April 14 April 14 März 14 März 14 Februar 14 Februar 14 Januar 14 Januar 14 Dezember 13 Dezember 13 November 13 November 13 Oktober 13 Oktober 13 September 13 September 13 August 13 August 13 Juli13 Juli13 Juni 13 Juni 13 April 13 April 13 März 13 März 13 Februar 13 Februar

255 An welchen Stellen macht In-Memory Sinn OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T T Referenzdaten Stammdaten Enterprise Layer Core - DWH / Info Pool R R R S S S User View Layer Alle Dimensionen Bei sehr großen Dimensionen nur die am häufigsten genutzten Spalten Die aktuellen Partitionen In-Memory Partitionierte Transaktionsdaten nur wenn sie abgefragt werden Vorberechnete Kennzahlen C A MJ Q L A Data Mining Statistikdaten Operational Data Oracle R

256 Enge Verzahnung von OLTP und DWH wird möglich OLTP Systeme Integration Layer Temporäre Daten T T Ermöglichen von Realtime-Reporting und Realtime-ETL Disk-Daten In Memory Kein expliziter Ladevorgang für Transaktionsdaten Gelesen wird die In-Memory-Version während das OLTP-System klassisch die Disk-Version der Daten beschreibt Operational Data Stores entfallen, wenn sie nur OLTP-Daten 1:1 bereitstellen. (Wenn machbar können operative Daten direkt gelesen werden) Operational Data

257 Sind Star Schemen noch sinnvoll? Ja, natürlich! Star-Schemen hatten auch schon vor In Memory ihre Aufgabe als Performance-Bringer verloren Star Schemen stellen Kennzahlen (FAKT) in ihrem fachlichen Kontext (DIMENSION) dar. User View Layer Vorberechnete Kennzahlen C Welches Kundensegment macht in welcher Region in welcher Zeit mit welchem Produkt am meisten Umsatz Kunden Zeit A MJ Q L Data Mining Statistikdaten A Produkt Region Oracle R

258 Sind Materialized Views noch sinnvoll? Nicht als reine Performance-Objekte Aber: Bis zu 80% aller BI-Auswertungen sind vorhersehbar und sollten in der Datenbank vorberechnet werden Berechnung in der Datenbank ist wesentlich schneller Die Berechnung von Kennzahlen wird standardisiert Sie verhindern, das jeder BI-Benutzer Kennzahlen individuell berechnet Materialized Views bilden fixe Kennzahlensysteme im Warehouse ab Mit In-Memory sind sie noch schneller User View Layer Vorberechnete Kennzahlen C A MJ Q L Data Mining Statistikdaten A Oracle R

259 Klassisches Vorgehen Redundanz wegen Denormalisierung Bereitstellung physischer Tabellen wg. Star Query Vorberechnung von Kennzahlen in Form von MAVs Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten R S S R R Bewegungsdaten auf Transaktionslevel der operativen Systeme S User View Layer Physikalische Dimension Stammdaten Mav KZ F Physikalische Fakten Zusätzlich Bitmap Indexe 260

260 Mögliches Vorgehen: Virtualisierung User View Layer Dimensionale Modelle simulieren Vorberechnung von Kennzahlen on the Fly Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten R S S R R Bewegungsdaten auf Transaktionslevel der operativen Systeme S User View Layer Dimension als View auf In-Memory Stammdaten Mav KZ Nur aktuelle Partitionen Und nur die wichtigsten Spalten Kleine Dimensionen Im klassischen Buffer Cache 261

261 Mögliches Vorgehen : Virtualisierung User View Layer Im Enterprise Layer müssen Dimensionsschlüssel müssen bereits existieren Historisierung Historisierung Kaum physikalische Persistenz auf den Festplatten Zugewinn Flexiblere und schneller Bereitstellung multidimensionaler Strukturen Weniger Plattenplatz weil weniger Redundanz im Schichtenmodell Mehr Performance REGION REGIONNR REGIONNR LAND LANDNR LANDNR KREISNR KREIS KREISNR ORTNR ORT REGION_ID ARTIKEL_ID ARTIKEL_NAME GRUPPE_NR GRUPPE_NR GRUPPE_NAME SPARTE_NR SPARTE_NR SPARTE_NAME Enterprise Layer REGION REGIONNR LAND LANDNR KREISNR KREIS ORTNR ORT REGION_ID VW_ORT User View Layer ARTIKEL_ID ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NR SPARTE_NAME VW_ARTIKEL Dimension als View auf In-Memory Stammdaten Mav KZ ZEIT_ID DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER Kleine Dimensionen Im klassischen 262

262 Herausforderungen Durch Wegfall von Tabellen Fehlende Orientierung bzgl. Hierarchisierung und mögliche Drill-Pfade Welche normalisierten Tabellen lassen sich zu Dimensionen formen? Lösung: Dokumentation über Metadaten-Layer REGION REGIONNR REGIONNR LAND LANDNR LANDNR KREISNR KREIS KREISNR ORTNR ORT REGION_ID Enterprise Layer REGION REGIONNR LAND LANDNR KREISNR KREIS ORTNR ORT REGION_ID VW_ORT User View Layer Dimension als View auf In-Memory Stammdaten Mav KZ ARTIKEL_ID ARTIKEL_NAME GRUPPE_NR GRUPPE_NR GRUPPE_NAME SPARTE_NR SPARTE_NR SPARTE_NAME ARTIKEL_ID ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NR SPARTE_NAME VW_ARTIKEL ZEIT_ID DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRES MONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER Kleine Dimensionen Im klassischen 263

263 Metadaten Basis für schnelles Agieren Zusammenhänge von Hierarchie-Leveln Hierarchisierung von Attributen Zusammenhänge von Dimensionen und Fakten Zusammenhänge von Fakten und Kennzahlen 264

264 Konsequenzen Auflösung der Schichtengrenzen Enterprise/End User Layer Trennung nur noch logisch bzgl. der Modellart Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Physikalische Nähe von Enterprise/End User Layer Keine separate Datenhaltung für Data Marts Keine Datenkopien für Fachabteilungen Zugriffe von Endbenutzer auf zentrale Schicht Datenzentriertes Security-Modell Virtuelle Dimensionen (z. B. als Views) Neuer Umgang mit Faktentabellen Wegfall von Bitmap-Indizierung Selektiver Umgang mit Spalten Eventuell Ersatz von Faktentabellen durch In-Memory-MAVs 265

265 Jeder wird profitieren, der wichtige DWH-Prozesse in die Datenbank verlagert Komplette Schichten-Architektur in einer Datenbank, auf einem Server Advanced Analytics in der Datenbank InPlace-Data Mining R-Objekte + R-Skripte in der Datenbank Vorberechnete Kennzahlen Generieren von Graphiken Zentrale Security-Verwaltung mit Bordmittel der Datenbank ETL-Strecken mit Native-SQL in der Datenbank Vorberechnete Kennzahlen Zentrales Security in der Datenbank Single Point + In-Memory-fähig R-Objekte Alle Schichten in einer Datenbank ETL-Strecken mit Native SQL Data Quality Analysen In Place Data Mining 266

266 Fehlentwicklungen Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer BI Plattform 1 C a c h e 2 Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Analytische Datenbank In Memory In Memory 267

267 Fehlentwicklungen Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer BI Plattform 1 1:1 Kopie! C a c h e! Verlängerung des Gesamtbeschaffungsprozesses Zusätzliche versteckte IT-Aufwende in den Fachabteilung Gefahr nicht abgestimmter Kennzahlen! Separate Hardware + Maintenance 2 Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer 1:1 Kopie Analytische Datenbank! In Memory In Memory 268

268 Mit In-Memory Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer BI Plattform 1 In Memory C a c h e Kompakte Analyse-Umgebungen profitieren am meisten von In Memory direkt in der Datenbank 2 Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Analytische Datenbank In Memory In Memory In Memory Eine Datenbank, ein Server 269

269 Mit In-Memory Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer BI Plattform 3 Virtuelle Strukturen C a c h e Virtualisierung des User View Layers - Mehr Flexibilität - Schnellere Weiterentwicklung / Reagieren - Weniger Redundanz von Daten - Volle multidimensionale Sicht 270

270 Sekundenschnelle Antworten des Systems unterstützen ein intuitives Analysieren Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Das Analysesystem behindert nicht mehr den Gedankenfluss. Benutzer starten mehr Abfragen in der gleichen Zeit Benutzer haben mehr Mut für komplexere Abfragen Reaktionszeiten verkürzen sich - Schlagzahl wird erhöht Mehr Resultate -> mehr Aktionen -> mehr Nutzen aus den Daten Der Informationsvorrat der Systeme ist schneller erschöpft Bedarf nach vielfältigeren Daten und komplexeren Datenmodellen Noch mehr Daten aus unterschiedlichen Bereichen werden zusammenhängend abgefragt Noch intensivere Nutzung der Warehouse-Systeme 271

271 Ist In Memory nur etwas für große Systeme? Nein Vor allem auch kleinere Umgebungen profitieren Sie haben oft kein eigenes Storage-System, sondern hängen am SAN und konkurrieren mit vielen OLTP- Anwendungen Das SAN wirkt oft als IO-Bremse Mit In-Memory machen sich kleinere Systeme IO-unabhängig! Ohne Inmemory Potenzielles Leistungsvermögen 200 MB / Sec / Core = 1,6 GB / Sec PARALLEL 4 optimal 700 MB / Sec Andere OLTP Anwendungen SAN Mit Inmemory Potenzielles Leistungsvermögen 200 MB / Sec / Core = 1,6 GB / Sec PARALLEL 16 optimal 700 MB / Sec Andere OLTP Anwendungen > 5 GB / Sec SAN In Memory Column Store 272

272 Noch einmal zum Schluß Die Ansprüche der Anwender werden wachsen und damit die Datenmengen und die Datenvielfalt Architekturen werden kompakter BI Caches wandern zurück in die Datenbank Direkt lesende BI-Werkzeuge haben Vorteile Analytische Datenbanken werden überflüssig In-Database-Prozesse sind auf dem Vormarsch In-Database Data Mining In-Database ETL 273

273 Laden und Updaten im Data Warehouse mit Bordmitteln der Datenbank 274

274 Ziele und Aufgaben Bereitstellen von Daten in adäquater Weise Zeitlich passend Richtige Form Passende Inhalte Daten so ablegen, dass man sie wiederfindet Dokumentation Daten Ressourcen-ökonomisch speichern Berücksichtigung von Plattenplatz Was wird geladen Es sollte nur das geladen werden, was wirklich gebraucht wird Gibt es einen Auftrag für das Laden bestimmter Daten? Wer braucht die Daten? Welche Daten werden gebraucht? Sind die zu ladenden Daten in einem brauchbaren Zustand? Welche Anforderungen sind an Quelldaten zu stellen? Wer definiert die Anforderungen? 275

275 ETL-Prozess planen und Lade-Aufwand minimieren Ladeläufe orientieren sich an den Daten, die man braucht 1. Erst die Datenstrukturen und Schichten entwerfen 2. Ladelauf planen Zur Orientierung hilft das 3-Schichten-Modell: Data Integration Layer T T T B B R ETL: Kosten pro Kunde Enterprise Information Layer R S S S B B B B ETL: Kosten pro Kunde ETL: Kosten pro Kunde D ETL: Kosten pro Kunde User View Layer D D D F D F F D D D Die frühest mögliche Stelle für Transformationen finden 276

276 Die Organisation des ETL-Prozesses Data Integration Layer Enterprise Information Layer User View Layer Richtig selektieren Die Masse aller Prüfungen Stamm- Referenzdaten aktualisieren Nur denormalisierende Joins Möglichst viele Kennzahlen in die Datenbank Repository (Glossar, alle Objekte) Für alle Aktionen den frühest möglichen Punkt finden 277

277 Lade-Aktivitäten an Schichtübergängen Integration Enterprise User View Flüchtige Daten Persistent Kopien / teilpersistent dynamisch Clearing-Verfahren, technisches, logisches, semantisches Prüfen Normalisieren Historisieren (Granularisieren) Denormalisieren z.t. Aggregieren Generische Datenstrukturen (isolierte Tabellen, teil-ausgeprägte Datentypen) Keine Constraints 3 NF Datenstrukturen (ER-Tabellen, ausgeprägte Datentypen) Aktivierte Constraints Multidimensionale Modelle (ER-Tabellen, ausgeprägte Datentypen) Kopieren Selektieren Mengenbasiertes Prüfen ohne Constraints Umschlüsselung Lookups -> Referenz-/Stammdaten Joins Aufbauen von Distinct-Strukturen (Normalisieren) Umschlüsselung Lookups -> Dimensionsdaten Joins - Denormalisieren 278

278 Verfahren für schnelles ETL in der Datenbank Data Integration Layer Enterprise Information Layer User View Layer Selektieren Statt kopieren Direct Path in temporäre Tabellen Contraintfreies Prüfen mit Mengenbasiertem SQL Partition Exchange &LOAD in partit. Tabellen (PEL) Unveränderte Bewegungsdaten liegen lassen Große Fakten-Tab. über PEL. Kennzahlen ausschließlich über MAV- Refresh Beknnte Kennzahlen in die DB weniger Koipien in BI-Tools

279 Deltadaten Extrahieren OLTP DWH 1 Table Änderungsdatum Table 2 Table Trigger Table Queue 3 Table Deltabildung über MINUS Table 4 LogFile Logminer Table Queue 5 LogFile Streams Queue Table 6 LogFile Golden Gate Queue Table

280 Deltadaten-Erkennung Einmaliger Initial - Load SRC Table 1:1 Kopie SRC Table 1:1 Kopie TGT Table Regelmäßiges Laden SRC Table 1:1 Kopie SRC Table (neu) merge into TGT Table select * from ((select...from SRC_TABLE_neu) minus select * from SRC_TABLE_alt)) TGT Table SRC Table (-1) 281

281 Datenbank-Trigger Werden nur im Quellsystem angelegt Beeinflusst Performance des Quellsystems Eher als Notlösung anzusehen Wenn es kein Änderungsdatum in der Quelltabelle gibt Zum Triggern Message-basierter oder Event-gesteuerter Ladeläufe CREATE OR REPLACE TRIGGER Bestellung BEFORE DELETE OR INSERT OR UPDATE ON Bestellung FOR EACH ROW WHEN (new.bestellnr > 0) DECLARE sal_diff number; BEGIN INSERT INTO log_bestellung (Alte_Bestell_Nr,Neue_Bstell_Nr) VALUES(old.Bestellnr,new.Bestellnr); END; 282

282 Einlesetechniken Vorsysteme EBCDIC ASCII SQL-Loader External Table Direct Save SQL Oracle Database Link Transportable TS Datapump SQL BS Copy BS Copy Non Oracle ODBC JDBC Gateway SQL SQL SQL Oracle DWH Applikation z. B. SAP R/3 API API CALL SQL

283 SQL*Loader Loader Modes Convential Path INSERT von Daten / UPDATE von Indizes / Auslösen von Triggern Auswertung von Constraints Direct Path Formatieren der Daten in Blöcken und direktes Einfügen in die Datafiles Keine SGA-Operationen / kein INSERT auf SQL-Level Parallel Direct Path Parallele SQL*Loader-Aufrufe Empfehlungen: Direct Path Load nutzen Alle Integrity Constraints ausschalten NOT NULL, Unique und Primary Key Constraints Verhindern von Index-Aktualisierungen UNRECOVERABLE Option wählen Partitionen nach und nach laden Andere Partitionen bleiben für andere Benutzer im Zugriff Parallel laden, wenn es möglich ist Nutzung paralleler Schreib-Threads Alternativ parallele Jobs starten 284

284 Beispiel - Control File OPTIONS (SKIP=1, BINDSIZE=50000, ERRORS=50, ROWS=200, DIRECT=TRUE, PARALLEL=TRUE, READSIZE=65536, RESUMABLE=TRUE, RESUMABLE_TIMEOUT=7200) UNRECOVERABLE LOAD DATA CHARACTERSET WE8MSWIN1252 INFILE 'C:\orte.csv' BADFILE 'orte.bad' DISCARDFILE 'orte.dis INTO TABLE dwh.tb_orte WHEN ort_id!= BLANKS APPEND REENABLE DISABLED_CONSTRAINTS FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'" (orte_nr POSITION(1) INTEGER EXTERNAL, ort CHAR, plz CHAR, bundesland CHAR, region CHAR, nummernfeld INTEGER EXTERNAL ) 285

285 Aufruf des SQL*Loaders sqlldr userid=dwh/dwh control=c:\orte.ctl log=c:\orte.log orte.ctl orte.csv Control File Daten TB_ORTE 286

286 Data Pump Architektur Quelle: 287

287 Oracle Data Pump Höhere Performance als bei IMP / EXP oder anderen Entlade-Verfahren Daten und / oder Metainformationen von DB Objekten Größere Steuerungsmöglichkeit, d.h. mehr Parameter und Kontrolle der Datenextraktion Leichtere Einbindung der Datenflüsse über Rechnergrenzen hinweg Parallelisierung in RAC-Umgebungen Instanz-übergreifend Kompression u. Verschlüsselung nach Bedarf Legacy Mode zur Weiterverwendung von Ex-/Import Controls Wiederanlauffähig Release 2 288

288 Vereinfachte Verfahrensdarstellung OLTP DWH Export mit Data Pump (expdp) FTP Import mit Data Pump (impdp) Schema OLTP Besondere GRANTs Schema DWH Delta-Load 289

289 Export der Daten Optional Flashback zum Absichern des Entlade-Zeitpunktes nutzen Remote-Export möglich (per NETWORK_LINK) Wegfall von separatem FTP-Aufruf OLTP DWH Einschränkung durch Query-Bedingung Damit Zugriff z. B. auf Last Update-Sätze Default Export Location Export mit Data Pump (expdp) FTP Import mit Data Pump (impdp) D:\o11\admin\o11\dpdump\EXPDAT.DMP Schema OLTP Besondere GRANTs Schema DWH Delta-Load 290

290 Ablauf des Exports / Imports expdp parfile=para_ex.txt Export über Parameter-Datei Export auch mit Remote-Zugriff Einschränkung der Datenmenge durch QUERY impdp DIRECTORY=DP_OUT DUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2 Bei dem Import: REMAP auf das Schema 291

291 Interaktiver Modus von Data Pump CTRL-C zum Starten des interaktiven Modus ADD_FILE Das Hinzufügen eines neuen Dump-Files ist möglich KILL_JOB Prozess kann abgebrochen werden STOP_JOB Aktueller Job wird beendet PARALLEL Einstellung des Parallelisierungsgrads Eingabe von continue_client führt zur normalen Monitor-Ausgabe zurück 292

292 External Tables TEXT DATA PUMP HDFS HIVE Tabelle, die eine Datei referenziert Datei wird als normale Tabelle behandelt Nur lesend zugreifbar RMAN sichert nicht die Daten Bulk-Loading Operationen, wie insert... select Mehr Transformationsoptionen als im SQL* Loader Parallelisierbares Schreiben Alternative zum SQL*Loader CREATE DIRECTORY Exttab AS 'D:\Szenario\Exttab'; DROP TABLE Gemeinde_EX; CREATE TABLE Gemeinde_EX ( Gemeinde_Nr VARCHAR2(8), Gemeinde VARCHAR2(50) ) ORGANIZATION EXTERNAL (TYPE oracle_loader DEFAULT DIRECTORY Exttab ACCESS PARAMETERS (RECORDS DELIMITED BY newline BADFILE 'Gemeinde.bad DISCARDFILE 'Gemeinde.dis LOGFILE 'Gemeinde.log SKIP 20 FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '" ) LOCATION ('Gemeinde_CSV.TXT )) 293

293 Konzept für variable Directories oder Dateinamen Szenario: Z. B. sich täglich ändernde Dateinamen Datum im Dateinamen Lieferantenname im Dateinamen ABC ABC ABC ABC DWH alter table ex_orte default directory LC_Texte_2; create or replace directory LC_TEXTE AS 'D:\Szenario\Testdaten'; create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten'; alter table ex_orte location ('ORTE_Y.CSV'); 294

294 Preprocessing für External Tables CREATE TABLE sales_transactions_ext (PROD_ID NUMBER, CUST_ID NUMBER...) ORGANIZATION external (TYPE oracle_loader DEFAULT DIRECTORY data_file_dir ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII PREPROCESSOR exec_file_dir:'gunzip' OPTIONS '-C' BADFILE log_file_dir:'sh_sales.bad_xt' LOGFILE log_file_dir:'sh_sales.log_xt' FIELDS TERMINATED BY " " LDRTRIM ( PROD_ID, CUST_ID, TIME_ID DATE(10) "YYYY-MM-DD", CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD, UNIT_COST, UNIT_PRICE)) location ('sh_sales.dat.gz')) REJECT LIMIT UNLIMITED; 295

295 External Tables mit Data Pump OLTP DWH EX_T EX_T FTP select * from EX_Bestellung_2 296

296 Vorteile der Kombination Leichte Handhabung Syntax der beiden Typen sehr ähnlich Hohe Performance Data Pump-eigenes Format ist für schnellen Ex-/Import ausgelegt Parameter von Data Pump zusätzlich nutzen, um die zu extrahierende Datenmenge auf das Wesentliche zu reduzieren Verbleiben innerhalb der SQL-Sprache Durch CREATE TABLE AS SELECT lassen sich sowohl WHERE-Filter als auch Joins während des Extrahierens verarbeiten 297

297 Transportable Tablespaces Höchste Performance beim Austausch von Oracle zu Oracle Daten werden als komplettes File oder File Set bewegt Austausch zwischen unterschiedlichen Betriebssystemen möglich Konvertierung kann mit RMAN erfolgen, z.b. von BigEndian nach LittleEndian Nützlich beim Bewegen der Daten zwischen Quellsystem und Staging Area sowie zwischen den anderen Schichten im Warehouse Vorgehensweise 1. Anlegen des Tablespaces im Quellsystem 2. Zuweisung der zu kopierenden Daten des Tablespace Alle Daten sind dem Tablespace zugeordnet (Indizes etc.) 3. Ändern des Tablespaces auf Read-Only 4. Export der Metadaten mit Data Pump (EXPDP) 5. Eventuell Konvertierung des Tablespace Datafiles Über die RMAN CONVERT Function 6. Kopieren des Tablespace Datafiles und der Metadaten 7. Import der Metadaten in der Zielumgebung 8. Ändern des Tablespaces auf Read-Write 298

298 Transportable Tablespaces CREATE TABLE temp_jan_umsatz NOLOGGING TABLESPACE ts_temp_umsatz AS SELECT * FROM????????? WHERE time_id BETWEEN '31-DEC-1999' AND '01- FEB-2000'; Temp_jan_umsatz ALTER TABLESPACE ts_temp_umsatz READ ONLY; Kopieren des Tablespace zur Zielplattform BS-Copy Daten 'dd-mon-yyyy')); EXP TRANSPORT_TABLESPACE=y TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Meta daten IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp ALTER TABLESPACE ts_temp_umsatz READ WRITE; ALTER TABLE umsatz ADD PARTITION umsatz_00jan VALUES LESS THAN (TO_DATE('01-feb-2000', ALTER TABLE umsatz EXCHANGE PARTITION umsatz_00jan WITH TABLE temp_umsatz_jan INCLUDING INDEXES WITH VALIDATION; 299

299 ETL-Performance-Techniken in der Datenbank 300

300 Direct Path / Convential Path Convential Path Reuse Free Space in Blöcken Constraint Checks Undo Data / Logging Daten zunächst immer in SGA Buffer Direct Path Schreiben oberhalb der High Water Marks Keine Constraint Checks Kein Logging Daten nicht in SGA Buffer

301 Convential und Direct Path Load Convential Path Konkurriert mit allen anderen Prozessen im Buffer- Management Baut SQL-Struktur auf, die dann zu analysieren ist. Sucht nach nicht vollständig gefüllten Blöcken und füllt diese Sinnvoll bei: Beschreiben von indizierten Tabellen Parallel zu anderen Loadvorgängen stattfindenden Loads (kein exklusiver Zugriff möglich) Bei dem Laden von kleinen Datenmengen in Tabellen mit großen Indizes Bei Tabellen mit Constraints Direct Path Baut Column-Array-Struktur auf und gibt diese direkt an die Load Engine der DB Ohne zuvor in Buffer zu schreiben Bildet neue Blöcke und schreibt diese direkt weg Sinnvoll bei: Nicht indizierten Tabellen (Index würde bei dem Zusammenführen mit neuen Einträgen kopiert werden. Das kostet Zeit) Nicht mit Constraints (PK/FK) belegten Tabellen (Constraints werden zunächst ausgeschaltet und nachträglich wieder aktiviert. Das kann insgesamt länger dauern) 302

302 Hinweise zum Direct Path Load create table tab (a integer); insert /*+ append */ into tab select rownum from dual; select * from tab; FEHLER in Zeile 1: ORA-12838: Objekt kann nach paralleler Änderung nicht gelesen/geändert werden Zieltabelle ist exklusiv nur für den Ladelauf geöffnet Schreibt immer oberhalb der High Watermark Bei der Definition der Tabellen PCTFREE klein wählen (abhängig von späteren UPDATE- Vorgängen) Bei der Definition der Tabellen PCTUSED klein wählen (lässt die Blöcke möglichst voll werden) 303

303 Table Functions Pipeline-Verfahren Parallelisierung trotz aufwendiger Programmierlogik tf1 tf2 Quelle Ziel tf3 Stage_tabelle INSERT INTO Ziel SELECT * FROM (tf2(select * FROM (tf1(select * FROM Quelle)))) INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle)) 304

304 Begriffe im Bereich Table Functions Table Function Funktionen, die eine Gruppe von Sätzen (SET) gleichzeitig bearbeitet. Table Functions wirken wie physische Tabellen. Entsprechend werden sie auch in der FROM Klausel verwendet. Record Type Ein komplexer, aus mehreren Feldern zusammengesetzter Datentyp. Nested Table Eine Art virtuelle Tabelle (temporäre Tabelle im Speicher). Eine Table Function kann eine solche Tabelle komplett an das aufrufende Kommando zurückgeben. Ref Cursor Eine Art Pointer auf ein Result Set einer Abfrage. Man übergibt einen Ref Cursor einer Table Function, damit diese die Sätze des Result Sets innerhalb der Function abarbeitet. Parallel Table Functions können eingehende Sätze parallel bearbeiten, wenn diese als Ref Cursor übergeben werden. Pipelined Eine Table Function reicht bereits fertige Sätze an das aufrufende Kommando zur weiteren Verarbeitung weiter, während sie noch weitere Sätze bearbeitet. 305

305 Mengenbasierte Verarbeitung Trotz Programmierung INSERT INTO Table SELECT Feld1, Feld2 FROM Variante 1 Variante 2 Table_Function( ) Funktion Cursor Fetch Loop If a = b... Update... Case... pipe row(record Type) Return Table Schnelle Verarbeitung (Pipelined) Objekttechnik Parallelisierung Mehrere Rückgabewerte und Einzelrückgaben Cursor als Input Schachtelbar 306

306 Die Hilfstypen für Daten und Cursor drop type Bestellung_X_t; create type Bestellung_X_t as object ( BESTELLNR NUMBER(10), KUNDENCODE NUMBER(10), BESTELLDATUM DATE, LIEFERDATUM DATE, BESTELL_TOTAL NUMBER(12,2), Fehler_Datum DATE); drop type Bestellung_X_t_table; create type Bestellung_X_t_table as TABLE of Bestellung_X_t; Definition Record-Type Definition Nested-Table auf der Basis des Rekord-Types create or replace package cursor_pkg as type Bestellung_t_rec IS RECORD ( BESTELLNR NUMBER(10), KUNDENCODE NUMBER(10), BESTELLDATUM DATE, LIEFERDATUM DATE, BESTELL_TOTAL NUMBER(12,2)); END; Definition Cursor als Typ des Übergabeparameters 307

307 308 Definieren einer Nested-Table-Struktur für die spätere Rückgabe. Lesen aus Cursor Erweitern Nested-Table um einen Satz und Überführen eines Satzes in die Nested-Table Rückgabe der kompletten Tabelle an das aufrufende SELECT-Statement (Alternative zu PIPE). create or replace function f_bestellung_x(cur cursor_pkg.refcur_t) RETURN Bestellung_X_t_table IS BESTELLNR NUMBER(10); KUNDENCODE NUMBER(10); BESTELLDATUM DATE; LIEFERDATUM DATE; BESTELL_TOTAL NUMBER(12,2); Fehler_Datum DATE; ORDER_ID NUMBER(10); objset Bestellung_X_t_table := Bestellung_X_t_table(); i number := 0; begin LOOP -- read from cursor variable FETCH cur into BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,ORDER_ID; -- ext when last row EXIT WHEN cur%notfound; i := i+1; if substr(to_char(lieferdatum,'yyyy.mm.yy'),1,4) >2002 then Fehler_Datum := to_date(' ','yyyy.mm.dd'); else Fehler_Datum := LIEFERDATUM; End if; objset.extend; objset(i) := Bestellung_X_t(BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,Fehler_Datum); END LOOP; CLOSE cur; Return objset; END; Übernahme von Ausgangssätzen als Cursor

308 Beispielaufrufe insert into bestellung_x select * from TABLE(f_Bestellung_X(CURSOR(SELECT * from Bestellung))) select * from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung))) select count(*) from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung)) 309

309 Partition Exchange Loading (PEL) Financial Temporäre Tabelle Production Neuer Monat Human Res. Store Supplier P1 P2 P3 P4 Z1 Z2 Z3 Z Monat 13 Zeit Marketing Service Unvergleichbar schnell! Parallel Direct Path INSERT (Set Based) CREATE TABLE AS SELECT (CTAS) CREATE Indizes / Statistiken anlegen EXCHANGE Tabelle Monat 12 Monat 11 Monat 10 DROP PARTITION Faktentabelle Region 310

310 Partition Exchange Loading (PEL) -- Leere Partition an Zieltabelle hinzufügen ALTER TABLE Bestellung ADD PARTITION "Nov08" VALUES LESS THAN (to_date('30-nov-2008','dd-mon-yyyy')); 1 -- Neue leere temporäre Tabelle erstellen CREATE TABLE Bestellung_temp AS SELECT * FROM Bestellung WHERE ROWNUM < 1; 2 -- Inhalte laden INSERT INTO "PART"."BESTELLUNG_TEMP" (BESTELLNR, KUNDENCODE, BESTELLDATUM, LIEFERDATUM, BESTELL_TOTAL, AUFTRAGSART, VERTRIEBSKANAL) VALUES ('2', '3', TO_DATE('23.Nov.2008', 'DD-MON-RR'), 3 to_date('23.nov.2008', 'DD-MON-RR'), '44', 'Service', '6'); Commit; -- Erstellen Index auf temporäre Tabelle CREATE INDEX Ind_Best_Dat_Nov ON Bestellung_temp ("BESTELLNR") NOLOGGING PARALLEL; -- Temporäre Tabelle an die Zieltabelle anhängen ALTER TABLE Bestellung EXCHANGE PARTITION "Nov08 WITH TABLE Bestellung_temp INCLUDING INDEXES WITHOUT VALIDATION;

311 Exchange Partition Data Integration Layer Enterprise Information Layer User View Layer Älteste Archivieren (drop partition) CTAS Checks Tmp_table Direct Path Mai Juni Juli August September Oktober November Alter table add partition Alter table exchange partition

312 Aufbau Fakten-Tabellen Data Integration Layer Enterprise Information Layer User View Layer Älteste Archivieren (drop partition) Fact-Table CTAS Checks Tmp_table Direct Path Mai Juni Juli August September Oktober November Tmp_table CTAS Tmp_table Juni Juli August September Oktober November Alter table exchange partition Alter table exchange partition

313 Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP Q1 Q2 Q3 Q SALESREP QU REVENUE Q Q Q Q Q Q Q Q Q Q Q Q

314 Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses QUARTERLY_SALES SALESREP Q1 Q2 Q3 Q SALESREP QU REVENUE Q Q Q Q Q Q Q Q Q Q Q Q4 310 select * from quarterly_sales unpivot include nulls (revenue for quarter in (q1,q2,q3,q4)) order by salesrep, quarter ; 315

315 Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP 'Q1' 'Q2' 'Q3' 'Q4' SALES_BY_QUARTER SALESREP QU REVENUE Q Q Q Q Q Q Q Q Q Q Q Q1 260 select * from sales_by_quarter pivot (sum(revenue) for quarter in ('Q1','Q2','Q3','Q4')) order by salesrep ; 316

316 Aggregate bilden Bereitstellung in Form von Materialized Views Spart einen separaten ETL-Lauf Flexibler, weil nur 1 SQL-Kommando nötig Geht zu Lasten der Dokumentation Mit Partition Change Tracking die Aktualisierung der MAVs steuern Auch andere Refresh-Mechanismen nutzen 317

317 Multiple Inserts INSERT ALL WHEN STATUS = 'P' THEN INTO WH_TRANS_PRIVAT (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS) WHEN STATUS = 'F' THEN INTO WH_TRANS_FIRMA (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS) SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE$1, WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE$1, WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL$1, WH_TRANSAKTIONEN.STATUS STATUS FROM WH_TRANSAKTIONEN WH_TRANSAKTIONEN WHERE (WH_TRANSAKTIONEN.STATUS = 'P /*SPLITTER.PRIVATKUNDEN*/) OR (WH_TRANSAKTIONEN.STATUS = 'F /*SPLITTER.FIRMENKUNDEN*/); 318

318 319 MERGE-Funktion Funktion MERGE dient dem gleichzeitigen INSERT und UPDATE Basierend auf dem Matching des definierten Schlüssels (ON-Klausel) Auch DELETE-Operationen möglich MERGE INTO "Kunde_TGT" USING (SELECT "KUNDEN_STAMM"."KUNDENNR" "KUNDENNR", "KUNDEN_STAMM"."VORNAME" "VORNAME", "KUNDEN_STAMM"."NACHNAME" "NACHNAME", "KUNDEN_STAMM"."STATUS" "STATUS", "KUNDEN_STAMM"."STRASSE" "STRASSE", "KUNDEN_STAMM"."TELEFON" "TELEFON", "KUNDEN_STAMM"."TELEFAX" "TELEFAX FROM "KUNDEN_STAMM" "KUNDEN_STAMM") MERGE_SUBQUERY ON ( "Kunde_TGT"."KUNDENNR" = "MERGE_SUBQUERY"."KUNDENNR") WHEN NOT MATCHED THEN INSERT ("Kunde_TGT"."KUNDENNR", "Kunde_TGT"."VORNAME", "Kunde_TGT"."NACHNAME", "Kunde_TGT"."STATUS", "Kunde_TGT"."STRASSE", "Kunde_TGT"."TELEFON", "Kunde_TGT"."TELEFAX") VALUES ("MERGE_SUBQUERY"."KUNDENNR", "MERGE_SUBQUERY"."VORNAME", "MERGE_SUBQUERY"."NACHNAME", "MERGE_SUBQUERY"."STATUS", "MERGE_SUBQUERY"."STRASSE", "MERGE_SUBQUERY"."TELEFON", "MERGE_SUBQUERY"."TELEFAX") WHEN MATCHED THEN UPDATE SET "VORNAME" = "MERGE_SUBQUERY"."VORNAME", "NACHNAME" = "MERGE_SUBQUERY"."NACHNAME", "STATUS" = "MERGE_SUBQUERY"."STATUS", "STRASSE" = "MERGE_SUBQUERY"."STRASSE", "TELEFON" = "MERGE_SUBQUERY"."TELEFON", "TELEFAX" = "MERGE_SUBQUERY"."TELEFAX";

319 Set-Based ETL-Prüf- und Transformations Techniken in der Datenbank 320

320 Es gibt 6 Prüf-Kategorien A B C Attribut-bezogene Regeln 1. Not Null / Pflichtfelder 2. Formatangaben a) numeric b) Alphanumerisch c) Date d) Masken 3. Div. Check Constraint 4. Wertbereiche Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln 6. Primary Key / Eindeutigkeit 7. Aggregat Bedingungen a) Ober- Untergrenzen von Summen b) Anzahl Sätze pro Intervall usw. 8. Rekursive Zusammenhänge Verweise auf andere Sätze derselben Tabelle (Relation) D E F Tabellen-über greifende Regeln 9. Foreign Key a) Child-Parent (Orphan) b) Parent-Child 10. Aggregat Bedingungen a) Ober- Untergrenzen von Summen b) Anzahl Sätze pro Intervall usw. 11. Referenz-Zusammenhänge Verweise auf Sätze einer anderen Tabelle (Relation) Zeit-/ Zusammenhang-bezogene Regeln 12. Zeitinvariante Inhalte (z. B. Anz. Bundesländer) 13. Zeitabhängige Veränderungen 14. Über die Zeit mit anderen Daten korrelierende Feldinhalte Verteilungs-/Mengen-bezogene Regeln 15. Verteilung a) Arithmetische Mittel b) Varianz / Standardabweichungen 16. Qualitätsmerkmale und Mengen

321 Mengen-basierte Prüfungen mit SQL A B C Attribut-bezogene Regeln 1. Not Null / Pflichtfelder 2. Formatangaben a) numeric b) Alphanumerisch c) Date d) Masken 3. Div. Check Constraint 4. Wertbereiche Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln 6. Primary Key / Eindeutigkeit 7. Aggregat Bedingungen a) Ober- Untergrenzen von Summen b) Anzahl Sätze pro Intervall usw. 8. Rekursive Zusammenhänge Verweise auf andere Sätze derselben Tabelle (Relation) select bestellnr, case when -- wenn Feld BESTELLNR nicht numerisch REGEXP_LIKE(BESTELLNR, '[^[:digit:]]') then 1 else 0 End Num_Check_bestellnr from bestellung; select CASE WHEN (F1 = 3 and F2 = F3 + F4) then 1 ELSE 0 end from fx insert /*+ APPEND */ into err_non_unique_bestellung select bestellnr from (select count(bestellnr) n, bestellnr from bestellung group by bestellnr) where n > 1;

322 Umgang mit SQL und PL/SQL im DB-ETL So nicht... Aber z. B. so... Create or replace procedure Proc_A V1 number; V2 number; V3 varchar2; V4 varchar2;... Cursor CS as select s1,s2 from tab_src; Begin open CS; loop fetch CS into v1,v2,...; select f1 into v3 from tab1; select f1 into v4 from tab2; insert into Ziel _tab s1,s2,s3,s4 values(v1,v2,v3,v4); end; end; insert into ziel select f1, f2, f3, f4 from (with CS as select s1 v1,s2 v2 from tab_src Select tab1.f1 f1,tab2.f2 f2, CS.s1 f3,cs.s2 f4 from tab1,tab2,cs Where... );

323 Prüfungen Kategorie A Attribut-/Column-bezogene Regeln 1. Not Null / Pflichtfelder 2. Formatangaben a) numeric b) Alphanumerisch c) Date d) Masken 3. Div. Check Constraint 4. Wertbereiche Ober-/Untergrenzen / Wertelisten Prüfen mit oder ohne Constraints? Constraints verlangsamen den Massen-Insert des ETL-Prozesses => Ohne Constraints arbeiten => Prüfen mit SQL-Mitteln => Prüfen mit DML-Errorlogging Nur bei wenigen Daten sinnvoll

324 Prüfkonzepte Einfach implementierbar Bessere Performance Fachliche Prüfungen kaum möglich Eventuell zusätzliche Prüfungen nötig Nur bei aktivierten Constraints Kopieren Stage-Tabelle + Geprüfte Daten Date Number Statistik Routine Statistiken Varchar2() Check Constraints Bad File DML Error Log Fehlerhafte Sätze 325

325 Error Logging INSERT INTO Kunde VALUES (...) LOG ERRORS INTO kunde_err('load_ ') Kunde KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON Kunde_err KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON ORA_ERR_NUMBER$ ORA_ERR_MESG$ ORA_ERR_ROWID$ ORA_ERR_OPTYP$ ORA_ERR_TAG$ Constraints Unique Key / Primary Key Foreign Key NOT NULL Check Constraint 326

326 Check Constraint mit Regular Expressions CREATE TABLE Check_KUNDE ( KUNDENNR NUMBER, GESCHLECHT NUMBER, VORNAME VARCHAR2(50), NACHNAME VARCHAR2(50), ANREDE VARCHAR2(10), GEBDAT DATE, ORTNR NUMBER, STRASSE VARCHAR2(50), TELEFON VARCHAR2(30) ); Regel: Im Kundennamen müssen Buchstaben vorkommen und keine reine Zahlenkolonne ALTER TABLE check_kunde ADD CONSTRAINT Ch_KD_Name CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]')); INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat, Ortnr, Strasse, Telefon) VALUES (9,1,'Klaus','123','Herr',' ',2,'Haupstr.', ); FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt Verwendung von Regular Expressions steigert die Performance bei Prüfungen 327

327 Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ELSE 'nicht numerisch' END Ergebnis FROM dual; CREATE OR REPLACE FUNCTION isnumeric ( p_string in varchar2) return boolean AS l_number number; BEGIN l_number := p_string; RETURN 1; EXCEPTION WHEN others THEN RETURN 0; END; 328

328 Hilfsfunktion: Date_Check create or replace function IsDate (str varchar2) return varchar2 is indate varchar2(40); FUNCTION datecheck (inputdate varchar2, inputmask varchar2) RETURN varchar2 IS datevar date; BEGIN datevar:= to_date(inputdate,inputmask); return 'true'; exception when others then return 'false'; END; In Verbindung mit der CASE-Anweisung BEGIN indate:= trim(str); if datecheck(indate, 'mm-dd-yyyy') = 'false' AND datecheck(indate, 'mm-dd-yy') = 'false' AND datecheck(indate, 'yyyy-mm-dd') = 'false' AND datecheck(indate, 'yy-mm-dd') = 'false' AND datecheck(indate, 'yyyy-mon-dd') = 'false AND datecheck(indate, 'yy-mon-dd') = 'false AND datecheck(indate, 'dd-mon-yyyy') = 'false AND datecheck(indate, 'dd-mon-yy') = 'false AND datecheck(indate, 'mmddyy') = 'false AND datecheck(indate, 'mmddyyyy') = 'false AND datecheck(indate, 'yyyymmdd') = 'false' AND datecheck(indate, 'yymmdd') = 'false AND datecheck(indate, 'yymmdd') = 'false' AND datecheck(indate, 'yymondd') = 'false AND datecheck(indate, 'yyyymondd') = 'false AND datecheck(indate, 'mm/dd/yyyy') = 'false' AND datecheck(indate, 'yyyy/mm/dd') = 'false AND datecheck(indate, 'mm/dd/yy') = 'false' AND datecheck(indate, 'yy/mm/dd') = 'false AND datecheck(indate, 'mm.dd.yyyy') = 'false' AND datecheck(indate, 'mm.dd.yy') = 'false' AND datecheck(indate, 'yyyy.mm.dd') = 'false' AND datecheck(indate, 'yy.mm.dd') = 'false' then return 'false'; else return 'true'; end if; --exception --when others then return 'false'; END; 329

329 Abarbeitungslogik für Einzelfeldprüfung mit CASE Temporäre Tabelle ist optional Ist wesentlich übersichtlicher Erlaubt Kombination von unterschiedlichen Prüfkriterien Gepruefte_Daten Kopieren Stage-Tabelle Varchar2() Feld1 Feld2 Feld3 INSERT INTO temp_table SELECT CASE... FROM Stage_Table Temp-Tabelle Varchar2() Feld1 Feld2 Feld3 Feld1_is_null Feld1_is_numeric Feld2_is_numeric INSERT ALL WHEN Feld_1_is_null =1 into Error_Daten WHEN Feld_1_is_null=0 into Gepruefte_Daten Date Number Varchar2() Error_Daten Date Number Varchar2() 330

330 Abarbeitungslogik für Einzelfeldprüfung mit CASE OLTP_Kunden_tmp OLTP_Kunden Bestellnr Menge Summe Name Ort BestDatum INSERT INTO OLTP_Kunden_tmp SELECT Bestellnr,Menge,Summe,Name,Ort,BestDatum, CASE WHEN (Bestellnr is NULL) then 1 ELSE 0 END Bestellnr_isNull, CASE WHEN (isnumeric(menge) = 1) then 1 ELSE 0 END Menge_isNumeric, CASE WHEN (isnumeric(summe) = 1) then 1 ELSE 0 END Summe_isNumeric, CASE WHEN (Summe is NULL) Bestellnr Menge Summe Name Ort BestDatum Bestellnr_isNull Menge_isNumeric Summe_isNumeric then 1 ELSE 0 END Summe_isNull, CASE WHEN (isdate(bestdatum) = 1) then 1 ELSE 0 END BestDatum_isDate FROM OLTP_Kunden; Summe_isNull BestDatum_isDate...

331 Prüfungen Kategorie B Satz-bezogene Regeln Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Lösung: Analog zu Kategorie A über CASE F1 F2 F3 F select CASE WHEN (F1 = 3 and F2 = F3 + F4) then 1 ELSE 0 end from fx

332 Prüfungen Kategorie C Satz-übergreifende Regeln 6. Primary Key / Eindeutigkeit 7. Aggregat Bedingungen a) Ober- Untergrenzen von Summen b) Anzahl Sätze pro Intervall usw. 8. Rekursive Zusammenhänge Verweise auf andere Sätze derselben Tabelle (Relation)

333 6. Eindeutigkeit / PK BESTELLUNG BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS Lösung: Mengenbasiertes Sammeln doppelter Sätze in Fehlertabelle insert /*+ APPEND */ into err_non_unique_bestellung select bestellnr from (select count(bestellnr) n, bestellnr from bestellung group by bestellnr) where n > 1; BESTELLPOSITION BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK FK

334 7. Aggregatbildung Anforderung: Wenn der Umsatz pro Artikel unter 20% des Artikelgruppen-Gesamtwertes fällt, dann ROT Lösung: Mit analytischen Funktionen: Auf Satzebene über Informationen von Satzgruppen verfügen F_UMSATZ ARTIKEL_ID KUNDEN_ID FK ZEIT_ID FK REGION_ID FK KANAL_ID UMSATZ MENGE UMSATZ_GESAMT select Artikelname, Artikelgruppe, Wert, sum(wert) over (partition by Artikelname) Artikelgesamtwert, sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert, case when (round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by Artikelgruppe))*100),0) ) < 20 then 'ROT' ELSE 'GRUEN' end Prozent from Artikel FK FK D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME PK SPARTE_NR ARTIKEL_ID

335 8. Rekursive Zusammenhänge Anforderung: Die Summe aller Member_Value-Werte pro Parent muss gleich dem Group_Value-Wert des Parent sein. Lösung: Über Sub-Select in dem nach Parent gruppiert und summiert wird. F_Key Parent Member Group _Value _Value select distinct A.F_key from rk A, (select sum(member_value) sum_member, parent from rk where parent!= 0 group by group_value, parent) B where A.member_value = 0 and A.group_value = B.sum_member;

336 Prüfungen Kategorie D Tabellen-übergreifende Regeln 9. Foreign Key a) Child-Parent (Orphan) b) Parent-Child 10. Aggregat Bedingungen a) Ober- Untergrenzen von Summen b) Anzahl Sätze pro Intervall usw. 11. Referenz-Zusammenhänge Verweise auf Sätze einer anderen Tabelle (Relation)

337 9. Foreign Keys Anforderung: Zu jeder Bestellung muss es einen Kunden geben. Lösung: Sub-Select in Where-Klausel. KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP BESTELLUNG BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS insert /*+ APPEND */ into err_orphan_bestellung select bestellnr from bestellung where Kundennr not in (select Kundennr from kunde);

338 10. Aggregatbedingungen Anzahl Sätze pro Einheit Anforderung: Anzahl Positionen muss einen bestimmten Wert haben. Lösung: Sub-Select in FROM-Klausel. insert /*+APPEND */ into err_anz_pos_bestellposition select BESTELLNR, anzahl_pos, bst_anzahlpos from (select bestellnr, count(positionsnr) Anzahl_pos, ANZAHLPOS bst_anzahlpos from Best_Pos group by bestellnr,anzahlpos) where Anzahl_pos <> bst_anzahlpos; BESTELLUNG BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS BESTELLPOSITION BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK FK

339 Umgang mit Schlüssel im Verlauf des Ladens 340

340 Bildung künstlicher Schlüssel Anwendung 1 Verkaufsregion Einkommensgruppe Wohnart Berufsgruppe Anzahl Kinder Alter Name Kunden_NR Anwendung 2 Tel PLZ Ort Strasse Partnernummer Sequence Data Warehouse Verkaufsregion Einkommensgruppe Wohnart... PLZ Ort Kunden_NR Partnernummer Dim_Kd_NR Neuer Schlüssel 341

341 Key Lookup Dimension Künstl. Schlüssel (Primary Key) Log.Business Schlüssel (Alternate Unique) 6 KD_66 Stamm Info Stamm Info Stamm Info 5 KD_55 Stamm Info Stamm Info Stamm Info 4 KD_44 Stamm Info Stamm Info Stamm Info 3 KD_33 Stamm Info Stamm Info Stamm Info 2 KD_22 Stamm Info Stamm Info Stamm Info 1 KD_11 Stamm Info Stamm Info Stamm Info Join Lookup Log.Business Schlüssel Satz12 AA 34 dddf KD_11 1 DFG 64 dloidf Satz13 Satz14 Satz15 DFG 64 dloidf KD_22 erf 78 ghzf KD_33 sdfg 4456 llkof KD_44 Bewegungsdaten DFG 64 dloidf erf 78 ghzf sdfg 4456 llkof Fakten 342

342 Lookup-Verfahren mit Aktualisierung (Stammdaten) Bewegungssätze Anti Join Join Zielsätze Referenzdaten Insert mit Dummy Schlüssel Tmp Table alle Sätze ohne Referenz Protokoll 343

343 1. Schritt Sequenz Next Val 7 Anti - Join Wenn nicht in Dimension enthalten dann INSERT INTO Dim SELECT... FROM Bew, Dim WHERE Log Key NOT IN Dim Künstl. Schlüssel (Primary Key) Log.Business Schlüssel (Alternate Unique) 7 KD_99 Dummy Dummy Dummy 6 KD_66 Stamm Info Stamm Info Stamm Info 5 KD_55 Stamm Info Stamm Info Stamm Info 4 KD_44 Stamm Info Stamm Info Stamm Info 3 KD_33 Stamm Info Stamm Info Stamm Info 2 KD_22 Stamm Info Stamm Info Stamm Info 1 KD_11 Stamm Info Stamm Info Stamm Info 2. Schritt Join Lookup Dimension Log.Business Schlüssel Satz12 XX 567 ddwer KD_99 Satz12 AA 34 dddf KD_ XX 567 ddwer DFG 64 dloidf Satz13 DFG 64 dloidf KD_22 2 DFG 64 dloidf Satz14 erf 78 ghzf KD_33 3 erf 78 ghzf Satz15 sdfg 4456 llkof KD_44 4 sdfg 4456 llkof Bewegungsdaten Fakten 344

344 Lade-Transaktionssteuerung innerhalb der Datenbank 345

345 Aufgabenstellung der Lade-Transaktion Betrachten des kompletten Ladelaufs als eine zusammenhängende Transaktion Entweder alle Sätze oder keine geladen Wie können abgebrochene Ladeläufe wieder rückgängig gemacht werden? 346

346 Transaktionssteuerung / -rücksetzung Markieren von Sätzen eines Ladelaufs in zusätzlichen Feldern Ladelauf-Nummer, Ladelauf-Datum,... Zurückrollen durch langsames Einzel-DELETE Arbeiten mit Partitioning Aufbau einer neuen Partition unabhängig von der Zieltabelle Schnelles DROP PARTITION im Fehlerfall Einfachste und schnellste Variante Flashback Database / Table / Query Transaktions-genaues Zurückrollen Flashback DB benötigt zusätzlichen Plattenplatz 347

347 Flashback Technologie in der Datenbank Flashback Query Flashback Table Flashback Drop Flashback Versions Query Flashback Transaction Query Flashback Database Flashback Data Archive

348 Beispiel Flashback Table CREATE TABLE x (Nummer number); ALTER TABLE x ENABLE ROW MOVEMENT; INSERT INTO X VALUES (1); INSERT INTO X VALUES (1); INSERT INTO X VALUES (1); COMMIT; Jetzt erst wird eine SCN erzeugt Abfrage u. Flashback der letzten Änderungs-SCN SELECT ora_rowscn FROM x; SELECT * FROM x AS OF SCN ; SELECT * FROM x AS OF TIMESTAMP to_timestamp(' :15:00', 'YYYY-MM-DD HH:MI:SS'); Zurücksetzen Flashback table x to scn ; 349

349 Flashback Database Flashback Database Erstellen der Fast (Flash) Recovery Area Restart Database ( mount exclusive, wenn DB <11.2) SQL> ALTER DATASE FLASHBACK ON; SQL> ALTER SYSTEM SET db_flashback_retention_target = <number_of_minutes>; SQL> ALTER DATABASE OPEN; Restore Points (ab 11.2 im laufenden Betrieb) create restore point PRE_LOAD; create restore point PRE_LOAD guarantee flashback database; (impliziert das Anlegen von Flashback Logs) drop restore point PRE_LOAD; Anwendung eines Restores nur im DB Mount-Status flashback database to restore point PRE_LOAD;

350 Flashback Database Garantierter Rücksetzpunkt Muss explizit gelöscht werden (Achtung FRA-Size!) NOLOGGING Operationen sind erlaubt Archivelog Modus dennoch zwingend Restore nur zum Rücksetzpunkt möglich (keine beliebige SCN), wenn Flashback Logs nicht explizit aktiviert wurden 351

351 Lade-Tools ausserhalb der Datenbank 352

352 Oracle GoldenGate-Technologie Datenintegration für alle Anwendungsfälle Oracle GoldenGate bietet mit geringer Belastung Capture, Routing, Transformation und Delivery von Datenbank-Transaktionen in heterogenen Umgebungen in Echtzeit Alleinstellungsmerkmale Performanz non-intrusiv, niedrige Belastung, Latenzzeit von Sekundenbruchteilen Erweiterbarkeit & Flexibilität Zuverlässig Offene, modulare Architektur - Heterogene Quellen & Ziele Erhält transaktionale Integrität Robust gegen Störungen und Fehler

353 Oracle GoldenGate Architektur Capture: Auslesen der committed Transaktionen (optional gefiltert) wie sie im Transaktionslog erscheinen. Trail files: Speichern der Daten für Weiterleitung. Pump: Datendistribution zu mehreren Zielen. Route: Daten können für Übertragung verschlüsselt werden. Delivery: Anwenden mit Transaktionsintegrität, Transformationen wie benötigt. Capture LAN / WAN / Internet (TCP/IP) Source Trail Pump Pump Target Trail Delivery Quell- Datenbank Delivery Target Trail Bidirektional Source Trail Capture Ziel- Datenbank 354

354 GoldenGate Heterogene Plattformen Datenbanken Capture: Oracle DB2 Microsoft SQL Server Sybase ASE Teradata Enscribe SQL/MP SQL/MX Delivery: Alle wie oben, und zusätzlich: HP Neoview, Netezza, Greenplum und beliebige kompatible Datenbanken ETL-Produkte JMS Message Queues MySQL TimesTen ODBC O/S und Plattform Windows 2000, 2003, XP, Windows7 Linux Sun Solaris HP NonStop HP-UX HP TRU64 HP OpenVMS IBM AIX IBM z/os 355

355 Oracle ETL/ELT-Tool-Suite für unterschiedliche Anforderungen Oracle Data Integrator Oracle Warehouse Builder OLTP A DWH A OLTP A A DWH PL/SQL Insert into A Select * from A Code Template Select Java based Agent Java based Agent Set Based Code Template Insert Row+Set Based OLTP Oracle Golden Gate DWH Log Capture Source Trail Target Trail Delivery Log

356 Security und Mandantensteuerung im Data Warehouse 357

357 Sicherheit in der Datenbank Service Logistik Servicekunde Logistikaufwand Controlling Profitabilität Integration Layer Enterprise Layer Core - DWH / Info Pool Referenzdaten (extern) (10%) Stammdaten (10%) Bewegungsdaten / Transaktionen (80%) Marketingsicht Sozialsituation Kundenhistorie Profitabilität BI-Anwendungen werden im Schnitt alle 4 Jahre ausgetauscht Oft laufen mehrere BI-Anwendungen parallel User View Layer Vorberechnete Kennzahlen BI Plattform ODBC C Einkauf Produkte&Trends Kunde A MJ Q L A Vertrieb Kundenhistorie Logistikaufwand für einen Kunden Produkte&Trends Servicekunde Data Mining Statistikdaten Oracle R Marketing Marketingsicht

358 Zwei Level des Zugriffs-Monitoring 1) Standard Auditing 2) Fine Grained Auditing By session By access Statement level. all statements in a sessions any objects X X Audit select on F_UMSATZ; Granting Priviliges activities X X Object level (update, insert delete, select) X X Monitoring of all activities by User by session, by object. - Action based auditing (e. g. analysing the predicate example: value > ) - all detailed commands - Timestemps -trials and successes - Additional triggers - notifications and other actions EXECUTE DBMS_FGA.ADD_POLICY( - object_schema => 'DWH, - object_name => 'F_UMSATZ, - policy_name => 'Chk_F_Umsatz', - statement_types => 'SELECT, - enable => TRUE); 359

359 Nicht so... sondern so... Channels Kunde Channels Kunde Channels Kunde Channels Kunde Channels Umsatz Kunde Channels Umsatz Kunde Umsatz Umsatz Zeit Produkte Umsatz Zeit Produkte Umsatz Zeit Produkte Zeit Produkte Zeit Produkte Zeit Produkte Mandant 1 Mandant 2 Mandant 3 Mandant4 Mandant 5 Mandant 6 Channels Umsatz Kunde Produkte Zeit Alle Mandanten in einer Tabelle Nur einmal pflegen und verwalten! 360

360 Fine Grained Security on Row level Zu lesenden Objekte User: DataMart1 User_Table Build Predicate Procedure C o n t e x t Zugreifende Users User 2 Set User Context select sum(umsatz) from umsatz; User 3 Set User Context select sum(umsatz) from umsatz; Partner Catalog Internet Direct Sales Add / DROP Policy Channels Umsatz Kunde P r e d i c a t e Sieht nur Partner-Umsatz Sieht nur Katalogwaren-Umsatz Zeit Produkte 361

361 Auf der Seite des zu lesenden Objektes Definieren der Policy create or replace package channel_security as function channelnum_sec (A1 VARCHAR2, A2 varchar2) return varchar2; end; / create or replace package body channel_security as function channelnum_sec (A1 VARCHAR2, A2 varchar2) return varchar2 is d_predicate varchar2(2000); v_channel_id number; begin select sys_context('channel_info','channel_num') into v_channel_id from DUAL; d_predicate := 'SALES.CHANNEL_ID = ' v_channel_id ' or ' v_channel_id ' = 10'; return d_predicate; end; end; / Aktivieren der Policy exec dbms_rls.drop_policy('area1','sales','channel_policy'); exec dbms_rls.add_policy('area1','sales','channel_policy','area1', 'channel_security.channelnum_sec','select'); Auf der Seite des zugreifenden Users Logon-Trigger CREATE OR REPLACE TRIGGER vpd_init_trig AFTER LOGON ON DATABASE BEGIN EXECUTE IMMEDIATE 'DROP CONTEXT channel_infostr'; EXECUTE IMMEDIATE 'CREATE CONTEXT channel_info using user_context'; system.user_context.select_user_channel; EXCEPTION WHEN NO_DATA_FOUND THEN null; end; Erstellen des Kontextes create or replace package User_context as Procedure select_user_channel ; end; / Create or replace Package Body User_context as Procedure select_user_channel is Channelnum number; begin select channel_id into Channelnum from area1.user_table where upper(user_name) = sys_context('userenv', 'SESSION_USER'); dbms_session.set_context('channel_info', 'channel_num',channelnum); end; end; 362

362 Multi-strukturierte Daten mit JSON

363 JSON (Java Script Object Notation) Standardisiertes Format ECMA-404 (JSON Data Interchange Format) ECMA-262 (ECMAScript Language Specification, third edition) Leichteres Format als XML Weniger Datenmenge /Overhead Einfacher Umgang Besonders beliebt bei nosql-db- Java Entwicklern Im Hadoop-Umfeld weit verbreitet Ab Oracle direkt in der Datenbank 364

364 Multi-Strukturierte Informationen INSERT INTO Web_Log_array VALUES (SYS_GUID(), SYSTIMESTAMP, '{"wl_rec_id" : 1600, "wl_ip_adr" : " ", "wl_dns" : "MP-AM5643", "wl_start_date" : " :23:21", "wl_end_date" : " :25:18", "wl_ses_id" : " ", "wl_ses_anz_sec" : "10", "wl_status" : "ACK"}'); 1 INSERT INTO Web_Log_array VALUES (SYS_GUID(), SYSTIMESTAMP, '{"wl_rec_id" : 1600, "wl_ip_adr" : {"ip" : " ", "sub" : " "}, "wl_dns" : "MP-AM5643", "wl_start_date" : " :23:21", "wl_end_date" : " :25:18", "wl_ses_id" : " ", "wl_ses_anz_sec" : "10", "wl_status" : "ACK"}'); 3 INSERT INTO Web_Log_array VALUES (SYS_GUID(), SYSTIMESTAMP, '{"wl_rec_id" : 1600, "wl_ip_adr" : [" "," "], "wl_dns" : "MP-AM5643", "wl_start_date" : " :23:21", "wl_end_date" : " :25:18", "wl_ses_id" : " ", "wl_ses_anz_sec" : "10", "wl_status" : "ACK"}'); 2 SQL> select wa.log_record.wl_ip_adr from Web_Log_array wa; WL_IP_ADR " " [" "," "] {"ip":" ","sub":" "} SQL> select wa.log_record.wl_ip_adr.sub from Web_Log_array wa; WL_IP_ADR " " 365

365 Beispiel 366

366 An welcher Stelle passen JSON-Objekte in das Data Warehouse? Daten für Auswertungen? Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Daten zur Aufbewahrung? JSON Format als Vorstufe vor Einführung von Big Data JSON JSON JSON HDFS / NoSQL Unstructured Data

367 Big Data Analysen im Data Warehouse mit Big Data SQL

368 Hadoop Services und Projekte Besteht aus 2 Key Services Hadoop Distributed File System (HDFS) MapReduce Frame Work Weitere Projekte basierend auf dem Kern-Hadoop-Konzept Hive: SQL auf Hadoop Pig: Relationale komplexe Logik und Algorithmen auf Hadoop Sqoop: Datenaustausch zwischen zwischen Hadoop und relationalen Datenbanken Hbase: nicht-relationale verteilte Database Flume: sammeln und aggregieren von verteilten Daten und laden in zentralen Datenbestand Oozie: Workflow + Scheduling für Hadoop und andere mehr 2014 Oracle All Rights Reserved

369 Business Mehrwerte über Technologie Innovation Die passende Technologie für entsprechende Aufgaben UND Technologien im Verbund nutzen Hadoop NoSQL Relational Neue Geschäftsmodelle und Optionen Wettbewerbern zuvor kommen Vollständige Informationsketten Neu Paradigmen nutzen Neue Analysearten Scale the Business Schneller Daten bereitstellen Herausforderung Mobility Ökononisch sinnvolle Skalierung Run the Business Integration von Systemen Kritische Geschäftsprozesse Investitionsschutz Eingespielte Verfahren und Know how 370

370 Die Schwierigkeiten bei der Adaption neuer Technologien INTEGRATION SKILLS SECURITY Big Data in bestehende Architekturen einbinden und die Systeme beherrschen Noch fehlen sinnvolle Tools und das Know how um Big Data Daten direkt auszuwerten Keine klare Sicherheitsstrategie erkennbar 371

371 Die Schwierigkeiten bei der Adaption neuer Technologien Oracle s - Weg INTEGRATION SKILLS SECURITY SQL Engineered Systems SQL auf allen Daten Database Security auf allen Daten 372

372 Was wäre wenn das alles könnte Alle Datenarten für alle Datenbank-Anwendungen verfügbar machen Die volle Bandbreite der Oracle SQL Query Language nutzen Mit allen Security-Features von Oracle 12c Ohne Daten zwischen dem Hadoop-Cluster und der Datenbank hin und her zu kopieren Eine sehr hohe Query Performance erreichen Das bestehende Wissen (SQL-Skills) nutzen Und dennoch immer die aktuellsten Hadoop-Neuerungen nutzen 373

373 Oracle Big Data SQL Eine neue Architektur Mächtiges und hoch-performantes SQL auf Hadoop Alle Oracle SQL Möglichkeiten auf Hadoop SQL query Processing auf den lokalen Hadoop Knoten Einfache Daten-Integration von Hadoop und Oracle Database Single SQL Zugriffspunkt auf alle Daten Skalierbare Joins zwischen Hadoop und RDBMS-Data Optimierte Hardware High-speed Infiniband Netzwerk zwischen Hadoop und Exadata 374

374 Standardisierte Metadaten: Übernahme Hive Metadaten in den Oracle Datenbank-Katalog Hive Metastore CREATE TABLE movieapp_log_json (click VARCHAR2(4000)) ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR ) REJECT LIMIT UNLIMITED; Oracle Catalog Hive metadata External Table External Table Big Data Appliance + Hadoop/NoSQL Exadata + Oracle Database 375

375 Abfragen auf Hadoop ausführen Hive metadata I/O und Smart Scan ausführen Auswahl der Zeilen und Spalten Select c_customer_id, c_customer_last_name, ca_county From customers, customer_address where c_customer_id = ca_customer_id and ca_state = CA Oracle Catalog HDFS Name Node HDFS Data Node HDFS Data Node HDFS Data Node HDFS Data Node Tables Nur relevante Daten bewegen relevante Zeilen relevante Spalten Hive metadata External Table External Table Join mit Daten aus der relationalen Datenbank 1 block = 256 MB Example File = 40 blocks InputSplits = 40 mögliche Parallelsisierung 376

376 Big Data SQL Minimizes Data Movement Big Data SQL Server Hadoop Smart Scan 1. Apply filter predicates 2. Apply column projections 3. Apply row-level functions JSON Parsing External Table Services 1. Read using Hadoop Classes 2. Convert to Oracle Data Stream Data Node Direktes Arbeiten auf den Daten Scans and serializations from Hadoop classes Transformation into Oracle data stream Smart Scan: Nur relevante Daten werden werden weitergeleitet Apply filter predicates Include complex predicates, e.g. JSON_EXISTS Bloom filters for faster joins Score Data Mining models Project columns Include projections from nested structures Disk 377

377 5 5 4 Hadoop / HDFS - Knoten 1 1 SELECT * FROM movielog WHERE rownum < 20; SELECT f.click.custid, m.title, m.year, m.gross, f.click.rating FROM movielog f, movie m WHERE f.click.movieid = m.movie_id AND f.click.rating > 4; Beispiel: Log-File JSON -Format hadoop fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log ~]$ hadoop fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log,"recommended":"y","activity":2} {"custid": ,"movieid":240,"genreid":8,"time":" :02:04:15","recommended":"y","activity":5} {"custid": ,"movieid":1092,"genreid":20,"time":" :02:10:23","recommended":"n","activity":5} {"custid": ,"movieid":4638,"genreid":8,"time":" :02:10:54","recommended":"n","activity":7} {"custid": ,"movieid":4638,"genreid":8,"time":" :02:16:49","recommended":"n","activity":7} {"custid": ,"movieid":null,"genreid":null,"time":" :02:24:00","recommended":null,"activity":9} {"custid": ,"movieid":240,"genreid":8,"time":" :02:31:12","recommended":"y","activity":11, "price":2.99} {"custid": ,"movieid":59440,"genreid":7,"time":" :03:11:35","recommended":"y","activity":2} {"custid": ,"movieid":null,"genreid":null,"time":" :03:15:29","recommended":null,"activity":9} {"custid": ,"movieid":59440,"genreid":7,"time":" :03:19:24","recommended":"y","activity":11, "price":3.99} Datenbank Maschine / Linux CREATE TABLE movielog (click VARCHAR2(4000)) ORGANIZATION EXTERNAL (TYPE ORACLE_HDFS DEFAULT DIRECTORY DEFAULT_DIR LOCATION ('/user/oracle/moviework/applog_json/') ) REJECT LIMIT UNLIMITED; create or replace directory ORACLE_BIGDATA_CONFIG as '/u01/bigdatasql_config'; create or replace directory "ORA_BIGDATA_CL_bigdatalite" as ''; create public database link BDSQL$_bigdatalite using 'extproc_connection_data'; create public database link BDSQL$_DEFAULT_CLUSTER using 'extproc_connection_data'; /BigDataConfig /BigDatalite Files mit Pfadangaben zu HDFS, Hive, JavaClass etc 2 3

378 Zugriff über Hive Metastore Hadoop / HDFS Knoten / Hive Metabeschreibung CREATE EXTERNAL TABLE `movieapp_log_json`( `custid` int COMMENT 'from deserializer', `movieid` int COMMENT 'from deserializer', `genreid` int COMMENT 'from deserializer', `time` string COMMENT 'from deserializer', `recommended` string COMMENT 'from deserializer', `activity` int COMMENT 'from deserializer', `rating` int COMMENT 'from deserializer', `price` float COMMENT 'from deserializer') ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.jsonserde' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.textinputformat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat' LOCATION 'hdfs://bigdatalite.localdomain:8020/user/oracle/moviework/applog_json' TBLPROPERTIES ( 'last_modified_by'='oracle', 'last_modified_time'=' ', 'transient_lastddltime'=' ') Datenbank Maschine / Linux CREATE TABLE movieapp_log_json ( custid INTEGER, movieid INTEGER, genreid INTEGER, time VARCHAR2 (20), recommended VARCHAR2 (4), activity NUMBER, rating INTEGER, price NUMBER ) ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR ) REJECT LIMIT UNLIMITED; 379

379 Automatisierung: Oracle Data Modeler Übernahme der Hive Definitionen in das Modell Generieren Oracle DDL für die importierten Tabellen 380

380 Neue Daten-Quellen für Oracle External Tables CREATE TABLE movielog (click VARCHAR2(4000)) ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE DEFAULT DIRECTORY Dir1 ACCESS PARAMETERS ( com.oracle.bigdata.tablename logs com.oracle.bigdata.cluster mycluster) ) REJECT LIMIT UNLIMITED Neue Eigenschaften ORACLE_HIVE und ORACLE_HDFS Access Driver Identifizuierung Hadoop Cluster, Data Source Objects, Column Mapping, Error Handling, Overflow Handling, Logging Neue Tabellen Metadaten werden von Oracle DDL zu den Hadoop Lese-Routinen zur Query-Zeit geschickt Auf Erweiterung hin entwickelt StorageHandler wird künftig auch weitere Quellen-Arten lesen können Z. B.: MongoDB, HBase, Oracle NoSQL DB 381

381 Big Data Appliance X4-2 Hardware: 18 Knoten (mit je 2 * 8 Kerne) 1152 GB RAM (erweiterbar) 864 TB Plattenkapazität 40 Gb/s InfiniBand Integrierte Software: Oracle Linux Oracle Java VM Cloudera Distribution of Apache Hadoop (CDH) Cloudera Manager Oracle R Distribution NoSQL Database Community Edition (falls gewünscht) Die integrierte Software (außer NoSQL DB CE) wird als Teil von Premier Support für Systeme bzw. Premier Support für Betriebssysteme unterstützt

382 Komplettes Set des Oracle SQL über alle Daten hinweg nutzen Ausschnitt Oracle SQL Analytische Funktionen Ranking functions rank, dense_rank, cume_dist, percent_rank, ntile Window Aggregate functions (moving and cumulative) Avg, sum, min, max, count, variance, stddev, first_value, last_value LAG/LEAD functions Direct inter-row reference using offsets Reporting Aggregate functions Sum, avg, min, max, variance, stddev, count, ratio_to_report Statistical Aggregates Correlation, linear regression family, covariance Linear regression Fitting of an ordinary-least-squares regression line to a set of number pairs. Frequently combined with the COVAR_POP, COVAR_SAMP, and CORR functions Descriptive Statistics DBMS_STAT_FUNCS: summarizes numerical columns of a table and returns count, min, max, range, mean, stats_mode, variance, standard deviation, median, quantile values, +/- n sigma values, top/bottom 5 values Correlations Pearson s correlation coefficients, Spearman's and Kendall's (both nonparametric). Cross Tabs Enhanced with % statistics: chi squared, phi coefficient, Cramer's V, contingency coefficient, Cohen's kappa Hypothesis Testing Student t-test, F-test, Binomial test, Wilcoxon Signed Ranks test, Chi-square, Mann Whitney test, Kolmogorov-Smirnov test, One-way ANOVA Distribution Fitting Kolmogorov-Smirnov Test, Anderson-Darling Test, Chi-Squared Test, Normal, Uniform, Weibull, Exponential

383 next = linenext.getquantity(); } if (!q.isempty() && (prev.isempty() (eq(q, prev) && gt(q, next)))) { state = "S"; return state; Pattern } Matching mit Oracle SQL Ausschnitt Oracle SQL Analytische Funktionen if (gt(q, prev) && gt(q, next)) { state = "T"; return state; } if (lt(q, prev) && lt(q, next)) { state = "B"; return state; } if (!q.isempty() && (next.isempty() (gt(q, prev) && eq(q, next)))) { state = "E"; return state; Simplified, } sophisticated, standards based syntax if (q.isempty() eq(q, prev)) { state = "F"; return state; } Beispiel finden von Mustern in Aktien-Markt-Bewegung (W-Form) Ticker 10:00 10:05 10:10 10:15 10:20 10:25 } return state; private boolean eq(string a, String b) { if (a.isempty() b.isempty()) { return false; } return a.equals(b); } private boolean gt(string a, String b) { if (a.isempty() b.isempty()) { return false; } return Double.parseDouble(a) > Double.parseDouble(b); } private boolean lt(string a, String b) { if (a.isempty() b.isempty()) { return false; } return Double.parseDouble(a) < Double.parseDouble(b); } public String getstate() { return this.state; } } BagFactory bagfactory = public Tuple exec(tuple input) throws IOException { SELECT first_x, last_z FROM ticker MATCH_RECOGNIZE ( PARTITION BY name ORDER BY time MEASURES FIRST(x.time) AS first_x, LAST(z.time) AS last_z ONE ROW PER MATCH PATTERN (X+ Y+ W+ Z+) DEFINE X AS (price < PREV(price)), Y AS (price > PREV(price)), W AS (price < PREV(price)), Z AS (price > PREV(price) AND z.time - FIRST(x.time) <= 7 )) long c = 0; String line = ""; String pbkey = ""; V0Line nextline; V0Line thisline; V0Line processline; V0Line evalline = null; V0Line prevline; boolean nomorevalues = false; String matchlist = ""; ArrayList<V0Line> linefifo = new ArrayList<V0Line>(); boolean finished = false; 250+ Lines of Java UDF 12 Lines of SQL 384 DataBag output = bagfactory.newdefaultbag(); if (input == null) { return null; } if (input.size() == 0) { return null; } Object o = input.get(0); if (o == null) { return null; } Copyright 2014, Oracle and/or its affiliates. All rights reserved. //Object o = input.get(0); if (!(o instanceof DataBag)) { int errcode = 2114; 20x mal weniger Code

384 R als universelles Analyse-Mittel

385 R: Brücke zwischen den Welten Statistik Data / Text Mining Modellierung SocialMedia Connect Komplexe Graphik

386 ORAAH Einsatzbereiche Direktes Arbeiten mit HDFS Objekte Vollen Zugriff auf HDFS-Objekte (Command line interfaces) HDFS.LS() Analyse von HDFS Objekten Verschieben von Daten HDFS Dateien In-Memory R Objekte, lokale Dateien, HIVE-Objekte and Oracle Datenbank Arbeiten mit R auf HIVE Tabellen HIVE SQL Funktionalität mittels ORE-like transparent Layer Overloading R Funktionen auf ore.frame Objekte die im Hintergrund auf HIVE Tabellen/views gemappt werden Native advanced analytics Funktionen Allgemeine statistische Funktionen (z. B. table()) und Predictive Analytics Techniken (z. B. Lineare Regression) Starten von MapReduce Jobs ohne Java programmieren zu müssen Aus einer R-Session heraus Map und reduce Funktionen sind in in R geschrieben Testen von MapReduce Jobs im Single Threaded Mode mit orch.dryrun / Hadoop Verarbeitung wird simuliert Arbeiten in einer R Client Umgebung

387 HCache Hadoop Abstraction Layer Oracle R Enterprise User R Engine Database Server Maschine R Engine(s) managed by Oracle DB Oracle R Packages (ORE) SQL Results Oracle Database R-Skripte Lineare Modelle Clusterung Segmentierung Neuronale Netze R Results R Engine Other R packages Oracle R Enterprise packages JSON Excel R HDFS R MapReduce CSV R Hive R sqoop/olh MapReduce Nodes HDFS Nodes JSON {CRAN packages} ORD Hadoop Cluster (z. B. BDA)

388 HDFS API Funktionen

389 ORAAH Analytics Functions Function Description orch.cor Correlation matrix computation orch.cov orch.kmeans orch.lm orch.lmf orch.neural orch.nmf orch.princomp orch.sample Covariance matrix computation Perform k-means clustering on a data matrix stored as an HDFS file. Score data using orch.predict. Fits a linear model using tall-and-skinny QR (TSQR) factorization and parallel distribution. The function computes the same statistical parameters as the Oracle R Enterprise ore.lm function. Score data using orch.predict. Fits a low rank matrix factorization model using either the jellyfish algorithm or the Mahout alternating least squares with weighted regularization (ALS-WR) algorithm. Provides a neural network to model complex, nonlinear relationships between inputs and outputs, or to find patterns in the data. Score data using orch.predict. Provides the main entry point to create a nonnegative matrix factorization model using the jellyfish algorithm. This function can work on much larger data sets than the R NMF package, because the input does not need to fit into memory. Principal components analysis of HDFS data. Score data using orch.predict. Sample HDFS data by percentage or explicit number of rows specification

390 Beispiel zur Nutzung von Hive mit OREhive ore.connect(type="hive") ore.attach() # create a Hive table by pushing the numeric # columns of the iris data set IRIS_TABLE <- ore.push(iris[1:4]) # Create bins based on Petal Length IRIS_TABLE$PetalBins = ifelse(iris_table$petal.length < 2.0, "SMALL PETALS", + ifelse(iris_table$petal.length < 4.0, "MEDIUM PETALS", + ifelse(iris_table$petal.length < 6.0, + "MEDIUM LARGE PETALS", "LARGE PETALS"))) #PetalBins is now a derived column of the HIVE object > names(iris_table) [1] "Sepal.Length" "Sepal.Width" "Petal.Length" [4] "Petal.Width" "PetalBins" # Based on the bins, generate summary statistics for each group aggregate(iris_table$petal.length, by = list(petalbins = IRIS_TABLE$PetalBins), + FUN = summary) 1 LARGE PETALS MEDIUM LARGE PETALS MEDIUM PETALS SMALL PETALS Warning message: ORE object has no unique key - using random order 2014 Oracle All Rights Reserved

391 Notwendige Dinge, die niemand macht: Metadatenverwaltung im Data Warehouse 393

392 Informations-Repository Beispiele für Informations-Bedarfe Aufstellung zu allen ermittelten und formulierten Informationsanforderungen der Endbenutzer Abgestimmte, sachgebietsübergreifende Informationskataloge zu allen Tabellen und Spalten (bereinigt um Synonyme und Homonyme) Ein zusätzliches Klassifizierungsverfahren zum Verhindern von Synonymen und Homonymen Nachweis darüber, welcher Benutzer welche Daten nutzt Dokumentation der über Materialized Views aufgebauten Kennzahlen-Hierarchien -> Kennzahlenbäume Dokumentation aller Dimensionen sowie ihrer Hierarchien und die hierüber selektierbaren Felder Dokumentation der Kennzahlen in den Fakten-Tabellen Datenqualitätsregeln in dem Integration Layer mit Bezug zu den fachlichen Anforderungen Ein standardisierendes Schlagwortverzeichnis zu allen Fachbegriffen könnte noch hinzugefügt werden

393 Ein zentrales Metadaten-Repository für eine integrierte Informations-Verwaltung Business Process Modeling Logical Data Model Operative Prozesse Reporting Model (BI) Metadaten Repository Data Mapping Model (ETL) Mesures Model (Kennzahlenäume) Information-Standards (Glossars, Terms,Definitions) Organization Model Informaton Delivery Process Data Catalogue (Database) Data Quality Standards

394 Ein Meta-Information-Modell für das Data Warehouse

395 Metadaten Repository for Free Information Catalogue APEX - Anwendung

396 Die optimale Hardware für das Data Warehouse 398

397 Optimale ( Balanced ) Konfiguration Anzahl CPU s Größe des Hauptspeichers Anzahl Platten ~200 MB Datendurchsatz pro CPU Anzahl CPU = Max. Durchsatz in MB/s / 200 Größe des Speichers in GB = 2 * Anz. CPUs Trennung von Storage für OLTP und DWH-Systeme!! Schnelle Platten nutzen (15000 U/min) Eher mehr, kleine Platten nutzen, als wenige große Platten nutzen Flash-Speicher in Betracht ziehen ASM in Betracht ziehen Einfaches und DB-optimiertes Verwalten Anzahl Disk Controller = Controllerdurchsatz in MB = Max. Durchsatz in MB/s Controllerdurchsatz in MB 70% * Herstellerangaben in Gbit/s 8 399

398 Die Hardware Umgebung Storage Trennung von Storage für OLTP und DWH-Systeme Schnelle Platten nutzen (15000 U/min) Eher mehr, kleine Platten nutzen, als wenige große Platten nutzen Flash-Speicher in Betracht ziehen ASM in Betracht ziehen Einfaches und DB-optimiertes Verwalten 400

399 Messung von IO-Durchsatz Einfache Schätzmethode Calibrate_IO Read-only Test Wenige Test-Optionen -> leicht anwendbar > 11g Orion (ORacle IO Numbers) Read / Write Tests (Achtung schreibt auf Platten) Viele Test-Optionen OLTP + DWH Workload Ab 11.2 im BIN-Verzeichnis der DB 401

400 Einfache Schätzmethode zur Lesegeschwindigkeit Blockgröße feststellen Anzahl Blöcke/ Anzahl Bytes select tablespace_name, block_size from dba_tablespaces; TABLESPACE_NAME BLOCK_SIZE MON_G 8192 MON 8192 MON_D 8192 MON_E 8192 MON_F 8192 SELECT table_name, num_rows, blocks, blocks*8 KB,blocks*8/1000 MB,blocks*8/ GB FROM user_tables; TABLE_NAME NUM_ROWS BLOCKS KB MB GB BESTELLUNG_PART_RANGE ,84 7,69884 BESTELLUNG_PART_RANGE_ ,84 7,69884 Messen der Lesegeschwindigkeit Berechnung des Durchsatzes select count(*) from bestellung_part_range_4; -- liest komplette Tabelle COUNT(*) Abgelaufen: 00:00:31.32 select 7.7/31 from dual; SQL> 7.7/ , Ergibt ~0,25 GB pro Sekunde Lesegeschwindigkeit (Achtung Blöcke eventuell nicht voll, daher geringer ) 402

401 Calibrate_IO Einfaches Tool Bestandteil des Ressourcen Managers Wird aus der DB heraus aufgerufen SET SERVEROUTPUT ON DECLARE lat INTEGER; iops INTEGER; mbps INTEGER; BEGIN -- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat); DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat); DBMS_OUTPUT.PUT_LINE ('max_iops = ' iops); DBMS_OUTPUT.PUT_LINE ('latency = ' lat); dbms_output.put_line('max_mbps = ' mbps); end; / max_iops = 73 latency = 12 max_mbps =

402 Orion (ORion IO Numbers) Physical Disks Luns Random small reads (8k) Random large reads (1M) Writes trace MBPS Orion IOPS lat orion -run simple -testname laufwerk -num_disks 6 orion -run advanced -testname ' laufwerk' -size_large num_large 1 -num_small 8 -type seq -num_disks 6 -num_streamio 2 (LUN: Logical Unit Number, logische Storage-Einheit, virtuelle Platte) Summary 404

403 Cluster-Einsatz 405

404 Oracle s Entwicklung für intelligenten Umgang mit Massendaten -> R8 R9 R10/11 R11 -> Rxx InMemory Parallel Execution RAC RAC RAC ASM ASM SAN SAN Oracle Storage / Exadata Oracle Storage / Exadata 406

405 Mit Leichtigkeit skalieren Lineare Skalierung jeweils bei Server und Storage Keine Änderung der Datenstrukturen Ohne Downtime Minimale Administration Faktor n Real Application Clusters Automatic Storage Management Oracle Clusterware Faktor n 407

406 Automatic Storage Management (ASM) Hotspot Dynamisches Zuschalten im Online-Betrieb 408

407 ASM Verwalten ganzer Gruppen von Platten Keine Einzelaktionen DBA übernimmt die Storage-Verwaltung Gewohnte Kommandos SQL Create SAME in der DB Verlagern des Striping and Mirroring Everything in die Verantwortung der Datenbank Automatische Verteilung der Daten über alle Platten Verhindert von Hotspots Messung von IO-Zugriffen über DB-Statistiken (ist klassischen RAID-Verfahren überlegen) Bequemes Hinzufügen /Wegnehmen von Platten Verhindert Fragmentierung der Platten Einführung von ASM kann bis 25% verbessertes IO-Verhalten liefern Performance kommt an Raw Devices heran 409

408 ASM Architektur ASM Disks Partitionen oder LUNs, die über das Betriebssystem bereitgestellt werden Ab 11 sind einfache Partitionen, RAW Devices oder auch NFS-Dateien möglich ASM Disk Groups Eine oder mehrere ASM Disks Logical Volumes logische Einheit von Speicherplatz Eine DB kann mehrere Disk Groups haben ASM Failure Groups Ensemble von ASM Disk Groups, die als 2 oder 3-Wege-Spiegel arbeiten ASM instance Ähnlich einer DB-Instanz aber ohne datafiles Muss hochgefahren und auch über eine SID ansprechbar sein ASM Files Files, die in den Disk Groups abgelegt sind, ohne dass man deren physischen Ort bestimmt Die ASM-Files entsprechen den sonst üblichen Datenbank-Files (1:1 Mapping) ASM verteilt diese Files über mehrere physische Bereiche (Platten) Die logischen Konzepte wie Extents, Segmente oder Tablespaces bleiben erhalten ASM Disk ASM Disk ASM Disk ASM Disk ASM Disk 410

409 Intelligent Data Placement Intelligent Placement Häufig genutzte Daten werden automatisch auf die äußeren Spuren der Platten gelegt Weniger häufige auf die inneren Minimiert Verwaltungsaufwand und steigert die Performance um bis zu 50 % Bereitstellung der Plattenkapazität nicht an dem benötigten Volumen messen sondern an der Performance Platten müssen nicht komplett gefüllt werden Mehr Daten erreichbar bei gleicher Drehzahl -> häufig genutzte Daten Weniger Daten erreichbar bei gleicher Drehzahl -> seltener genutzte Daten 411

410 Options: RAC Der physische Aufbau einer RAC-Umgebung Öffentliches Netzwerk CPU CPU CPU CPU Privates Netzwerk (Interconnect) Knoten 1 Knoten 2 CPU CPU Instanz 1 Instanz 2 CPU CPU Speichernetzwerk Daten 412

411 Options: RAC Oracle Cluster-Umgebung Real Application Clusters und Automatic Storage Management Öffentliches Netzwerk RAC CPU CPU Privates Netzwerk (Interconnect) Knoten 1 Knoten 2 CPU CPU CPU CPU CPU CPU Instanz 1 Instanz 2 Oracle Clusterware Speichernetzwerk ASM 413

412 Architektonische Vorteile RAC und ETL Voraussetzung ETL in der Datenbank Nur dieses bringt Last auf die RAC-Knoten Verteilung der Datenbank-basierten ETL-Jobs auf unterschiedliche Knoten Laufen keine ETL-Jobs Knoten frei für andere Datenbank-Aufgaben Geringere Hardware-Anschaffungskosten Wegfall Backup-Rechner Wegfall Netzlast Direkter ETL-Zugriff auf Daten der eigenen Datenbank und über schnelle Leitungen 415

413 Allgemeine Aufbauempfehlungen - RAC aus ETL-Sicht Die Knoten nicht zu klein wählen Sollten so stark sein, dass sie zusammenhängende ETL-Jobs auch alleine bewältigen können. (Z. B. 4 CPUs pro Knoten) RAC und ETL Das System sollte nicht darauf angewiesen sein, über die Knoten hinweg parallelisieren zu müssen, um zu skalieren. Skalierung gelingt über die gezielte Steuerung zusammenhängender Lade-Jobs auf die unterschiedlichen Knoten. Durchsatz für Interconnect 1-2 Gbit / Sec Hauptspeicher 4 GB pro CPU Durchsatz für das Speichernetzwerk: pro CPU mindestens 100 MB/Sec 416

414 Monitoring Data Warehouse 417

415 Performance und Systemzustand überwachen / Hilfsmittel 2) Perfstat 1) Alerts 3) AWR (EE, Diagnostic Pack) analog Polling Beginn-Zeitpunkt Ende-Zeitpunkt ADDM (EE, Diagnostic Pack) SQL Tuning Tracing Permanente Betrachtung ASH Protokolldatei 418

416 Umgang mit Alerts Unvorhergesehene Vorgänge Statefull Alerts: Entstehen durch Überschreiten von Schwellwerten Stateless Alerts: Unvorhergesehene Vorgänge Z. B. zu wenig Recovery Area Space select metrics_name, warning_value, critical_value, object_type, object_name, status From dba_thresholds 419

417 Mit OEM 420

418 Automatic Database Diagnostic Monitor (ADDM) und AWR DBMS_ADVISOR Package Addmrpt.sql OEM User 1 stündlich User 2 Statistics_level AWR TYPICAL -> ON BASIC -> OFF AWR-Report MMON- Process Undo Advisor sysaux 8 Tage lang ADDM use SQL Tuning Advisor Segement Advisor 1 Findings 2 1 nn% 2 nn% 3 nn%. Recommendations - Hardware - Init-Parameter - Space Konfig. - Performance Advisor 3 Action 4 Rationale 421

419 AWR (Analytic Workload Repository) Regelmäßiges Sammeln von einer Vielzahl von System-generierten Statistiken Mit Hintergrundprozessen (MMON) Gespeicherte Statistiken des MMON in SYSAUX Tablespace Vorkonfiguriert generiert AWR alle 60 Minuten Snapshots Parameter STATISTICS_LEVEL (Basic/Typical/All) Basic schaltet das Sammeln aus Retention-Time (Default 8 Tage) DBA_HIST_* - Views zur Auswertung Manuell starten execute dbms_workload_repository.create_snapshot( ALL ); Auswerten mit Awrrpt.sql OEM 422

420 Verwaltung von AWR Prozeduren MODIFY_SNAPSHOT_SETTINGS Rentention / Vorhaltezeit der Snapshots Interval / Zeitabstand zwischen den Snapshots Topnsql / Menge der erfassten SQL-Statements (Default 30/Typical) Feststellen der eingestellten Intervalle Select * from dba_hist_wr_control; Feststellen Oder V$SYSAUX_OCCUPANTS abfragen Select occupant_name, space_usage_kbytes from V$SYSAUX_OCCUPANTS where occupant_name = 'SM/AWR Auflistung der bestehenden Snapshots Select SNAP_ID, STARTUP_TIME, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, FLUSH_ELAPSED,SNAP_LEVEL from dba_hist_snapshot; 423

421 ADDM (Automatic Database Diagnostic Monitor) Automatic Database Diagnostic Monitor (ADDM) Gezielte Auswertung von AWR Daten Liefert Informationen zu Besonders teuere SQL-Statements I/O Performance Locking-Situationen Ressourcen-Engpässe (Speicher, CPU bottlenecks) Exzessive Logon/Logoff-Aktivitäten Manuelle Berichtserstellung: ADDMRPT.SQL 424

422 AWR über OEM modifizieren / einstellen 425

423 OEM Beispiel - Bericht 426

424 Automatic Database Diagnostic Monitor (ADDM) Läuft automatisch nach jedem AWR Snapshot Kann zusätzlich nach Alerts gestartet werden Bericht kann auf einen Zeitraum eingeschränkt werden Festlegen von Interval + Retention-Periode Aktivierung über Init-Parameter control_management_pack_access statistics_level SQL> Show parameter control_managem NAME TYPE VALUE SQL> control_management_pack_access show parameter statistics_ string DIAGNOSTIC+TUNING NAME TYPE VALUE statistics_level string TYPICAL 427

425 Art der Information Intelligente selbständige Analyse von Zuständen und Vorkommnissen in der DB Findings Basierend auf Erfahrungswerte und Best-Practises Sortiert nach der Schwere und dem Grad der Beeinflussung Recommendations Allgemeine Empfehlung mit einer Abschätzung über die prozentuale Gewichtung der Verbesserung der Situation (nn% benefits) Konkreter Action -Vorschlag Rationale Vorschlag: Sonstige, damit in Verbindung stehende Massnahmen. 430

426 Trace einer Session *** :08: ===================== PARSING IN CURSOR #1 len=62 dep=0 uid=0 oct=47 lid=0 tim= hv= ad='34ab52dc' sqlid='2bqy8r6vufn88' BEGIN dbms_monitor.session_trace_enable(135,181,false); END; END OF STMT EXEC #1:c=0,e=1082,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,plh=0,tim= Identifizierung einer zu prüfenden Session *** :09: CLOSE #1:c=0,e=45,dep=0,type=0,tim= ===================== PARSING IN CURSOR #3 len=41 dep=0 uid=0 oct=3 lid=0 tim= hv= ad='34ab4260' sqlid='2b69gpx04v5tt' select count(*) from dwh.wh_transaktionen END OF STMT PARSE #3:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh= ,tim= EXEC #3:c=0,e=43,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh= ,tim= FETCH #3:c=0,e=792,p=0,cr=49,cu=0,mis=0,r=1,dep=0,og=1,plh= ,tim= STAT #3 id=1 cnt=1 pid=0 pos=1 obj=0 op='sort AGGREGATE (cr=49 pr=0 pw=0 time=0 us)' STAT #3 id=2 cnt=4216 pid=1 pos=1 obj=86150 op='table ACCESS FULL WH_TRANSAKTIONEN (cr=49 pr=0 pw=0 time=8940 us cost=16 size=0 card=4216)' FETCH #3:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh= ,tim= *** :09: CLOSE #3:c=0,e=28,dep=0,type=0,tim= ===================== PARSING IN CURSOR #2 len=57 dep=0 uid=0 oct=47 lid=0 tim= hv= ad='34bc4a1c' sqlid='faaagm066mu1f' BEGIN dbms_monitor.session_trace_disable(135,181); END; END OF STMT select sid,serial#,terminal,program,module from v$session; ASCHLAUC sqlplus.exe sqlplus.exe Aktivieren des SQL-Trace execute dbms_monitor.session_trace_enable(135,177,true); -- TRUE / FALS mit bzw. Ohne waits und zusätzliche Analysen Deaktivieren execute dbms_monitor.session_trace_disable(135,181); 431

427 Auswertung Trace-Dateien TKPROF tkprof orcl_ora_4488.trc c:\abc.txt explain=sys/sys sort=fchqry Trace Analyzer (TRCA) Download über Doc

428 DWH-bezogene Monitoring-Aktivitäten ASH-Report SQL-Monitoring (OEM) Informationsbedarf Endanwender Messung Platzverbrauch Lesestatistiken über tatsächlich genutzte Daten Ressourcen-Manager ETL-Monitoring 433

429 Beobachten des Informationsbedarfs Regelmäßige Teilnahme an Gremien Abstimmung / Feedback / Planung mit Fachabteilungen und DWH-Nutzern Statistiken über DWH-Nutzung Benutzerzahlen / Session-Statistik Datenmengen / Platzverbrauch Segment-Reads 437

430 Messung tatsächlich belegter Plattenplatz Häufig gibt es nur Zahlen über den allokierten Speicher Oft genannt von der Storage-Abteilung, die nicht in die Dateien hineinschauen kann Manchmal werden Zahlen genannt, die auch die gespiegelten Daten beinhalten oder den Backup-Storage umfassen Plattenplatz im DWH wird oft ähnlich organisiert wie Plattenplatz im OLTP-Umfeld Zu große Free-Space-Bereiche, obwohl die Zugänge zeitlich und mengenmäßig gut kalkulierbar sind Gibt kein realisitisches Bild über den tatsächlichen Bedarf und Kosten 438

431 Messung belegter Plattenplatz pro Tablespace Tablespace Name Filename FILE_ID FILESIZE USED Pct. Used DWH1 D:\ORA\ORADATA\ORCL\DWH1.DBF DWH1 D:\ORA\ORADATA\ORCL\DWH1_ DWH1 D:\ORA\ORADATA\ORCL\DWH1_ EXAMPLE D:\ORA\ORADATA\ORCL\EXAMPLE01.DBF PERFSTAT D:\ORA\ORADATA\ORCL\PERFSTAT01.DBF PERFSTAT D:\ORA\ORADATA\ORCL\PERFSTAT SYSAUX D:\ORA\ORADATA\ORCL\SYSAUX01.DBF SYSTEM D:\ORA\ORADATA\ORCL\SYSTEM01.DBF SELECT /*+ ordered */ 99 TEMP D:\ORA\ORADATA\ORCL\TEMP01.DBF d.tablespace_name TEST D:\ORA\ORADATA\ORCL\TEST.DBF TEST_ALERT D:\ORA\ORADATA\ORCL\TEST_ALERT.DBF TEST_ALERT D:\ORA\ORADATA\ORCL\TEST_ALERT UNDOTBS1 D:\ORA\ORADATA\ORCL\UNDOTBS01.DBF FROM 64 USERS D:\ORA\ORADATA\ORCL\USERS01.DBF , v$datafile v avg 62 sum SET LINESIZE 145 SET PAGESIZE 9999 SET VERIFY OFF COLUMN tablespace FORMAT a18 HEADING 'Tablespace Name' COLUMN filename FORMAT a50 HEADING 'Filename' COLUMN filesize FORMAT ,999,999,999 HEADING 'File Size' COLUMN used FORMAT ,999,999,999 HEADING 'Used (in bytes)' COLUMN pct_used FORMAT 999 HEADING 'Pct. Used BREAK ON report COMPUTE SUM OF filesize ON report COMPUTE SUM OF used ON report COMPUTE AVG OF pct_used ON report tablespace, d.file_name filename, d.file_id file_id, d.bytes filesize, NVL((d.bytes - s.bytes), d.bytes) used, TRUNC(((NVL((d.bytes - s.bytes), d.bytes)) / d.bytes) * 100) pct_used sys.dba_data_files d, ( select file_id, SUM(bytes) bytes from sys.dba_free_space GROUP BY file_id) s WHERE (s.file_id (+)= d.file_id) AND (d.file_name = v.name) UNION SELECT d.tablespace_name tablespace, d.file_name filename, d.file_id file_id, d.bytes filesize, NVL(t.bytes_cached, 0) used, TRUNC((t.bytes_cached / d.bytes) * 100) pct_used FROM sys.dba_temp_files d, v$temp_extent_pool t, v$tempfile v WHERE (t.file_id (+)= d.file_id) AND (d.file_id = v.file#) / 439

432 Einzelne Messungen -- total amount of allocated datafile size select sum(bytes)/1024/1024 "Meg" from dba_data_files; -- Size of all temp files select nvl(sum(bytes),0)/1024/1024 "Meg" from dba_temp_files; -- Size of on-line redo-logs select sum(bytes)/1024/1024 "Meg" from sys.v_$log; -- all together Datafile size, temp files, on-line redo-logs; select a.data_size+b.temp_size+c.redo_size "total_size" from ( select sum(bytes) data_size from dba_data_files ) a, ( select nvl(sum(bytes),0) temp_size from dba_temp_files ) b, ( select sum(bytes) redo_size from sys.v_$log ) c; 440

433 Einzelne Messungen -- freespace report col "Database Size" format a20 col "Free space" format a20 select round(sum(used.bytes) / 1024 / 1024 ) ' MB' "Database Size", round(free.p / 1024 / 1024) ' MB' "Free space" from (select bytes from v$datafile union all select bytes from v$tempfile union all select bytes from v$log) used, (select sum(bytes) as p from dba_free_space) free group by free.p / -- used space over all SELECT SUM(bytes)/1024/1024 "Meg" FROM dba_segments; -- used / free space in temp SELECT tablespace_name, SUM(bytes_used), SUM(bytes_free) FROM V$temp_space_header GROUP BY tablespace_name; 441

434 Einzelne Messungen -- true used / free space in temp SELECT A.tablespace_name tablespace, D.mb_total, SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_used, D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_free FROM v$sort_segment A, ( SELECT B.name, C.block_size, SUM (C.bytes) / 1024 / 1024 mb_total FROM v$tablespace B, v$tempfile C WHERE B.ts#= C.ts# GROUP BY B.name, C.block_size ) D WHERE A.tablespace_name = D.name GROUP by A.tablespace_name, D.mb_total; 442

435 Welche Daten werden wirklich genutzt? Tabellen Tabellen Große Tabellen Partitioniert Namentlich bekannt > 70 % des Datenvolumens KleineTabellen Nicht Partitioniert Unkenntliche Masse < 30 % des Datenvolumens 443

436 Lesestatistiken für die wichtigsten Tabellen anlegen dba_hist. - Views zum Sammel der Lese-Zugriffe dba_hist_seg_stat dba_hist_seg_stat_obj dba_hist_snapshot Achtung: dba_hist_sqlstat dba_hist_sqltext Views werden nur aktualisiert wenn Auch tatsächlich gelesen wurde Ein AWR-Snapshot gezogen wurde Zähler fällt auf 0, wenn die DB durchgestartet wird Aufbau einer eigenen Statistik-Tabelle mit Tab-Name, Snap-ID, Datum/Uhrzeit, Physical Reads Aktualisieren immer nachdem ein AWR-Snapshot gezogen wurde 444

437 Lesestatistiken für die wichtigsten Tabellen anlegen 445 Select distinct * from (select to_char(begin_interval_time,'dd.mm.yyyy:hh24:mi') Zeit, logical_reads_total log_rd, logical_reads_delta log_rd_delta, physical_reads_total phy_rd, physical_reads_delta phy_rd_delta from dba_hist_seg_stat s, dba_hist_seg_stat_obj o, dba_hist_snapshot sn where o.owner = 'DWH1' and s.obj# = o.obj# and sn.snap_id = s.snap_id and object_name = 'UMSATZ') order by zeit; ZEIT LOG_RD LOG_RD_DELTA PHY_RD PHY_RD_DELTA :22: :23: :12: :15:

438 Zugriffsdaten auf Tabellen über SQL sammeln SQL-Statements pro User analysieren From-Klausel parsen Zugriffe auf Tabellen System-Zugriffe ausschließen Wegen der Menge Historien-Tabelle aufbauen Mit aus der FROM-Klausel herausgefilterten Tabellennamen Zuordnung zu USER, Zeit und SQL-Statement 446

439 Beispielabfrage select to_char(s.begin_interval_time,'mm-dd hh24') c1, sql.sql_id c2, t.sql_text C9, sql.executions_delta c3, sql.buffer_gets_delta c4, sql.disk_reads_delta c5, sql.iowait_delta c6, sql.apwait_delta c7, sql.ccwait_delta c8 from dba_hist_sqlstat sql, dba_hist_snapshot s, dba_hist_sqltext t where s.snap_id = sql.snap_id and sql.parsing_schema_name = 'DWH1' and t.sql_id = sql.sql_id and sql.sql_id = '01978kjxb5yd2' and to_char(s.begin_interval_time,'mm-dd hh24') = ' ' order by c1, c2; col c1 heading Begin Interval time format a8 col c2 heading SQL ID format a13 col c3 heading Exec Delta format 9,999 col c4 heading Buffer Gets Delta format 9,999 col c5 heading Disk Reads Delta format 9,999 col c6 heading IO Wait Delta format 9,999 col c7 heading Application Wait Delta format 9,999 col c8 heading Concurrency Wait Delta format 9,999 col c9 heading 'SQL-Text' format a50 break on c1 `Begin `Buffer `Disk Interval `SQL `Exec Gets time' ID' SQL-Text Delta' Delta' Delta kj Select * from (select Produkt, sum(u.summe)... AS Wert, 1 8,573 8, k2 Select * from (select Produkt, sum(u.summe)... AS Wert, 1 8,573 8, Auszug 447

440 Verwendungsinformationen speichern User Tabelle DWH-Zugriffshistorie Tabname Gelesen_Von_User Anzahl_Read_IO Lese_Datum 448

441 Aufgabenstellungen beim ETL-Monitoring Laufzeit-Kontrolle / ETL-Monitoring Gelesene/Geschriebene Sätze Ressource-Verbrauch (IO und Memory) Laufzeit Historischen Verlauf dokumentieren Trends ableiten Zuwachsmenge pro Tabelle Historischen Verlauf dokumentieren Mengen-Kontrolle Beobachtung des tatsächlichen Platzverbrauchs im DWH Alerts 449

442 Verbrauchsdaten sammeln Mess-Aufruf in der aktuellen ETL-Job-Session als letzten Aufruf einbauen Ergebnis-Daten in Historien-Tabelle eintragen SELECT /*+ use_nl (e s) ordered */ s.sql_id, s.plan_hash_value, to_char(s.hash_value), rawtohex(s.address), s.sql_text, s.disk_reads, s.buffer_gets, s.executions, s.sharable_mem, s.parsing_user_id, s.sorts, s.parse_calls, s.command_type, s.child_number, s.parsing_schema_id, s.rows_processed, e.username dbuser, u.name parsing_user, e.sid, s.module, s.action, s.open_versions, 1 current_set FROM v$session e, v$sql s, sys.user$ u WHERE s.address = e.sql_address AND s.hash_value = e.sql_hash_value AND s.child_number = e.sql_child_number AND u.type#!= 2 AND s.parsing_user_id = u.user# 450

443 Zusammenfassung

444 E x t e r n e I n t e r n e D a t e n Szenario DWH - Gesamtsicht OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T T Referenzdaten Stammdaten Enterprise Layer Core - DWH / Info Pool R Partitionierte Transaktionsdaten nur wenn sie abgefragt werden R S S S Embedded Meta-Layer R Operational Data (virtuell) User View Layer (teils virtuell) Vorberechnete Kennzahlen C A MJ Q L JSON Unstructured JSON Data A Dimensionen als Views Fakten als In-Memory-Variante von Core-Transaktionen Kennzahlen-MAVs physikalisch R-Objekte physikalisch JSON-Objekte physikalisch JSON JSON Data Mining Statistikdaten HDFS / NoSQL Unstructured Data Oracle R

445 E x t e r n e I n t e r n e D a t e n SQL Szenario DWH - Gesamtsicht OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T T SQL Referenzdaten Stammdaten Enterprise Layer Core - DWH / Info Pool R Partitionierte Transaktionsdaten nur wenn sie abgefragt werden R R S S S Embedded Meta-Layer Operational Data (virtuell) SQL User View Layer (teils virtuell) Vorberechnete Kennzahlen C A MJ Q L JSON Unstructured JSON Data A Dimensionen als Views Fakten als In-Memory-Variante von Core-Transaktionen Kennzahlen-MAVs physikalisch R-Objekte physikalisch JSON-Objekte physikalisch JSON JSON Data Mining Statistikdaten HDFS / NoSQL Unstructured Data Oracle R

446 454

Andrea Held. Motivation ILM: Definition und Strategien Lösungen für Oracle Datenbanken. Empfehlungen

Andrea Held. Motivation ILM: Definition und Strategien Lösungen für Oracle Datenbanken. Empfehlungen Andrea Held Motivation ILM: Definition und Strategien Lösungen für Oracle Datenbanken Partitionierung Komprimierung ILM Assistant Flashback Data Archive Empfehlungen 1 Datenwachstum Wachsende Kosten Schlechtere

Mehr

Automatisierung durch Information Lifecycle Management

Automatisierung durch Information Lifecycle Management Automatisierung durch Information Lifecycle Management Ralf Lange Oracle Deutschland B.V. & Co. KG Storage Management: Herausforderungen Verwalten von mehr Daten ohne ansteigende Kosten Komprimieren von

Mehr

Index- und Zugriffsstrukturen für. Holger Brämer, 05IND-P

Index- und Zugriffsstrukturen für. Holger Brämer, 05IND-P Index- und Zugriffsstrukturen für Data Warehousing Holger Brämer, 05IND-P Index- und Zugriffstrukturen für Data Warehousing Materialisierte Sichten Bitmap-Indexe Verbundindexe Materialisierte Sichten gehören

Mehr

Oracle-Statistiken im Data Warehouse effizient nutzen

Oracle-Statistiken im Data Warehouse effizient nutzen Zur performanten Ausführung von Berichten und Ad-hoc-Abfragen eines BI-Systems sind beim Oracle Optimizer aussagekräftige und aktuelle Statistiken für die Tabellen und Indizes von essenzieller Bedeutung.

Mehr

Oracle Advanced Compresion 10g versus 11g

Oracle Advanced Compresion 10g versus 11g Regionaltreffen München/Südbayern am Montag, 12.01.2009, 17:00 Uhr Oracle Advanced Compresion 10g versus 11g Platz in der Datenbank optimal nützen Ihr Partner für Schulung, Betreuung und Beratung rund

Mehr

Physische Datenbankdefinition in. Arthur Bauer

Physische Datenbankdefinition in. Arthur Bauer Physische Datenbankdefinition in Arthur Bauer Inhalt Cluster Index-Cluster Hash-Cluster Vor- und Nachteile Index-Organisierte Tabelle (IOT) Partitionierung STORAGE-Klausel in DDL Indexstrukturen Oracle

Mehr

Performanceoptimierung mit Exadata Verarbeitung extremer Datenmengen mit PL/SQL basierter Datenbewirtschaftung (Erfahrungsbericht)

Performanceoptimierung mit Exadata Verarbeitung extremer Datenmengen mit PL/SQL basierter Datenbewirtschaftung (Erfahrungsbericht) Performanceoptimierung mit Exadata Verarbeitung extremer Datenmengen mit PL/SQL basierter Datenbewirtschaftung (Erfahrungsbericht) Christian Haag, DATA MART Consulting Consulting Manager Oracle DWH Team

Mehr

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten Einführung in SQL Die Sprache SQL (Structured Query Language) ist eine Programmiersprache für relationale Datenbanksysteme, die auf dem ANSI-SQL-Standard beruht. SQL wird heute von fast jedem Datenbanksystem

Mehr

Datenbanken und Oracle, Teil 2

Datenbanken und Oracle, Teil 2 Datenbanken und Oracle, Teil 2 Mathias Weyland Linux User Group Switzerland 29. Juni 2007 SQL*Plus CHAR/VARCHAR2 Dokumentation Teil I Nachträge 1 SQL*Plus 2 CHAR/VARCHAR2 3 Dokumentation SQL*Plus SQL*Plus

Mehr

Oracle Developer Day Data Warehouse Von Konzept bis Betrieb

<Insert Picture Here> Oracle Developer Day Data Warehouse Von Konzept bis Betrieb Oracle Developer Day Data Warehouse Von Konzept bis Betrieb Christoph Blessing / Detlef Schroeder / Alfred Schlaucher Themen ODD Data Warehouse Konzept und Referenzarchitektur des

Mehr

Einstieg in das SQL- und Datenbanktuning 14.01.2009. Loblied auf den Tabellen-Index!

Einstieg in das SQL- und Datenbanktuning 14.01.2009. Loblied auf den Tabellen-Index! 1/40 PHP-User-Group Stuttgart 14.01.2009 Warum Datenbanken einen Hals bekommen und was sich dagegen tun lässt. Tuning und Performancesteigerung ohne zusätzliche Hardware. Ein. Loblied auf den Tabellen-Index!

Mehr

Oracle Datenbank - Tuning

Oracle Datenbank - Tuning Oracle Datenbank - Tuning H.-G. Hopf Georg-Simon-Ohm Fachhochschule Nürnberg Datenbank Tuning / 1 Η. G.Hopf / 10.04.2003 Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene

Mehr

Oracle Datenbank Performance

Oracle Datenbank Performance Oracle Datenbank Performance Was gibt es Neues? Oder Gibt es überhaupt etwas Neues? Themenübersicht Oracle 12c performancerelevante Neuheiten Oracle 12c In-Memory Database Option & Co Partitioning Neuheiten

Mehr

SQL structured query language

SQL structured query language Umfangreiche Datenmengen werden üblicherweise in relationalen Datenbank-Systemen (RDBMS) gespeichert Logische Struktur der Datenbank wird mittels Entity/Realtionship-Diagrammen dargestellt structured query

Mehr

Oracle Datenbankadministration Aufbau

Oracle Datenbankadministration Aufbau Oracle Datenbankadministration Aufbau Seminarunterlage Version: 12.04 Version 12.04 vom 15. Januar 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

Fördercontrolling im öffentlichen Bereich Aspekte beim Aufbau eines DWH. Software mit Format.

Fördercontrolling im öffentlichen Bereich Aspekte beim Aufbau eines DWH. Software mit Format. Fördercontrolling im öffentlichen Bereich Aspekte beim Aufbau eines DWH Gerd Schandert, Neuss den 18.03.2014 Agenda 1. Vorstellung Auftraggeber 2. Förderung allgemein 3. Schichten im Data Warehouse 4.

Mehr

Themenblock: Erstellung eines Cube

Themenblock: Erstellung eines Cube Themenblock: Erstellung eines Cube Praktikum: Data Warehousing und Data Mining Einführung relationale Datenbanken Problem Verwaltung großer Mengen von Daten Idee Speicherung der Daten in Form von Tabellen

Mehr

Performance Tuning mit @enterprise

Performance Tuning mit @enterprise @enterprise Kunden-Forum 2005 Performance Tuning mit @enterprise Herbert Groiss Groiss Informatics GmbH, 2005 Inhalt Datenbank RMI JAVA API HTTP Konfiguration Analyse Groiss Informatics GmbH, 2005 2 Datenbank

Mehr

IBM Informix Tuning und Monitoring

IBM Informix Tuning und Monitoring Seminarunterlage Version: 11.01 Copyright Version 11.01 vom 25. Juli 2012 Dieses Dokument wird durch die veröffentlicht. Copyright. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

MySQL 5.1. Kristian Köhntopp

MySQL 5.1. Kristian Köhntopp MySQL 5.1 Kristian Köhntopp Was ist neu? Neues InnoDB Neue Replikation Neues Logging Event Scheduler Partitions INFORMATION_SCHEMA XML Functions Was ist neu? Neues InnoDB Neue Replikation Neues Logging

Mehr

Cassandra Query Language (CQL)

Cassandra Query Language (CQL) Cassandra Query Language (CQL) Seminar: NoSQL Wintersemester 2013/2014 Cassandra Zwischenpräsentation 1 Gliederung Basic facts Datentypen DDL/DML ähnlich zu SQL Besonderheiten Basic facts CQL kurz für

Mehr

SQL-Befehlsliste. Vereinbarung über die Schreibweise

SQL-Befehlsliste. Vereinbarung über die Schreibweise Vereinbarung über die Schreibweise Schlüsselwort [optionale Elemente] Beschreibung Befehlsworte in SQL-Anweisungen werden in Großbuchstaben geschrieben mögliche, aber nicht zwingend erforderliche Teile

Mehr

DATA WAREHOUSE. Big Data Alfred Schlaucher, Oracle

DATA WAREHOUSE. Big Data Alfred Schlaucher, Oracle DATA WAREHOUSE Big Data Alfred Schlaucher, Oracle Scale up Unternehmensdaten zusammenfassen Noch mehr Informationen aus Unternehmens- Daten ziehen! Datenmengen, Performance und Kosten Daten als Geschäftsmodell

Mehr

Data Warehouse Grundlagen

Data Warehouse Grundlagen Seminarunterlage Version: 2.10 Version 2.10 vom 24. Juli 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen

Mehr

Komprimierung in der Datenbank

Komprimierung in der Datenbank ORACLE DOJO NR. 8 ULRIKE SCHWINN Komprimierung in der Datenbank Tabellen, Large Objects, Indizes, RMAN, Data Pump, Netzwerk, Data Guard, Information Lifecycle Management Oracle Dojo ist eine Serie von

Mehr

Partitionierung im Data Warehouse mit ORACLE 11g und 12c. Reinhard Wahl DOAG Konferenz Nürnberg, 18.-20. November 2014

Partitionierung im Data Warehouse mit ORACLE 11g und 12c. Reinhard Wahl DOAG Konferenz Nürnberg, 18.-20. November 2014 Partitionierung im Data Warehouse mit ORACLE 11g und 12c Reinhard Wahl DOAG Konferenz Nürnberg, 18.-20. November 2014 Wir fokussieren mit unseren Services die Herausforderungen des Marktes und verbinden

Mehr

Data Warehousing Grundbegriffe und Problemstellung

Data Warehousing Grundbegriffe und Problemstellung Data Warehousing Grundbegriffe und Problemstellung Dr. Andrea Kennel, Trivadis AG, Glattbrugg, Schweiz Andrea.Kennel@trivadis.com Schlüsselworte Data Warehouse, Cube, Data Mart, Bitmap Index, Star Queries,

Mehr

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221 Oracle 10g und SQL Server 2005 ein Vergleich Thomas Wächtler 39221 Inhalt 1. Einführung 2. Architektur SQL Server 2005 1. SQLOS 2. Relational Engine 3. Protocol Layer 3. Services 1. Replication 2. Reporting

Mehr

Data Warehousing und Data Mining

Data Warehousing und Data Mining Data Warehousing und Data Mining Logische Optimierung Ulf Leser Wissensmanagement in der Bioinformatik Inhaltsübersicht Vorlesung Einleitung & Motivation Architektur Modellierung von Daten im DWH Umsetzung

Mehr

3. Architektur eines DBS (Oracle)

3. Architektur eines DBS (Oracle) 3. Architektur eines DBS (Oracle) aus Sicht des Datenbank Server Rechners Connectivity Komponente(n) des DBS (z.b. Oracle Listener) Installation ORACLE_HOME Instanz ORACLE_SID Datenbank Oracle: 1 (aktive)

Mehr

Die perfekte Kombination im Agilen Data Warehouse Oracle Engineered Systems mit Data Vault

Die perfekte Kombination im Agilen Data Warehouse Oracle Engineered Systems mit Data Vault Die perfekte Kombination im Agilen Data Warehouse Oracle Engineered Systems mit Data Vault Herbert Rossgoderer Geschäftsführer Matthias Fuchs DWH Architekt ISE Information Systems Engineering GmbH ISE

Mehr

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER INHALTSVERZEICHNIS 1. Datenbanken 2. SQL 1.1 Sinn und Zweck 1.2 Definition 1.3 Modelle 1.4 Relationales Datenbankmodell 2.1 Definition 2.2 Befehle 3.

Mehr

Datawarehouse Architekturen. Einheitliche Unternehmenssicht

Datawarehouse Architekturen. Einheitliche Unternehmenssicht Datawarehouse Architekturen Einheitliche Unternehmenssicht Was ist Datawarehousing? Welches sind die Key Words? Was bedeuten sie? DATA PROFILING STAGING AREA OWB ETL OMB*PLUS SAS DI DATA WAREHOUSE DATA

Mehr

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung Inhalt Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle Daten und Tabellen Normalisierung, Beziehungen, Datenmodell SQL - Structured Query Language Anlegen von Tabellen Datentypen (Spalten,

Mehr

25.06.2014 TDWI Konferenz DWH Architektur Agilität durch Data Vault Modeling. Twitter: #TDWI #DataVault @DV_Modeling @BLUEFORTE @TDWI_EU

25.06.2014 TDWI Konferenz DWH Architektur Agilität durch Data Vault Modeling. Twitter: #TDWI #DataVault @DV_Modeling @BLUEFORTE @TDWI_EU BLUEFORTE GmbH Dirk Lerner 25.06.2014 TDWI Konferenz DWH Architektur Agilität durch Data Vault Modeling Twitter: #TDWI #DataVault @DV_Modeling @BLUEFORTE @TDWI_EU 1 Elemente des Data Vault (Basic) HUB

Mehr

Darüber hinaus wird das Training dazu beitragen, das Verständnis für die neuen Möglichkeiten zu erlangen.

Darüber hinaus wird das Training dazu beitragen, das Verständnis für die neuen Möglichkeiten zu erlangen. Ora Education GmbH www.oraeducation.de info@oraeducation.de Lehrgang: Oracle 11g: New Features für Administratoren Beschreibung: Der Kurs über fünf Tage gibt Ihnen die Möglichkeit die Praxis mit der neuen

Mehr

Oracle Datenbankadministration Grundlagen

Oracle Datenbankadministration Grundlagen Oracle Datenbankadministration Grundlagen Seminarunterlage Version: 12.02 Version 12.02 vom 14. April 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

Enrico Genauck 37327 IN04

Enrico Genauck 37327 IN04 ANFRAGEOPTIMIERUNG IN ORACLE Enrico Genauck 37327 IN04 An!ageoptimierung in Oracle 1 ANFRAGEOPTIMIERUNG IN ORACLE Enrico Genauck 37323 IN04 Einleitung Die Optimierung einer Anfrage an eine relationale

Mehr

3 Indizes. 3.1 Indexarchitektur von SQL Server. SQL Server 2008: Datenbankentwicklung

3 Indizes. 3.1 Indexarchitektur von SQL Server. SQL Server 2008: Datenbankentwicklung 3 Indizes 3.1 Indexarchitektur von SQL Server Die folgende Abbildung zeigt die Organisationsstruktur einer Tabelle. Eine Tabelle befindet sich in einer oder mehreren Partitionen, und jede Partition enthält

Mehr

Oracle Database In-Memory Option

Oracle Database In-Memory Option Oracle Data Warehouse In Memory Database Option 1/9 (Wichtige Vorbemerkung: An dieser Stelle sind Informationen zusammengetragen, wie sie im Rahmen der Oracle Open World im September 2013 bereits über

Mehr

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software SQL Tutorial SQL - Tutorial SS 06 Hubert Baumgartner INSO - Industrial Software Institut für Rechnergestützte Automation Fakultät für Informatik Technische Universität Wien Inhalt des Tutorials 1 2 3 4

Mehr

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004) Nachtrag: Farben Farbblindheit (Light und Bartlein 2004) 1 Vorgeschlagene Farbskalen (Light and Bartlein 2004) Farbkodierung metrisch skalierter Daten Unterscheide: 1. Sequential Data (ohne Betonung der

Mehr

Implementierung eines Data Marts. Gunther Popp dc soft GmbH

Implementierung eines Data Marts. Gunther Popp dc soft GmbH Implementierung eines Data Marts Gunther Popp dc soft GmbH Überblick Vorstellung der Beispielanwendung Prozeß zur Erstellung eines Data Marts - Design - Datenermittlung - Implementierung Erläutert am Beispiel-Mart

Mehr

Historisierung mit Flashback Database Archive (FDA)

Historisierung mit Flashback Database Archive (FDA) Historisierung mit Flashback Database Archive (FDA) DOAG Konferenz 2013 Nürnberg, 19.-21. November 2013 Wolfgang Tanzer metafinanz Informationssysteme GmbH Wir fokussieren mit unseren Services die Herausforderungen

Mehr

IBM DB2 für Linux/Unix/Windows Monitoring und Tuning

IBM DB2 für Linux/Unix/Windows Monitoring und Tuning IBM DB2 für Linux/Unix/Windows Monitoring und Tuning Seminarunterlage Version: 4.05 Version 4.05 vom 9. Februar 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt-

Mehr

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 9 Sortiervorgänge. Universität Hannover. Sortiervorgänge. Migration. Konfiguration.

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 9 Sortiervorgänge. Universität Hannover. Sortiervorgänge. Migration. Konfiguration. Kurs Oracle 9i Einführung Performance Tuning Teil 9 Anhang Timo Meyer Wintersemester 2005 / 2006 Seite 1 von 14 Seite 1 von 14 Agenda 1. Einführung 2. 3. 4. Der Sortiervorgang 5. 6. Statische Informationen

Mehr

Agile Analytics Neue Anforderungen an die Systemarchitektur

Agile Analytics Neue Anforderungen an die Systemarchitektur www.immobilienscout24.de Agile Analytics Neue Anforderungen an die Systemarchitektur Kassel 20.03.2013 Thorsten Becker & Bianca Stolz ImmobilienScout24 Teil einer starken Gruppe Scout24 ist der führende

Mehr

Kapitel 7 Datenbank-Tuning

Kapitel 7 Datenbank-Tuning Kapitel 7 Datenbank-Tuning Flien zum Datenbankpraktikum Wintersemester 2012/13 LMU München 2008 Thmas Bernecker, Tbias Emrich 2010 Tbias Emrich, Erich Schubert unter Verwendung der Flien des Datenbankpraktikums

Mehr

Integritätsbedingungen / Normalformen- Beispiel: Kontoführung

Integritätsbedingungen / Normalformen- Beispiel: Kontoführung Technische Universität München WS 2003/04, Fakultät für Informatik Datenbanksysteme I Prof. R. Bayer, Ph.D. Lösungsblatt 8 Dipl.-Inform. Michael Bauer Dr. Gabi Höfling 12.01. 2004 Integritätsbedingungen

Mehr

Backup & Recovery in Oracle 11g Funktionen und Features

Backup & Recovery in Oracle 11g Funktionen und Features Backup & Recovery in Oracle 11g Funktionen und Features Wolfgang Thiem Server Technologies Customer Center ORACLE Deutschland GmbH Warum werden Backups gemacht? Damit man im Fehlerfall auf einen konsistenten

Mehr

Hadoop & SQL Oracle BI & DWH Konferenz 2013 19./20. März 2013, Kassel. Carsten Herbe metafinanz Informationssysteme GmbH

Hadoop & SQL Oracle BI & DWH Konferenz 2013 19./20. März 2013, Kassel. Carsten Herbe metafinanz Informationssysteme GmbH Hadoop & SQL Oracle BI & DWH Konferenz 2013 19./20. März 2013, Kassel Carsten Herbe metafinanz Informationssysteme GmbH In unserer Business Line Business Intelligence & Risk gibt es fünf Bereiche: Risk,

Mehr

DOAG 2010 ORACLE PLATTFORM MIGRATION CROSS PLATFORM TRANSPORTABLE TABLESPACES (XTTS)

DOAG 2010 ORACLE PLATTFORM MIGRATION CROSS PLATFORM TRANSPORTABLE TABLESPACES (XTTS) DOAG 2010 ORACLE PLATTFORM MIGRATION CROSS PLATFORM TRANSPORTABLE TABLESPACES (XTTS) METHODE UND ERFAHRUNGSBERICHT JOSEF LIPPERT FREIBERUFLICHER IT CONSULTANT MÜNCHEN Wer bin ich Freiberuflicher IT Consultant

Mehr

Einführung in OLAP und Business Analysis. Gunther Popp dc soft GmbH

Einführung in OLAP und Business Analysis. Gunther Popp dc soft GmbH Einführung in OLAP und Business Analysis Gunther Popp dc soft GmbH Überblick Wozu Business Analysis mit OLAP? OLAP Grundlagen Endlich... Technischer Background Microsoft SQL 7 & OLAP Services Folie 2 -

Mehr

Johannes Ahrends CarajanDB GmbH. www.carajandb.com 2013 CarajanDB GmbH

Johannes Ahrends CarajanDB GmbH. www.carajandb.com 2013 CarajanDB GmbH Johannes Ahrends CarajanDB GmbH CarajanDB Warum ist eine Anwendung langsam? Beispiele von echten Performanceproblemen 2 Experten mit über 20 Jahren Oracle Erfahrung Firmensitz in Erftstadt bei Köln Spezialisten

Mehr

DB2 SQL, der Systemkatalog & Aktive Datenbanken

DB2 SQL, der Systemkatalog & Aktive Datenbanken DB2 SQL, der Systemkatalog & Aktive Datenbanken Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1 Ziele Auf DB2 Datenbanken zugreifen DB2 Datenbanken benutzen Abfragen ausführen Den Systemkatalog

Mehr

Informatik Datenbanken SQL-Einführung

Informatik Datenbanken SQL-Einführung Informatik Datenbanken SQL-Einführung Gierhardt Inhaltsverzeichnis 1 Vorbemerkungen 1 2 Auswahl-Abfragen mit SELECT 2 2.1 Selektion...................................... 2 2.2 Projektion.....................................

Mehr

MySQL Queries on "Nmap Results"

MySQL Queries on Nmap Results MySQL Queries on "Nmap Results" SQL Abfragen auf Nmap Ergebnisse Ivan Bütler 31. August 2009 Wer den Portscanner "NMAP" häufig benutzt weiss, dass die Auswertung von grossen Scans mit vielen C- oder sogar

Mehr

MySQL Performance Tuning für Entwickler

MySQL Performance Tuning für Entwickler MySQL Performance Tuning für Entwickler Cebit 2015, Hannover Oli Sennhauser Senior MySQL Consultant, FromDual GmbH oli.sennhauser@fromdual.com 1 / 18 FromDual GmbH Support Beratung remote-dba Schulung

Mehr

Unterabfragen (Subqueries)

Unterabfragen (Subqueries) Unterabfragen (Subqueries) Die kürzeste Formulierung ist folgende: SELECT Felderliste FROM Tabelle1 WHERE Tabelle1.Feldname Operator (SELECT Feldname FROM Tabelle2 WHERE Bedingung); wobei Tabelle1 und

Mehr

Einführung in die Informatik II

Einführung in die Informatik II Einführung in die Informatik II Die Structured Query Language SQL Prof. Dr. Nikolaus Wulff SQL Das E/R-Modell lässt sich eins zu eins auf ein Tabellenschema abbilden. Benötigt wird eine Syntax, um Tabellen

Mehr

Oracle Core für Einsteiger: InMemory Column Store

Oracle Core für Einsteiger: InMemory Column Store Oracle Core für Einsteiger: InMemory Column Store Martin Klier Performing Databases GmbH Mitterteich @MartinKlierDBA Oracle Core für Einsteiger: InMemory Column Store 2/37 Referent Martin Klier Lösungsarchitekt

Mehr

Data Warehouse. für den Microsoft SQL SERVER 2000/2005

Data Warehouse. für den Microsoft SQL SERVER 2000/2005 Warehouse für den Microsoft SQL SERVER 2000/2005 Begriffe 1 DWH ( Warehouse) ist eine fachübergreifende Zusammenfassung von Datentabellen. Mart ist die Gesamtheit aller Datentabellen für einen fachlich

Mehr

Kapitel 7 Datenbank-Tuning. Folien zum Datenbankpraktikum Wintersemester 2010/11 LMU München

Kapitel 7 Datenbank-Tuning. Folien zum Datenbankpraktikum Wintersemester 2010/11 LMU München Kapitel 7 Datenbank-Tuning Flien zum Datenbankpraktikum Wintersemester 2010/11 LMU München 2008 Thmas Bernecker, Tbias Emrich unter Verwendung der Flien des Datenbankpraktikums aus dem Wintersemester 2007/08

Mehr

7 Die Reorganisation von DB2

7 Die Reorganisation von DB2 Ab und an sollte eine Tabelle reorganisiert werden. Besonders, nachdem größere Datenmengen eingefügt oder gelöscht wurden, muß über eine Reorganisation nachgedacht werden. Eine optimale Performance ist

Mehr

SAP HANA ist schnell erklärt. TOBA Trainerwochenende vom 09. - 12. Mai 2013 in Prag

SAP HANA ist schnell erklärt. TOBA Trainerwochenende vom 09. - 12. Mai 2013 in Prag SAP HANA ist schnell erklärt TOBA Trainerwochenende vom 09. - 12. Mai 2013 in Prag Ihr Referent Steckbrief Name: Miroslav Antolovic Jahrgang: 1975 Stationen: SAP, Walldorf 1999-2004 Realtech, Walldorf

Mehr

REAL-TIME DATA WAREHOUSING

REAL-TIME DATA WAREHOUSING REAL-TIME DATA WAREHOUSING Lisa Wenige Seminarvortrag Data Warehousing und Analytische Datenbanken Friedrich-Schiller-Universität Jena - 19.01.12 Lisa Wenige 19.01.2012 2 Agenda 1. Motivation 2. Begriffsbestimmung

Mehr

MySQL in großen Umgebungen

MySQL in großen Umgebungen MySQL in großen Umgebungen 03.03.2011 CeBIT Referent: Bernd Erk Agenda DESTINATION TIME REMARK KURZVORSTELLUNG MYSQL STATUS QUO STORAGE ENGINES MONITORING UND MANAGEMENT ENTERPRISE FEATURES FRAGEN UND

Mehr

Themen des Kapitels. 2 Oracle Features und Architektur

Themen des Kapitels. 2 Oracle Features und Architektur 2 Oracle Features und Architektur Einführung in die Eigenschaften und die Funktionsweise von Oracle. 2.1 Übersicht Themen des Kapitels - Oracle Features und Architektur Themen des Kapitels Oracle Produkte

Mehr

ORACLE DATENBANKOPTIMIERUNG (BASICS)

ORACLE DATENBANKOPTIMIERUNG (BASICS) ORACLE DATENBANKOPTIMIERUNG (BASICS) INHALT 1 Motivation... 1 2 Automatische, regelmäßige DB-Optimierung... 2 2.1 Index-Rebuild... 2 2.2 Tabellen-Reorganisation... 2 2.3 Statistiken ermitteln... 3 2.4

Mehr

PostgreSQL unter Debian Linux

PostgreSQL unter Debian Linux Einführung für PostgreSQL 7.4 unter Debian Linux (Stand 30.04.2008) von Moczon T. und Schönfeld A. Inhalt 1. Installation... 2 2. Anmelden als Benutzer postgres... 2 2.1 Anlegen eines neuen Benutzers...

Mehr

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann Blatt Nr. 11 Übung zur Vorlesung Einsatz und Realisierung von Datenbanksystemen im SoSe15 Moritz Kaufmann (moritz.kaufmann@tum.de)

Mehr

Big Data Hype und Wirklichkeit Bringtmehrauchmehr?

Big Data Hype und Wirklichkeit Bringtmehrauchmehr? Big Data Hype und Wirklichkeit Bringtmehrauchmehr? Günther Stürner, Vice President Sales Consulting 1 Copyright 2011, Oracle and/or its affiliates. All rights Überschrift 2 Copyright 2011, Oracle and/or

Mehr

IV. Datenbankmanagement

IV. Datenbankmanagement Wirtschaftsinformatik 2 (PWIN) IV. Datenbankmanagement Kapitel 2: Datenmanipulationssprache SQL Wirtschaftsinformatik 2 (PWIN) SS 2009, Professur für Mobile Business & Multilateral Security 1 Agenda 1.

Mehr

In-Memory Datenbanken im Kontext komplexer Analytics Pojekte am Beispiel der Otto Group BI

In-Memory Datenbanken im Kontext komplexer Analytics Pojekte am Beispiel der Otto Group BI In-Memory Datenbanken im Kontext komplexer Analytics Pojekte am Beispiel der Otto Group BI Hanau, 25.02.2015 1 Titel der Präsentation, Name, Abteilung, Ort, xx. Monat 2014 Der Aufbau der Group BI Plattform

Mehr

Inhaltsverzeichnis. Installationsübersicht. A. Installationsübersicht

Inhaltsverzeichnis. Installationsübersicht. A. Installationsübersicht Inhaltsverzeichnis A. Installationsübersicht B. und Optimierungsbereiche B.1 Hardware B.2 OperatingSystem Z/OS B.3 Databasemanagementsystem DB2 B.4 Applikation C. Organisation BSS_Chart-library 1 Installationsübersicht

Mehr

Objektrelationale, erweiterbare Datenbanken WS 04/05

Objektrelationale, erweiterbare Datenbanken WS 04/05 Eidgenössische Technische Hochschule Zürich Swiss Federal Institute of Technology Zurich Institut für Informationssysteme Dr.C.Türker Objektrelationale, erweiterbare Datenbanken WS 0405 Übung 8 Aufgabe

Mehr

Adlerblick So gewinnen Sie einen Überblick über ein DWH Dr. Andrea Kennel InfoPunkt Kennel GmbH CH-8600 Dübendorf Schlüsselworte Einleitung

Adlerblick So gewinnen Sie einen Überblick über ein DWH Dr. Andrea Kennel InfoPunkt Kennel GmbH CH-8600 Dübendorf Schlüsselworte Einleitung Adlerblick So gewinnen Sie einen Überblick über ein DWH Dr. Andrea Kennel InfoPunkt Kennel GmbH CH-8600 Dübendorf Schlüsselworte DWH Projekt, Methodik, Stärken und Schwächen, Übersicht, Weg der Daten,

Mehr

Step 0: Bestehende Analyse-Plattform

Step 0: Bestehende Analyse-Plattform Die Themen 09:30-09:45 Einführung in das Thema (Oracle) 09:45-10:15 Hadoop in a Nutshell (metafinanz) 10:15-10:45 Hadoop Ecosystem (metafinanz) 10:45-11:00 Pause 11:00-11:30 BigData Architektur-Szenarien

Mehr

ANDREAS PROUZA. Wien, 2015-03-27. andreaspr@aon.at andreas@prouza.at. http://www.prouza.at

ANDREAS PROUZA. Wien, 2015-03-27. andreaspr@aon.at andreas@prouza.at. http://www.prouza.at DB2 & SQL E I N F Ü H R U N G T U N I N G O P T I M I E R U N G S E C R E T S ANDREAS PROUZA andreaspr@aon.at andreas@prouza.at http://www.prouza.at Wien, 2015-03-27 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis...

Mehr

Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap

Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap Prof. Stefan Keller (Fach-)Hochschule für Technik Rapperswil (bei Zürich) 11.11.2011 PGConf.DE - Stefan Keller 1 Was ist OpenStreetMap? Wikipedia

Mehr

NoSQL mit Postgres 15. Juni 2015

NoSQL mit Postgres 15. Juni 2015 Tag der Datenbanken 15. Juni 2015 Dipl.-Wirt.-Inform. Agenda l Vorstellung l Marktübersicht l Warum PostgreSQL? l Warum NoSQL? l Beispielanwendung Seite: 2 Vorstellung Dipl.-Wirt.-Inform. [1990] Erste

Mehr

Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel

Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel Schlagworte Autor: Klaus Friemelt, MT AG dynamisches BULK SQL, VARCHAR2-indizierte PL/SQL-Tabellen Einleitung Mit den letzten

Mehr

Indexing und Performance Tuning

Indexing und Performance Tuning Indexing und Performance Tuning Cybertec Schönig & Schönig GmbH Hans-Jürgen Schönig PostgreSQL Indexing - Jeder hat schon einmal ein Telefonbuch Benutzt - Jeder hat schon einmal Suchen durchgeführt CREATE

Mehr

Oracle Exadata Storage Server Performance erklärt SmartScan

Oracle Exadata Storage Server Performance erklärt SmartScan Products 31 Daniel Rey, OPITZ CONSULTING Schweiz GmbH Oracle Exadata Storage Server Performance erklärt SmartScan Im Herbst 2008 präsentierte Oracle an der OpenWorld den Exadata Storage Server und die

Mehr

Download:.../~rieche. gehalten am 2. Februar 2004. Stephan Rieche. Vortrag. Thema: Index Selection. von. Seminar Advanced Data Warehouse

Download:.../~rieche. gehalten am 2. Februar 2004. Stephan Rieche. Vortrag. Thema: Index Selection. von. Seminar Advanced Data Warehouse Seminar Advanced Data Warehouse Thema: Index Selection Vortrag von Stephan Rieche gehalten am 2. Februar 2004 Download:.../~rieche Inhalt des Vortrages 1. Einleitung - Was ist das Index Selection Problem?

Mehr

Einführung in Hauptspeicherdatenbanken

Einführung in Hauptspeicherdatenbanken Einführung in Hauptspeicherdatenbanken Harald Zankl Probevorlesung 13. 01., 13:15 14:00, HS C Inhaltsverzeichnis Organisation Überblick Konklusion Harald Zankl (LFU) Hauptspeicherdatenbanken 2/16 Organisation

Mehr

Analyse von unstrukturierten Daten. Peter Jeitschko, Nikolaus Schemel Oracle Austria

Analyse von unstrukturierten Daten. Peter Jeitschko, Nikolaus Schemel Oracle Austria Analyse von unstrukturierten Daten Peter Jeitschko, Nikolaus Schemel Oracle Austria Evolution von Business Intelligence Manuelle Analyse Berichte Datenbanken (strukturiert) Manuelle Analyse Dashboards

Mehr

In die Zeilen würden die Daten einer Adresse geschrieben werden. Das Ganze könnte in etwa folgendermaßen aussehen:

In die Zeilen würden die Daten einer Adresse geschrieben werden. Das Ganze könnte in etwa folgendermaßen aussehen: 1 Einführung in Datenbanksysteme Fast jeder kennt Excel und hat damit in seinem Leben schon einmal gearbeitet. In Excel gibt es Arbeitsblätter, die aus vielen Zellen bestehen, in die man verschiedene Werte

Mehr

MIS by Franziska Täschler, Winformation GmbH ftaeschler@winformation-gmbh.ch Ausgabe 01/2001

MIS by Franziska Täschler, Winformation GmbH ftaeschler@winformation-gmbh.ch Ausgabe 01/2001 MIS Glossar by Franziska Täschler, Winformation GmbH ftaeschler@winformation-gmbh.ch Ausgabe 01/2001 Aggregat Data Cube Data Marts Data Mining Data Warehouse (DWH) Daten Decision Support Systeme (DSS)

Mehr

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht Dipl. Inf. Eric Winter Entwicklungsleiter PTC GPS-Services GmbH PostgreSQLals HugeData Storage Ein Erfahrungsbericht Inhalt 1. Problembeschreibung 2. Partielle Indexierung 3. Partitionierung 1. Vererbung

Mehr

Kurs. Teil 4 Shared Pool. Universität Hannover. Agenda. Überblick. Library Cache Oracle 9i Einführung Performance Tuning. Trefferquote.

Kurs. Teil 4 Shared Pool. Universität Hannover. Agenda. Überblick. Library Cache Oracle 9i Einführung Performance Tuning. Trefferquote. Kurs Oracle 9i Einführung Performance Tuning Teil 4 Shared Pool Timo Meyer Wintersemester 2005 / 2006 Seite 1 von 22 Seite 1 von 22 1. 2. 3. SQL Area / 4. 5. 6. Shared Pool Reserved Area 7. Wiederverwendung

Mehr

PostgreSQL in großen Installationen

PostgreSQL in großen Installationen PostgreSQL in großen Installationen Cybertec Schönig & Schönig GmbH Hans-Jürgen Schönig Wieso PostgreSQL? - Die fortschrittlichste Open Source Database - Lizenzpolitik: wirkliche Freiheit - Stabilität,

Mehr

Logische Modellierung von Data Warehouses

Logische Modellierung von Data Warehouses Logische Modellierung von Data Warehouses Vertiefungsarbeit von Karin Schäuble Gliederung. Einführung. Abgrenzung und Grundlagen. Anforderungen. Logische Modellierung. Methoden.. Star Schema.. Galaxy-Schema..

Mehr

Transaktionen in der Praxis. Dr. Karsten Tolle

Transaktionen in der Praxis. Dr. Karsten Tolle Transaktionen in der Praxis Dr. Karsten Tolle Praxisbeispiel in Java Connection con = null; try { con = DriverManager.getConnection("jdbc:db2:sample"); } catch (Exception e) { e.printstacktrace(); } con.setautocommit(false);

Mehr

BIW - Überblick. Präsentation und Discoverer Demonstration - Teil 1 - Humboldt Universität zu Berlin am 10. Juni 2004

BIW - Überblick. Präsentation und Discoverer Demonstration - Teil 1 - Humboldt Universität zu Berlin am 10. Juni 2004 BIW - Überblick Präsentation und Discoverer Demonstration - Teil 1 - Humboldt Universität zu Berlin am 10. Juni 2004 Annegret Warnecke Senior Sales Consultant Oracle Deutschland GmbH Berlin Agenda Überblick

Mehr

DB2 Version 10 Kapitel IT-Sicherheit

DB2 Version 10 Kapitel IT-Sicherheit (*) IBM DB2 for z/os DB2 Version 10 Kapitel IT-Sicherheit (06_DB2V10_itsicherheit.pptx) (*) ist eingetragenes Warenzeichen der IBM International Business Machines Inc. 1 DB2 Version 10 IT Sicherheit DB2

Mehr

SQL-Anweisungen. SELECT (SQL Data Query Language)

SQL-Anweisungen. SELECT (SQL Data Query Language) SQL-Anweisungen SELECT (SQL Data Query Language) SELECT * SELECT * FROM "meine Tabelle"; SELECT feldname1, feldname2 SELECT feldname1, feldname2 FROM meinetabelle ORDER BY feldname2, feldname1 DESC; WHERE

Mehr

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar Qt-Seminar Dienstag, 10.2.2009 SQL ist......die Abkürzung für Structured Query Language (früher sequel für Structured English Query Language )...ein ISO und ANSI Standard (aktuell SQL:2008)...eine Befehls-

Mehr

Datenbank-Tuning & Administration MS SQL SERVER 2005 EXPRESS

Datenbank-Tuning & Administration MS SQL SERVER 2005 EXPRESS Datenbank-Tuning & Administration MS SQL SERVER 2005 EXPRESS SS 07 Anwendungs-Seminar Database Tuning & Administration, University of Konstanz Lehrstuhl: Database & Information Systems Group Prof. Dr.

Mehr

Archive / Backup System für OpenVMS

Archive / Backup System für OpenVMS Archive / Backup System für OpenVMS DECUS Symposium 2002 Bonn Vortrag-Nr. 3C04 Günther Fröhlin Compaq Computer Corporation Colorado Springs, USA 1 Highlights V4.0 Auslieferung Januar 2002 Hauptversion

Mehr