Teil I: Existierende Infrastruktur heterogener und verteilter Informationssysteme 1. 2. 3. 4. 5. 6. 7. Infrastruktur durch erweiterte Datenbankfunktionalität (“TP-Lite”) Middleware-Infrastruktur durch TP-Monitore (“TP-Heavy”) Standards zur verteilten Objektverwaltung Object Transaction-Monitore Enterprise JavaBeans Message-Oriented Middleware Web-Services Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 1 Kap. 1: Infrastruktur durch erweiterte Datenbankfunktionalität (“TP-Lite”) 1.1 Traditionelle, zweistufige Architektur (“Two-tier”) Klassifikation von Datenbankservern Architekturvarianten: Aufgabenteilung zwischen Client und Server • • Fat Clients – Embedded SQL (statisch und dynamisch) – SQL Call-Level-Interfaces Fat Server – Stored Procedures, Trigger, UDTs Objektverwaltung höherer Ordnung (OHO) – SS 2002 Client … Client DBMS DB DB-Server Kapitel 1: Vorlesung TP-Lite – 2 Klassifikation von Datenbank-Servern DB-Server Monolithisch Multiple Server ein DBS-Prozess mehrere DBS-Prozesse Symmetrisch Asymmetrisch pro Anwendungsprozess ein DBS-Prozess dynamische Zuordnung von Anwendungsprozesse zu DBS-Prozessen Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 3 Monolithischer Server Genau ein Server-Prozess für viele Clients • • Einfache Kommunikation im Server durch Shared Memory • Server verwendet mehrere Threads (Reentrant Code) Führt eigene Ressourcenverwaltung durch Synchronisierter Zugriff auf Systempuffer und zentrale Systemtabellen Monolithische Architektur z.B. bei Sybase oder MS SQL Server zu finden AP AP Client … Client 1 i CL CL AP Client n … DBMS Server CL Betriebssystem 1 Betriebssystem m Netzwerk Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 4 Multiple Server: Symmetrische Konfiguration DBMS ist ein Verbund von verschiedenen Prozessen Jedem Client ist genau ein Server Prozess zugeordnet • Statische Zuordnung, feste Anzahl n Server vorgeneriert « Maximaler Parallelitätsgrad ist n Zu finden bei Oracle im Dedicated Server-Mode, bei Informix und DB2 AP Client 1 CL … AP Client i CL AP Client n … CL Betriebssystem 1 DBMS … DBMS … DBMS Server Server Server n i 1 Betriebssystem m Netzwerk Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 5 Multiple Server: Asymmetrische Konfiguration Ein Client wird mit Hilfe des Dispatchers mit einem freien Server-Prozess verbunden • Feste Anzahl Server ist vorgeneriert • Der Parallelitätsgrad kann jedoch höher sein (da mehrere Clients sich einen Server-Prozess teilen können) Zu finden bei Oracle im Multi-Threaded-Server-Mode CL … AP Client i AP Client n CL CL Betriebssystem 1 Dispatcher AP Client 1 DBMS … DBMS Server Server 1 k Betriebssystem m Netzwerk Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 6 Two-Tier-Architektur Client und Server sind völlig getrennt Kommunikation zwischen Client und Server • Via Netzwerk oder IPC mit gemeinsamen Protokoll (z.B. JDBC, Oracle Net8) (Klare) Aufgabenteilung zwischen Client und Server • • • Präsentation Datenverwaltung Anwendungsfunktionalität Client « Client « Server « ??? Server Client DB Server DB Client Library DB Server Library Betriebssystem Netzwerk, IPC Objektverwaltung höherer Ordnung (OHO) – SS 2002 Betriebssystem Kapitel 1: Vorlesung TP-Lite – 7 Two-Tier-Architektur: Realisierung Aufgabenteilung: Anwendungsfunktionalität im Client oder Server? • Fat Client / Thin Server • Thin Client / Fat Server Was soll der Client machen? • Präsentation • Anwendungsfunktionalität (ESQL/CLI) Was sind die Aufgaben des Servers? • Datenverwaltung • Anwendungsfunktionalität (Stored Procedures, Trigger, etc.) Data Presentation Access Functionality Client Objektverwaltung höherer Ordnung (OHO) – SS 2002 Data Management Server Kapitel 1: Vorlesung TP-Lite – 8 Anwendungsentwicklung — Fat Client / Thin Server Embedded SQL Anwendung Client Call-Level SQL Anwendung SQL CLI Calls Präcompiler CLI-API (Application Program Interface) PräcompilerRuntime Library Call Level Interface Runtime Library DBMS-Treiber SQL-FAP (Format and Protocols), herstellerdefiniert, z.B. Net8 von Oracle DBMS DB Objektverwaltung höherer Ordnung (OHO) – SS 2002 Server Kapitel 1: Vorlesung TP-Lite – 9 Embedded SQL (ESQL) Nach ISO SQL-92 definierte Einbettung von SQL in Programmiersprachen • Präcompiler ersetzt die SQL-Aufrufe in Calls der jeweiligen Runtime Library des verwendeten Datenbank-Servers • Bei Wechsel der Datenbank müssen ESQL-Programme nur neu kompiliert und gelinkt werden Statisches ESQL • • z.B. Java (SQLJ), C, C++, Fortran, Pascal, Cobol, PL/1, Ada Alle SQL-Statements müssen bereits zur Compile-Zeit vollständig bekannt sein Daher müssen auch alle verwendeten Datenbankobjekte zur Compile-Zeit vorhanden sein Dynamisches ESQL • • SQL-Statements werden erst zur Laufzeit erzeugt (dynamisches Generieren von Strings, die SQL-Anweisungen beinhalten) Die verwendeten Datenbankobjekte müssen daher zur Compile-Zeit noch nicht existieren Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 10 Embedded SQL – statisch ESQL/CQuellProgramm (SQL-Anweisungen bekannt) ESQL/C Präcompiler C-QuellProgramm mit SQL Anweisungen und ESQL/C Aufrufen Beispiel: credit (int accountno) { EXEC SQL BEGIN DECLARE SECTION; NUMBER acc_no; NUMBER bal; EXEC SQL END DECLARE SECTION; acc_no := accountno; EXEC SQL SELECT a.balance INTO :bal FROM account a WHERE a.account_number = :acc_no; } Objektverwaltung höherer Ordnung (OHO) – SS 2002 Existenz von Tabellen und Attributen Syntaxprüfung, Typenprüfung Zusätzliche Ersetzungen: • • Ausführbares Programm Zur Compilezeit führt der Präcompiler u.a. folgende Prüfungen durch (mit Hilfe von Informationen aus dem Datenbank-Katalog): • • CPräprozessor Compiler und Linker Die datenbankspezifischen Datentypen (Host Variables) werden durch Datentypen der jeweiligen Programmierumgebung ersetzt Beispiel (ESQL/C): VARCHAR2(10) wird zu struct { unsigned short len; unsigned char arr[10]; } Ansatz ist recht unflexibel (da alle SQLStatements zur Compile-Zeit bekannt sein müssen), jedoch: wenige Laufzeitfehler! Kapitel 1: Vorlesung TP-Lite – 11 Embedded SQL – dynamisch ESQL/CQuellProgramm (SQL-Anweisungen noch nicht bekannt) ESQL/C Präcompiler C-QuellProgramm mit SQL Anweisungen und ESQL/C Aufrufen Beispiel: credit( int amount, int accountno, char *table) { char dyn_stmt[120]; sprintf(dyn_stmt, "UPDATE %s SET balance = balance + :a WHERE account_number = :ano“, table); EXEC SQL PREPARE sql_stmt FROM :dyn_stmt; EXEC SQL EXECUTE sql_stmt USING :amount, :accountno; CPräprozessor Compiler und Linker Ausführbares Programm Das SQL Statement ist erst zur Laufzeit bekannt • • • Der Precompiler kann weniger Überprüfungen durchführen Mehr Flexibilität Aber auch mehr Laufzeitfehler möglich! } Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 12 SQL Call-Level Interface (CLI) Standardisierte Schnittstelle zur Kommunikation mit Datenbanken ohne Präcompiler • SQL/CLI: Standard seit 1996 • • Ursprung in Aktivitäten der SQL Access Group (SAG) mit dem Ziel, einen vereinheitlichten Zugriff auf Datenbanken bereitzustellen Ist auch Bestandteil von SQL3 SQL/CLI beinhaltet • • • • • CLI-API erlaubt das Erstellen und Ausführen von SQL-Anweisungen zur Laufzeit DB-Verbindungsaufnahme und Beendigung Vorbereitung und Ausführen von SQL-Anweisungen (“prepare” und “execute”) Binden von Parametern an SQL-Anweisungen (“bind”) Entgegennahme von Resultaten Festlegung von Datentypen (über spezielle Codes für jeden Datentyp) CLI-Call wird durch den proprietären DBMS-Treiber umgesetzt in herstellerspezifischen DB-Zugriff • Mit geeignetem Treiber kann prinzipiell jede Datenquelle angesprochen werden Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 13 CLI-Dialekte Neben standardisiertem SQL/CLI haben sich noch weitere Dialekte herausgebildet (war das ursprüngliche Ziel der SAG nicht die Definition einer einheitlichen Schnittstelle?) • • ODBC (Open Database Connectivity): Microsofts CLI-Variante – Beinhaltet die meisten (nicht alle) API-Calls des CLI-Standards – Zusätzlich: spezielle Calls zur Unterstützung von MicrosoftProgrammen (Access, Excel, etc.) Proprietäre CLIs der DB-Hersteller (“Native API”) – z.B. Oracle Call Interface (OCI) In der Regel werden mehrere CLI-Dialekte parallel unterstützt ODBC-API SQL/CLI-API Native API Call Level Interface Runtime Library DBMS-Treiber Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 14 Call Level Interface: SQL99 CLI #include "sqlcli.h" extern SQLHDBC hdbc; extern SQLHENV henv; /* Verbindung steht schon */ /* Umgebung */ void credit ( SQLHSTMT hstmt, int amount, int accountno , char *table) { /* hstmt wird von aussen gegeben, damit Transaktionskontrolle ausserhalb dieser Prozedur. "credit" ist Baustein */ char update[120]; SQLINTEGER NameParamLength1; SQLINTEGER NameParamLength2; sprintf(update, "UPDATE %s SET balance = balance + ? WHERE account_number = ? ", table); SQLPrepare(hstmt, update, SQL_NTS); SQLBindParameter(hstmt, 1, SQL_PARAM_MODE_IN, SQLCHAR, SQL_CHAR, NAME_LENGTH, 0 &amount, NAME_LENGTH, &NameParamLength1); SQLBindParameter(hstmt, 2, SQL_PARAM_MODE_IN, SQLCHAR, SQL_CHAR, NAME_LENGTH, 0 &accountno, NAME_LENGTH, &NameParamLength2); SQLExecute(hstmt); } Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 15 Call Level Interface: Oracle-Dialekt (OCI) #include “oci.h” extern static OCIEnv *envhp; void credit (OCIStmt *stmthp, int amount, int accountno , char *table) { char update[120]; static OCIBind *bnd1p = (OCIBind *) 0; sprintf(update, “UPDATE %s SET balance = balance + :a WHERE account_number = :ano “, table); OCIStmtPrepare(stmthp, errhp, update, (ub4) strlen((char *update), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)); OCIBindByName(stmthp, &bnd1p, errhp, (char *) ":A", -1, (dvoid *) &amount, (sword) sizeof(accountid), SQLT_INT, (dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0,OCI_DEFAULT); OCIBindByName(stmthp, &bnd1p, errhp, (char *) ":ANO", -1, (dvoid *) &accountno, (sword) sizeof(accountid), SQLT_INT, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT); OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT); } Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 16 Object CLI Weiterentwicklung von CLI zu Objektschnittstellen (SQL/CLI kennt nur prozedurale APIs) • • JDBC (Java Database Connection) ActiveX Data Objects (ADO) Unterstützung von JDBC • • Entweder “direkt” durch Native-API Oder Umweg über JDBC-ODBC-Bridge Java-Anwendung JDBC-API JDBC-Treiber-Manager JDBC-ODBCBridge SQL/CLI-API JDBC-Native Treiber ODBC-API Native API Call Level Interface Runtime Library DBMS-Treiber Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 17 Zusammenfassung der Fat Client-Konzepte Jeder Anwender programmiert seine Anwendungen selbst (alle entwickeln ähnliche Bausteine) Alternative: Anwender benutzen vorgegebene Funktions-Bausteine Bausteine ändern sich (Systemwechsel oder Firmenpolitik) Folge: alle Anwender müssen ihre Programmierung ändern bzw. Module aus gemeinsamer Bibliothek holen. Alternative hierzu: • • Funktions-Bausteine in der Datenbank ablegen Alle Clients können dann darauf zugreifen « Anwendungsentwicklung innerhalb der Datenbank, z.B. durch Stored Procedures („TP-Lite“) • • Anwendungen in der DB ausführen … … und auch dort ablegen Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 18 Anwendungsentwicklung — Thin Client / Fat Server Client ProzedurAufruf SQLFAP Rückgabewerte DBMS Stored Procedure Trigger UDT Objektverwaltung höherer Ordnung (OHO) – SS 2002 Server Kapitel 1: Vorlesung TP-Lite – 19 Fat Server Anwendungslogik innerhalb der Datenbank Stored Procedures (TP-Lite) • • • Verwendung einer 4GL (forth generation language) – Turing-vollständiges SQL Speicherung und Ausführung in DB Standard unter SQL3 als “SQL/PSM” (= Persistent Stored Module) – Kommerzielle DBMS verwenden jedoch proprietäre Dialekte, z.B. ¾ PL/SQL in Oracle (siehe Workshop & praktische Übung) ¾ TransactSQL in Sybase und MS SQL Server Trigger (ereignisgesteuerte Funktionen/Prozeduren) Benutzerdefinierte Datentypen (User Defined Types, UDTs) • Bestandteil von SQL-99 Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 20 Stored Procedures “Stored Procedure” Internal Procedure External Function Procedure Function CREATE PROCEDURE credit (amount NUMBER, accountno INTEGER) IS BEGIN UPDATE account SET balance = balance + amount WHERE account_number = accountno; Oracle PL/SQL END debit; CREATE LIBRARY C_utils AS '/DLLs/utils.so'; Einbindung von C-Funktionen in Oracle CREATE FUNCTION debit (amount NUMBER, accountno INT) RETURN INT AS LANGUAGE C LIBRARY C_utils NAME „debit_func"; Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 21 Trigger Spezifizieren wann (Event) und unter welchen Bedingungen (Condition) eine Stored Procedure aufgerufen wird (Action) • CREATE TRIGGER my_trigger AFTER UPDATE ON employees WHEN (new.salary > 100000) BEGIN UPDATE admin SET number_of_managers = number_of_managers + 1 WHERE dept = new.dept; END Event Condition Action (Stored Procedure) Werden automatisch vom Datenbanksystem aktiviert („gefeuert“) nach dem Einfügen, Ändern bzw. Löschen von Tupeln • • Ausführung der Stored Procedure kann wiederum neue Trigger starten („Trigger-Feuerwerk“) … … die dann alle innerhalb einer Transaktion ausgeführt werden Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 22 Benutzerdefinierte Datentypen Benutzerdefinierte Typen besitzen Verhalten, das durch Methoden implementiert werden kann • • Methodenimplementierung in DB-eigner 4GL Teil der Typdefinition CREATE METHOD interest() RETURNS INTEGER FOR AccountType BEGIN DECLARE old_balance INTEGER; old_balance = SELF.balance; SET SELF.balance = old_balance * 1.03; RETURN SELF.balance; END; Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 23 Zusammenfassung: Fat Server vs. Fat Client Fat Client-Architekturen • + + + + – Traditioneller Ansatz in der zweistufigen Client/Server-Welt Ausnutzen der Datenunabhängigkeit, die vom DB-Server bereitgestellt wird Standardisierte Schnittstellen Gute Unterstützung eigener, individueller Anwendungen Anwendungen lassen sich recht schnell entwickeln (z.B. mit Hilfe grafischer Entwicklungswerkzeuge) Problem der Wartung, Software-Verteilung, etc. (Upgrades von Anwendungen, die von vielen Clients verwendet werden, sind recht aufwändig) Fat Server-Architekturen + Einfachere Wartbarkeit + Weniger Netzwerkbelastung (durch stärkeren Abstraktionsgrad der bereitgestellten Prozeduren) – Schlechte Unterstützung für individuelle, personalisierte Anwendungen Objektverwaltung höherer Ordnung (OHO) – SS 2002 Kapitel 1: Vorlesung TP-Lite – 24