Upload
gottlob-schlarb
View
121
Download
2
Embed Size (px)
Citation preview
Oracle Data Warehouse – ETL in der Datenbank / Zusammenspiel mit Nicht-Oracle – ETL - Tools Alfred Schlaucher
DATA WAREHOUSE
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele
• Optimierung des Datenbank-Einsatzes in einem Oracle-DB basierten Data Warehouse
• Blick für eine „Best Practise Oracle Architektur“ öffen
• Aufhellen der Black Box „Datenbank“• Bessere Lastverteilung zwischen Komponenten
(ETL-Server / DB-Server)• Auflösen von Engpässen• Aufzeigen von optimalen Wegen
Click to edit titleClick to edit Master text styles
Insert Picture Here
D a t a W a r e h o u s e
Black Box DWH-DB transparent machen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Was macht das DWH-Konzept so erfolgreich (auch nach 15 Jahren) ?
ZentraleBereit-
stellung
Business-Daten
Semantik
Historisch(-> Trends)
Entkop-plung von op. System
Flexibel und unabhängigvon operativen Anwendungenanalysieren können
Daten sollten zentral und leicht für alle Benutzergruppengleichermaßen zugänglich sein
Daten sollten leicht verstehbar sein- Informationen statt Daten- Semantische Zusammen-
hänge
Trendfähige Informationen durch Aufbewahrung und Aufbereitung historischer Daten
A
1 2
3 4
7
Click to edit titleClick to edit Master text styles
Insert Picture Here
Evolution des Data Warehouse ¾ unserer Kunden nutzen ihr DWH auch zu operativen Zwecken
Komplexe Informations-Ausarbeitung und Analysen
Jahr/Quartal/MonatPeriodische Berichte
Woche/Tagoft und schnellwiederholbare Einzel-informationen
Stunde/Minute/Sekunde/Realtime
überschaubar
Hochvolumig / granular
Taktisch
Überschaubar / aggregiert
DWH
Strategisch
Operativ
8
Click to edit titleClick to edit Master text styles
Insert Picture Here
Die 3-Schichten-Architektur
Schlagwörter:• Stabilität• Kurze Lieferzeit• Konsolidiert• Alle Zielgruppen
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.
9
Click to edit titleClick to edit Master text styles
Insert Picture HerePD4711AMKLB998786523477690000000KLABAUTERIIO???EERWEERW883466888750000888000EU-Wert735328567353654i88863457746
PRODUKTDATEN
Produktsparten
Spartenname
Spartennr
Produktgruppen
Gruppenname
Gruppennr
Produkte
Produktname
Produktenr
EinzelpreisMüll, Altlast, unverständliche Daten
OperativeDaten
NormalisierteDaten (DWH)
Spartenname
Spartennr
Gruppenname
Gruppennr
Produktdaten
Produktname
Produktenr
Einzelpreis
Neu sortierte Daten
Prinzip Normalisieren / DenormalisierenGranularisierung als Lösung
VerständlicheInformation(denormalisiert)
Granulare DatenIm DWH
10
Click to edit titleClick to edit Master text styles
Insert Picture Here
Das Neutralitätsprinzip des DWH A
ny S
ourc
e/Ta
rget
Sys
tem Enterprise Information Layer
(Kern DWH)
Dat
a In
tegr
atio
n
User View Layer(Data Marts)
Data Integration Layer(Stage)
Process neutral / 3 NF
Any
Use
r G
roup
PrüfenIntegrierenHarmonisieren
StandardisierenErweiternVerbindenIn Beziehung setzen
AnwendenAufbereitenAggregieren
Rohdaten Angebot Bedarf
Redundanzen
Anwendungs-neutral,
granular,Zeit-neutral
Neutral gegenüberVorsystemen, Sprachen, OS
Neutral gegenüberEndbenutzern:Alle User! Alle Tools!
11
Click to edit titleClick to edit Master text styles
Insert Picture HereReporting &Publishing
Ad-hoc Analysis
Office Integration
Mobile
Scorecards
Interactive Dashboards
BI Server
Oracle Database Management System
Oracle Data Warehouse Architektur für unternehmensweites Datenmanagement
Dat
a In
tegr
atio
nR
eal T
ime
& B
atch
Any Source
Controlling
Financial
Marketing
Sales
HR
BI Apps
Dynamic Data MartsData Quality Rules Checks&Monitoring
DWH Logistic UtilitiesBusinessCatalogue
TechnicalAuditing
MetadataUtilities
Lifecycle Management Concept
DWH System Monitoring Utilities
DWH Security Utilities
DWH Backup / Recovery Concept
Concept FrameworkBig Data Appliance
Exadata Exalytics
Operational Data Layer
Information Layer Architecture Concept
Enterprise Information Layer User View LayerData IntegrationLayer
noSQL Hadoop
Big Data Solution
Reference Data ModelsData Management Concept
InDatabase ROLAP
InDatabase MOLAP
InDatabase Data MiningRInDatabase
Optimiertes Netzwerk
ServerCluster
OperatingSystem
Optimized Network
StorageHierarchy
Server Cluster
Exadata / Database Machine / Exalytics
Click to edit titleClick to edit Master text styles
Insert Picture Here
Regeln einer effizienten DWH-Architektur
• Orientierung an den Informationsbedürfnissen der Benutzer• 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• Zusammenhängende Data Mart-Schicht
• Mehrfachnutzung von Dimensionen• Geschickter Umgang mit sehr großen Faktentabellen• Eher granulare Informationen auch in den Fakten-Tabellen
• Alle Schichten in einem DB-Raum • Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege
• In-Database-Aktiviä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
Click to edit titleClick to edit Master text styles
Insert Picture Here
Multidimensionales Modell (Star Schema)
ArtikelA1A2A3A4
A1A2A3A4
4 4
89
Verkäufe
Art1
Art2
Art3
Art4
1 : nZ1Z2Z3Z4
6.7.09
Zeit
7.7.098.7.099.7.09
Q3Q3Q3Q3
Z1Z2Z3Z4
n : 1
Regionen
R1R2R3R4
Nord
Sued
West
Ost
R1R2R3R4
Kunde
Maier
Müller
Schmid
Engel
V1V2V3V4
V1V2V3V4
1 : n
n : 1
Einstiegspunktefür Anwender-Abfragen
Star Schema• Flexibel• Graphisch auch für
Business-User verständlich
P
PF
F
Blau
Gelb
Rot
Lila
Schwach
Mittel
Hoch
Schwach
Status
Farbe
Wohndichte
14
Click to edit titleClick to edit Master text styles
Insert Picture Here
Dimensionen
Artikelgruppe
Sparte
Dim_Artikel
Artikel_Langtext
Artikelsparte
Artikel
Artikel_Schlüssel
Artikelgruppe_Langtext
Artikelsparte_Langname
Parent
Parent
Fakten
Levelschlüssel
Levelschlüssel/Objektname
Levelschlüssel
Business Key
Künstlicher Dimension Key
Dim_Schlüssel
Aggregation
Aggregation
15
Click to edit titleClick to edit Master text styles
Insert Picture Here
Star vs. Snowflake Schema
16
Click to edit titleClick to edit Master text styles
Insert Picture Here
Das Schichten-Modell als Hilfestellung bei der Planung des ETL-Prozesses
Any
Sou
rce/
Targ
et S
yste
m
Enterprise Information Layer D
ata
Inte
grat
ion
User View LayerData Integration Layer
Process neutral / 3 NF
Any
Use
r G
roup
Operational Data Layer
17
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Lade-Aktivitäten an Schichtübergängen
Integration Enterprise User ViewFlüchtige Daten Persistent Kopien / teilpersistent
dynamisch
KopierenSelektieren
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)
MengenbasiertesPrüfen ohne Constraints
UmschlüsselungLookups -> Referenz-/StammdatenJoinsAufbauen von Distinct-Strukturen(Normalisieren)
UmschlüsselungLookups -> DimensionsdatenJoins - Denormalisieren
Normalisieren(Granularisieren)
18
DenormalisierenHistorisieren
z.T. Aggregieren
Clearing-Verfahren,technisches, logisches,semantisches Prüfen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Durch führes Transformieren Synergien ermöglichen
Any
Sou
rce/
Targ
et S
yste
m
Enterprise Information Layer
Dat
a In
tegr
atio
n
User View Layer
Data Integration Layer
Process neutral / 3 NF
Any
Use
r G
roup
Operational Data Layer
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
Die frühest mögliche Stelle finden
Click to edit titleClick to edit Master text styles
Insert Picture Here
Verteilte Server zwingen oft zu unproduktiven 1:1 Ladevorgängen
Enterprise Information Layer
User View Layer
Data Integration Layer
Process neutral / 3 NF
User View Layer
User View Layer
1:1
1:1
1:1
Vorsystem mitVorrechner
Vorsystem
1:1
1:1
Click to edit titleClick to edit Master text styles
Insert Picture Here
Eine Hardware (bzw. Cluster) ermöglicht flexibles Handeln durch kurze Wege
Enterprise Information Layer User View LayerData Integration Layer
Process neutral / 3 NF
Freie Wahlmöglichkeit
für Ort und Art des ETL
Click to edit titleClick to edit Master text styles
Insert Picture Here
Synergien ermöglichenA
ny S
ourc
e/Ta
rget
Sys
tem
Enterprise Information Layer
Dat
a In
tegr
atio
n
User View Layer
Data Integration Layer
Process neutral / 3 NF
Any
Use
r G
roup
Operational Data Layer
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
ETL: Kosten pro Kunde
Die frühest mögliche Stelle finden
Click to edit titleClick to edit Master text styles
Insert Picture Here
Stage – Funktion
• 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ültigen Wertebereichen• Vorhandensein von Referenzdaten• Eindeutigkeit (optional)• Eliminierung von NULL-Werten
• Zusammenführung operativ getrennter Daten • Bilden neuer Informationsobjekte mit dem Ziel der einfacheren
Weiterverarbeitung (optional)• Waisen-Management (optional)• Bildung von Daten-Deltas (optional)
23
Click to edit titleClick to edit Master text styles
Insert Picture Here
Stage – Verarbeitung
• 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
24
Click to edit titleClick to edit Master text styles
Insert Picture Here
Die Schichten im DetailDie (Kern-) Data Warehouse - Schicht
Any
Sou
rce/
Targ
et S
yste
m
Enterprise Information Layer D
ata
Inte
grat
ion
User View LayerData Integration Layer
Process neutral / 3 NF
Any
Use
r G
roup
Operational Data Layer
25
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
DWH-KerndatenschichtAufgaben und Ziele
• Eindeutigkeit aller Objekte und Namen• Redundanzfreiheit aller Informationen• Langlebigkeit der Daten (Historisierung)
Granulare Informationen als Bausteine für neue Informationszusammenhänge
26
Click to edit titleClick to edit Master text styles
Insert Picture Here
DWH-Kerndatenschicht
• 3 Normalform (3 NF)• Subjekt-bezogen• In Teilbereiche (Subject Areas) gegliedert• Anwendungs- und Geschäftsprozess-neutral
• Objekte werden in mehreren Geschäftsprozesse benötigt • Daten müssen tauglich genug sein, um sie in allen Anwendungen zu
verwenden
• Datenarten• Stammdaten (historisiert)• Referenzdaten – externe / interne, allgemeine Sammlungen• Bewegungsdaten (angesammelt)
27
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
ETL-Lösung
• Backbone des DWH• Transfer-Medium über alle Schichten hinweg
• Vermittlungsfunktion• Übernimmt oft Dokumentationsaufgabe
• Bewegen großer Datenvolumina bei gleichzeitiger komplexer Transformation
• Standard-Lösung wird benötigt• Nicht zu komplex (Entwickler-Spielzeug)• Verständlich auch für Business User• Leichte Erklärbarkeit für Dritte
29
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziel / Aufgabe eines DWH-Ladeverfahrens
• 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
30
Click to edit titleClick to edit Master text styles
Insert Picture Here
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?
31
Click to edit titleClick to edit Master text styles
Insert Picture Here
Lade-Aufwand minimieren
• Ladeläufe orientieren sich an den Daten, die man braucht
Erst die Datenstrukturen sortieren, bevor man Ladeläufe
plant
• Zur Orientierung hilft das 3-Schichten-Modell:• Staging Area• DWH (3 NF)• Data Marts
32
Click to edit titleClick to edit Master text styles
Insert Picture Here
1. Integrieren
• Identifizieren von identischen oder zusammenhängenden Informationen• Synonymen-/Homonymen-Thematik
• Aggregationslevel angleichen• Identifizieren und Angleichen
• Formate, Zustände, Sichtweisen etc...
1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln
Betrag / SummeArtikel / Produkt
Artikel / Artikelgruppe
Meter / KilometerLose Stücke / Gebinde
34
Click to edit titleClick to edit Master text styles
Insert Picture Here
2. Informations-Mehrwerte
• Qualitativ gute Informationen schaffen• Datenqualitäts-Checks
• Vollständigkeit• Datentypen• Referentielle Integrität• Eindeutigkeit• Korrekte Werte
• Fachliche Regeln überprüfen
• Berechnungen / Aggregationen / Zusammenfassungen• Anreichern und Vermengen mit Referenzdaten
• Lookups• Marktdaten• Vergleichszahlen
1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln
35
Click to edit titleClick to edit Master text styles
Insert Picture Here
3. Kopieren
• 1:1-Datenbewegung• Einfachste Aufgabe
• Mengen-Operationen• Ohne zusätzliche Logik
• Überwindung von Systemgrenzen• Vorschriften zum Mapping• Schnittstellen-Konventionen
• Aspekt der Performance
1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln
36
Click to edit titleClick to edit Master text styles
Insert Picture Here
4. Sammeln
• Einlagern von Daten• Zeitliche Rahmenvorgaben• Historisierung
• Versionieren von Daten• Kategorisieren / Inventarisieren von Daten
• Dokumentieren der eingelagerten Informationen
• Referenzen aufbauen • Alterungs-Eigenschaften berücksichtigen • Dokumentieren• Mehr als nur eine Momentaufnahme
1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln
37
Click to edit titleClick to edit Master text styles
Insert Picture Here
Daten-nahe Transformation im DWHDen richtigen Platz finden
n-tier
Application Server
n-tier
Application Server
Quellsystem DWH-System
ETL?
ETL?
38
Click to edit titleClick to edit Master text styles
Insert Picture Here
Aktivitäten in einem ETL-Prozess
• Standardfunktionen Insert, Update, Delete, Merge (Insert / Update)• 1:1-Transformationen (reines Kopieren, auch mit minimalen Änderungen)• Selektionen (z.B. Where-Klauseln, Bedingungen)• Gruppierende Transformationen (Aggregationen, Sortieren, Segmentieren)• Pivotierende Transformationen (Verändern der Kardinalität von Zeilen und
Spalten)• Berechnungen (einfache oder komplexe, Funktionen oder Programme)• Formatieren von Daten• Zusammenführende und spaltende Transformationen (Join / Split)• Anreichernde Transformationen (Referenzen auslesen, Lookups,
Konstanten, Fallunterscheidungen)• Aussortieren / Trennen von Datenbereichen• Prüflogik (logisch / fachliche und physisch / technische)• Protokollierende Maßnahmen (Log Files, Statistiken)• Steuerungen (Rules-Systeme)• Kommunizieren mit anderen Systemen (Messages senden / empfangen /
quittieren)
39
Click to edit titleClick to edit Master text styles
Insert Picture Here
Generieren statt ProgrammierenVorteile einer Tool-Unterstützung
• Vermindern von Fehlern durch Handprogrammierung• Tabellen- und Spaltennamen müssen nicht mehr
mühsam geschrieben werden• Steuerung vieler Entwicklungsschritte durch Wizards• Automatische Steuerung von Ziel- und
Quellschemata• Automatische Validierung (z.B. Typverträglichkeiten)• Debugging der Laderoutinen• Laufzeitumgebung steht bereit • Wichtigster Grund: Dokumentation
40
Click to edit titleClick to edit Master text styles
Insert Picture Here
Balance zwischen den beteiligten Komponenten finden
DWH-Datenbank
DWH-ServerETL-Server
ETL-Engine
Click to edit titleClick to edit Master text styles
Insert Picture Here
Balance zwischen den beteiligten Komponenten finden
DWH-Datenbank
DWH-ServerETL-Server
ETL-Engine
Click to edit titleClick to edit Master text styles
Insert Picture Here
Balance zwischen den beteiligten Komponenten finden
DWH-Datenbank
DWH-ServerETL-Server
ETL-Engine
DokumentationSteuerungBenutzerfühung
Rechen-PowerAusnutzen von bestehenden Ressource
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Hilfsmittel in der Datenbank (Auflistung)
• Parallelisierung• Partitioning / Partition Exchange Load (PEL)• Direct Path Load• Set-Based SQL• Pipelined Table Functions• Materialized Views• Kopiertechniken
• External Tables / Loader• Transportable Tablespace• Data Pump• Database Link• Direkt FTP-Load
Click to edit titleClick to edit Master text styles
Insert Picture Here
Parallelisierung
46
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Parallelisierung und Skalierung
• Abfragen• SELECT• JOIN-Operationen• SORT-Operationen• GROUP BY
• DDL• CREATE TABLE / MV• CREATE INDEX• Online Index Rebuild
• DML• INSERT• UPDATE / DELETE• MOVE / SPLIT PARTITION
CPUSQL
seriell100%
50%
I/O
100%
50%
parallel
SQLCPU I/O
Ein SQL Statement wird vom Optimizer in kleinere Arbeitsschritte aufgeteilt und
läuft skalierbar ab.
47
Click to edit titleClick to edit Master text styles
Insert Picture Here
Monitoring der Parallelität
SQL-Job in Warteposition
Laufender SQL-Job mit Parallelität 8
Abgeschlossene SQL-Jobs
Click to edit titleClick to edit Master text styles
Insert Picture Here
Parallelisierung eines Statements
Statement in Warteposition(Queue)
Automatisches Downgrade
Potentiell höherer Bedarf
Click to edit titleClick to edit Master text styles
Insert Picture Here
Master-/ Slave-Prozesse (Parallelisierung)
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ausführungsplan einer parallelisierten Abfrage
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
52
Click to edit titleClick to edit Master text styles
Insert Picture Here
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;
• Parallelisieren von Abfragen• SELECT /*+ PARALLEL(b)n PARALLEL(a)n */ a,b,c FROM bestellung b, artikel a;
SI : DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT
RAC: DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT xINSTANCE_COUNT
53
Click to edit titleClick to edit Master text styles
Insert Picture Here
Kontrolle über Parallelisierung behalten
• Parameter PARALLEL_DEGREE_POLICY• Manual
• Verhalten wie vor 11gR2, der DBA konfiguriert alles manuell• Kein Automated DOP• Kein Statement Queuing• Keine In-Memory Parallel Execution
• Limited• Eingeschränkter Automated DOP für Abfragen auf Tabellen mit
Default Parallelisierung• Kein Statement Queuing• Keine In-Memory Parallel Execution
• Auto• Alle in Frage kommenden Statements werden parallel ausgeführt• Statement Queuing• In-Memory Parallel Execution
54
Click to edit titleClick to edit Master text styles
Insert Picture Here
Funktionsweise von Automated DOP
SQLStatement
Statement wird geparsedOptimizer ermittelt
Execution Plan
Statement wird seriell ausgeführt
Statement wird parallel ausgeführt
Optimizer bestimmt idealen DOP
Geschätzte Ausführung ist größer als Schwellwert
Tatsächlicher DOP= MIN(Default DOP, idealer DOP)Geschätzte Ausführung ist
kleiner als Schwellwert
PARALLEL_MIN_TIME_THRESHOLD
55
Click to edit titleClick to edit Master text styles
Insert Picture Here
Parameter für Parallel QueryOracle 11.2.0.1
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 = 16384 (2148 – 32768)• 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)
56
Click to edit titleClick to edit Master text styles
Insert Picture HerePartitioning / Partition Exchange Load
57
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Partitioning unterstützt viele Aufgaben
Query PerformancePartition Pruning
Ladeprozess
Hochverfügbarkeit auchwährend des Ladens und
Maintenance
Leichterer Umgang mitIndizierung
Unterstützung ILM(Information Lifecycle
Management)
Unterstützung im Backup-Prozess
Unterstützung bei der Aktualisierung
von Materialized Views(Partition Change Tracking)
Unterstützung bei der Komprimierung
Partitioning
Partitionierungs-Kriterium fachlich anwendbar oder nicht?
Partitioning Typ:- Range- List- Hash
58
Click to edit titleClick to edit Master text styles
Insert Picture Here
Partitioning – Die Grundfunktionalität
Kollektive Sicht
SELECT.... FROM....
Local Index
Global Partitioned Index
Global Index
Partition-bezogene Sicht
Manageability
Separate Compression
Read Only TS
versch. Platten
Basis für ILM
Hilfsmittel im ETL PEL Local Indexing
Availability
Backup / Recovery
Scheduled Downtime
Archiving
Performance
ADD, DROP, SPLIT,MOVE, MERGE,
TRUNCATE,COMPRESS
59
Click to edit titleClick to edit Master text styles
Insert Picture Here
Verschiedene Varianten
• Partitioning-Typen
• Range• List• Hash• Reference• Interval• System• Virtual Column
• Subpartitioning-Typen• Range - Hash• Range - List• Range - Range• List - Range• List - Hash• List - List
60
Click to edit titleClick to edit Master text styles
Insert Picture Here
Partition Exchange Loading (PEL)-- Leere Partition an Zieltabelle hinzufügenALTER TABLE Bestellung ADD PARTITION "Nov08" VALUES LESS THAN (to_date('30-Nov-2008','dd-mon-yyyy'));
-- Neue leere temporäre Tabelle erstellenCREATE TABLE Bestellung_temp AS SELECT * FROM Bestellung WHERE ROWNUM < 1;
-- 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'), to_date('23.Nov.2008', 'DD-MON-RR'), '44', 'Service', '6');Commit;
-- Erstellen Index auf temporäre TabelleCREATE 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;
2
3
4
5
1
61
Click to edit titleClick to edit Master text styles
Insert Picture Here
Monat 10
Monat 11
Monat 12
Monat 13
Faktentabelle
Zeit
Region
Financial
Production
Human Res.
Store
Supplier
Marketing
Service
Neuer Monat
P1P2P3P4
4 4
89
Z1Z2Z3Z4
Temporäre Tabelle
Parallel Direct Path INSERT(Set Based) CREATE TABLE AS SELECT(CTAS)CREATE Indizes / Statistiken anlegenEXCHANGE Tabelle
Partition Exchange Loading (PEL)
DROPPARTITION
• Unvergleichbar schnell!
62
Click to edit titleClick to edit Master text styles
Insert Picture Here
Wie wird partitioniert
• Partition Key• Eine oder mehrere Spalten in der Tabelle bestimmen den
tatsächlichen Speicherort eines Datensatzes
• Separate Tablespaces• Pro Partition einen eigenen
Tablespace
Vereinfachte WartungTablespace
SegmentExtent
Blocks
63
Click to edit titleClick to edit Master text styles
Insert Picture Here
Direct / Convential Path Load
64
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
Convential Path
SQL LoaderExternal TableInsert AppendCTAS
Benutzer
SQL Command Processing
Space Management
Get new extentsAdjust High Water Mark
Find partial blocksFill partial blocks
Buffer Cache
Buffer Cache Management- Manage queues- Manage contention
Read DatabaseBlocks
Write DatabaseBlocks
Direct Path
Database
Or
ac
le
S
er
ve
r
Click to edit titleClick to edit Master text styles
Insert Picture Here
Set Based SQL
66
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Varianten von Prüfungen
Attribut-bezogen • Not Null / Pflichtfelder• Formatangaben• Check Constraint• Wertbereiche
• Ober-/Untergrenzen / Wertelisten
Satz-bezogen (Tupel)• Abhängigkeiten von Werten in
anderen Attributen desselben Satzes
Satz-übergreifend (Relationen)• Primary Key / Eindeutigkeit• Aggregat – Bedingungen
• Ober- Untergrenzen von Summen• Anzahl Sätze pro Intervall usw.
• Rekursive Zusammenhänge• Verweise auf andere Sätze
derselben Tabelle (Relation)
Tabellen-übergreifend (interrelational)• Foreign Key• Aggregat – Bedingungen
• Ober- Untergrenzen von Summen• Anzahl Sätze pro Intervall usw.
• Rekursive Zusammenhänge• Verweise auf Sätze einer anderen
Tabelle (Relation)
Zeit-bezogen (Tupel)• Zeitinvariante Inhalte
• Anz. Bundesländer• Zeitabhängige Veränderungen • Über die Zeit mit anderen Daten
korrelierende Feldinhalte Verteilungs-bezogen• Arithmetische Mittel• Varianz / Standardabweichungen• Qualitätsmerkmale und Mengen
67
Click to edit titleClick to edit Master text styles
Insert Picture Here
Prüfkonzepte
• Einfach implementierbar• Bessere Performance• Nur bei aktivierten Constraints
Stage-Tabelle+ Geprüfte Daten
Kopieren
Statistiken
Date
Number
Varchar2()
BadFile
FehlerhafteSätze
CheckConstraints
StatistikRoutine
DMLError Log
• Fachliche Prüfungen kaum möglich• Eventuell zusätzliche Prüfungen
nötig
68
Click to edit titleClick to edit Master text styles
Insert Picture Here
Error Logging
• Constraints• Unique Key / Primary Key• Foreign Key• NOT NULL• Check Constraint
Kunde
Kunde_err
KUNDENNRVORNAME NACHNAME ORTNR STRASSE TELEFON
KUNDENNRVORNAME NACHNAME ORTNR STRASSE TELEFON ORA_ERR_NUMBER$ORA_ERR_MESG$ ORA_ERR_ROWID$ORA_ERR_OPTYP$ ORA_ERR_TAG$
INSERT INTO Kunde
VALUES (......)
LOG ERRORS INTO kunde_err('load_20040802')
69
Click to edit titleClick to edit Master text styles
Insert Picture Here
Error Logging: Beispiel
70
Click to edit titleClick to edit Master text styles
Insert Picture Here
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));
ALTER TABLE check_kunde ADD CONSTRAINT Ch_KD_Name CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]'));
Regel: Im Kundennamen müssen Buchstaben vorkommen und keine reine Zahlenkolonne
INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat, Ortnr, Strasse, Telefon) VALUES (9,1,'Klaus','123','Herr','01.01.60',2,'Haupstr.',08923456);
FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt
71
Click to edit titleClick to edit Master text styles
Insert Picture Here
Beispiele* Match 0 or more times
? Match 0 or 1 time
+ Match 1 or more times
{m} Match exactly m times
{m,} Match at least m times
{m, n} Match at least m times but no more than n times
\n Cause the previous expression to be repeated n times
[:alnum:] Alphanumeric characters
[:alpha:] Alphabetic characters
[:blank:] Blank Space Characters
[:cntrl:] Control characters (nonprinting)
[:digit:] Numeric digits
[:graph:] Any [:punct:], [:upper:], [:lower:], and [:digit:] chars
[:lower:] Lowercase alphabetic characters
[:print:] Printable characters
[:punct:] Punctuation characters
[:space:] Space characters (nonprinting), such as carriage return, newline, vertical tab, and form feed
[:upper:] Uppercase alphabetic characters
[:xdigit:] Hexidecimal characters
Modus
Zeichenklassen
72
Click to edit titleClick to edit Master text styles
Insert Picture Here
Performance
• Regular Expressions sind schnelle Operartionen in der Datenbank
• Verwendung von Regular Expressions steigert die Performance bei Prüfungen von Formaten
• Daten müssen nicht mehrfach gelesen werden
73
Click to edit titleClick to edit Master text styles
Insert Picture Here
Arbeiten ohne Constraints
• Constraints stören bei Massenaktionen im DWH
Ausschalten der Constraints
• Übernahme der Aufgaben von Constraints durch ETL-Prozess
• Mengen-basierte Vorgehensweise
spool test.sqlselect 'alter table '||table_name||' disable constraint'||constraint_name||';' from user_constraints wheretable_name=('TABELLENNAME');spool off
74
Click to edit titleClick to edit Master text styles
Insert Picture Here
Was kann mit SQL geprüft werden
• Formatprüfungen• Feldtypen• Stringformate, Ausdrücke
• NOT NULL• Eindeutigkeit• Wertebereiche
• Spaltenübergreifende Table_Checks• Inhaltliche Regeln
75
Click to edit titleClick to edit Master text styles
Insert Picture Here
Wichtiges Hilfsmittel: CASE-Anweisung
SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ‚ ELSE 'nicht numerisch'‚ END ErgebnisFROM 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;
76
Click to edit titleClick to edit Master text styles
Insert Picture HereBestellnr
Menge
Summe
Name
Ort
BestDatum
Abarbeitungslogik mit CASE
Bestellnr
Menge
Summe
Name
Ort
BestDatum
Bestellnr_isNull
Menge_isNumeric
Summe_isNumeric
Summe_isNull
BestDatum_isDate
...
OLTP_Kunden
OLTP_Kunden_tmp
INSERT INTO OLTP_Kunden_tmpSELECT 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) then 1 ELSE 0 END Summe_isNull,CASE WHEN (isDate(BestDatum) = 1) then 1 ELSE 0 END BestDatum_isDateFROM OLTP_Kunden;
Click to edit titleClick to edit Master text styles
Insert Picture Here
Hilfsfunktion: Is Number
create or replace function isNumeric(i_value_to_checkvarchar2)
return number is v_dummy number;begin v_dummy := to_number( i_value_to_check); return 1; -- it's numberexception when others then return -1; -- it's invalidend isNumeric;
78
Click to edit titleClick to edit Master text styles
Insert Picture Here
Hilfsfunktion:Date_Check
• In Verbindung mit der CASE-Anweisung
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;
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;
79
Click to edit titleClick to edit Master text styles
Insert Picture Here
Prüfung auf Eindeutigkeit
INSERT INTO el_kunde (kundennr,vorname,nachname,ortnr,strasse,telefon) SELECT src2.nummer, src2.name, FROM SRC2, (SELECT nummer FROM (SELECT count(nummer) n, nummer FROM src2 group by nummer) WHERE n = 1) doppelte
WHERE src2.nummer = doppelte.nummer;
80
SELECT F1 FROM (SELECT count(F1) n,F1 FROM s GROUP BY F1) WHERE n > 1;
Click to edit titleClick to edit Master text styles
Insert Picture Here
Inhaltliche Abhängigkeit von zwei Feldern
Die satzübergreifende Reihenfolge von den Werten einer Spalte muss mit der Reihenfolge in einer anderen Spalte übereinstimmen
81
Click to edit titleClick to edit Master text styles
Insert Picture Here
Tabellenübergreifender Summenvergleich
Bestellung
Bestellposition
Bestellnummer (PK)Gesamtsumme
Bestellnummer (FK)Positionssumme
=
82
Select * from (select bestellnumme, gesamtsumme from Bestellung) best, (select Bestellnummer , sum(Positionssumme) gesamtsumme from Bestellposition group by Bestellnummer) Poswhere best.bestellnummer = pos.bestellnummer and best.gesamtsumme = pos.gesamtsumme
Click to edit titleClick to edit Master text styles
Insert Picture Here
Native Support für Pivot und Unpivot
SALESREP Q1 Q2 Q3 Q4---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310
SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 260 100 Q4 300 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260 102 Q2 280 102 Q3 265 102 Q4 310
Sinnvoller Einsatz im Rahmendes ETL-Prozesses
83
Click to edit titleClick to edit Master text styles
Insert Picture Here
Native Support für Pivot und Unpivot
select * from quarterly_salesunpivot include nulls(revenue for quarter in (q1,q2,q3,q4))order by salesrep, quarter ;
QUARTERLY_SALES
SALESREP Q1 Q2 Q3 Q4---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310
SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 260 100 Q4 300 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260 102 Q2 280 102 Q3 265 102 Q4 310
Sinnvoller Einsatz im Rahmendes ETL-Prozesses
84
Click to edit titleClick to edit Master text styles
Insert Picture Here
Native Support für Pivot und Unpivot
SALESREP 'Q1' 'Q2' 'Q3' 'Q4'---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310
SALES_BY_QUARTER
SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 160 100 Q4 90 100 Q3 100 100 Q4 140 100 Q4 70 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260
select * from sales_by_quarterpivot (sum(revenue)for quarter in ('Q1','Q2','Q3','Q4'))order by salesrep ;
Sinnvoller Einsatz im Rahmendes ETL-Prozesses
85
Click to edit titleClick to edit Master text styles
Insert Picture Here
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*/);
86
Click to edit titleClick to edit Master text styles
Insert Picture Here
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_SUBQUERYON ( "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";
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
87
Click to edit titleClick to edit Master text styles
Insert Picture Here
Bildung künstlicher Schlüssel
Alter
Name
Kunden_NR
Anzahl Kinder
Berufsgruppe
Wohnart
Einkommensgruppe
Ort
PLZ
Verkaufsregion
Kunden_NR
Strasse
Ort
PLZ
Tel
Partnernummer
Partnernummer
Wohnart
Einkommensgruppe
Verkaufsregion
Dim_Kd_NR
...
Sequence
Anwendung 2
Anwendung 1
Data Warehouse
Neuer Schlüssel
88
Click to edit titleClick to edit Master text styles
Insert Picture Here
AA 34 dddf KD_11Satz12
DFG 64 dloidf KD_22Satz13
erf 78 ghzf KD_33Satz14
1
Log.Business Schlüssel (Alternate Unique)
Stamm Info
sdfg 4456 llkof KD_44Satz15
Stamm Info Stamm Info
2 Stamm Info Stamm Info Stamm Info
3 Stamm Info Stamm Info Stamm Info
4 Stamm Info Stamm Info Stamm Info
5 Stamm Info Stamm Info Stamm Info
KD_11
KD_22
KD_33
KD_44
KD_55
6 Stamm Info Stamm Info Stamm InfoKD_66
Künstl. Schlüssel (Primary Key)
DFG 64 dloidf1
DFG 64 dloidf2
erf 78 ghzf3
sdfg 4456 llkof4
Log.Business Schlüssel
Dimension
Fakten
Bewegungsdaten
Join Lookup
Key Lookup
89
Click to edit titleClick to edit Master text styles
Insert Picture Here
Lookup-Verfahren mit Aktualisierung (Stammdaten)
Anti – Join
Bewegungs-sätze
Referenzdaten Tmp Tablealle Sätze ohne
Referenz
Protokoll
ZielsätzeJoin
Insert mitDummy –Schlüssel
90
Click to edit titleClick to edit Master text styles
Insert Picture Here
AA 34 dddf KD_11Satz12
DFG 64 dloidf KD_22Satz13
erf 78 ghzf KD_33Satz14
Log.Business Schlüssel (Alternate Unique)
sdfg 4456 llkof KD_44Satz15
1 Stamm Info Stamm Info Stamm Info
2 Stamm Info Stamm Info Stamm Info
3 Stamm Info Stamm Info Stamm Info
4 Stamm Info Stamm Info Stamm Info
5 Stamm Info Stamm Info Stamm Info
KD_11
KD_22
KD_33
KD_44
KD_55
6 Stamm Info Stamm Info Stamm InfoKD_66
Künstl. Schlüssel (Primary Key)
DFG 64 dloidf1
DFG 64 dloidf2
erf 78 ghzf3
sdfg 4456 llkof4
Dimension
FaktenBewegungsdaten
Sequenz
Next Val 7
XX 567 ddwer KD_99Satz12
7 Dummy Dummy DummyKD_99
Anti - JoinWenn nicht in Dimension enthalten dann
INSERT INTO DimSELECT .... FROM Bew, Dim WHERE Log Key NOT IN Dim
1. Schritt
Log.Business SchlüsselXX 567 ddwer7
Join Lookup
2. Schritt
91
Click to edit titleClick to edit Master text styles
Insert Picture HereTable Functions
92
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
tf1 tf2
tf3
Stage_tabelle
Quelle Ziel
INSERT INTO Ziel SELECT * FROM (tf2(SELECT * FROM (tf1(SELECT * FROM Quelle))))
INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle))
Table Functions – Pipeline-Verfahren
93
Click to edit titleClick to edit Master text styles
Insert Picture Here
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.
94
Click to edit titleClick to edit Master text styles
Insert Picture Here
If a = b...Update...Case...
CursorFetchLoop
Funktion
Table_Function( )
INSERT INTO Table SELECT Feld1, Feld2 FROM
Mengenbasierte VerarbeitungTrotz Programmierung
• Schnelle Verarbeitung (Pipelined)
• Objekttechnik • Parallelisierung
• Mehrere Rückgabewerte und Einzelrückgaben
• Cursor als Input• Schachtelbar Return Table
pipe row(record Type)Variante 1
Variante 2
95
Click to edit titleClick to edit Master text styles
Insert Picture Here
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;
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;
DefinitionRecord-Type
DefinitionNested-Table aufder Basis des Rekord-Types
DefinitionCursor als Typdes Übergabeparameters
Die Hilfstypen für Daten und Cursor
96
Click to edit titleClick to edit Master text styles
Insert Picture Here
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;beginLOOP -- 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('9999.12.12','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ätzenals Cursor
Definieren einer Nested-Table-Strukturfür die spätere Rückgabe.
Lesen aus Cursor
Erweitern Nested-Table um einenSatz und Überführen eines Satzes indie Nested-Table
Rückgabe der kompletten Tabelle an das aufrufende Statement(Alternative zu PIPE).
Die Table Function
97
Click to edit titleClick to edit Master text styles
Insert Picture Here
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))
Beispielaufrufe
98
create view VWTF (anzahl) as select count(*) from TABLE(f_bestellung_y());
Kapseln von Table Function – Aufrufen:
Click to edit titleClick to edit Master text styles
Insert Picture Here
Materialized Views spartETL-Aufwand
99
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Prinzip und AufgabenstellungSummentabellen
Basistabelle Summentabelle
Änderungen
?
stale
Complete RefreshIncremental Refresh
100
Click to edit titleClick to edit Master text styles
Insert Picture Here
Nachteile Summentabellen
• Kein automatisches Erkennen von „Staleness“• Zusätzlicher ETL-Aufwand• Fehlende Inkrementelle Aktualisierung• Eingriff auf die Benutzeraktivitäten
• Benutzer müssen Namen der Summentabelle wissen
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
102
Click to edit titleClick to edit Master text styles
Insert Picture Here
Physische Eigenschaften von MAVsSpeicherung / Plattenplatz
• Speicherung von MAVs • Angabe einer Storageklausel möglich• Können in separatem Tablespace angelegt werden• Belegen Plattenplatz
• Nicht mehr als klassische Summentabellen
• Komprimierung vom MAVs möglich
103
Click to edit titleClick to edit Master text styles
Insert Picture Here
MAV-Erstellung und erstmaliges Füllen
• 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)
104
Click to edit titleClick to edit Master text styles
Insert Picture Here
Refresh-Funktionen
• 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
• ON COMMIT (oft bei OLTP)• Commit einer Transaktion auf der Basistabelle
• ON DEMAND (sinnvoll im DWH, default)
105
Click to edit titleClick to edit Master text styles
Insert Picture Here
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 ANDu.zeit_id = z.datum_id
GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id;
106
Click to edit titleClick to edit Master text styles
Insert Picture Here
Testen und Ablaufbedingungen einer MAVset autotrace on; -- Anzeige des Ausführungsplans
show parameter query
query_rewrite_enabled TRUE -- erlaubt das Query Rewritequery_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 mitALTER SESSION SET query_rewrite_enabled=TRUE;ALTER SESSION SET query_rewrite_enabled=FALSE;
Click to edit titleClick to edit Master text styles
Insert Picture Here
DBMS_MVIEW (Refresh-Funktion)
• Refresh-Funktionen• REFRESH• REFRESH_DEPENDENT• REFRESH_ALL_MVIEW
REFRESH_DEPENDENT
REFRESH_ALL_MVIEW
REFRESH
• Transaktionsverhalten (optional)• ATOMIC_REFRESH• REFRESH_AFTER_ERRORS• NESTED
• Refresh-Methoden (optional)• COMPLETE (C)• FAST (F)• FORCE (default) (?)• PARTITIONED (P)
• COMPLETE C) -> immer komplettes Lesen der Basis-Tabelle• FAST (F) -> Inkremtentelles Lesen, wenn möglich (View-Log oder PCT)• FORCE (default) (?) -> beide vorgenannten Varianten, abhängig von der dafür benötigten Zeit
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD‘,'C');
Click to edit titleClick to edit Master text styles
Insert Picture Here
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);
109
Click to edit titleClick to edit Master text styles
Insert Picture Here
Fast Refresh-Varianten
• WITH ROWID• SEQUENCE• INCLUDING NEW VALUES
• Join Dependency Expression• Partition Key• Partition Marker
BasistabelleMAV Log
MAV1 MAV2 MAV3
Partition 1
Partition 4
Partition 5
Partition 2
Partition 3
Partition 6
MAV1
MAV2
Basistabelle
Aktualisierung über MAV Logs Aktualisierung über Partition Change Tracking (PCT)
komplett
inkrementell
110
Click to edit titleClick to edit Master text styles
Insert Picture Here
Fast Refresh mit MAV Log
--- MAV Log auf Tabelle D_Artikel
DROP MATERIALIZED VIEW LOG ON d_artikel;CREATE MATERIALIZED VIEW LOG ON d_artikelWITH 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_zeitWITH 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_umsatzWITH 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;
111
Click to edit titleClick to edit Master text styles
Insert Picture Here
Kopiertechniken beim Laden• Trigger in Quelltabelle• SQL*Loader• Data Pump• External Tables• Transportable Tablespaces• Database Link
112
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Herausforderungen beim Extrahieren
• Unterschiedliche Schema-Namen in Quell- und Zielsystemen
• Bewahrung der Konsistenz
• Unterschiedliche GRANTs der User
• Zusätzlicher Netzwerkverkehr
• Meist ist nur das Delta der geänderten Daten gewünscht
113
Click to edit titleClick to edit Master text styles
Insert Picture Here
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 ROWWHEN (new.Bestellnr > 0)DECLARE sal_diff number;BEGIN INSERT INTO log_Bestellung (Alte_Bestell_Nr,Neue_Bstell_Nr) VALUES(old.Bestellnr,new.Bestellnr); END;/
114
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
115
Click to edit titleClick to edit Master text styles
Insert Picture Here
SQL*Loader – 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
116
Click to edit titleClick to edit Master text styles
Insert Picture Here
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 DATACHARACTERSET WE8MSWIN1252INFILE '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 )
117
Click to edit titleClick to edit Master text styles
Insert Picture Here
Aufruf des SQL*Loaders
sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log
orte.csvorte.ctl
TB_ORTEDatenControlFile
118
Click to edit titleClick to edit Master text styles
Insert Picture Here
Data Pump Architektur
Quelle: http://www.dbazine.com/blogs/blog-cf/chrisfoot/blogentry.2006-05-26.3042156388
119
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
120
Click to edit titleClick to edit Master text styles
Insert Picture Here
Vereinfachte Verfahrensdarstellung
OLTP DWH
Schema OLTP
Besondere GRANTs
Schema DWH
Delta-Load
FTP
Export mit Data Pump (expdp)
Import mit Data Pump (impdp)
121
Click to edit titleClick to edit Master text styles
Insert Picture Here
Export der Daten
• Optional Flashback zum Absichern des Entlade-Zeitpunktes nutzen
• Remote-Export möglich (per NETWORK_LINK)• Wegfall von separatem FTP-Aufruf
• Einschränkung durch Query-Bedingung• Damit Zugriff z. B. auf „Last Update-Sätze“
• Default Export Location• D:\o11\admin\o11\dpdump\EXPDAT.DMP
122
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ablauf des Exports
• Export über Parameter-Datei• Export auch mit Remote-
Zugriff• Einschränkung der
Datenmenge durch QUERY
• Bei dem Import: REMAP auf das Schema
expdp dwh/dwh@o11 parfile=Para_EX.txt
impdp dwh2/dwh2@o11 DIRECTORY=DP_OUTDUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2
123
Click to edit titleClick to edit Master text styles
Insert Picture Here
Export-Beispiele
124
Click to edit titleClick to edit Master text styles
Insert Picture Here
Import-Beispiele
125
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
126
Click to edit titleClick to edit Master text styles
Insert Picture Here
External Tables
• 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 Lesen• Alternative zum SQL*Loader
127
Click to edit titleClick to edit Master text styles
Insert Picture Here
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_loaderDEFAULT DIRECTORY ExttabACCESS 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'))
GemeindeID;Gemeinde;KundenID;KreisID01001000;Flensburg;;0;100101002000;Kiel;;0;100201003000;Luebeck;;0;100301004000;Neumuenster;;0;100401051001;Albersdorf;;0;105101051002;Arkebek;;0;105101051003;Averlak;;0;105101051004;Bargenstedt;;0;105101051005;Barkenholm;;0;105101051006;Barlt;;0;105101051008;Bergewoehrden;;0;105101051010;Brickeln;;0;105101051011;Brunsbuettel;;0;1051
...........................
...........................
External Tables – Beispiel 1
128
Click to edit titleClick to edit Master text styles
Insert Picture Here
Modifikationsmöglichkeiten
alter table ex_orte location ('ORTE_Y.CSV');
alter table ex_orte default directory LC_Texte_2;
create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten';
129
Click to edit titleClick to edit Master text styles
Insert Picture Here
„Beschickungskonzept“
• Änderungsprozedur zum• Kopieren der Dateien• Umbenennen von
Dateinamen
• Änderungsprozedur zum• Ändern der Einträge in
derExternal Table
• Ändern des Pfades im Directory-Objekt
ABC120109ABC130109
ABC140109ABC150109
Sich täglich ändernde Dateinamen
Datum im Dateinamen
Lieferantenname im Dateinamen
130
Click to edit titleClick to edit Master text styles
Insert Picture Here
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;
Release 2
131
Click to edit titleClick to edit Master text styles
Insert Picture Here
External Tables mit Data Pump
• Erstellen External Table in Quell-DB• Verwendung von CREATE AS SELECT * FROM <source_table>
• Das Ausführen des CREATE startet den Data Pump-Export
• Kopieren der Dump-Datei auf die Zielumgebung
• In der Zielumgebung neue External Table-Definition erstellen und aktivieren
• Durch Zugriff mit SELECT auf die External Table die Daten lesen
132
Click to edit titleClick to edit Master text styles
Insert Picture Here
External Tables mit Data Pump
OLTP DWH
FTP
EX_T EX_T
133
Click to edit titleClick to edit Master text styles
Insert Picture Here
External Tables mit Data Pump
OLTP DWH
select * from EX_Bestellung_2
134
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
135
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
136
Click to edit titleClick to edit Master text styles
Insert Picture Here
Vorgehensweise
1. Anlegen des Tablespaces im Quellsystem
2. Zuweisung der zu kopierenden Daten zum 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
137
Click to edit titleClick to edit Master text styles
Insert Picture Here
Transportable Tablespaces
P1P2P3P4
4 4
89
Z1Z2Z3Z4
CREATE TABLE temp_jan_umsatzNOLOGGINGTABLESPACE ts_temp_umsatzASSELECT * FROM ?????????WHERE time_id BETWEEN '31-DEC-1999' AND '01-FEB-2000';
Index/Constraint freeParallel Direct Path InsertSet Based
1
2
3
4
ALTER TABLESPACE ts_temp_umsatz READ ONLY;
EXP TRANSPORT_TABLESPACE=yTABLESPACES=ts_temp_umsatzFILE=jan_umsatz.dmp
Kopieren des Tablespace zur Zielplattform
BS-CopyDaten
Metadaten
Buchhaltung
Produktion
Personal
Lager
Lieferanten
Marketing
Service
138
Click to edit titleClick to edit Master text styles
Insert Picture Here
Transportable Tablespaces
IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f'TABLESPACES=ts_temp_umsatzFILE=jan_umsatz.dmp
5
6
7
ALTER TABLESPACE ts_temp_umsatz READ WRITE;
ALTER TABLE umsatz ADD PARTITION umsatz_00jan VALUESLESS THAN (TO_DATE('01-feb-2000','dd-mon-yyyy'));ALTER TABLE umsatz EXCHANGE PARTITION umsatz_00janWITH TABLE temp_umsatz_janINCLUDING INDEXES WITH VALIDATION;
Metadaten
091999
101999
111999
121999
Fakttable Umsatz
Neuer Monat012000
139
Click to edit titleClick to edit Master text styles
Insert Picture Here
Database Links – SQL über DB-Grenzen hinweg
Kunde
Data WarehouseOLTP
Kunde
Insert into tgt select * from kunde@DBL_OLTP
tgt
CREATE DATABASE LINK “DBL_OLTP" CONNECT TO “CRM" IDENTIFIED BY “CRM" USING 'ORCL_OLTP0' ;
SID: ORCL_OLTPSchema: CRM
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Aspekte, die zu beachten sind
• Indizierung• Constraints• Komprimierung• Statistiken• Logging• Steuern von logischen Transaktionen• Aktualisierung Materialized Views• Laufzeit-Statistiken
142
Click to edit titleClick to edit Master text styles
Insert Picture Here
Typischer Ablauf eines LadelaufsGroßes Ladevolumen
• Initialisieren Monitoring-Funktionen (wenn vorhanden)• Constraints abschalten• Indizes löschen• Laden über “Direct Path”
• Constraint-Prüfung mit SQL-Mitteln
• Eventuell Löschen alter Daten• Oder Archivieren
• Aktivieren der Constraints• (Sofern überhaupt gebraucht)
• Neu-Aufbau von Indizes• Statistiken aktualisieren
• DBMS_STAT
• Materialized Views aktualisieren• Laufzeit-/ Ressourcen – Statisitiken aktualisieren
143
Click to edit titleClick to edit Master text styles
Insert Picture Here
Lade-Aktivitäten an Schichtübergängen
Integration Enterprise User ViewFlüchtige Daten Persistent Kopien / teilpersistent
dynamisch
KopierenSelektieren
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)
MengenbasiertesPrüfen ohne Constraints
UmschlüsselungLookups -> Referenz-/StammdatenJoinsAufbauen von Distinct-Strukturen(Normalisieren)
UmschlüsselungLookups -> DimensionsdatenJoins - Denormalisieren
Normalisieren(Granularisieren)
144
DenormalisierenHistorisieren
z.T. Aggregieren
Clearing-Verfahren,technisches, logisches,semantisches Prüfen
Click to edit titleClick to edit Master text styles
Insert Picture Here
ETL-Aktivitäten sind kontrollierte Vorgänge
• Objektbezogenes Vorgehen• Objektbezogenes Steuern der Parallelisierung• Gezieltes Ein-/ Ausschalten der Constraints• Gezieltes Ein-/Ausschalten Logging • Gezieltes Aktualisieren der Statistiken einzelner Objekte• Gezieltes Aktualisieren von Materialized Views
Enterprise Information Layer User View LayerData Integration Layer
Process neutral / 3 NF
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
Pauschale Schema-bezogeneRoutinen vermeiden. Diese sind in OLTP-Systemen sinnvoll abernicht im DWH.
Click to edit titleClick to edit Master text styles
Insert Picture Here
Umgang mit Constraints im DWH
• Constraints werden im DWH seltener gebraucht(Gegensatz zu OLTP)• Es finden keine Benutzer-initiierten Inserts / Updates statt• Potentielle Änderungen sind alle bekannt und können gezielt
behandelt werden• Mengenbasierte Prüfungen schneller als Contraint-Prüfungen• Sinnvolle Contraints sind:
• PK-Contraints / Index auf Stamm- / Referenztabellen• PK-Contraints / Index auf Dimensionstabellen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Notwendige Prüfungen
• Dimensionen des Star Schemas• Parent-Child – Kardinalität zwischen Hierachie-Leveln• Eindeutigkeit (PK) der Einträge auf dem untersten Level
• Faktentabellen• Sind alle Faktensätze über Joins mit den Dimensionen erreichbar?• Sind alle FK-Felder mit Werten gefüllt
Click to edit titleClick to edit Master text styles
Insert Picture Here
Umgang mit Tabellen beim Laden
TargetTable
Keine Constraints aktivKeine Trigger aktivKeine Indizes(Nologging)
Mengenbasiertes Prüfen von* Eindeutigkeit* NOT NULL* Feldtypen* FK / PK – Relationen*Sonstige Checks
Flashback Recovery aktiv
148
Click to edit titleClick to edit Master text styles
Insert Picture Here
Einsatz von Compression
149
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Fallstricke und Empfehlungen
• Mindestens Standard-Kompression sollte im DWH eingesetzt werden
• Tabellen mit Standard-Kompression dekomprimieren sich bei vielen vielen INSERTS / UPDATES
• Regelmäßiges Rekomprimieren• Partitionen von partitionierten Tabellen
unterschiedlich behandeln
Click to edit titleClick to edit Master text styles
Insert Picture Here
Das Datenwachstum beherrschen Komprimieren: Verwaltung und Kosten reduzieren
Kompressions Typ: Einsatz für: Faktor
Basic Compression Read only Tabellen und Partitionen in Data Warehouse Umgebungen oder “inaktive” Daten-Partitionen in OLTP Umgebungen.
2-4
OLTP Compression Aktive Tabellen und Partitionen in OLTP und Data Warehouse Umgebungen.
2-4
SecureFiles Compression
Non-relational Daten in OLTP und Data Warehouse Umgebungen.
2-4
Index Compression Indizes auf Tabellen in OLTP und Data Warehouse Umgebungen.
2
Backup Compression Alle Umgebungen. 2
Hybrid Columnar Compression – Data Warehousing
Read only Tabellen und Partitionen in Data Warehouse Umgebungen.
8-12
Hybrid Columnar Compression – Archival
“Inaktive” Daten Partitionen in OLTP und Data Warehousing Umgebungen.
10-40
151
Click to edit titleClick to edit Master text styles
Insert Picture Here
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:
• Im Enterprise Manager:
CREATE TABLE sales_history(…) COMPRESS FOR BASIC | OLTP
152
Click to edit titleClick to edit Master text styles
Insert Picture HereDer Query Optimizerund Statistiken
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
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');
154
Click to edit titleClick to edit Master text styles
Insert Picture Here
Sammeln von Statistiken
• Tabellen -> GATHER_TABLE_STATS
• Indexe -> GATHER_INDEX_STATS• Schema -> GATHER_SCHEMA_STATS
• Automatisiertes Sammeln für ein Schema
• Automatisiertes Sampling• Parameter DBMS_STATS.AUTO_SAMPLE_SIZE
Begin dbms_stats.gather_schema_stats( ownname => 'PERF' ,options => 'GATHER AUTO' ,estimate_percent => 5 ,block_sample => TRUE);end;
EXEC DBMS_STATS.GATHER_TABLE_STATS ('PART','BESTELLUNG_PART_RANGE',estimate_percent=>100);
EXEC dbms_stats.gather_schema_stats(ownname => 'PERF',estimate_percent => 5,block_sample => TRUE)
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('OE',DBMS_STATS.AUTO_SAMPLE_SIZE);
Click to edit titleClick to edit Master text styles
Insert Picture Here
Inkrementelles Statistiksammeln (11g)
• 11g: Incremental Global Statistics• Synapsis Struktur in SYSAUX Tablespace• Sehr schnelles Erzeugen der globalen Statistiken ohne die
komplette Tabelle zu lesen • Inkrementelles Aktualisieren einschalten
• Initiales einmaliges Sammeln
• Inkrementelles Sammeln geschieht automatisch über• EXEC DBMS_STATS.GATHER_TABLE_STATS(‚DWH1','UMSATZ');
DBMS_STATS.SET_TABLE_PREFS(<OWNER>, <TABLE_NAME>, 'INCREMENTAL', TRUE);
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>, DEGREE=><DESIRED_DEGREE>);
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>, Partname=><SUBPARTITION_NAME>, GRANULARITY=>'SUBPARTITION', DEGREE=><DESIRED_DEGREE>);
Oracle Database Performance Tuning Guide 11g Release 2 / Chapter 13 - Managing Optimizer Statistics http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats.htm
156
Click to edit titleClick to edit Master text styles
Insert Picture Here
Anwendung im DWH bei partitionierten Tabellen
• Globale Statistiken regelmäßig sammeln• Z. B. einmal im Monat
• Einschalten des ‚Incremental‘- Modus für die entsprechende Tabelle:
• EXEC DBMS_STATS.SET_TABLE_PREFS(‚DWH',‘UMSATZ,'INCREMENTAL','TRUE');
• Nach jedem Laden einer neuen Partition, die Statistiken aktualisieren:
• EXEC DBMS_STATS.GATHER_TABLE_STATS('DWH','UMSATZ');
Partition Tag 1
Partition Tag 2
Partition Tag 3
Partition Tag 4
Partition Tag 5
Partition Tag 7
Partition Tag 8
Partition Tag 9
Partition Tag 10
Partition Tag n
Globale tatistiken
Neu hinzugefügte Partiton verfälscht Statistiken
ETL
157
Click to edit titleClick to edit Master text styles
Insert Picture Here
Schlüssel im DWH und Indizierung
158
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
159
Click to edit titleClick to edit Master text styles
Insert Picture Here
Umschlüsselung
Alter
Name
Kunden_NR
Anzahl Kinder
Berufsgruppe
Wohnart
Einkommensgruppe
Ort
PLZ
Verkaufsregion
Kunden_NR
Strasse
Ort
PLZ
Tel
Partnernummer
Partnernummer
Wohnart
Einkommensgruppe
Verkaufsregion
Dim_Kd_NR
...
Sequence
Anwendung 2
Anwendung 1
Data Warehouse
Neuer Schlüssel
160
Click to edit titleClick to edit Master text styles
Insert Picture Here
Regeln für künstliche SchlüsselIn 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
161
Click to edit titleClick to edit Master text styles
Insert Picture Here
B*Tree Index – 4 Zugriffe bis zum Wert
Zugriff über die RowID
1
2
3
4
162
Clustering Factor
Click to edit titleClick to edit Master text styles
Insert Picture Here
Bitmap – Zugriff auf Werte per Bit StreamRowid 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
AAAHfVAAJAAAKOKAAB
AAAHfVAAJAAAKOKAAC
AAAHfVAAJAAAKOKAAD
AAAHfVAAJAAAKOKAAE
AAAHfVAAJAAAKOKAAF
AAAHfVAAJAAAKOKAAG
AAAHfVAAJAAAKOKAAH
Abschluss=Klasse_10
Abschluss=Abitur
Abschluss=Diplom
Abschluss=Doktor
1
0
0
0
0
1
0
0
0
1
1
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
SELECT NameFROM KD_TableWHERE Abschluss=‘Diplom‘;
163
Click to edit titleClick to edit Master text styles
Insert Picture Here
Physische Strukturen im Star SchemaData Mart-Schicht
Reg Zeit
Org.Linie
Prod
Primary Key Constraint
PK ConstraintPK Constraint
PK Constraint
Foreign Key (NOT NULL)
Komprimiert
Partitioniert
Lokale Indizes
Security
Verschlüsselung
Dimensionsobjekt Dimensionsobjekt
Dimensionsobjekt
Bitmap-Index
Dimensionsobjekt
164
Click to edit titleClick to edit Master text styles
Insert Picture Here
Indizierung im Star
165
D_ZEIT
DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRESMONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID
D_REGIONREGION_ID ORTNRORTKREISNRKREIS LANDNRLANDREGIONNR REGION
D_ARTIKEL
ARTIKEL_NAMEGRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID
D_VERTRIEBSKANAL
KANAL_ID VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE
F_UMSATZ
ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT
PK
PK
PK
PK
PK
FKFK
FKFKFK
PK: Btree IndexFK: Bitmap Index
D_KUNDEKUNDEN_IDKUNDENNR GESCHLECHTVORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENARTBILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSONFIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMERPLZ ORT KUNDENKARTEZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR
Click to edit titleClick to edit Master text styles
Insert Picture Here
166
D_ZEIT
DATUM_ID TAG_DES_MONATS TAG_DES_JAHRES WOCHE_DES_JAHRESMONATS_NUMMER MONAT_DESC QUARTALS_NUMMER JAHR_NUMMER ZEIT_ID
D_REGIONREGION_ID ORTNRORTKREISNRKREIS LANDNRLANDREGIONNR REGION
D_ARTIKEL
ARTIKEL_NAMEGRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID
D_VERTRIEBSKANAL
KANAL_ID VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE
F_UMSATZ
ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT
PK
PK
PK
PK
PK
FKFK
FKFKFK
PK: Btree IndexFK: Bitmap Index
D_KUNDEKUNDEN_IDKUNDENNR GESCHLECHTVORNAME NACHNAME TITEL ANREDE GEBDAT BRANCHE WOHNART KUNDENARTBILDUNG ANZ_KINDER EINKOMMENSGRUPPE ORTNR NUMBER, BERUFSGRUPPE STATUS STRASSE TELEFON TELEFAX KONTAKTPERSONFIRMENRABATT BERUFSGRUPPEN_NR BILDUNGS_NR EINKOMMENS_NR WOHNART_NR HAUSNUMMERPLZ ORT KUNDENKARTEZAHLUNGSZIEL_TAGE TOTAL TOTAL_NR
Indizierung im Star
Click to edit titleClick to edit Master text styles
Insert Picture Here
Wo und wie wird im DWH indiziert
Enterprise Information Layer User View LayerData Integration Layer
Process neutral / 3 NF
Keine Indexe B*tree für Eindeutigkeit und als Primary Key
Bitmaps
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
Bitmaps
B*tree für Primary KeysIn den DimensionenTabellen
Click to edit titleClick to edit Master text styles
Insert Picture HereTransaktionssteuerung• Logische / technische Transaktion• Flashback
168
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
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?
169
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
• Einsatz von Data Guard
170
Click to edit titleClick to edit Master text styles
Insert Picture Here
Flashback Database Vorbereitungen
• Archive Log Mode• Prüfen, ob Flashback und Archive Log Mode der Datenbank aktiviert
sindSELECT flashback_on, log_mode FROM gv$database;
• Abfragen der Zeitdauer, mit der Objekte aufgehoben werdenSELECT name, value FROM gv$parameter WHERE name LIKE '%flashback%';
• Verändern der Aufbewahrungszeit(Anzahl der Minuten 60 * 24 = 1440 = 1 Tag)ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880;
FLASHBACK_ON LOG_MODE------------------ ------------YES ARCHIVELOG
db_flashback_retention_target 2880
171
Click to edit titleClick to edit Master text styles
Insert Picture Here
Flashback Logs
SQL> desc gv$flashback_database_log; Name Null? Typ ----------------------------------------- -------- --------------------------- INST_ID NUMBER OLDEST_FLASHBACK_SCN NUMBER OLDEST_FLASHBACK_TIME DATE RETENTION_TARGET NUMBER FLASHBACK_SIZE NUMBER ESTIMATED_FLASHBACK_SIZE NUMBER
SQL> SELECT * from gv$flashback_database_log;
INST_ID OLDEST_FLASHBACK_SCN OLDEST_F RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE---------- -------------------- -------- ---------------- -------------- --------------------- 1 16527241 27.12.08 2880 72892416 217939968
172
Click to edit titleClick to edit Master text styles
Insert Picture Here
Abfragen auf die Änderungssituation
SQL> select ora_rowscn from X;
ORA_ROWSCN---------- 1653136616531970165313661653144416532989165329891653298916532989165329891653298916532989165329891653298916532989
SQL> SELECT oldest_flashback_scn, 2 oldest_flashback_time 3 FROM gv$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_F-------------------- -------- 16527241 27.12.08
SQL> SELECT current_scn 2 FROM gv$database;
CURRENT_SCN----------- 16554677
SQL> SELECT * from gv$flashback_database_log;
INST_ID OLDEST_FLASHBACK_SCN OLDEST_F RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE---------- -------------------- -------- ---------------- -------------- ----------------------- 1 16527241 27.12.08 2880 72892416 217939968
173
Click to edit titleClick to edit Master text styles
Insert Picture Here
Beispiel Flashback Table
Abfrage u. Flashback der letzten Änderungs-SCNSELECT ora_rowscn FROM x;SELECT * FROM x AS OF SCN 12555060;SELECT * FROM x AS OF TIMESTAMP to_timestamp('2012-02-15 10:15:00',
'YYYY-MM-DD HH:MI:SS');
ZurücksetzenFlashback table x to scn 16552768;
CREATE TABLE x (Nummer number);
ALTER TABLE x ENABLE ROW MOVEMENT;
INSERT INTO X VALUES (1);
COMMIT; Jetzt erst wird eine SCN erzeugt
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (1);
174
Click to edit titleClick to edit Master text styles
Insert Picture Here
Flashback Database
• Komplette Datenbank zurücksetzen
• Einzelne Tabellen• Ist im DWH-Load-Prozess sinvoller
• Zurücksetzen • Über Zeitstempel• Über SCN
Sys-Schema DWH-Schemastartup mount exclusive;
FLASHBACK TABLE dwh.X TO SCN 16552768; FLASHBACK TABLE X TO SCN 16552768;
175
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ziele Oracle DWH Architektur zur Einordnung Anforderungen an den ETL Prozess Hilfsmittel in der Datenbank (Übersicht) Vorgehensweise im ETL-Prozess Hardware und Umgebungsarchitektur
Themen
Click to edit titleClick to edit Master text styles
Insert Picture Here
Hardware-Faktoren
177
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Nähe von Datenbank und ETL-Server
DB Server ETL Server
10 GbLeitung
DB Server ETL Server
1 GbLeitung
Click to edit titleClick to edit Master text styles
Insert Picture Here
Balanced Konfigurationen
• Anzahl CPU‘s
• Größe des Hauptspeichers
• Anzahl Platten
• Anzahl Disk Controller
179
• ~200 MB Datendurchsatz pro CPU• Anzahl CPU = Max. Durchsatz in MB/s / 200
• 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
• Größe des Speichers in GB = 2 * Anz. CPUs
Anzahl Disk Controller = Max. Durchsatz in MB/s
Controllerdurchsatz in MB
Controllerdurchsatz in MB =70% * Herstellerangaben in Gbit/s
8
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
180
Click to edit titleClick to edit Master text styles
Insert Picture Here
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• www.oracle.com/technology/software/tech/orion/index.html
181
Click to edit titleClick to edit Master text styles
Insert Picture Here
Einfache Schätzmethode zur Lesegeschwindigkeit
SELECT table_name, num_rows, blocks, blocks*8 KB,blocks*8/1000 MB,blocks*8/1000000 GB FROM user_tables;
select tablespace_name, block_size from dba_tablespaces;
TABLESPACE_NAME BLOCK_SIZE------------------------------ ----------MON_G 8192MON 8192MON_D 8192MON_E 8192MON_F 8192
TABLE_NAME NUM_ROWS BLOCKS KB MB GB------------------------------ ---------- ---------- ---------- ---------- ----------BESTELLUNG_PART_RANGE 163840000 962355 7698840 7698,84 7,69884BESTELLUNG_PART_RANGE_4 163840000 962355 7698840 7698,84 7,69884
select count(*) from bestellung_part_Range_4; -- liest komplette Tabelle
COUNT(*)---------- 163840000 Abgelaufen: 00:00:31.32
Ergibt ~0,25 GB pro Sekunde Lesegeschwindigkeit(Achtung Blöcke eventuell nicht voll, daher geringer )
select 7.7/31 from dual;SQL> 7.7/31 ----------,248387097
Blockgröße feststellen
Anzahl Blöcke/Anzahl Bytes
Messen der Lese-geschwindigkeit
Berechnung desDurchsatzes
182
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
183
Click to edit titleClick to edit Master text styles
Insert Picture Here
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 DiskASM Disk
ASM DiskASM Disk
ASM Disk
184
Click to edit titleClick to edit Master text styles
Insert Picture Here
ASM Architektur
185
Click to edit titleClick to edit Master text styles
Insert Picture Here
Der physische Aufbau einer RAC-Umgebung
Options: RAC
Speichernetzwerk
CPU
CPU CPU
CPU CPU
CPU CPU
CPU
Knoten 1 Knoten 2
Privates Netzwerk(Interconnect)
Öffentliches Netzwerk
Instanz 1 Instanz 2
Daten
186
Click to edit titleClick to edit Master text styles
Insert Picture Here
Ausfallsicherheit durch den Cluster
16-port switch
16-port switch
1 Gigabit ethernet
16 Storage arrays, each with
10-20 disks
4 nodes, each with 4 x 2 Ghz CPUs 5 PCI slots
187
Click to edit titleClick to edit Master text styles
Insert Picture Here
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
188
Click to edit titleClick to edit Master text styles
Insert Picture Here
Allgemeine AufbauempfehlungenRAC 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
189
Click to edit titleClick to edit Master text styles
Insert Picture HerePerformance und Systemzustand überwachen(Hilfsmittel)
190
Oracle Data Warehouse
Click to edit titleClick to edit Master text styles
Insert Picture Here
Automatic Database Diagnostic Monitor(ADDM) und AWR
sysaux
User 1
User 2
AWRstündlich
ADDM Findings1……nn%2……nn%3……nn%…….
Statistics_level TYPICAL -> ONBASIC -> OFF
8 Tage lang
Recommendations- Hardware- Init-Parameter- Space Konfig.- Performance Advisor
Action
1
2
3
OEMAddmrpt.sql
Rationale
4
DBMS_ADVISOR Package
MMON-Process
use
SQL Tuning Advisor
Undo Advisor Segement Advisor
AWR-Report
191
Click to edit titleClick to edit Master text styles
Insert Picture Here
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• Awrrpt.sql• OEM
192
Click to edit titleClick to edit Master text styles
Insert Picture Here
Trace einer Session
*** 2011-09-05 08:08:53.468=====================PARSING IN CURSOR #1 len=62 dep=0 uid=0 oct=47 lid=0 tim=33718840968 hv=3081195784 ad='34ab52dc' sqlid='2bqy8r6vufn88'BEGIN dbms_monitor.session_trace_enable(135,181,false); END;END OF STMTEXEC #1:c=0,e=1082,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,plh=0,tim=33718840965 *** 2011-09-05 08:09:02.890CLOSE #1:c=0,e=45,dep=0,type=0,tim=33728275300=====================PARSING IN CURSOR #3 len=41 dep=0 uid=0 oct=3 lid=0 tim=33728275601 hv=1078826809 ad='34ab4260' sqlid='2b69gpx04v5tt'select count(*) from dwh.wh_transaktionenEND OF STMTPARSE #3:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275598EXEC #3:c=0,e=43,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275918FETCH #3:c=0,e=792,p=0,cr=49,cu=0,mis=0,r=1,dep=0,og=1,plh=3695442063,tim=33728276801STAT #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=3695442063,tim=33728277502 *** 2011-09-05 08:09:15.453CLOSE #3:c=0,e=28,dep=0,type=0,tim=33740829401=====================PARSING IN CURSOR #2 len=57 dep=0 uid=0 oct=47 lid=0 tim=33740830066 hv=208267310 ad='34bc4a1c' sqlid='faaagm066mu1f'BEGIN dbms_monitor.session_trace_disable(135,181); END;END OF STMT
Identifizierung einer zu prüfenden Session select sid,serial#,terminal,program,module from v$session;
135 177 ASCHLAUC sqlplus.exe sqlplus.exe Aktivieren des SQL-Traceexecute dbms_monitor.session_trace_enable(135,177,true);-- TRUE / FALS mit bzw. Ohne waits und zusätzliche Analysen Deaktivierenexecute dbms_monitor.session_trace_disable(135,181);
193
Click to edit titleClick to edit Master text styles
Insert Picture Here
Auswertung Trace-Dateien
• TKPROF• tkprof orcl_ora_4488.trc c:\abc.txt explain=sys/sys sort=fchqry
• Trace Analyzer (TRCA)• Download über Doc 224270.1
194