Informatikfragen

Werbung
Data-Tier
Aufgaben und Dienste
 Arno Schmidhauser
Letzte Revision: Juli 2006
Email: [email protected]
Webseite: http://www.sws.bfh.ch/db
I
Übersicht
Aufgaben und Dienste
•
Datenbereitstellung
– OLTP und OLAP Abfragen
– Replikation, Warehouse-Befüllung
Data Tier
Lokalitätstransparenz
– Verteilte Daten
Data
WatehouseSrvices
•
Business Tier
Concurrency Control
– Locking
– Versioning
– Timestamping
Data
WarehouseClients
•
Web Tier
Transaktionssicherheit
– ACID-Transaktionen
OLTP und OLAPBedürfnisse
•
Client Tier
Dieses Skript erläutert Aufgaben und Dienste des Data-Tier, die
unmittelbar für die Anwendungsentwicklung in Multi-Tier-Applikationen
wichtig sind:
II
Transaktionsmodell
Was ist eine Transaktion
• Aus logischer Sicht ist eine Transaktion ein Arbeitspaket,
das einen geschäftlichen Nutzen erzeugt.
– So klein wie möglich.
– so gross wie nötig, um alle Integritätsbedingungen
einhalten zu können.
• Aus technischer Sicht ist eine Transaktion eine Folge von
Lese- und Änderungsoperationen in der Datenbank, mit
einem definierten Beginn und einem definierten Abschluss.
• Die Transaktionsverwaltung ist eine der Kernaufgaben eines
Datenbanksystems.
ACID-Regel
• Das Datenbanksystem garantiert für eine Transaktion
folgende Eigenschaften:
A
Atomarität
C
Konsistenz
I
Isolation
D
Dauerhaftigkeit
Diese Eigenschaften werden als ACID Regel bezeichnet.
Arbeiten mit Transaktionen
• Jeder lesende oder schreibende Zugriff auf die Datenbank kann
nur innerhalb einer Transaktion stattfinden.
• Eine Transaktion beginnt explizit mit einem "begin transaction"
Befehl oder implizit mit dem ersten SQL-Befehl.
• Eine Transaktion wird nur mit dem "commit"-Befehl korrekt
abgeschlossen. Andernfalls gilt sie noch nicht als korrekt
beendet.
• Eine Transaktion kann explizit mit "rollback" oder implizit durch
ein äusseres Ereignis abgebrochen werden.
Das Recovery-System
• Zweck
• Logfile
• Fehlerbehebung
Zweck des Recovery-Systems

Das Recovery-System eines DBMS enthält alle Hilfsmittel zum
Wiederherstellen eines korrekten Datenbank-zustandes nach
 Transaktionsfehlern (Rollback)
 Systemfehlern (Crash des Serverprozesses)

Das Recovery-System garantiert die Atomarität und Dauerhaftigkeit
einer Transaktion (ACID Regel).
•
Das Recovery-Systems basiert auf dem Führen eines Logfiles, in
welchem Änderungen protokolliert werden.
•
Abschätzen und Überwachen der Grösse und Festlegen des
Speicherortes für das Logfile sind zwei wichtige Aufgaben der
Datenbank-Administration
Fehlerarten
• Transaktionsfehler
– Rollback-Befehl durch Applikation
– Verletzung von Integritätsbedingungen
– Verletzung von Zugriffsrechten
– Deadlock
– Verbindungsunterbruch oder Client-Crash
• Systemfehler
– Stromausfall, Hardware- oder Memory-Fehler
Ablauf von Modifikationsbefehlen
SQL-Befehl eines Clients
2. Neue Datenwerte
1.
Alte und neue
Datenwerte
Workspace
Checkpoint (Gelegentlich)
Logfile
DB-Storage
Logging, Beispiel
T1
M22
M21
T2
M42
M41
T4
M32
M31
T3
M42
RBK T3
M32
CMT T2
M22
E_CKPT (T2,T3,T4)
B_CKPT (T2,T3,T4)
M41
BOT T4
M31
BOT T3
M21
BOT T2
CMT T1
M11
BOT T1
Logfile
M11
Zeit
Systemfehler
Checkpoint
Behebung von Transaktionsfehlern
• Bei einem Transaktionsfehler (Rollback) werden aus den
rückwärts verketteten Transaktionseinträgen im Logfile die
alten Daten (Before Images) in den Cache übertragen.
• Das Datenbanksystem führt hierzu für jede laufende
Transaktion einen Verweis auf den letzten Log- Eintrag
mit. Der Transaktionsabbruch wird im Logfile ebenfalls
protokolliert.
• Beispiel: Für Transaktion T3 müssen die Before-Images
von M31 und M32 zurückgeladen werden.
Behebung von Systemfehlern
• Gewinner- und Verlierer-Transaktionen ermitteln
• Verlierer-Transaktionen mit Hilfe der Before-Images
zurücksetzen
• Gewinner-Transaktionen mit Hilfe der After-Images noch
einmal durchführen
• Checkpoint durchführen
• Beispiel
– Gewinner: T2 -> M22 nachspielen.
– Verlierer: T3 und T4 -> M31, M41 zurücksetzen.
Concurreny Control
• Zweck
• Serialisierbarkeit
• Neue Methoden
Ziel des Concurrency Control
•
Einerseits: Isolation (I-Bedingung der ACID Regel)
– Änderungen am Datenbestand dürfen erst bei
Transaktionsabschluss für andere sichtbar sein.
– Die parallele Ausführung von Transaktionen muss bezüglich
Datenzustand und bezüglich Resultatausgabe identisch mit
der seriellen Ausführung von Transaktionen sein.
•
Andererseits: Parallelität
– Eine Datenbank muss mehrere Benutzer(-prozesse)
gleichzeitig bedienen können und es sollen möglichst wenig
Wartesituationen entstehen.
•
Auch für Middleware (Appserver) gilt: Der gemeinsame
Referenzpunkt für Datenobjekte ist der Data-Tier.
Serialisierbarkeit, Beispiel
Die folgenden zwei Transaktionen müssen so gesteuert werden,
dass der Schritt 1.3 nicht zwischen 2.1 und 2.2 zu liegen kommen.
Transaktion 1
Transaktion 2
1.1
select * from Kunde
where name = "Muster"
2.1 select * from Kunde
where where name = "Muster"
1.2
delete from Kunde
where kunr = :kunr
2.2 select * from Bestellung
where kunr = :kunr
commit
1.3
delete from Bestellung
where kunr = :kunr
commit
Serialisierbarkeit ff
Unter der Annahme, dass die Datenbank keine Synchronisationsmittel einsetzt und jedes SQL-Statement ein
atomarer Schritt ist, sind verschiedene zeitliche Abläufe
der beiden Transaktionen denkbar:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
1.1
1.1
1.1
1.1
1.1
1.1
2.1
2.1
2.1
2.1










2.1
2.1
2.1
1.2
1.2
1.2
1.1
1.1
1.1
2.2










1.2
1.2
2.2
2.1
2.1
1.3
1.2
2.2
1.2
1.1










2.2
1.3
1.2
1.3
2.2
2.1
2.2
1.2
1.3
1.2










1.3
2.2
1.3
2.2
1.3
2.2
1.3
1.3
2.2
1.3
(k)
(f)
(k)
(f)
(f)
(s)
(k)
(k)
(f)
(s)
Locking
• Locking ist die häufigste Technik zur Gewährleistung der
Serialisierbarkeit.
– Für das Lesen eines Datensatzes wird ein S-Lock gesetzt
– Für das Ändern, Löschen, Einfügen wird ein X-Lock gesetzt.
– Für das Einfügen wird zusätzlich ein S-Lock auf der Tabelle
gesetzt.
• Die gesetzten Locks sind gemäss einer Verträglichkeitstabelle
untereinander kompatibel oder nicht:
S
X
S
+
-
X
-
-
Angeforderte Sperre
Angeforderte Sperre wird
gewährt (+) oder nicht gewährt (-)
Bestehende Sperre
Deadlocks
• Beim Sperren von Daten können Deadlocks auftreten. Der
Deadlock ist nicht ein logischer Fehler, sondern bedeutet:
– Es gibt keinen Weg mehr, die anstehenden Transaktionen so
zu steuern, dass ein serialisierbarer Ablauf entstehen wird.
– Eine der beteiligten Transaktionen wird daher zurückgesetzt,
so dass für die übrigen wieder die Chance besteht, gemäss
Serialisierbarkeitsprinzip abzulaufen.2004.ppt#121.
Serialisierbarkeit
Isolationsgrade
•
Eine unter allen Umständen garantierte Serialisierbarkeit kann die
Parallelität empfindlich einschränken. Ist zum Vornherein bekannt, dass
gewisse Inkonsistenzen aufgrund der Business-Logik gar nicht auftreten
können, oder allenfalls in Kauf genommen werden sollen, können die
Locking-Massnahmen des DBMS gelockert werden.
•
SQL definiert deshalb vier Isolationsgrade beim Lesen von Daten:
Inkonsistenzen
Isolatio
n
Modus
SERIALIZABLE
REPEATABLE READ
READ UNCOMMITTED
Paralleli
ät
READ COMMITTED
keine Inkonsistenzen
Phantom-Problem
Lost-Update
Lesen unbestätigter Daten
Phantom-Problem
T1
select *
from Person
where name = 'Muster'
T2
insert Person ( name )
values ( 'Muster')
commit
select *
from Person
where name = 'Muster'
commit
Hier tauch neuer Datensatz auf
Lost-Update
T1
select saldo
from Konto
where idKonto = 3
T2
select saldo
from Konto
where idKonto = 3
neuerSaldo = saldo + 100
update Konto
set saldo = neuerSaldo
where idKonto = 3
commit
neuerSaldo = saldo + 100
update Konto
set saldo = neuerSaldo
where idKonto = 3
commit
Änderungen von T2 gehen beim
Update von T1 verloren !
Demo
Auswirkung des Isolationsgrades auf Transaktions-Durchsatz
• Die Einstellung des Isolationsgrades hat bei intensiven
genutzten Systemen (J2EE-Appservern) grosse
Auswirkungen auf den Transaktionsdurchsatz, die
Deadlockhäufigkeit und das Auftreten von Inkonsistenzen.
 TransaktionsSimulator.doc
Neue Methoden
• Range Locks:
Entschärft ganz entscheidend die Phantomproblematik und
erlaubt in den meisten Fällen von OLTP das Arbeiten im
Modus SERIALIZABLE.
• Datensatz-Versionierung:
Erlaubt ein vollständiges stabiles Lesen von Daten und
Vermeidung des Phantom-Problems, ohne Anwendung von
Locks.
Range Locks (1)
• Range Locks werden für die Realisierung des Isolation
Levels SERIALIZABLE verwendet.
• Mit Range Locks werden Datensätze nach einer logischen
Bedingung und nicht nur rein physisch gesperrt.
• Mit Range Locks kann das Phantom Problem elegant gelöst
werden.
• Voraussetzung: Die Abfragebedingung enthält einen oder
mehrere Teile, welche über einen Index evaluiert werden
können. Beispiel:
select * from Reservation
where resDatum > '1.1.2004'
and resDatum < '31.12.2004'
Range Locks (2)
Der Range Lock werden auf Index-Einträge gesetzt, nicht auf
Datensätze, wie gewöhnliche Locks.
select * from Reservation
where resDatum < '31.12.2004'
and resDatum > '1.1.2004'
Datensatz mit resDatum 1.6.2005
Datensatz mit resDatum 1.6.2004
Datensatz mit resDatum 1.6.2003
Datensätze mit
gesetztem Range Lock
Wirkungsbereich des
Range Locks
Datensatz mit resDatum 1.6.2002
Concurrency Control mit Versionen (1)
• Von einem Datensatz werden zeitweilig mehrere Versionen geführt,
mit folgenden Zielen:
– Eine Transaktion sieht einen committeten Datenbankzustand
bezogen auf den Zeitpunkt des Starts. Dieser Zustand bleibt
über die ganze Transaktionsdauer eingefroren.
– Schreibbefehle werden durch Lesebefehle nicht behindert und
umgekehrt.
– Schreibbefehle beziehen sich immer auf die neueste Version
eines Datensatz in der Datenbank, und verwenden
gegebenenfalls einen Lock, um diese zu reservieren.
Versionen, Leser gegen Schreiber
6
Lesende Transaktion/Befehl, TNC = 6
4
Lesende Transaktion/Befehl, TNC = 5
2
Schreibende Transaktion/Befehl, TNC = 4
1
Lesende Transaktion/Befehl, TNC = 3
3
Kopie des Datensatz
Datensatz X, TNC = 2
5 commit
Datensatz X, TNC = 4
Datensatz X, TNC = 2
7
Kann gelöscht werden
Datensatz X, TNC = 1
Versionen, Schreiber gegen Schreiber
2
Schreibende Transaktion, TNC = 4
1
Schreibende Transaktion, TNC = 3
4
Änderungsbefehl
Datensatz X, TNC = 2
3
Datensatz X, TNC = 2
5
commit: ok, weil
TNC 2 = max TNC
im Pool
6

7
commit: abort,
weil TNC 2  max
TNC im Pool
Datensatz X, TNC = 3
Kopie Datensatz
Kopie Datensatz
Datensatz X, TNC = 2
Datensatz X, TNC = 1
Demo
Isolationsverbesserung mit Versionenverfahren
in SQL Server 2005
• Zusätzlicher Isolation Level SNAPSHOT : Ergibt
serialisierbare Transaktionen ohne Verwendung von
Lesesperren. Änderungskonflikte mit anderen
Transaktionen werden beim Commit festgestellt.
• Isolation Level READ COMMITTED: Mit Versionenverfahren
realisiert.
Concurrency Control mit Zeitstempeln
• Zeitstempel + Daten in die Applikation lesen.
• Beim Zurückschreiben werden Zeitstempel verglichen:
Bei Veränderung Abbruch der Transaktion.
T1
T2
T3
/* BEGIN TRANS */
READ A (13:00)
LOCALLY MODIFY A
/* BEGIN TRANS */
/* BEGIN TRANS */
READ A (13:00)
COMMIT/WRITE A
READ A (13:00)
COMMIT
LCCALLY MODIFY A
COMMIT/WRITE A
/* Rollback ! */
Zeitstempel
in DB
A
A
A
A
A
A
A
(13:00)
(13:00)
(13:00)
(13:01)
(13:01)
(13:01)
(13:01)
Zeitstempel in SQL
create table T (
ts integer default 1,
id integer primary key,
data ... )
A
select ts as ts_old, id, data
from T
where id = id_gesucht
B
-- data ändern
C
update T
set ts = ts_old + 1, data = ...
where id = id_gesucht
and ts = ts_old
D
if rowcount = 0 then rollback
III
OLTP, OLAP, Data Warehouse
OLTP- und OLAP-Applikationen
•
•
OLTP = Online Transaction Processing
OLAP = Online Analytical Processing
•
Der Fokus von Java EE Applikationen liegt stark im OLTP-Bereich:
– Kurze, einfache, effiziente Transaktionen für das laufende
Geschäft.
Das extremste Gegenstück zum OLTP-Betrieb ist das Data Warehouse:
– Periodische Extraktion und Aufbereitung von Aktualdaten in
spezielle Datenbanken, den Data Warehouses.
– Aufbewahrung von historischen Daten.
– Auswertung in die Vergangenheit und die Zukunft.
OLAP-Anfragen nehmen eine Zwischenposition an:
– Zusammenfassende Informationen, in Echtzeit aus den
Aktualdaten erzeugt.
– OLAP-Anfragen gehören mehr und mehr zu OLTP-Applikationen.
•
•
Beispiele OLTP-Transaktionen
Kundenlogin prüfen
select count(*) from Kunde
where username = eingegebener Name
and password = eingegebenes Passwort
Anzeigen von Artikeln
select *
from Artikel
where idGruppe = gewählte Gruppe
order by name
Bestellung einfügen
insert Bestellung (idKunde, idArtikel, menge, bestellDatum )
values ( vom Benützer eingegebene Daten )
Beispiel 1, OLAP-Transaktion
Welche Artikel wurden wie oft von Kunden gekauft, die auch den
Artikel 1 gekauft haben?
select b2.idArtikel, count(*)
from Bestellung b1, Bestellung b2
where b1.idArtikel = 1
and b2.idArtikel != b1.idArtikel
and b1.idKunde = b2.idKunde
group by b2.idArtikel
Beispiel 2, OLAP-Transaktion
Zeige für jeden Artikel, wieviele Verkäufe im Jahr 2007 realisiert wurden:
Absolute Menge, relativ zu allen verkauften Artikeln, relativ zu allen
Verkäufen in der Artikelgruppe.
select artikel, gruppe, verkäufe,
verkäufe / sum(verkäufe) over() anteilGesamt,
verkäufe / sum(verkäufe) over( partition by gruppe ) anteilGruppe
from
( select a.name artikel, g.name gruppe, cast ( sum(b.menge) as
float ) verkäufe
from Bestellung b, Artikel a, Gruppe g
where b.idArtikel = a.idArtikel
and a.idGruppe = g.idGruppe
and datepart( year, bestellDatum ) = 2007
group by a.name, g.name
) as Verkauf
order by artikel
Vergleich OLTP, OLAP, DW
Kriterium
OLTP
OLAP
DW
Anwenderzahl
hoch
mittel/niedrig
niedrig
Operationstyp
lesen, ändern,
einfügen, löschen
lesen
lesen
Komplexität der Abfragen
klein
mittel
hoch
Typischer Isolationsgrad
Serializable
Read Committed
Snapshot
Java EE Anbindung
Entity Klassen
Technische Entities
und Views, SQLDurchgriff
(spezialisierte Tools)
verlangte Antwortzeiten
< 1 sec
1-3 sec
> 1-3 sec
Grunddaten
Aktueller,
realitätskonformer
Datenbestand.
Aktueller,
realitätskonformer
Datenbestand.
Aktuelle und
historische Daten.
Inkrementelle
Fütterung aus
Aktualdaten.
Durch Einzeltransaktion
berührtes Datenvolumen
klein
klein bis mittel
mittel bis gross
Datenqualität
operativ
operativ
bereinigt
IV
Verteilte Datenbanken
Definition
• Eine verteilte Datenbank umfasst ein einziges
Datenmodell, dessen Daten auf mehrere Datenbankserver
(Knoten) aufgeteilt werden. Jede Information ist nur auf
einem Knoten vorhanden.
• Die einzelnen Knoten und das verbindende Netzwerk sind
technisch unabhängig lebensfähige Komponenten.
• Das Managementsystem für eine verteilte Datenbank
muss mit zeitweise ausfallenden oder nicht erreichbaren
Knoten umgehen können.
Knoten = Datenbankserver = Resource Manager RM
Warum verteilte Datenbanken?
• Zusammenwachsen von vormals unabhängigen Systemen
zu einem aus Benutzer- oder Applikationssicht einzigen
System.
• An gewissen Knoten werden meist nur bestimmte Daten
benötigt. Ein Zugriff auf die anderen Knoten ist nur
gelegentlich notwendig.
• Aus Sicherheits- oder gesetzlichen Überlegungen werden
bestimmte Daten nur auf bestimmten Knoten abgelegt.
Verteilte Datenbank, Beispiel
Gesamtsystem
Kunde
1
1
0..*
Bestellung
Knoten 1
0..*
Kreditkarte
Artikel
Knoten 3
Knoten 2
Zugriff auf verteilte DB, Beispiele
• Kunde aufnehmen
– erfordert neuen Eintrag in Knoten 1
• Kunde löschen
– erfordert Löschungen in Knoten 1, 2 und 3
• Artikelstamm ändern
– erfordert Änderungen in Knoten 2
• Artikel bestellen
– erfordert Lesen in 1 und 3, Änderungen in 2
Zugriffsarchitektur
Transparente Architektur
• Einer der beteiligten Knoten
spielt den Master und steuert
die beteiligten Datenbanken.
• Oft für produkthomogene
verteilten Datenbanken.
Explizite Architektur
• Eine "Drittpartei", der Transaktionsmanager, steuert die beteiligten
Datenbanken.
• Oft für produktheterogene, verteilte
Datenbanken, z.B. mit Java EE
Applikation
Knoten 1
Knoten 2
Knoten 3
Applikation
AppServer/Transaktionsmanager
Knoten 1
Knoten 2
Knoten 3
Integration mit Business Tier
• Vorteile
– Gleiche Datensicht für verschiedene Applikationswelten
– Bessere Abfrageoptimierung
– Globale Integritätsbedingungen
Applikation
AppServer/Transaktionsmanager
Knoten 1
Knoten 2
Knoten 3
Demo
Verteilte Transaktionen in SQL Server 2005
• Linked Server definieren für die physische Adressierung
• Synonym deklarieren, um Ortstransparenz zu erreichen
• Lokale Tabelle Kunde, Remote-Tabelle Bestellung
Verteilte Abfragetransaktion
Verteilte Änderungstransaktion
begin [distributed] transaction
select *
from Kunde k, Bestellung b
where k.idKunde = b.idKunde
commit
begin [distributed] transaction
insert into Kunde
values ( 2, 'Bitterli' )
insert Bestellung
values ( 2, 'IPod' )
commit
Verteilte Optimierung
•
Ein entscheidender Vorteil der transparenten Architektur ist, dass
Abfragen knotenübergreifend optimiert werden können.
•
Ein Query Optimierer arbeitet nach dem Cost-Based-Verfahren: Er
versucht, den Ausführungsplan mit dem kleinsten Zeitaufwand zu
finden. Die Anzahl Zugriffe auf IO-Pages eines Speichermediums
(physical reads) spielen dabei eine ausschlaggebende Rolle.
Bei SQL-Abfragen mit Zugriffen auf Remote-Tabellen ist der Transfer
von Datensätzen über ein Netzwerk die teuerste Operation.
•
– Für Abfragen, welche ausschliesslich Tabellen eine RemoteDatenbank betreffen, wird die gesamte Abfrage an diese RemoteDatenbank delegiert.
– Für Abfragen, welche Tabellen aus verschiedenen Datenbanksystemen enthalten, wird versucht, möglichst geringe
Transferraten zu erreichen.
Beispiel für Optimierung
SELECT *
FROM Kunde k,
remote_server.remote_db.dbo.Bestellung b,
remote_server.remote_db.dbo.Artikel a
WHERE k.idKunde = b.idKunde
AND
b.idArtikel = a.idArtikel AND k.kundenNr = 3
•
Annahmen
– Kunde habe 10'000 Einträge
– Bestellung habe 100'000 Einträge
– Artikel habe 1'000 Einträge
– Die Anzahl Bestellungen pro Kunde und Pro Artikel sei etwa gleich
verteilt.
Plan 1
select
Join
Join
Restriction
Kunde
Transfer 100'000 Datensätze
Bestellung
Artikel
• Grau: Tabellen/Operationen auf dem Remote-Server
• Weiss: Tabellen/Operationen auf dem lokalen Server
• Fett: Netzwerk-Transfers
Plan 2 (günstiger)
select
Transfer 10 Datensätze
Join
Join
Artikel
Transfer 1 Datensatz
Restriction
Kunde
Bestellung
• Grau: Tabellen/Operationen auf dem Remote-Server
• Weiss: Tabellen/Operationen auf dem lokalen Server
• Fett: Netzwerk-Transfers
Verteilte Integritätsbedingungen
•
Im Grundsatz können Integritätsbedingungen über verteilte Daten
definiert werden, da die Prüfung einer Integritätsbedingung oder
Ausführung einer Integritätsaktion lediglich der Ausführung von
versteckten SQL-Befehlen entspricht. Die Transparenz der Verteilung
wird dadurch gewährleistet.
•
Je nach Produkt ergeben sich aber Einschränkungen. SQL-Server
erlaubt z.B. keine Fremdschlüssel-Beziehungen zu Remote-Tabellen,
jedoch kann mit Triggern gearbeitet werden.
-- host 1
create table Kunde ( ... )
create synonym Bestellung for ...
create trigger t_casc_del on Kunde
for delete as begin
delete Bestellung
where idKunde in (
select idKunde from deleted )
-- host 2
create table Bestellung
( ... )
V
Verteiltes
Transaktionsmanagement
Grundsätze
•
Zugriffe in verteilten Datenbanken unterliegen dem Transaktionsmodell:
– Es gilt die ACID-Regel und das Serialisierbarkeits-Prinzip.
– Eine verteilte Transaktion konkurriert mit anderen
lokalen oder verteilten Transaktionen.
•
Der Ablauf aus Applikationssicht ist grundsätzlich wie bei lokalen
Transaktionen:
– Beginn implizit oder explizt auf allen Knoten
– Benutzung der Daten via SQL
– commit / rollback
•
Heikel: Die Atomaritätsanforderung. Was passiert, wenn einer der Knoten
Änderungen bereits durchgeführt und freigegeben hat, und der andere
abstürzt?
Programmbeispiel
// get resources
xaDs[i] = new MyXADataSource( ... );
// create transaction manager (tm) for this data sources
XATransactionManager tm = new XATransactionManager( xaDs );
// get JDBC connections for all resources, start transaction
Connection con[] = tm.getConnections();
tm.start();
// use resources with sql/jdbc
for ( int i = 0; i < xaDs.length; i++ ) {
Statement stmt = con[i].createStatement();
stmt.executeUpdate( "..." );
}
// end transaction, execute two phase commit
tm.end();
tm.commit();
Two Phase Commit Protocol
Das Two-Phase-Commit Protokoll ermöglicht das Durchführen
von global korrekten Transaktionen:
1. Sicherstellung der modifizierten Daten in jedem beteiligten
Knoten.
2. Bestätigen und Freigeben der modifizierten Daten in
jedem beteiligten Knoten.
2PC, Transaktionsmanager (TM)
• Der Transaktionsmanager führt das 2PC durch. Der TM kann ein
separates Produkt oder in ein bestimmtes DB-System, z.B.
Oracle, integriert sein.
• Der Transaktionsmanager benötigt selbst eine Datenbank-für
das Durchführen des 2PC, vorallem für die laufenden
Transaktions-Nummern und die Transaktions-Zustände. Der TM
führt den Zustand jeder Transaktion in seinem Logfile mit:
prepare
global commit
global abort
complete
2PC, Resource Manager (RM)
• Der Resource Manager (lokales Datenbanksystem) muss
den Zustand seines Teiles der verteilten Transaktion
ebenfalls in seinem Logfile festhalten:
begin ( wie für gewöhnliche Transaktion )
ready ( oder prepared, für verteilte Transaktion)
commit ( wie für gewöhnliche Transaktion )
Ablauf 2PC, Normalfall
get connections
global commit
RM 1
Resource
Manager 1
RM 2
Resource
Manager 2
ready
ready
committed
committed
ack
commit
prepare
commit
ready
completed
ack
ok
TM
Transaktions Manager, resp. Masterknoten
prepare
Working
Changes
with
okand…
Pending
RM1
RM2 …
commit
ready
Client oder
TM selber
prepare
Ablauf 2PC, RM-Fehler in Phase 1
get connections
Client oder
TM selber
prepare
commit
TM
Transaktions Manager, resp. Masterknoten
failure
not ready
ack
prepare
abort
ready
completed
prepare
Changes
Working
with
Pending
failure
RM1
and…
RM2 …
global abort
RM
Resource
Manager 1
RM
Resource
Manager 2
ready
Problem!!!
rollback
rollback
Ablauf 2PC, RM-Ausfall in Phase 2
get connections
global commit
committed
committed
RM
Resource
Manager 2
ready
ack
ready
X
RM
Resource
Manager 1
commit
commit
commit
prepare
commit
ready
completed
ack
ok
TM
Transaktions Manager, resp. Masterknoten
prepare
Working
with
Changes
okand…
RM1
Pending
RM2 …
commit
ready
Client oder
TM selber
prepare
Ablauf 2PC, TM-Ausfall in Phase 1
X
get connections
not ready
ack
prepare
abort
prepare
ready
failure
TM
Transaktions Manager, resp. Masterknoten
prepare
Working
with
Changes
RM1
failure
and…
Pending
RM2 …
commit
ready
Client oder
TM selber
RM
Resource
Manager 1
RM
Resource
Manager 2
ready
Connection lost!
rollback
rollback
prepare
global abort
completed
Ablauf 2PC, TM-Ausfall in Phase 2
X
get connections
RM
Resource
Manager 1
RM
Resource
Manager 2
ready
ready
committed
committed
ack
completed
ready
ack
global commit
commit
prepare
commit
commit
ack
ok
prepare
Working
with
Changes
RM1
okand…
Pending
RM2 …
TM
Transaktions Manager
commit
ready
Client oder
TM selber
prepare
2PC, Ausfall eines RM
Beim Restart des RM konsultiert dieser sein Log-File:
1. Verteilte Transaktionen, für die ein rollback oder nichts
eingetragen ist, werden zurückgesetzt.
2. Verteilte Transaktionen, für die ein commit eingetragen ist,
werden nachgespielt.
3. Bei verteilten Transaktionen, für die lediglich ein ready
eingetragen ist, muss der TM konsultiert oder auf dessen
commit/abort Befehl gewartet werden.
2PC, Ausfall des TM
Beim Restart des TM konsultiert dieser sein Log-File:
1. ist eine verteilte Transaktion im Zustand prepare, nimmt
TM mit allen RM Verbindung auf und schickt ihnen ein
global abort. Er kann auch versuchen, prepare
nochmals durchzuführen.
2. ist die verteilte Transaktion im Zustand global abort,
nimmt TM mit allen RM Verbindung auf und schickt ihnen
ein global abort.
3. ist die verteilte Transaktion im Zustand global commit,
nimmt TM mit allen RM Verbindung auf und schickt ihnen
ein global commit.
2PC, Netzwerkunterbruch
• Phase 1
1. Wenn einer der RM's einen Verbindungsabbruch vor
dem prepare bemerkt, leitet er ein lokales Rollback
ein.
2. Wenn der TM keine Antwort auf eine prepare-Meldung
bekommt, leitet er ein global abort ein.
• Phase 2
1. Die RM's erhalten die global abort oder global
commit Meldung nicht: Sie müssen auf die
Verfügbarkeit des Netzwerkes und eine
Verbindungsaufnahme resp. einen Befehl vom TM
warten.
Die X/Open XA Spezifikation
• Die X/Open XA-Spezifikation ist heute die wahrscheinlich
wichtigste, allgemeine DTP-Spezifikation, für die alle
grossen DB- und TM-Hersteller Implementationen
anbieten.
• Die X/Open XA-Spezifikation basiert auf dem Two-Phase
Commit.
• Sie enthält zusätzliche Methoden für das Abgeben und
Wiederaufnehmen einer Transaktion.
• Sie enthält zusätzliche Methoden für den (gleichzeitigen)
Gebrauch einer Transaktion durch mehrere Prozesse.
Methoden einer XA-Transaktion
• start(xid, flags)
• end(xid, flags)
• prepare(xid)
• commit(xid, flags) / rollback(xid)
• recover(flags)
• forget(xid)
Demo 1
Ablauf von XA Transaktionen, Java-Umfeld
1. XA-Transaktion: Schönwetter-Ablauf
2. Demo mit Fehlern in einem Resource Manager und im
Transaction Manager:
1. Fehler im RM2 nach end(), aber vor prepare()
2. Fehler im RM2 nach prepare() aber vor commit()
Demo 2
• SQL Server 2005, transparente Architektur
Globale Gesamttransaktion
begin transaction
insert into Kunde
values ( 2, 'Bitterli' )
insert Bestellung
values ( 2, 'IPod' )
commit
Was passiert, wenn hier die Remote-Datenbank ein Problem hat?
 Rollback der Gesamttransaktion, da bei verteilten Resourcen
automatisch ein Two Phase Commit abgewickelt wird.
 Bei zwei unabhängigen, lokalen Transaktionen könnte es dazu
kommen, dass die lokale Transaktion committed wird, die RemoteTransaktion aber fehlschlägt.
AppServer, Architekturschema für XA
Client
DataSource 1
getConnection()
Applikationsserver
oder
Middleware-Komponente
DataSource 2
getConnection()
XADataSource 1
XADataSource 2
XAConnection 1
XAConnection 2
XAResource 1
XAResource 2
DBMS 1
(Resource Manager)
mit
Database 1
TransaktionsManager
DBMS 2
(Resource Manager)
mit
Database 2
XADataSource in JDBC
• Eine XADataSource repräsentiert eine von mehreren
Datenquellen, die an einer verteilten Transaktion (XA)
teilnehmen.
• Für die Applikation soll transparent sein, dass ihre
Datenzugriffe im Rahmen einer verteilten Transaktion
stattfinden. Sie arbeitet funktional mit einer gewöhnlichen
Connection.
• Die Transaktionsabwicklung findet durch einen
Transaktions-Manager statt, bei dem die beteiligten
Datenquellen registriert sind.
Konfiguration von XA-Datenquellen
• Bei J2EE wird eine Datenquelle wird im Rahmen ihrer
Konfiguration als gewöhnliche oder XA-fähige Resource
deklariert.
• Das Transaktions-Management ist gegenüber der Business
Logik transparent.
• XA Datenquellen werden immer über XA-Transaktionen
bearbeitet.
• Messaging-Systeme sind häufig auch XA-Resourcen!
VI
Messaging und verteilte
Transaktionen
Messageing-Systeme mit 2PC
Messageing-System
Messages
Two Phase Commit
Message
Two Phase Commit
Message
Applikation 2
Applikation 1
DB 1
DB 2
Messageing-Systeme ohne 2PC
Messageing-Applikation
Message
Nr 12
Message
Nr 12
Empfänger
Sender
LMN
(z.B. 11)
DB 1
DB 2
VII
Replizierte Datenbanken
Was ist Replikation?
• Bestimmte Teile einer Datenbank werden mehrfach, auf
technisch unabhängigen Rechnerknoten abgelegt.
• Replikationtechnologien spielen eine zunehmende Rolle, weil
globale und permanente Verfügbarkeit immer wichtiger wird.
• Wichtige Gründe für die Replikation sind:
– Skalierbarkeit des Zugriffs
– Verfügbarkeit/ Bandbreite des Netzwerkes
– Gebrauchsweise (OLTP , OLAP, Warehousing, Data Mining)
• Für die technische Ausgestaltung der Replikation sind folgende
Klassifikationsmerkmale wichtig:
– Topologie und Partitionierung
– Synchronität
– Symmetrie
– Konfliktlösung
Topologie und Partitionierung
1. Welche Knoten sind Publisher, welche Subscriber?
2. Zwischen welchen Knoten bestehen überlappende Partitionen?
3. In welche Richtungen werden Daten repliziert?
4. Wie kräftig und verfügbar ist das Netzwerk zwischen den Knoten?
5. Push- oder Pull-Strategie?
6. Wie rasch müssen Änderungen propagiert werden?
7. Wie gross sind die replizierten Datenmengen?
Partionierungsmöglichkeiten
Vertikale Partition
horizontale Partition
•
•
•
Partitionen können sich grundsätzlich überlappen
Angaben zur horizontalen Partitionierung z.B. via SQL-Filterkriterium
(dynamische Zugehörigkeit)
Angaben zur vertikalen Partionierung meist fest konfiguriert (statische
Einteilung)
Topologie, Beispiel 1
• Bidirektionale Publisher-Subscriber
Replikation.
• "Geschäftsstellen/Mutterhaus"-Prinzip.
• Überlappende Partitionen nur zwischen
Mutterhaus und Geschäftsstellen,
nicht unter den Geschäftsstellen.
Topologie, Beispiel 2
• Transaktionale Peer-to-PeerReplikation
• Typische Topologie für Load
Balancing oder Failover/HotStandby-System
Topologie, Beispiel 3
• Unidirektionale PublisherSubscriber Replikation
• Typische Data Warehouse
Topologie. Im DW werden
Daten für die
Nachbearbeitung, Analyse,
Archivierung gesammelt.
Synchronität
• Die Synchronität bestimmt, ob eine Replikation zu den anderen
Knoten unmittelbar, in der gleichen Transaktion wie die
Datenänderung, stattfinden muss.
• synchron: Ein Two-Phase-Commit ist erforderlich. Der einzige
Vorteil einer synchronen Replikation ist die Skalierbarkeit von
Leseoperationen.
• asynchron: Änderungen werden via einen Abgleich-Prozess
nach und nach propagiert. Dies kann direkt von Datenbank zu
Datenbank oder via eine Message Queue erfolgen.
Symmetrie
• Die Symmetrie bestimmt, ob Daten in allen Replikationen
gelesen und geändert werden dürfen.
• symmetrisch: Daten dürfen in allen Replikaten gelesen und
geändert werden.
• asymmetrisch: Daten haben eine primäre Kopie, die gelesen
und geändert werden kann. Änderungen werden nur in einer
Richtung propagiert und dürfen an den sekundären Standorten
nur gelesen werden.
Synchronität / Symmetrie
Replikationsarten
Synchronität 
Asynchron
Synchron
Symmetrie 
Asymmetrisch
Symmetrisch
Lesen überall möglich,
Update nur an einem Ort
möglich. Master-SlaveTopologie. Schwache
Inkonsistenzen (kurzzeitig
unterschiedlicher
Informationsstand)
möglich.
Verteilte Transaktion
notwendig. Keine
Inkonsistenzen möglich.
Wird auch für HotStandbye-Systeme
verwendet.
Änderungen von Daten bei
jedem Replikat möglich.
Grundsätzlich schwere
Inkonsistenzen möglich.
KonfliktauflösungsStrategie erforderlich.
Verteilte Transaktion
notwendig. Keine
Inkonsistenzen möglich.
Einziger Vorteil: Lesen
wird verteilt.
Konfliktlösung
• Wenn Daten asynchron, symmetrisch und mit überlappendenden Partitionen repliziert werden, können Konflikte
entstehen: Daten können an zwei Replikaten geändert worden
sein, bevor der Abgleich stattgefunden hat.
• Beim nächsten Abgleich muss dieser Konflikt erkannt und
behandelt werden. Die meisten Replikations-Tools unterstützen
vordefinierte Regeln für die Konfliktauflösung:
– Feste Knotenpriorität
– Feste Benutzerpriorität
– Minimum/Maximumwert eines best. Attributes
– Jüngere/ältere Änderung
– Erster gewinnt
– Zurückstellen und interaktive Auflösung
Konvergenz
• Der Abgleich replizierter Daten findet immer sequentiell
zwischen je zwei Knoten statt. Beispiel mit einem
Publisher- und zwei Subscriber-Knoten (kleinster Zeitwert
gewinnt bei Konflikten):
Datensatz mit Bestzeit auf 100 m
Startzustand der Replikate
Änderung auf Subscriber 1
Änderung auf Subscriber 2
Abgleich Publisher / Subscriber 1
Abgleich Publisher / Subscriber 2
Abgleich Publisher / Subscriber 1
Endzustand nach 3 Abgleichen
Publisher
[Hans, 12.7]
[Hans, 12.7]
[Hans, 12.7]
[Hans, 11.5]
[Hans, 10.9]
[Hans, 10.9]
[Hans, 10.9]
Subscriber 1
[Hans, 12.7]
[Hans, 11.5]
[Hans, 11.5]
[Hans, 11.5]
[Hans, 11.5]
[Hans, 10.9]
[Hans, 10.9]
Subscriber 2
[Hans, 12.7]
[Hans, 12.7]
[Hans, 10.9]
[Hans, 10.9]
[Hans, 10.9]
[Hans, 10.9]
[Hans, 10.9]
Demo Merge-Replikation
Demo
Datenreplikation
•
SQL-Server 2005, Tabelle Laeufer mit bestzeit-Attribut. 1 Publisher
Datenbank und zwei Subscriber Datenbanken. Je eine Änderung bei den
beiden Subscribern, dann Start der Merge-Agents.
•
Partitionierung
Eine vollständige Tabelle auf einem Publisher und mehreren Subscribern
repliziert. Die Daten überlappen sowohl zwischen Publisher und
Subscriber, wie unter den Subscribern.
•
Synchronität
asynchroner, manuell ausgelöster Abgleich.
•
Symmetrie
Symmetrisch Datenhaltung, Daten können überall gelesen und geändert
werden.
•
Konfliktlösung
Minimumwert für Laufzeit
Herunterladen