11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker
|
|
- Jürgen Simon Seidel
- vor 6 Jahren
- Abrufe
Transkript
1 11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 298
2 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle Befehle unabhängig (Kommentarfunktion) kritisch, wenn mehrere Aktion voneinander abhängen (z. B. Geldüberweisung), da Abbruch in der Mitte möglich mehrere Schritte werden zu Transaktion zusammengefasst Änderungen in der Datenbank finden erst am Ende der Transaktion (in SQL COMMIT; oder Element der Definitionssprache, oder Beenden der SQL-Sitzung) statt Zwischenzeitlich können Sicherungspunkte angelegt werden SAVEPOINT <name> (in Oracle, nicht Standard-SQL) Rücksprung zum SAVEPOINT mit ROLLBACK (zum Transaktionsanfang) oder ROLLBACK <name> zum konkreten SAVEPOINT 299
3 ROLLBACK TO SAVEPOINT B ROLLBACK TO SAVEPOINT A ROLLBACK Ablaufmöglichkeiten bei Transaktionen Nutzeraktionen COMMIT INSERT UPDATE SAVEPOINT A INSERT DELETE SAVEPOINT B Anmerkung: Standard-SQL kennt nur ROLLBACK 300
4 Ende einer Transaktion COMMIT Befehl macht alle Änderungen persistent ROLLBACK nimmt alle Änderungen der aktuellen Transaktion zurück z. B. Oracle: ROLLBACK TO <savepoint> nimmt alle Änderungen bis zum <savepoint> zurück durch DDL-Befehle (CREATE, DROP, ALTER, RENAME) Benutzer beendet Sitzung; meldet sich vom System Abbruch des Benutzerprozesses 301
5 ACID-Transaktionen Atomicity (Atomarität) Consistency (Konsistenz) Isolation (Isolation) Durability (Dauerhaftigkeit) Transaktionen werden entweder ganz oder gar nicht ausgeführt Transaktionen überführen die Datenbank von einem konsistenten Zustand in einen anderen konsistenten Zustand Nebenläufige (gleichzeitige) Transaktionen laufen jede für sich so ab, als ob sie alleine ablaufen würden. Die Wirkung einer abgeschlossenen Transaktion bleibt (auch nach einem Systemausfall) erhalten. 302
6 Zu ACID-Transaktionen Tatsächlich muss ein DBMS nur garantieren: Das Ergebnis einer Transaktion ist gleichwertig zu einer ACID-Transaktion Die Transaktionsbehandlung betrifft: die Synchronisation von mehreren gleichzeitig ablaufenden Transaktionen das Recovery, d.h. die Behebung von Fehlern Transaktionen können erfolgreich (commit) oder erfolglos (abort, für DB-Nutzer rollback) abgeschlossen werden 303
7 Transaktionen Zustände einer Transaktion 304
8 Transaktion in SQL Erste SQL-Anfrage Folge von SQL-Anfragen commit Beginn der ersten Transaktion Festschreiben Nächste SQL-Anfrage Folge von SQL-Anfragen rollback Beginn der nächsten Transaktion Rücksetzen zum vorhergehenden commit Nächste SQL-Anfrage Folge von SQL-Anfragen commit Beginn der nächsten Transaktion Festschreiben 305
9 Atomarität (1/2) Eine Transaktion wird entweder ganz oder gar nicht ausgeführt Konto-Beispiel: Umbuchung von K1 auf K2 Abbuchung von Konto K1 Zubuchung auf Konto K2 entweder beide Operationen werden durchgeführt oder keine Abbruch kann stattfinden aufgrund: Selbstaufgabe (z.b. Benutzerabbruch) Systemabbruch durch das DBMS (z.b. wg. Deadlock) Crash (Hardware-/Softwarefehler) 306
10 Atomarität (2/2) Wie stellt das Datenbanksystem die Atomarität sicher? bei einer lesenden Transaktion: kein Problem bei einer schreibenden Transaktion: bei Abbruch: Änderungen müssen rückgängig gemacht werden (bzw. dürfen gar nicht erst sichtbar werden) im Erfolgsfall: alle Änderungen müssen sichtbar werden Realisierungsmöglichkeit: das Schattenspeicherverfahren 307
11 Schattenspeicherkopie Realisierungsmöglichkeit: das Schattenspeicherverfahren Kopie einer DB: Arbeitskopie Durchführung einer Transaktion: Änderung: wird nur auf der Arbeitskopie gemacht Commit (erfolgreich): DB := Arbeitskopie Abort (oder erfolgloses Commit): Arbeitskopie wegwerfen 308
12 Konsistenz Konsistenz betrifft alle vorgegebenen Regeln: - Datentypen und Bereiche bei Attributen - PRIMARY KEY - FOREIGN KEY - CONSTRAINTs - TRIGGER technische Realisierung z.b. wie bei der Atomarität 309
13 Isolation Parallel ablaufende Transaktionen sollen sich gegenseitig nicht beeinflussen, d.h. jede läuft für sich so ab, als sei sie die einzige Transaktion im System Dient zur Vermeidung div. Probleme: lost-update-problem dirty read non-repeatable-read phantom read 310
14 Beispiel: Mehrnutzerbetrieb zwei parallel verlaufende Transaktionen: T1: BEGIN A=A+100, B=B-100 END T2: BEGIN A=1.06*A, B=1.06*B END erste Transaktion transferiert 100 vom Konto B zum Konto A zweite Transaktion schreibt beiden Konten 6 % Zinsen gut gibt keine Garantie, dass T1 vor T2 ausgeführt wird (oder umgekehrt), wenn beide zusammen gestartet werden. Jedoch gilt: Der Nettoeffekt muss äquivalent zu beiden Transaktionen sein, wenn sie seriell in irgendeiner Reihenfolge ablaufen würden 311
15 Beispiele für Schedules Betrachte folgenden Ablauf mit ineinander geschachtelten Abläufen (Schedules) : T1: A=A+100, B=B-100 T2: A=1.06*A, B=1.06*B Kein Problem, aber bei diesem Beispiel: T1: A=A+100, B=B-100 T2: A=1.06*A, B=1.06*B Zweiter Schedule aus Sicht des DBMS: T1: R(A), W(A), R(B), W(B) T2: R(A), W(A), R(B), W(B) 312
16 Anomalien im Mehrbenutzerbetrieb (1/4) Verlorengegangene Änderungen (Lost Update) WW-Konflikt Gleichzeitige Änderung desselben Objekts durch zwei Transaktionen Erste Änderung (aus nicht beendeter Transaktion) wird durch die zweite überschrieben T1: W(A), W(B), C T2: W(A), W(B), C C für Commit 313
17 Anomalien im Mehrbenutzerbetrieb (2/4) Zugriff auf schmutzige Daten (Dirty Read) WR-Konflikt schmutzige Daten = geänderte Objekte, deren Änderungen von Transaktionen stammen, die noch nicht beendet sind Dauerhaftigkeit der Änderungen nicht garantiert, da Transaktionen noch zurückgesetzt werden Ungültige Daten werden somit durch andere Transaktion gelesen und (schlimmer noch!) vielleicht noch weiterpropagiert T1: R(A), W(A), R(B), W(B), Rollback T2: R(A), W(A), C 314
18 Anomalien im Mehrbenutzerbetrieb (3/4) Nicht-wiederholbares Lesen (Unrepeatable Read) RW-Konflikt Eine Transaktion sieht (bedingt durch parallele Änderungen) während ihrer Ausführung unterschiedliche Zustände des Objekts. Erneutes Lesen in der Transaktion liefert somit anderen Wert T1: R(A), R(A), W(A), C T2: R(A), W(A), C 315
19 Anomalien im Mehrbenutzerbetrieb (4/4) Phantom-Problem Spezielle Form des Unrepeatable Read Lesetransaktion: Mengenorientiertes Lesen über ein bestimmtes Suchprädikat P Parallel läuft Änderungstransaktion, die die Menge der sich für das Prädikat qualifizierenden Objekte ändert Folge: Phantom-Objekte, die durch parallele Einfügeoder Löschvorgänge in Ergebnismenge auftauchen und/oder daraus verschwinden 316
20 Lost Update Beispiel Gehaltsänderung T1 SELECT GEHALT INTO :gehalt FROM PERS WHERE PNR=2345; Gehaltsänderung T2 SELECT GEHALT INTO :gehalt2 FROM PERS WHERE PNR=2345; Zeit DB-Inhalt (PNR, GEHALT) gehalt:= gehalt+2000; UPDATE PERS SET GEHALT=:gehalt WHERE PNR=2345; gehalt2:= gehalt2+1000; UPDATE PERS SET GEHALT=:gehalt2 WHERE PNR=2345;
21 Dirty Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR= Gehaltsänderung T2 SELECT GEHALT INTO :gehalt FROM PERS WHERE PNR=2345 gehalt:=gehalt*1.05; Zeit DB-Inhalt (PNR, GEHALT) ROLLBACK UPDATE PERS SET GEHALT=:gehalt WHERE PNR=2345 COMMIT
22 Unrepeatable Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR= UPDATE PERS SET GEHALT= GEHALT+2000 WHERE PNR=3456 COMMIT Gehaltssumme T2 SELECT SUM(GEHALT) INTO :summe FROM PERS WHERE PNR IN (2345,3456) Inkonsistente Analyse summe= Zeit DB-Inhalt (PNR, GEHALT)
23 Unrepeatable Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR=2345 UPDATE PERS SET GEHALT= GEHALT+2000 WHERE PNR=3456 COMMIT Gehaltssumme T2 SELECT GEHALT INTO :g1 FROM PERS WHERE PNR=2345 SELECT GEHALT INTO :g2 FROM PERS WHERE PNR=3456 summe:=g1+g2 Inkonsistente Analyse ohne schmutziges Lesen in T2 DB-Inhalt (PNR, GEHALT) Zeit 320
24 Phantom-Problem Beispiel Lesetransaktion (Gehaltssumme der Abteilung 17 bestimmen) SELECT SUM(GEHALT) INTO :sum1 FROM PERS WHERE ANR=17... Änderungstransaktion (Einfügen eines neuen Angestellten in Abteilung 17) INSERT INTO PERS (PNR,ANR,GEHALT) VALUES(4567,17,55.000) SELECT SUM(GEHALT) INTO :sum2 FROM PERS WHERE ANR=17 IF sum1<>sum2 THEN <Fehlerbehandlung> Zeit 321
25 Isolationsgrade Die gezeigten Effekte treten je nach Isolationsgrad (isolation level) auf: Isolationsgrad mögliche Effekte 0 Dirty Read, Non-Repeatable-Read, Phantom 1 Non-Repeatable-Read, Phantom 2 Phantom 3 - Standard ist Isolationsgrad 3; geringere Grade können für bestimmte Anwendungen Sinn machen (z.b. grobe Statistik) man erreicht so eine Leistungssteigerung Auch hier gilt: man sollte wissen, was man tut
26 Isolationsgrade in SQL (eine Version) Setzen des Isolationsgrades in SQL (aber nicht Oracle): SET TRANSACTION ISOLATION LEVEL <nr.>; oder SET TRANSACTION ISOLATION LEVEL [ READ UNCOMMITED READ COMMITTED REPEATABLE READ SERIALIZABLE]; in Derby (0 nicht unterstützt): {REPEATABLE_READ=4, READ_UNCOMMITTED=1, NONE=0, READ_COMMITTED=2, SERIALIZABLE=8} Einstellung gilt für aktuelle Verbindung, nach COMMIT oder ROLLBACK wieder zurück gesetzt 323
27 Erinnerung: Kontobeispiel Was wollen Sie machen? (2) Neues Konto 2 Welche Kontonummer? 67 Welcher Startbetrag? 1 Was wollen Sie machen? (1) vorhandene Konten
28 Möglicher Ablauf mit READ UNCOMMITED (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (6) ROLLBACK (1) vorhandene Konten 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 43 Welchen Betrag? 50 (1) vorhandene Konten 42: : 1050 (5) COMMIT (1) vorhandene Konten 42: :
29 Möglicher Ablauf mit READ COMMITED (1/2) (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (1) vorhandene Konten [warten] 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 43 Welchen Betrag? 50 (1) vorhandene Konten [warten] java.sql.sqltransaction RollbackException: Eine Sperre konnte aufgrund eines Deadlocks nicht angefordert werden. Zyklus der Sperren und beantragten Sperren: 326
30 Möglicher Ablauf mit READ COMMITED (2/2) (1) vorhandene Konten 42: : 1000 (1) vorhandene Konten 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (5) COMMIT 327
31 Möglicher Ablauf mit REPEATABLE READ 42: : 1000 (1) vorhandene Konten 42: : 1000 (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 [warten] java.sql.sqltransaction RollbackException: Eine Sperre konnte innerhalb der vorgegebenen Zeit nicht angefordert werden. 328
32 Isolation - Realisierung Die Isolationsgrade werden erreicht durch Sperren (locks) Lesesperren (shared lock, s) Schreibsperren (exclusive lock, x) Lesesperren sind mit anderen Lesesperren kompatibel, aber nicht mit Schreibsperren; Schreibsperren sind mit nichts kompatibel Die Sperrgranularität ist von der Implementierung eines DBMS abhängig (z.b. Tabellensperren vs. Tupelsperren) Oracle: LOCK TABLE T IN EXCLUSIVE MODE; LOCK TABLE T IN EXCLUSIVE MODE NOWAIT; Freigabe der Sperren nach Transaktionsende 329
33 2-Phasen-Sperrprotokoll Relationale arbeiten üblicherweise pessimistisch, und zwar nach dem 2-Phasen-Sperrprotokoll eine Transaktion muss jedes Objekt, das sie lesen will, mit einer Lesesperre (s-lock) versehen eine Transaktion muss jedes Objekt, das sie ändern will, mit einer Schreibsperre (x-lock) versehen eine Transaktion darf kein Objekt mehr neu sperren, nachdem sie die erste Sperre freigegeben hat 330
34 Probleme mit ACID-Transaktionen Entwurfsanwendungen: Entwurf startet, Transaktion beginnt, nach drei Monaten ist der Entwurf fertig, Transaktion wird aber beim commit abgebrochen ( bitte von vorne anfangen...) gefragt sind sog. lange Transaktionen: Syncpoints oder Sagas Mobile Geräte: Daten werden auf Datenbank in (Notebook, PDA) geladen, danach Trennung von Hauptdatenbank, Benutzer macht Änderungen, verbindet sich wieder mit der DB, was tun? alle Änderungen zurückweisen? Haupt-DB sperren? Synchronisation ist gefragt, evtl. mit vorheriger Anzeige möglicher Arbeitsbereiche 331
35 12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 332
36 Erweiterung relationaler Einbettung von SQL in prozedurale oder objektorientierte Wirtssprachen (embedded SQL); meistens C, C++, oder Java (JDBC) Erweiterung von SQL um prozedurale Elemente innerhalb der SQL-Umgebung Vorteile der internen Erweiterung: Bessere Integration der prozeduralen Elemente in die Datenbank; Nutzung in Prozeduren, Funktionen und Triggern 333
37 Warum Erweiterung von SQL sinnvoll ist keine prozeduralen Konzepte in SQL (Schleifen, Verzweigungen, Variablendeklarationen) viele Aufgaben nur umständlich über Zwischentabellen oder überhaupt nicht in SQL zu realisieren. Transitive Hülle Programme repräsentieren anwendungsspezifisches Wissen, das nicht in der Datenbank enthalten ist 334
38 Ansätze zur Erweiterung DB-System erhält eigene Programmiersprache, z. B. PL/SQL für Oracle Transact SQL für MS SQL Server Variante: Bringe Programmiersprache mit Ausführungsumgebung in die Datenbank, z. B. virtuelle Maschine von Java läuft mit/ im Datenbankserver z. B. von Oracle und Derby unterstützt 335
39 Nutzung gegebener Funktionen parameterlose Funktionen werden ohne Klammern aufgerufen SELECT Current_date, Current_time, Current_timestamp, Upper(name), abs(area) FROM Continent; 336
40 Nutzung gegebener Prozeduren sogenannte Stored Procedures, Aufruf mit CALL Parameter können IN, OUT, INOUT sein wenn nur IN, dann direkt aufrufbar, ansonsten aus Programm CALL SYSCS_UTIL.SYSCS_EXPORT_QUERY('select * from continent', 'c:/temp/myfile.dat', NULL, NULL, NULL); 337
41 Entwicklung eigener Prozeduren und Funktionen Funktion: nur IN-Parameter, nur lesende SQL-Befehle! Realisiere Funktionalität in Klassenmethoden einer Java- Klasse Packe ausführbaren Code als JAR-Datei Lade Jar-Datei unter einem Pseudo-Namen in die Datenbank Füge Pseudo-Namen zu den ausführbaren Paketen hinzu Lege Funktion/Prozedur an, die auf Java-Methode zugreift Nutze Funktion oder Prozedur 338
42 Erstes Beispiel (1/5) Java Code package added; public class Work { public static int hallo(string txt){ // Ausgaben auf DB-Konsole unüblich System.out.println("Hallo " + txt); return txt.length(); } } public static void auchhallo(string txt){ } System.out.println("Hai " + txt); 339
43 Erstes Beispiel (2/5) Erzeugung einer jar-datei Übersetzen des Programms NetBeans erzeugt automatisch jar-datei (sonst über Entwicklungsumgebung oder direkt erstellbar) 340
44 Erstes Beispiel (3/5) jar-datei laden, Fkt erstellen CALL sqlj.install_jar( 'F:\workspaces\NetbeansWork_WS15\ErsteDBErweiterung' '\dist\erstedberweiterung.jar', 'APP.Erstes', 0); CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY( 'derby.database.classpath', 'APP.Erstes'); statt install auch replace möglich (dann kein letzter Parameter) CREATE FUNCTION Halo(t VARCHAR(40)) RETURNS INT LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL EXTERNAL NAME 'added.work.hallo'; kein DB-Zugriff in der Methode, alternativ READS SQL DATA voll qualifizierter Methodenname 341
45 Erstes Beispiel (4/5) Nutzung von Funktionen SELECT name, Halo(name) FROM Continent; 342
46 Erstes Beispiel (5/5) Prozedur-Erstellung / Nutzung CREATE PROCEDURE Ho(IN t VARCHAR(40)) LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA EXTERNAL NAME 'added.work.auchhallo'; 343
47 Zugriff auf Datenbank der Zugriff auf die aktuell in Transaktion genutzter Verbindung: DriverManager.getConnection("jdbc:default:connection"); generell damit alle JDBC-Befehle zugänglich typischerweise keine Erzeugung neuer Tabellen erwünscht bzw. möglich Transaktionssteuerung erlaubt, kann aber durch verschachtelte Aufrufe zu Problemen führen, wenn z. B. geschlossenes ResultSet genutzt wird Funktionen und Prozeduren laufen mit den Rechten des Nutzers, der sie importiert hat; man kann so Zugriffe ausschließlich auf diese Form einschränken 344
48 Methoden für neue Konten public static void neueskonto(int nr, int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); stmt.execute("insert INTO Konto VALUES(" + nr + "," + betrag +")"); } public static void neueskonto(int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select MAX(nr) FROM Konto"); rs.next(); int nr = rs.getint(1)+1; neueskonto(nr,betrag); } 345
49 Einspielen und Erstellen CALL sqlj.replace_jar( 'F:\workspaces\NetbeansWork_WS15\ErsteDBErweiterung' '\dist\erstedberweiterung.jar', 'APP.Erstes'); CREATE PROCEDURE neueskonto(in nr INTEGER, IN betrag INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.neueskonto'; CREATE PROCEDURE neueskonto2(in betrag INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.neueskonto'; keine Polymorphie möglich 346
50 Nutzen CALL neueskonto(10000,50); CALL neueskonto2(51); SELECT * FROM Konto WHERE Konto.nr > 9999; 347
51 Exception-Handling Java-Methoden werfen bekannte SQLExceptions zwei relevante Methoden getmessage(): Fehlermeldung, kann null sein getsqlstate(): Fehleridentifikator (String) man kann Exceptions intern behandeln, oft werden sie nach außen weitergereicht man kann eigene SQLExceptions definieren nach Standard ist SQLState dann zwischen und Nutzer kann dann SQLException auswerten 348
52 Einzahlung mit Prüfung public static void einzahlen(int nr, int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery( "SELECT COUNT(*) FROM Konto WHERE nr="+nr); rs.next(); if(rs.getint(1) == 0){ throw new SQLException("Konto fehlt","30000"); } rs.close(); rs = stmt.executequery("select * FROM Konto WHERE nr="+nr); rs.next(); if(rs.getint(2) + betrag < 0){ throw new SQLException("zu wenig Geld","30001"); } rs.close(); stmt.execute("update Konto SET betrag = betrag+" + betrag } + " WHERE nr=" + nr); 349
53 Ausführung CALL einzahlen(10001,49); SELECT * FROM Konto WHERE Konto.nr > 9999; CALL einzahlen(10002,49); Error code 30000, SQL state 38000: Bei der Auswertung eines Ausdrucks wurde die Ausnahme 'java.sql.sqlexception: Konto fehlt' ausgelöst. Error code 99999, SQL state 30000: Konto fehlt CALL einzahlen(10001,-149); Error code 30000, SQL state 38000: Bei der Auswertung eines Ausdrucks wurde die Ausnahme 'java.sql.sqlexception: zu wenig Geld' ausgelöst. Error code 99999, SQL state 30001: zu wenig Geld 350
54 Aufruf einer Funktion durch den DB-Client public void rufefunktion(string text) { CallableStatement stmt = con.preparecall("{? = call halo(?)}"); stmt.registeroutparameter(1, Types.INTEGER); stmt.setstring(2, text); stmt.execute(); int erg = stmt.getint(1); System.out.println("erg: " + erg); } db.rufefunktion("ein Text"); erg: 8 351
55 Aufruf einer Prozedur durch den DB-Client public void rufeprozedur(int nr,int betrag){ try( CallableStatement stmt = con.preparecall( "{call einzahlen(?,?)}")){ stmt.setint(1, nr); stmt.setint(2, betrag); stmt.execute(); } catch (SQLException e) { SQLException s = e.getnextexception(); System.out.println(s.getMessage() + ": " + s.getsqlstate()); } } db.rufeprozedur(10001, 50); db.rufeprozedur(10002, 50); db.rufeprozedur(10001, -500); Konto fehlt: zu wenig Geld:
56 Nutzung von OUT-Parametern Prozeduren können über OUT-Parameter Werte zurückliefern Erster Java-Ansatz public static void kontostand(int nr, int stand){ stand = } geht nicht, da stand keine Referenz in Java ist Trick: Nutze Array als Parametertyp und davon nur das erste Element; bei Arrays von Referenzen sind Änderungen möglich 353
57 Prozedur für Kontostand public static void kontostand(int nr, int[] stand) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM Konto WHERE nr=" + nr); if(!rs.next()){ throw new SQLException("Konto "+nr+" fehlt","30000"); } stand[0] = rs.getint(2); } rs.close(); stmt.close(); CREATE PROCEDURE kontostand(in nr INTEGER, OUT stand INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.kontostand'; 354
58 Nutzung der Prozedur public int kontostand(int nr){ try(callablestatement stmt = con.preparecall( "{call kontostand(?,?)}")){ stmt.setint(1, nr); stmt.registeroutparameter(2, Types.INTEGER); stmt.execute(); return stmt.getint(2); } catch (SQLException e) { SQLException s = e.getnextexception(); System.out.println(s.getMessage() + ": " + s.getsqlstate()); } return -1; } System.out.println(db.kontostand(10001)); System.out.println(db.kontostand(10002)); 150 Konto fehlt:
59 Zugriffsrechte bei Prozeduren / Funktionen Benutzungsrechte vergeben: GRANT EXECUTE ON <procedure/function> TO <user>; Prozeduren und Funktionen werden jeweils mit den Zugriffsrechten des Besitzers ausgeführt d.h. der Nutzer kann die Prozedur/Funktion auch dann aufrufen, wenn er kein Zugriffsrecht auf die dabei benutzten Tabellen hat Anmerkung: Sieht man SQLJ als serverseitige Programmierung, ist dies neben der Portabilität ein zentrales Argument für SQLJ 356
60 Trigger (1/2) typischer Einsatz der Prüfung komplexer Bedingungen, die nicht mit Constraints überwachbar sind spezielle Form der Nutzung von Prozeduren werden beim Eintreten eines bestimmten Ereignisses ausgeführt Spezialfall aktiver Regeln nach dem Event-Condition-Action- Paradigma Werden einer Tabelle zugeordnet Bearbeitung wird durch das Eintreten eines Ereignisses (Einfügen, Ändern oder Löschen von Zeilen der Tabelle) ausgelöst (Event) 357
61 Trigger (2/2) Ausführung von Bedingungen für den Datenbankzustand abhängig (Condition) Action: vor oder nach der Ausführung der entsprechenden aktivierenden Anweisung ausgeführt einmal pro auslösender Anweisung (Statement-Trigger) oder einmal für jede betroffene Zeile (Row-Trigger) ausgeführt Trigger-Aktion kann auf den alten und neuen Wert der gerade behandelten Zeile zugreifen 358
62 Einschränkungen bei Trigger-Aktionen It must not contain any dynamic parameters (?). It must not create, alter, or drop the table upon which the trigger is defined. It must not add an index to or remove an index from the table on which the trigger is defined. It must not add a trigger to or drop a trigger from the table upon which the trigger is defined. It must not commit or roll back the current transaction or change the isolation level. Before triggers cannot have INSERT, UPDATE or DELETE statements as their action. Before triggers cannot call procedures that modify SQL data as their action
63 Erster Trigger (noch ohne Prozedur) CREATE TABLE Protokoll( wer VARCHAR(30), wann TIMESTAMP, was VARCHAR(30) ); CREATE TRIGGER KontoInsert1 AFTER INSERT ON Konto REFERENCING NEW AS N FOR EACH ROW INSERT INTO Protokoll VALUES(USER,Current_timestamp,'INSERT ' CAST (N.nr AS CHAR(7))); INSERT INTO Konto VALUES(17,0); INSERT INTO Konto VALUES(177,0); INSERT INTO Konto VALUES(1777,0); SELECT * FROM Protokoll; 360
64 Trigger genauer analysiert CREATE TRIGGER KontoInsert1 AFTER INSERT ON Konto REFERENCING NEW AS N FOR EACH ROW so pro Zeile CALL oder FOR EACH STATEMENT eigentliche Aktion INSERT UPDATE DELETE DB-eindeutiger Name AFTER NO CASCADE BEFORE genau eine Tabelle Zugriff auf neue Zeile bei INSERT und UPDATE Zugriff auf alte Zeile (OLD AS) bei UPDATE und DELETE (nur bei Zeilentrigger) REFERENCING OLD AS 361 O NEW AS N
65 FOR EACH ROW oder nicht CREATE TABLE Tr( X INTEGER, Y INTEGER ); INSERT INTO Tr VALUES (1,3); INSERT INTO Tr VALUES (1,4); INSERT INTO Tr VALUES (1,5); SELECT * FROM Tr; CREATE TRIGGER TrOhneEach NO CASCADE BEFORE UPDATE ON Tr CALL Ho('TrOhneEach'); CREATE TRIGGER TrMitEach NO CASCADE BEFORE UPDATE ON Tr FOR EACH ROW CALL Ho('TrMitEach'); UPDATE TR SET Y=Y+1 WHERE X=1; SELECT * FROM Tr; X Y Hai TrOhneEach Hai TrMitEach Hai TrMitEach Hai TrMitEach 3 Zeilen wurden aktualisiert. X Y
66 Auswahl BEFORE oder AFTER Gibt keine generelle Regel, was besser ist Ansatz: finde möglichst einfachen Algorithmus, der eine Prüfung intuitiv verständlich macht BEFORE: berechne genau, ob gewünschte Aktion möglich ist AFTER: nehme an Aktion wurde ausgeführt; suche nach einem Fehler in den Daten; wenn vorhanden, brich ab EACH ROW oder nicht: interessiert jede einzelne Aktion oder nur das Gesamtergebnis der Aktion Konto-Beispiel: Die Summe aller Beträge der Konten soll nicht negativ sein Jeweils Trigger für INSERT, UPDATE und DELETE benötigt hier einfache Prüfung nachdem Aktion ausgeführt wurde 363
67 Prüfmethode public static void nichtnegativ() throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select SUM(betrag) FROM Konto"); rs.next(); System.out.println("Summe: " + rs.getint(1)); if(rs.getint(1) < 0){ throw new SQLException("Pleite verhindern","30002"); } rs.close(); } CREATE PROCEDURE nichtnegativ() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.nichtnegativ'; 364
68 Trigger erstellen und ausprobieren CREATE TRIGGER nichtnegativinsert AFTER INSERT ON Konto CALL nichtnegativ(); CREATE TRIGGER nichtnegativupdate AFTER UPDATE ON Konto CALL nichtnegativ(); CREATE TRIGGER nichtnegativdelete AFTER DELETE ON Konto CALL nichtnegativ(); INSERT INTO Konto VALUES(42,50); INSERT INTO Konto VALUES(43,50); INSERT INTO Konto VALUES(44,-100); SELECT * FROM Konto; INSERT INTO Konto VALUES(45,-1); UPDATE Konto SET betrag = betrag - 10; DELETE FROM Konto WHERE nr = 43; Summe: 50 Summe: 100 Summe: 0 Summe: -1 Summe: -30 Summe:
69 Problem der Mutating Tables Trigger können die Inhalte von Tabellen ändern (der Tabelle, auf der sie definiert sind und andere), d.h. jede Ausführung des Triggers sieht eventuell einen anderen Datenbestand der Tabelle, auf der er definiert ist, sowie der Tabellen, die er evtl. ändert d.h. Ergebnis abhängig von der Reihenfolge der veränderten Tupel Ansatz: Betroffene Tabellen werden während der gesamten Aktion als mutating gekennzeichnet, können nicht erneut von Triggern gelesen oder geschrieben werden Nachteil: Oft ein zu strenges Kriterium Derby: maximale Kettenlänge bei Aufrufen 366
70 Beispiel (1/4): Aufgabe Tabelle speichert Gebote eines Mitglieds (mnr) für eine Ware (ware) als Preis (gebot) Forderung: bei neuen Geboten (insert oder update erlaubt) für die gleiche Ware muss das eigene Gebot erhöht werden CREATE TABLE Gebot( ); mnr INTEGER, ware INTEGER, gebot DECIMAL(8, 2), PRIMARY KEY(mnr,ware,gebot) 367
71 Beispiel (2/4) : Methode public static void geboterhoehen(int mnr, int ware, double gebot) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select MAX(gebot) " + "FROM Gebot " + "WHERE mnr=" + mnr + " AND ware=" + ware); rs.next(); double max = rs.getdouble(1); System.out.println(rs.wasNull()+ " " + max); if (!rs.wasnull() && max >= gebot){ throw new SQLException("Gebot erhöhen!","30009"); } stmt.close(); rs.close(); } 368
72 Beispiel (3/4): Trigger anlegen CREATE PROCEDURE geboterhoehen(m INTEGER, w INTEGER, g DOUBLE) LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA EXTERNAL NAME 'added.gebotspruefung.geboterhoehen'; CREATE TRIGGER geboterhoeheninsert NO CASCADE BEFORE INSERT ON Gebot REFERENCING NEW AS N FOR EACH ROW CALL geboterhoehen(n.mnr, N.ware, N.gebot); CREATE TRIGGER geboterhoehenupdate NO CASCADE BEFORE UPDATE ON Gebot REFERENCING NEW AS N FOR EACH ROW CALL geboterhoehen(n.mnr, N.ware, N.gebot); 369
73 Beispiel (4/4): Probieren INSERT INTO Gebot VALUES(42,99,1.00); UPDATE Gebot SET gebot = 1.01 WHERE mnr = 42 AND ware = 99; INSERT INTO Gebot VALUES(42,99,1.00); true 0.0 false 1.0 false 1.01 false 1.01 UPDATE Gebot SET gebot = 1.01 WHERE mnr = 42 AND ware = 99; 370
74 13. Testen von DB-Software Kurzeinführung JUnit Regeln zur Testerstellung Nutzung von DBUnit 371
75 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher Aufbau leicht erlernbar geht auf SUnit (Smalltalk) zurück mittlerweile für viele Sprachen verfügbar (NUnit, CPPUnit) S. Kleuker, Qualitätssicherung durch Softwaretests, Springer Vieweg, Wiesbaden, 2013 Software-Qualität 372
76 Testfall Vor dem Testen müssen Testfälle spezifiziert werden Vorbedingungen Zu testende Software in klar definierte Ausgangslage bringen (z. B. Objekte mit zu testenden Methoden erzeugen) Angeschlossene Systeme in definierten Zustand bringen Weitere Rahmenbedingungen sichern (z. B. HW) Ausführung Was muss wann gemacht werden (einfachster Fall: Methodenaufruf) Nachbedingungen Welche Ergebnisse sollen vorliegen (einfachster Fall: Rückgabewerte) Zustände anderer Objekte / angeschlossener Systeme Software-Qualität 373
77 Aufbau einer Testklasse (1/8) import junit.framework.assert; import org.junit.after; import org.junit.afterclass; import org.junit.before; import org.junit.beforeclass; import org.junit.test; public class AnschauungTest { private int wert; private static int klasse; Beliebiger Klassenname, Endung Test üblich Nutzung von normalen Exemplarvariablen Klassenvariablen, außer als Konstanten, nicht nutzen (hier nur als schlechtes Beispiel) Komponentenbasierte Software- Entwicklung 374
78 Aufbau einer Testklasse (2/8) Verhaltensbeschreibung mit public static void setupbeforeclass() } throws Exception { System.out.println("setUpBeforeClass"); klasse = public static void teardownafterclass() } throws Exception { System.out.println("tearDownAfterClass"); Methode wird einmal vor vor allen Tests ausgeführt, z.b. Aufbau DB-Verbindung einmal nach allen Tests (aufräumen) Komponentenbasierte Software- Entwicklung 375
79 Aufbau einer Testklasse public void setup() throws Exception { } System.out.println("setUp"); wert = 42; klasse = klasse + 1; System.out.println("klasse ist public void teardown() throws Exception { } System.out.println("tearDown"); Methode wird vor jedem Test ausgeführt, Idee: einheitliche Ausgangssituation schaffen einmal nach jeden Tests (lokal aufräumen) Komponentenbasierte Software- Entwicklung 376
80 Aufbau einer Testklasse public void test1() { } Test ist beliebige annotierte Methode Methodenname ist beliebig, beginnt typischerweise mit test und beinhaltet Name der Methode oder Sinn des Tests System.out.println("test1"); wert = wert + 1; Assert.assertTrue("Erwartet 43 gefunden: "+wert, wert == 43); Experimente Prüfmethode, Parameter Text und Boolesche Bedingung; ist Bedingung false wird Test als gescheitert festgehalten und Text ausgegeben Komponentenbasierte Software- Entwicklung 377
81 Aufbau einer Testklasse public void test2() { } System.out.println("test2"); wert = wert + 2; Assert.assertTrue(wert == public void test3() { } System.out.println("test3"); wert = wert + 3; Assert.assertTrue("Erwartet 44 gefunden: "+wert, wert == 44); Kurzform ohne Text (gibt assert-varianten) wenn Testfall scheitert ist entweder das Programm oder der Test fehlerhaft Komponentenbasierte Software- Entwicklung 378
82 Aufbau einer Testklasse (6/8) public void test4() { System.out.println("test4"); try{ if(42/0 == 0){ } Assert.fail(); } catch(arithmeticexception e){ } catch(exception e){ Assert.fail(); } public void test5() { System.out.println("test5"); throw new IllegalArgumentException(); } Test scheitert, wenn ausgeführt; markiert Stellen, die nicht erreicht werden sollen gewünschte Exception ungewünschte Exception (kann weggelassen werden) Komponentenbasierte Software- Entwicklung 379
83 Aufbau einer Testklasse (7/8) setupbeforeclass setup klasse ist 100 test4 teardown setup klasse ist 101 test5 teardown setup klasse ist 102 test1 teardown setup klasse ist 103 test2 teardown setup klasse ist 104 test3 teardown teardownafterclass Komponentenbasierte Software- Entwicklung 380
84 Aufbau einer Testklasse (8/8) Failure: Fehler durch Assert Error: Fehler durch Abbruch Komponentenbasierte Software- Entwicklung 381
85 Basisideen zur Testerstellung viele kleine Tests, da nachfolgende Asserts nicht geprüft, wenn eines vorher abbricht erwartetes Verhalten kann zusammen geprüft werden jede mögliche Ausnahme in getrenntem Testfall Extremwerte prüfen Testklassen können weitere Hilfsmethoden enthalten typisch: am Anfang auf leerem Feld neue Testausgangssituation erstellen 382
86 Test von Nie, nie mit laufender Geschäftsdatenbank testen; es wird immer ein Testsystem benötigt generell direkt mit JUnit machbar Detailproblem: nach den Tests so aufräumen, dass Ausgangssituation wieder hergestellt (abhängige Daten!) Detailproblem: aufwändiger Vergleich zwischen aktuellem und erwartetem Tabelleninhalt Vereinfachung mit DBUnit als Ergänzung von JUnit einfaches Leeren und Neueinspielen von Datensätzen einfacher Vergleich von Mengen von Tabelleneinträgen Tabellen z. B. auf Basis von XML-Dateien definierbar (hier nur zentrale Konzepte) 383
87 Testerzeugung in NetBeans 384
88 Projektaufbau 385
89 Konfiguration des Loggers (log4j.properties) log4j.rootlogger=warn, console log4j.appender.console=org.apache.log4j.consoleappender log4j.appender.console.layout=org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern=%5p [%t] (%F:%L) - %m%n ermöglicht flexibles Schreiben von Meldungen in Log- Dateien sehr einfach ein- und ausschaltbar (hier Level WARN) 386
90 Verbindung public class Verbindung { public static Connection verbinden() throws Exception { Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); return DriverManager.getConnection("jdbc:derby://localhost:1527/Konten","kleuker", "kleuker"); } public static void verbindungtrennen(connection con, IDatabaseConnection condbu) throws Exception { if (con!= null) { con.close(); } if (condbu!= null) { condbu.close(); } } } 387
91 Testbed: Verbindungs- auf und Abbau public class GebotErhoehenTest { private static Connection con = null; // direkte DB-Verbindung private static IDatabaseConnection condbu; // public static void setupbeforeclass() throws Exception { con = Verbindung.verbinden(); condbu = new DatabaseConnection(con, null, true); //DatabaseConfig config = condbu.getconfig(); //config.setproperty(databaseconfig.property_datatype_factory, // new OracleDataTypeFactory()); public static void teardownafterclass() throws Exception { Verbindung.verbindungTrennen(con, condbu); } DBUnit hat DBindividuelle Einstellungen 388
92 basisdaten.xml Möglichkeit zur Spezifikation von Testdaten mit XML <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot mnr="1" ware="100" gebot="1.00" /> <Gebot mnr="1" ware="101" gebot="1.00" /> <Gebot mnr="1" ware="100" gebot="2.00" /> <Gebot mnr="2" ware="100" gebot="2.01" /> <Gebot mnr="3" ware="101" gebot="1.01" /> </dataset> Wird Spalte nicht angegeben, dann NULL-Wert Daten werden in angegebener Reihenfolge eingefügt 389
93 Varianten beim Einspielen von public void setup() throws Exception { IDataSet dataset = new FlatXmlDataSetBuilder().build(new FileInputStream(".\\testdaten\\basisdaten.xml")); DatabaseOperation.CLEAN_INSERT.execute(conDBU, dataset); } CLEAN_INSERT: alle Daten zuerst löschen, dann einfügen DELETE_ALL: löscht alle Daten in den Tabellen DELETE : löscht die übergebenen Daten INSERT: fügt die übergebenen Daten in die Tabellen ein UPDATE: aktualisiert die vorhandenen Daten mit den übergebenen Daten REFRESH: aktualisiert vorhandene Daten, fügt nicht vorhandene Daten hinzu 390
94 Test: erlaubtes public void testgebotaufneuewareok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (4, 102, 3.00)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); } catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (4, 102, 3.00)"); } } // Hinweis: Test mit weiteren erlaubten INSERT, UPDATE, // DELETE sinnvoll Etwas kritisch: es wurde eine Zeile eingefügt; wird nicht überprüft, ob sie so im Ergebnis steht 391
95 Erlaubtes Insert, präzise Prüfung (1/2) einfachesinsert.xml <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot mnr="1" ware="100" gebot="1.00" /> <Gebot mnr="1" ware="101" gebot="1.00" /> <Gebot mnr="1" ware="100" gebot="2.00" /> <Gebot mnr="4" ware="102" gebot="3.00" /> <Gebot mnr="2" ware="100" gebot="2.01" /> <Gebot mnr="3" ware="101" gebot="1.01" /> </dataset> Erinnerung: SQL speichert ohne Reihenfolge, was beim Vergleich zu beachten ist DBUnit ermöglicht lexikographische Sortierung 392
96 Erlaubtes Insert, präzise Prüfung public void testgebotaufneuewarevarianteok() throws Exception { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (4,102,3.00)"); IDataSet databasedataset = condbu.createdataset(); ITable actualtable = databasedataset.gettable("gebot"); IDataSet expecteddataset = new FlatXmlDataSetBuilder().build(new File(".\\testdaten\\einfachesInsert.xml")); ITable expectedtable = expecteddataset.gettable("gebot"); } Assertion.assertEquals(new SortedTable(expectedTable), new SortedTable(actualTable)); 393
97 Test, ob Primary Key noch public void testprimarykeyverstoss(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (2,100,2.01)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (2,100,2.01)"); } catch (SQLException e) { } } 394
98 Test des Triggers public void testhoeheresgebotok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (3, 101, 1.02)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); } catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (3, 101, 1.02)"); } } 395
99 Test des Triggers public void testgleichesgebotverboten(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (3, 101, 1.01)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (3, 101, 1.01)"); } catch (SQLException e) { // hier gibt es Unterschiede zwischen DBs Assert.assertTrue("Fehler erwartet, gefunden" + e.getnextexception().getsqlstate(), e.getnextexception().getsqlstate().equals("30009")); } } // fehlen Tests für UPDATE Fehlercode // Anmerkung: Trigger werden vor PRIMARY KEY überprüft Test auf passenden 396
12. Programmierung in der Datenbank
12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 305 Erweiterung relationaler Einbettung von
11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker
11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 345 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle
13. Testen von DB-Software
13. Testen von DB-Software Kurzeinführung JUnit Regeln zur Testerstellung Nutzung von DBUnit 378 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher
12. Programmierung in der Datenbank
12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 307 Erweiterung relationaler Einbettung von
Transaktionsmanagement - Einführung. Prof. Dr. T. Kudraß 1
Transaktionsmanagement - Einführung Prof. Dr. T. Kudraß 1 Einführung Nebenläufige Ausführung von Benutzerprogrammen wesentlich für gute Performance des DBMS Weil Plattenzugriffe häufig und relativ langsam
Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit
Transaktionen in Praxis. Dr. Karsten Tolle Vorl
Transaktionen in Praxis Dr. Karsten Tolle Vorl. 13.06.2017 Probleme bei Transaktionen Lost Update und Inconsistent Retrieval Sichtweise vom Benutzer Auszug aus SQL 92 1) P1 ("Dirty read"): SQL-transaction
Isolationsstufen für Transaktionen. Dr. Karsten Tolle
Isolationsstufen für Transaktionen Dr. Karsten Tolle Probleme bei Transaktionen Gewährleistung der Isolation Sperren kein Lost Update Read 1 (Accounts[13]) Read 2 (Accounts[13]) Write 2 (Accounts[13],101.000)
Eigenschaften von TAs: ACID-Prinzip
Transaktionsparadigma Definition: Transaktion ununterbrechbare Folge von DML-/DDL-Befehlen begin transaction --- end transaction begin: meist implizit mit ersten Datenbankzugriff end: commit (work) oder
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit.
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS 21.06.2018 DATENMODELLIERUNG 2 (184.790) DATENBANKSYSTEME (184.686) GRUPPE
Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.
Thema: Datenbanken Dozent: Prof. Dr. Stephan Kleuker Seitennummer: Seite 1 von 12 Studiengang: Technische Informatik Studiensemester: 3 Datum: Bearbeitungszeit: 120 Minuten Matrikelnummer: Name: Dies ist
Transaktionen in Praxis. Dr. Karsten Tolle Vorl
Transaktionen in Praxis Dr. Karsten Tolle Vorl. 12.12.2018 Probleme bei Transaktionen Lost Update und Inconsistent Retrieval Sichtweise vom Benutzer Auszug aus SQL 92 1) P1 ("Dirty read"): SQL-transaction
Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1
Transaktionen & ACID Dr. Christian Senger Transaktionen & ACID 1 PC Architekturen Kein Mehrbenuzterbetrieb Recovery? Benutzerabbrüche? PC Lokale Datenbank PC PC PC PC PC PC-System DBMS PC PC PC PC Internet
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS DATENBANKSYSTEME VU 184.686 11. 3. 2014 Kennnr. Matrikelnr.
Willkommen. Datenbanken und Anbindung
Willkommen Datenbanken und Anbindung Welche stehen zur Wahl? MySQL Sehr weit verbreitetes DBS (YT, FB, Twitter) Open-Source und Enterprise-Version Libs in C/C++ und Java verfügbar Grundsätzlich ist ein
7. Transaktionsverwaltung
7. Transaktionsverwaltung Motivation Transaktionen erlauben Bündelung von Operationen und gelten als wichtigster Beitrag des Bereichs Datenbanken zur Informatik; sie werden heute auch außerhalb von Datenbanksystemen
Client/Server-Programmierung
Client/Server-Programmierung WS 2017/2018 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 14. September 2017 Betriebssysteme / verteilte
6. Updates in SQL 6-1. Inhalt. 1. Update-Kommandos in SQL. 2. Transaktionen. 3. Gleichzeitige Zugriffe
6. Updates in SQL 6-1 Inhalt 1. Update-Kommandos in SQL 2. Transaktionen 3. Gleichzeitige Zugriffe 6. Updates in SQL 6-2 Updates in SQL: Übersicht SQL-Befehle zur Änderung des DB-Zustands: 1. INSERT: Einfügung
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7 Aufgabe 2 + 3: Datenbanksysteme I import java.sql.*; import oracle.jdbc.driver.*;
6. Trigger Charakterisierung von Triggern. 6. Trigger. Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen
6. Trigger Charakterisierung von Triggern 6. Trigger Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen auf einer Relation ausgelöst werden. Trigger stellen eine einfache
JUnit 4 Tutorial. Wolfgang Stöttinger
JUnit 4 Tutorial Wolfgang Stöttinger JUnit 4 Tutorial... 1 1 Einführung in JUnit 4... 3 1.1 Wie funktioniert JUnit?... 3 1.2 Annotations... 3 1.2.1 Test Annotation... 3 1.2.2 Before Annotation... 3 1.2.3
10 Transaktionen Änderungen verwalten
Eindruck eines Einnutzer- Systems Datenbanken werden meist von vielen Nutzern fast gleichzeitig genutzt. Dieses Kapitel zeigt Ihnen die möglichen Gefahren und Lösungsansätze. In den bisherigen Kapiteln
Beispiel: DB-Mock (1/7)
Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau
12. Views und Datenbankverwaltung. Views Änderungen in Views. Organisation der DB. Zugriffsrechte. Datenbanksysteme Prof. Dr.
12. Views und Datenbankverwaltung Views Änderungen in Views Organisation der DB Zugriffsrechte 282 Sichtkonzept (Views 1/2) Sicht (View): mit eigenem Namen bezeichnete, aus Basisrelation abgeleitete, virtuelle
fbi h_da Datenbanken Kapitel 7: Transaktionsmanagement Schestag Datenbanken (Cnam) Kapitel 7-1
Datenbanken Kapitel 7: Transaktionsmanagement Schestag Datenbanken (Cnam) Kapitel 7-1 Transaktionsmanagement Inhalte des Kapitels Das Transaktionskonzept Konkurrierende Zugriffe und Sperren (Concurrency
Grundlagen von Datenbanken. Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking
Grundlagen von Datenbanken Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking SQL DDL: Referentielle Aktionen (1/3) Potentielle Gefährdung der referentiellen Integrität durch Änderungsoperationen
Transaktionsverwaltung
Transaktionsverwaltung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Transaktionsverwaltung Transaktionen:
Transaktionen. Concurrency Management in MS SQL Server
Transaktionen Concurrency Management in MS SQL Server Transaktionen in SQL Server SQL Server bietet die Möglichkeit, eine Reihe von Datenbankoperationen (Änderungen) in einem logischen Vorgang zu gruppieren
Kapitel 2 Transaktionsverwaltung. Skript 2009 Matthias Schubert
Kapitel 2 Transaktionsverwaltung Skript 2009 Matthias Schubert Dieses Skript basiert auf dem Skript zur Vorlesung Datenbanksysteme II von Prof. Dr. Christian Böhm gehalten im Sommersemester 2007 an der
Transaktionsverwaltung
Kapitel l2 Transaktionsverwaltung Skript 2009 Matthias Schubert Dieses Skript basiert auf dem Skript zur Vorlesung Datenbanksysteme II von Prof. Dr. Christian Böhm gehalten im Sommersemester 2007 an der
Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn
Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher
Oracle & Java HOW TO
Oracle & Java HOW TO Helge Janicke, Niels-Peter de Witt, Karsten Wolke 21. Januar 2002 Inhaltsverzeichnis 1 Java-Anbindung an Oracle-DB 2 2 Benötigte Programme und Daten 2 3 Einbinden der Klassen 2 4 Aufbau
Beispiel zur referentiellen Integrität
3. Der SQL-Standard 3.14. Integrität und Trigger Seite 1 Beispiel zur referentiellen Integrität CREATE TABLE T1( k1 NUMERIC NOT NULL PRIMARY KEY); CREATE TABLE T2( k2 NUMERIC NOT NULL PRIMARY KEY, k1 NUMERIC,
Klausur Datenbanken II
Klausur Datenbanken II 8.3.2001 Name Vorname Semester Matrikelnr Aufgabe Punkte maximal 1 8 2 8 3 3 4 3 5 4 6 6 7 6 8 6 9 [Zusatz] [4] Summe 44 Punkte erreicht Bitte geben Sie die Lösungen möglichst direkt
Datenbanksysteme. Transaktionen. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen
Datenbanksysteme Transaktionen Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Sommersemester 2019 Übersicht Transaktionen Motivation ACID-Eigenschaften Recovery Ursachen für Recovery
Client/Server-Programmierung
Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 20. November 2015 Betriebssysteme / verteilte
Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS DATENBANKSYSTEME VU 184.686 04. 05. 2016 Kennnr. Matrikelnr.
Übung PL/SQL Trigger Lösungen
Übung PL/SQL Trigger Lösungen 1) Gebe das aktuelle Datum aus. Wofür steht dual? Ändere das Datum für Deine aktuelle Session auf das Format Jahr (4 Stellen) Monat (2 Stellen) Tag (2 Stellen)[Leerzeichen]Stunde
Transaktionen in der Praxis. Dr. Karsten Tolle
Transaktionen in der Praxis Dr. Karsten Tolle Praxisbeispiel in Java Connection con = null; try { con = DriverManager.getConnection("jdbc:db2:sample"); } catch (Exception e) { e.printstacktrace(); } con.setautocommit(false);
Inhaltsverzeichnis. Inhaltsverzeichnis
Inhaltsverzeichnis Das Script für die Lehrveranstaltung Datenmanagement wurde im Wintersemester 2007/2008 komplett überarbeitet und neu strukturiert. Wir bitten darum, eventuelle Fehler im Script an Milan
Datenbanken Konsistenz und Mehrnutzerbetrieb III
Datenbanken Konsistenz und Mehrnutzerbetrieb III 1. Oracle Architektur! Komponenten des Oracle Servers! Zugriff über Netzwerk 2. Zugriffsrechte! Starten und Schließen der Datenbank! Nutzer und Rollen!
Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6:
Universität Augsburg, Institut für Informatik Wintersemester 2010/2011 Prof. Dr. W. Kießling 17. Dez. 2010 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7 Aufgabe 1: Erstellen einer Multimedia-Datenbank
Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion
Überblick über Stored Functions Funktionen Eine Funktion ist ein benannter PL/SQL- Block, der einen Wert zurückgibt. Eine Funktion kann in der Datenbank als Objekt zur wiederholbaren Ausführung gespeichert
Praktische SQL-Befehle
Praktische SQL-Befehle Datenbanksysteme I WiSe 2018/2019 Todor Ivanov DB1 WS2018 1 Praktische SQL-Befehle Nested Selects Inserts Updates Views Triggers Constraints Functions Voraussetzung: Laptop + MySQL/
Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8
Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez. 2009 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8 Aufgabe 1: JDBC 2.0 und Scrollable Result Sets Datenbanksysteme
Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.
432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte
Tag 4 Inhaltsverzeichnis
Tag 4 Inhaltsverzeichnis Normalformen Problem Formen (1-4) Weitere Formen Transaktionen Synchronisationsprobleme Überblick Autocommit Locking Savepoints Isolation levels Übungen RDB 4-1 Normalformen Problematik
Schnellübersichten. SQL Grundlagen und Datenbankdesign
Schnellübersichten SQL Grundlagen und Datenbankdesign 5 Datenbanken 2 6 Tabellen erstellen und verwalten 3 7 Daten einfügen, aktualisieren, löschen 4 8 Einfache Datenabfragen 5 9 Schlüsselfelder und Indizes
CADSTAR MRP-Link. MRP-Link ist erstellt von:
CADSTAR MRP-Link MRP-Link ist erstellt von: CSK CAD Systeme Kluwetasch Zip: 2161 Town: Altenholz Street: Struckbrook 9 Tel: +9-31-32917-0 Fax: +9-31-32917-26 Web: http://www.cskl.de E-Mail: Kluwetasch@cskl.de
Webbasierte Informationssysteme
SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)
Beispielszenarien. 12. Transaktionen. ACID-Eigenschaften. Transaktion
12. Transaktionen Beispielszenarien Transaktionsbegriff Probleme im Mehrbenutzerbetrieb Serialisierbarkeit Sperrprotokolle zur Synchronisation Isolationsebenen in SQL Platzreservierung für Flüge quasi
Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 9 Embedded SQL Vorlesung Datenbanken 1 Embedded SQL (siehe auch [Date00]) Arbeitsweise ähnlich PL/SQL, allerdings: Normale Programmiersprache mit eingestreuten SQL-Befehlen und anderen Befehlen
Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung
Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape 6. Übung Aufgabe 1: In dieser Übung sollen Sie eine kleine Java-Anwendung schreiben, die auf die Oracle-Datenbank
Datenintegrität und Transaktionskonzept
und Transaktionskonzept 1. / Datenkonsistenz 1 Mögliche Gefährdung der : Missachtung von Konsistenzbedingungen ("Semantische Integrität") Inkorrekte Verweise auf Datensätze in verschiedenen Tabellen ("Referentielle
Probeklausur Datenbanktechnologie
Probeklausur Datenbanktechnologie Prof. Dr. Ingo Claßen Name: Vorname: MatrNr: Bewertung 1 25 2 15 3 10 4 10 Übung 40 Σ = 100 Punkte Punkte: Note: Notenspiegel 100 95 1,0 94 90 1,3 89 85 1,7 84 80 2,0
12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 Datenschutz: Zugriffsrechte in SQL 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1
Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen
11. JDBC. Ziel: Verständnis für Konzepte von JDBC aufbauen. Prof. Dr. Stephan Kleuker. Datenbanken
11. JDBC Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses Einführung JUnit Einführung DBUnit Ziel: Verständnis für Konzepte von
Java: MySQL-Anbindung mit JDBC.
Java: MySQL-Anbindung mit JDBC Vorarbeiten Wir brauchen: - MySQL-Server - JDBC-Treiber - (Import java.sql.*) Vorarbeiten MySQL-Server in unserem Falle: WAMP (= Apache) (runterladen, installieren, starten)
1a) SQL Stored Procedure via IDs
1a) SQL Stored Procedure via IDs Erstellen Sie analog zu Aufgabe 2d) des ersten Übungsblatts eine SQL Stored Procedure, welche den Freundschaftsgrad zweier Benutzer eines sozialen Netzwerks aktualisiert.dazu
1 Transaktionen in SQL. 2 Was ist eine Transaktion. 3 Eigenschaften einer Transaktion. PostgreSQL
1 Transaktionen in SQL Um Daten in einer SQL-Datenbank konsistent zu halten, gibt es einerseits die Möglichkeit der Normalisierung, andererseits sog. Transaktionen. 2 Was ist eine Transaktion Eine Transaktion
Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21
Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 21 Datenbanken SQL JDBC 2 / 21 Relationale Datenbanken Ein Datenbanksystem ist ein System zur Speicherung von (großen) Datenmengen:
Datenbank und Tabelle mit SQL erstellen
Datenbank und Tabelle mit SQL erstellen 1) Übung stat Mit dem folgenden Befehlen legt man die Datenbank stat an und in dieser die Tabelle data1 : CREATE DATABASE stat; USE stat; CREATE TABLE data1 ( `id`
Datenbanksysteme I Übung: JDBC. Jana Bauckmann
Datenbanksysteme I Übung: JDBC Jana Bauckmann Wo reicht SQL alleine nicht? 2 Web-Anwendungen Daten übersichtlich und schön präsentieren Komplizierte Fragestellungen Sind sich 2 Tupel ähnlich? Duplikaterkennung
Datenbanksysteme 2013
Datenbanksysteme 2013 Kapitel 8: Datenintegrität Vorlesung vom 14.05.2013 Oliver Vornberger Institut für Informatik Universität Osnabrück Datenintegrität Statische Bedingung (jeder Zustand) Dynamische
Isolationsstufen für. Dr. Karsten Tolle Dienstag 31. Januar 2012
Isolationsstufen für Transaktionen / Sicherheit Dr. Karsten Tolle Dienstag 31. Januar 2012 Praxisbeispiel in Java Connection con = null; try { con = DriverManager.getConnection("jdbc:db2:sample"); } catch
Üben von DDL und DML. Ergebnis:
SQL DDL Üben von DDL und DML https://www.jdoodle.com/execute-sql-online Ergebnis: Befehlsgruppen in SQL DDL Data Definition Language DML Data Manipulation Language CREATE: Tabellen anlegen DROP: Tabellen
3.6 Transaktionsverwaltung
3.6 Transaktionsverwaltung Transaktionen erlauben Bündelung von Operationen und gelten als wichtigster Beitrag des Bereichs Datenbanken zur Informatik; sie werden heute auch außerhalb von Datenbanksystemen
Triggern. Change Data Capture
Triggern. Change Data Capture Triggers Was sind Triggers? Eine bestimmte Art von gespeicherte Prozedur, die automatisch ausgeführt wird wenn eine DML oder DDL Anweisung ausgeführt wird Eine Menge von Aktionen,
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit.
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS 30.01.2018 DATENMODELLIERUNG 2 (184.790) DATENBANKSYSTEME (184.686) GRUPPE
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit.
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS MUSTERLÖSUNG 30.01.2018 DATENMODELLIERUNG 2 (184.790) DATENBANKSYSTEME
SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99
SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:
In diesem Abschnitt stehen Transaktionen im Mittelpunkt. Hierbei geht es darum, wie bei Mehrbenutzerbetrieb die Integrität von Datenbanken
In diesem Abschnitt stehen Transaktionen im Mittelpunkt. Hierbei geht es darum, wie bei Mehrbenutzerbetrieb die Integrität von Datenbanken gewährleistet wird. 1 Im einzelnen geht es in diesem Abschnitt
Kapitel 3 Synchronisation
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Skript zur Vorlesung: Datenbanksysteme II Sommersemester 2014 Kapitel 3 Synchronisation Vorlesung: PD Dr. Peer Kröger
Datenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt Datenschutz: Zugriffsrechte in SQL 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
Oracle: Abstrakte Datentypen:
Oracle: Abstrakte Datentypen: Oracle bietet zwei mögliche Arten um abstrakte Datentypen zu implementieren: Varying Array Nested Table Varying Array (kunde) kdnr kdname gekaufteart 1 Mustermann 1 4 5 8
Abfragen (Queries, Subqueries)
Abfragen (Queries, Subqueries) Grundstruktur einer SQL-Abfrage (reine Projektion) SELECT [DISTINCT] {* Spaltenname [[AS] Aliasname ] Ausdruck} * ; Beispiele 1. Auswahl aller Spalten SELECT * ; 2. Auswahl
Datenbank- Verwaltungssysteme
Datenbank- Verwaltungssysteme Diana Troancă Babeș-Bolyai Universität Fakultät Mathematik und Informatik Dozent: Diana Troancă E-mail: dianat [at] cs.ubbcluj.ro Website: www.cs.ubbcluj.ro/~dianat/ Feedback
2 Anlegen und Konfigurieren von Datenbanken 35
Inhalt 1 Einführung und Installation 9 1.1 Einführung 11 1.1.1 Aufbau 11 1.1.2 Schreibkonventionen 12 1.1.3 Zur Beispieldatenbank 13 1.1.4 Kurz-Installation 19 1.2 Die Oracle-Installation 20 1.3 Die Installation
Datenabstraktion / Kapselung in (O)RDBMS
Datenabstraktion / Kapselung in (O)RDBMS Prozeduren und Funktionen (Routinen) SQL 92: Stored Procedures SQL:2003: Unterscheidung zw. Funktionen und Prozeduren Prozedur: Nicht an einen bestimmten Datentyp
Cursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL
Cursor Cursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL Cursor sind grob vergleichbar mit Iteratoren in modernen Programmiersprachen wie Java;
Tag 4 Inhaltsverzeichnis
Tag 4 Inhaltsverzeichnis Normalformen Problem Formen (1-4) Weitere Formen Transaktionen Synchronisationsprobleme Überblick Autocommit Locking Savepoints Isolation levels Übungen RDB 4-1 Normalformen Problematik
UML/OCL für die Integritätssicherung in Datenbankanwendungen
UML/OCL für die Integritätssicherung in Datenbankanwendungen Zwischenbericht Diplom Inhalt des Vortrages Motivation der Arbeit Konzept für die Integritätssicherung Musterkatalog Å Probleme/Lösungen Tool-Gesamtkonzept
DB I S. 1 Referentielle Aktionen [10 P.] Gegeben sei folgende Datendefinition:
1 Referentielle Aktionen Gegeben sei folgende Datendefinition: [10 P.] CREATE TABLE Wissenschaftler( SVNr int PRIMARY KEY, Vorname varchar(25) NOT NULL, Nachname varchar(25) NOT NULL, Gehalt int NOT NULL
ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski. www.iit.tu-cottbus.de
08 Datenbanken Übung SQL Einführung Eckbert Jankowski www.iit.tu-cottbus.de Datenmodell (Wiederholung, Zusammenfassung) Objekte und deren Eigenschaften definieren Beziehungen zwischen den Objekten erkennen/definieren
Übung Datenbanksysteme I Transaktionen, Selektivität, XML
Übung Datenbanksysteme I G-3.1.09, Campus III Hasso Plattner Institut Übersicht Übungsthemen Transaktionen Selektivität XML Chart 2 Wiederholung Transaktionen Eine Transaktion ist eine Folge von Operationen
View. Arbeiten mit den Sichten:
View "individuelle Sicht" (vgl. 3-Schichten-Modell) virtuelle Tabellen: in der DB wird nicht deren Inhalt, sondern nur die Ableitungsregel gespeichert. Arbeiten mit den Sichten: Anfragen: kein Problem.
Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6
Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez. 2011 Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6 Datenbanksysteme I Aufgabe 1: Deklarative Änderungsoperationen
Datenbanksysteme. Dominic Pacher. Datenbanken und Informationssysteme (DBIS) Institut für Informatik Universität Innsbruck. dbis-informatik.uibk.ac.
Datenbanksysteme Dominic Pacher Datenbanken und Informationssysteme (DBIS) Institut für Informatik Universität Innsbruck dbis-informatik.uibk.ac.at 1 Übersicht Was passiert in den kommenden 90 Minuten?