Aufgabe 1 (40 Punkte) Diskutieren Sie folgenden Ansatz und nehmen Sie Stellung: Bei der Implemenatition der Indexverwaltung, die als Binary Trees verwirklicht werden, verzichtet der DBMSHersteller darauf, nicht mehr benötigte Index-Pages freizugeben. 1) Begründen Sie die Überlegung des DBMS-Herstellers. 2) Welche Konsequenzen hat das z.B. für folgende Situation: in einem Transaktions-orientierten System sollen die Transaktionen durch einen Timestamp gekennzeichnet werden. Es ist mit hohem Transaktionsaufkommen zu rechnen. Drei Monate alte Transaktionen werden, um Platz zu sparen, komprimiert und aus der Datenbank entfernt. 1.) Ein Index ist häufig als Btree organisiert, das DBMS stellt die entsprechenden schnellen Suchmethoden bereit. Eine Organisation der Daten als Bbaum spart Zugriffszeit ein. Der Binär-Baum muss nicht neu durchsortiert und angeordnet werden. Bei jedem INSERT, UPDATE oder DELETE muss der Index neu aufgebaut werden. Eine solche Änderung ist unter Umständen mit hohem Aufwand verbunden. Die Beschleunigung, die SELECT-Anweisung durch den Aufbau von Indexen erfahren, wird bei hoher Änderungsfrequenz möglicherweise aufgewogen durch den hohen Änderungsaufwand. Deshalb sollten Indexe sorgfältig bedacht werden. DBMS verzichten deshalb auf eine Neuordnung. Reorganisation: von der Implementation abhängig, gilt unter anderem für die von DB2 implementierten Indexe. Wir ein Index auf einer Spalte errichtet, die mit monoton steigenden Werten gefüllt wird, so wächst der Index weiter, auch wenn frühe Dateneinträge gelöscht werden. Es erfolgt in diesem Falle nicht, wie man erwarten würde, eine Freigabe der nicht mehr benötigten Indexseiten. Die Indexeinträge sind zwar gelöscht, aber die Seiten werden für neue Indexeinträge vorgehalten. Aufgrund der monoton wachsenden Werte wird dieser Bereich aber nicht mehr mit neuen Indexeinträgen gefüllt. Für solche Index-Organisation muss – je nach Änderungsvolumen der Tabelle – von Zeit zu Zeit eine vollständige Reorganisation des Index, d.h. Löschen und Neuanlegen, vorgenommen werden. 2.) Löcher im Baum, da 3 Monate alte Transaktionen entfernt werden. Performance wird vermindert, da Äste des Baumes ins Leere zeigen Aufgabe 2 (20 Punkte) Welche Berechtigung gibt es für den DRDA-Ansatz, da ja ODBC bereits lange etabliert ist? ODBC ist eine standardisierte Schnittstelle für den Zugriff auf relationale Datenbanksysteme. Sie wurde ursprünglich von Microsoft spezifiziert, hat sich aber inzwischen zu einem betriebsübergreifenden, allgemein akzeptierten de facto-Standard entwickelt. Mittels ODBC kann auf jede Datebank, für die ein ODBC-Treiber existiert, zugegriffen werden. ODBC stützt sich auf eine standardisierte SQL-Version. Dadurch ist es möglich, die Anwendung unabhängig von einer spezifischen Datenbank zu programmieren. ODBC kann jedoch ausschließlich von C- und C++-Programmen verwendet werden. Es wurde ursprünglich für C entwickelt und ist daher nicht objektorientiert. ODBC stellt dem Programm ganzzahlige Werte als handles und Zeiger auf Strukturen zur Verfügung, die von der Anwendung zu verwenden sind. Der Verzicht auf Objektorientierung und der Zugriff mittels Zeigern machen ODBC relativ fehleranfällig. Eine verteilte Datenbank soll dem Benutzer - interaktiver Benutzer oder Anwendungsprogramm - die Moeglichkeit bieten, mit auf verschiedenen Rechnern verteilten Daten genauso zu operieren, als wären sie in dem lokalen DBMS (Database Management Systems) gespeichert. Die Arbeitsweise von Distributed Databases baut darauf auf, dass ein SQL-Befehl ueber das Netz zu dem DBMS gesandt wird, in dem die betreffenden Daten gespeichert sind. Jeder SQL-Befehl wird so zu einem Nachrichtenpaar: SQL-Befehl hin und Antwort zurueck. Wenn ein Unternehmen DB2, SQL/Base und Informix in seiner Client- Server-Welt kombinieren moechte, ergeben sich zwei Probleme: - Die unterschiedlichen DB-Systeme muessen sich untereinander verstaendigen koennen. - Die Anwendungen muessen ihre SQL-Befehle unabhaengig von dem jeweiligen DBMS absetzen. Fuer ersteres bietet sich die Standard-Schnittstelle DRDA (Distributed Relational Database Architecture) von IBM an, die inzwischen von verschiedenen DB-Systemen genutzt wird. In der Praxis findet zur Zeit allerdings nur eine rudimentaere Art der Zusammenarbeit statt ... Da aber DRDA keinen Standard fuer die SQL-Befehle enthaelt, die zwischen den beteiligten DB-Systemen verschickt werden, muessen die Anwendungsprogramme Disziplin ueben: Sie duerfen nur SQL-Anweisungen aus dem kleinsten gemeinsamen Nenner aller DB-Systeme verwenden. Das entspricht zur Zeit dem Befehlsumfang von DB2. Als Konsequenz aus diesen Darstellungen ergibt sich, dass eine Distributed Database wenig hilfreich fuer verteilte Systeme ist. Vorrangiger ist es: - die Daten so an die dezentralen Rechner zu verteilen, dass keine oder nur wenige Zugriffe auf entfernte Datenbanken noetig sind; - nur Daten, die weitgehend statisch sind, redundant zu halten (hierfuer genuegt File-Transfer als Aktualisierungsmechanismus), waehrend Update-intensive Daten nur einmalig zentral gespeichert werden; - statt SQL-Befehle ueber das Netz zu versenden, lieber Funktionsaufrufe im Rahmen von Cooperative Processing zu versenden. Wer seine Daten zu sehr streut, ist selbst daran schuld, wenn er sie hinterher wieder muehsam zusammensuchen muss. DRDA Application und DBMS können auf unterschiedlichen Hardwareund Betriebssystemplattformen basieren, im Falle von DUOW (distributed unit of work) können auch die angesprochenen DBMS in einer Unit of work von unterschiedlichem Typ sein. DRDA beschreibt die Aktionen zwischen Application und Server, um folgende Funktionen auszuführen: - Verbindungsaufbau einschließlich Identifikation - Binden der Hostvariablen und des SQL-Statements an ein entferntes DBMS - Ausführung des SQL-Statements im entfernten DBMS für die Application und Rückgabe der ermitteltenDaten - Ausführen dymanischer SQL-Anweisungen für die Application und Rückgabe der ermittelten Daten - Unterstützung der Transaktionen - Abbau der Verbindung DUOW pro Unit of Work kann auf mehrere DBMS mit Requests zugegriffen werden, die Anwendung steuert die Verteilung der Zugriffe, pro Request kann jeweils nur ein DBMS angesprochen werden, die Anwendung löst Commit aus, das als 2-Phasen-Commit die beteiligten DBMS koordiniert Aufgabe 3 (15 Punkte) SQL92 (full level) fordert eine einheitliche Struktur für das Data Dictionary. Wie können DBMS-Hersteller dies verwirklichen, ohne ihre speziellen DBMS-Fähigkeiten und -Strukturen aufgeben zu müssen? ??? Der Katalog ("Data Dictionary") ist eine Menge von Tabellen, die vom Data Base Management System (DBMS) selbst verwaltet werden. Diese Tabellen beschreiben die Struktur der Datenbank, d.h. den Aufbau der übrigen realen und virtuellen Tabellen, der Indexe und übrigen Objekte der Datenbank, aber auch Zugriffsrechte einzelner Benutzer usw. ... Aufgabe des DBMS ist es, die Daten in diesen Tabellen immer auf dem neuesten Stand zu halten, so dass der Katalog den Zustand der Datenbank richtig beschreibt. Jede Anweisung, die ein neues Objekt in der Datenbank erzeugt oder ein bereits vorhandenes ändert, bewirkt indirekt eine Veränderung der Eintragungen im Katalog. In SQL wird ein INFORMATION_SCHEMA gefordert, das aus einer Sammlung von Datensichten besteht. Die Basistabellen, auf denen diese Datensichten beruhen, werden ebenfalls im Standard aufgeführt. Das zugehörige Schema wird DEFINITION_SCHEMA genannt. Es ist aber nicht so gemeint, dass ein standardkonformes DBMS genau diese Basistabelle und Datensichten bereitstellen muss. Das INFORMATION_SCHEMA kann und darf durch Datenbankhersteller jederzeit erweitert werden, wenn dies für die Funktion des DBMS erforderlich ist.... Aufgabe 4 (20 Punkte) Was ist Ihrer Einschätzung nach die Zielrichtung von Lotus Notes? Ist es ein Werkzeug, um rel. DBMS abzulösen? --- Aufgabe 5 (15 Punkte) In der Regel wird Information aus einem OLTP-System in ein Data-Ware-House übernommen. Wie kann dies geschehen? Zeigen Sie mehrere Möglichkeiten auf. OLTP = Online Transaktion Processing, Transaktionssysteme, die interaktiv und mit schnellen Antwortzeiten arbeiten Ein DSS stellt an das DataWareHouse in der Regel nur lesende Fragen, die Zugriffe sind also ReadOnly. Aus diesen Gründen können die Daten, die typischerweise aus einem transaktionsorientierten OLTP-System kommen, während der Ruhephasen des OLTP-Systems bereitgestellt werden. Eine Vorverdichtung ist dabei üblich, da von einer Reihe von Detail-Informationen abstrahiert werden kann. Zudem reduziert eine Vorverdichtung den Aufwand bei Anfragen an das System. Aus diesem Grunde werden in der Regel stark denormalisierte Daten eingesetzt, d.h. anstelle der "schlanken" Tabellen im OLTP werden im DataWareHouse "fette" Tabellen mit vielen redundanten Spalten gespeichert; Joins werden vorab vollzogen, damit bei den Anfragen die Performance nicht leidet. Anlegen und Laden eines Data Warehouses vom OLTP SQL-Anweisungen während off-Zeit des OLTP Snapshot Log sniffing Insert-, Update-, Delete-Trigger spezielle Data Extract Programme während off-Zeit des OLTP SQL-Anweisungen während off-Zeit des OLTP können insbesondere dazu benutzt werden, Pre-Joins anzulegen Snapshot Überführung einer Tabelle in das Data Warehouse Ausnutzen von Replikation Log sniffing mit Spezialprogramm die Logs auf Änderungen untersuchen und diese in das Data Warehouse einbringen Insert-, Update-, Delete-Trigger direktes Übernehmen jeder Änderung spezielle Data Extract Programme während off-Zeit des OLTP dieses Vorgehen bietet die besten Möglichkeiten, vor dem Einfügen Daten zu aggregieren Aufgabe 6 (25 Punkte) Zugriffe auf eine Datenbank, die von Ihnen administriert wird, werden ein paar Wochen, nachdem die gesamte Anwendung installiert wurde, merklich langsamer. Dabei hat sich nichts an den Anwendungen, die auf die Datenbank zugreifen, geändert. Welche Überlegungen stellen Sie an? - Reorganisation von Tabellen und Indexen, wenn Datenmenge zu groß, Anzahl der gespeicherten Dateien. Optimizer hinzufügen, bzw. Hilfestellungen dem Optimizer geben SQL-Anweisungen anders formulieren Einführen redundanter Datenhaltung Optimistisches Synchronisationsverfahren, evtl. zuviel Sperren, manuell durch lock abhelfen Aufgabe 7 (15 Punkte) Es wird eine spezielle Anwendung für die Datenbank geplant, die (in großen Zeitabständen) gestartet werden und dabei mehrere große Tabellen ,,updaten`` soll. Wie kann sichergestellt werden, dass diese Anwendung deadlock-frei und möglichst effizient laufen kann? Was für Folgen hat Ihr Vorschlag für die Zeitpunkte, zu denen diese Anwendung gestartet werden sollte? - setzen manueller Sperren Zeitpunkt: nachts optimistisches Synchronisationsverfahren batchverarbeitung evtl. Timestamp setzen Mit der Benutzung von Sperren ist ein Problem verbunden: wird in einer Transaktion ein Objekt verändert und damit gesperrt, so kann eine andere Transaktion auf dieses Objekt erst nach dem Ende der ersten Transaktion zugreifen. Was passiert aber, wenn eine andere Transaktion auch ein Objekt ändert und somit sperrt und wenn die Transaktionen wechselseitig auf die gesperrten Objekte der jeweils anderen Transaktion zugreifen wollen? Dies ist die typische Verklemmung, auch Deadlock genannt. Erst das Abbrechen einer der beteiligten Transaktionen mit der ROLLBACK-Anweisung gibt die vormals gesperrten Objekte wieder frei, die verbleibenden Transaktionen können nun weiterarbeiten. Die abgebrochene Transaktion muss zu einem späteren Zeitpunkt wiederholt werden. Normalerweise sind Sperrmechanismen nicht notwendig, da SQL die Sperren automatisch anfordert. Der Benutzer kann aber auch manuell Sperren setzen. Dies ist gerade bei umfangreichen Transaktionen sehr nützlich. Eine Sperre kann vom Benutzer durch die Anweisung LOCK TABLE table_name [IN EXCLUSIVE MODE | IN SHARE MODE] anfordern. Mit dem Zusatz IN EXCLUSIVE MODE ist Tabelle bis zur COMMIT- bzw. ROLLBACK-Anweisung für alle anderen Benutzer gesperrt. Soll die Tabelle hingegen nur zum Lesen gesperrt werden, so wird das bewirkt durch IN SHARE MODE. Gerade bei eingebetteten SQL-Anweisungen in Programmen, in denen lange Transaktionen aufgebaut werden, ist eine sorgfältige Prüfung des Zeitpunktes, zu dem die Sperren gesetzt werde, und eine Analyse, welche Sperren aufgebaut werden müssen, zwingend erforderlich. Zur schnelleren Ausführung der Abarbeitungen empfiehlen sich Batches. Zum Schutz gegen Deadlocks bieten die DBMS'e weiterhin das optimistische Synchronisationsverfahren an. Diese Systeme gehen von der Annahme aus, dass Konflikte zwischen Transaktionen seltene Ereignisse darstellen und somit das präventive Sperren der Objekte unnötigen Aufwand verursacht. Daher greifen diese Verfahren zunächst nicht in den Ablauf einer Transaktion ein, sondern erlauben ein nahezu beliebig paralleles Arbeiten auf der Datenbank. Erst bei Transaktionende wird überprüft, ob Konflikte mit anderen Transaktionen aufgetreten sind. Gemäß dieser Vorgehensweise unterteilt man die Ausführung einer Transaktion in drei Phasen: - Lesephase - Validierungsphase - Schreibphase In der Lesephase wird die eigentliche Transaktionsverarbeitung vorgenommen, d.h. es werden Objekte der Datenbank gelesen und modifiziert. Jede Transaktion führt dabei ihre Änderungen auf private Kopien in einem ihr zugeordneten Transaktionspuffer durch, der für keine andere Transaktion zugänglich ist. Validierungsphase Im Gegensatz zu Sperrverfahren, bei denen Blockierungen das primäre Mittel zur Behandlung von Synchronisationskonflikten sind, werden hier Konflikte stets durch Zurücksetzen einer oder mehrerer beteiligter Transaktionen aufgelöst. Es ist so mit mehr Rücksetzungen als bei Sperrverfahren zu rechnen; andererseits können bei optimistischen Verfahren keine Deadlocks entstehen. Hat die Transaktion die Validierungsphase erfolgreich durchlaufen - und nur in diesem Falle - werden die gepufferten Änderungen zurückgeschrieben; Schreibphase! Dadurch werden die Änderungen für andere Transaktionen erst sichtbar. Aufgabe 8 (25 Punkte) Beschreiben Sie, wie in Embedded SQL, in CLI und in JDBC der Zugriff auf eine Ergebnistabelle erfolgt. Embedded SQL: Sollen SQL-Anweisungen im Quelltext eingebettet werden, so muss ein Precompiler verwendet werden, um daraus den entsprechenden Code zu generieren, der anschließend vom Compiler verarbeitet werden kann. Zwischen Programm und eingebetteter SQL-Anweisung müssen Variablen ausgetauscht werden können. Hierzu dienen die mit dem Doppelpunkt gekennzeichneten Variablen. Sie werden als Hostvariablen bezeichnet und müssen auch in der SQL-Anweisung dem Precompiler zugänglich sein. Die Einleitung des SQL-Statements ist "EXEC SQL", das Endekennzeichen ist ";", diese sind jedoch sprachabhängig. EXEC SQL INSERT INTO teile VALUES (: t_tnummer, :t_tname, :t_minimum, : t_gewicht );