Mehrere Datenbanken Grosse Anwender haben oft mehrere Datenbanksysteme gleichzeitig im Einsatz. Die Gründe sind meist Tradition und spezielle Anwendungen, die ein dediziertes Datenbanksystem erfordern. Es gibt folgende Verfahren: 1) Datenaustausch über Betriebssystemdateien: export und import, klassischer Weg, offline 2) gemeinsame Schnittstelle unter Windows ODBC, Windows-proprietär, online 3) gemeinsame Schnittstelle allgemein: XML, offline und online 4) Verteilte Datenbanksysteme TFH Berlin/Steyer 1) Datenaustausch über Dateien mit Access Thema: In diesem Kapitel erfährt man, wie Daten mit anderem Dateiformat importiert oder exportiert werden. Importieren Datei -> Externe Daten -> Importieren im Dateisystem suchen wenn aus Access, dann Tabelle wählen, wenn Textdatei, dann Format angeben Exportieren Datei -> Speichern unter/Exportieren im Dateisystem suchen wenn in Access, dann Tabelle wählen wenn in Textdatei, dann Format angeben Angaben über Herkunftsdateityp, Formatierung oder Trennzeichen, welche Trennzeichen, mit/ohne Primärschlüssel, in alte oder neue Tabelle Angaben über Zieldateityp, Formatierung oder Trennzeichen, welche Trennzeichen "Hammer";20;5,00 € "Amboss";10;25,50 € "Steigbügel";5;8,99 € mit dem SQL Server BCP zu Import und Export bcp ist ein Dienstprogramm zum Laden von Dateien in Tabellen bzw. Entladen von Tabellen in Dateien. Formatangaben sind mölich. Syntax: bcp [[db_name.]ben_name.]tab_name {IN|OUT} datei_name [{-schalter parameter}...] Beispiel: bcp beispiel..arbeiten out b.out -t"|" -r"\n" -SSYBASE10 -Upetra Die Daten der Tabelle arbeiten werden in die Datei b.out entladen. Der Schalter "-t" spezifiziert den Feldbegrenzer, "-r" spezifiziert den Datensatzbegrenzer. 10102|p1|Projektleiter |Oct 1 1988 12:00AM 10102|p3|Gruppenleiter |Jan 1 1989 12:00AM 25348|p2|Sacgbearbeiter|Feb 15 1988 12:00AM mit MySQL Exportieren SELECT * FROM datenbanktabelle INTO OUTFILE ‘serverdatei’ Der Benutzer muss das FILE-Privileg haben. mysqldump Importieren LOAD DATA [LOCAL] INFILE importdatei INTO TABLE Datenbankabelle [Optionen] LOCAL Datei liegt auf einem Client und wird in den Server übertragen Optionen Definition eigener Trenner: FIELDS TERMINATED BY LINES TERMINATED BY LOAD DATA LOCAL INFILE “buchdaten.txt” INTO TABLE buch; LOAD DATA LOCAL INFILE “buchdaten.txt” INTO TABLE buch FIELDS TERMINATED BY “##” LINES TERMINATED BY 0x03; Der Benutzer muss das FILE-Privileg haben. Beispiele: 2) ODBC Abkürzung für: Open Database Connectivity Standard-Datenbank-Schnittstelle für Anwendungsprogramme unter Windows ProgLan 1 ProgLan 2 ProgLan 1 ProgLan 2 ODBC m * n Precompiler m + n Precompiler Systemdatenquelle einrichten (als Administrator) Benutzerdatenquelle einrichten (als normaler Benutzer) ->Start->Einstellungen->Systemsteuerung: ODBC-Datenquelle->DSN/Hinzufügen installierten Treiber auswählen (einige sind standardmässig vorhanden, nichtvorhandene müssen installiert werden) TFH Berlin/Steyer ODBC 2 Der ODBC-Treiber meldet sich, data source name vergeben, Datenbank suchen TFH Berlin/Steyer Access mit Access Verknüpfen als Client Datei -> Externe Daten -> Verknüpfen im Dateisystem suchen wenn aus Access, dann Tabelle wählen wenn ODBC-Datenbank, dann Datenquelle auswählen (Datenquellen können mit dem entsprechenden Treiber unter Einstellungen -> Systemsteuerung -> 32Bit-ODBC eingerichtet werden.) Verknüpfen als Server als ODBC-Datenquelle einrichten Einstellungen -> Systemsteuerung -> Datenquellen An die andere Serverdatenbank anhängen mit dem SQL Server Verknüpfen als Server als ODBC-Datenquelle einrichten Einstellungen -> Systemsteuerung -> Datenquellen An die andere Serverdatenbank anhängen mit MySQL Verknüpfen als Server Nach der Installation des ODBC-Treibers (connector) als ODBC-Datenquelle einrichten Einstellungen -> Systemsteuerung -> Datenquellen An die andere Serverdatenbank anhängen TFH Berlin/Steyer 3) XML Einheitliches Java-Anwendungsprogramm For XML OPENXML DB 1 DB 2 Vorteile von XML - einheitliches Format zum Datenaustausch - einheitliches Format für Anwendungsprogramme SQL-Tabellen als XML-Ausdrücke SQL-select und Ergebnistabelle select * from kunde kundenname pin kontostand ---------------------------------------------------------Meier 123 396.00 Müller 321 8000.00 Schulze 435 2203.00 SQL-select mit XML-Anforderung und Darstellung (raw) select * from kunde for xml raw <row kundenname="Meier <row kundenname="Müller <row kundenname="Schulze " pin="123" kontostand="396.00"/> " pin="321" kontostand="8000.00"/> " pin="435" kontostand="2203.00"/> Es gibt Standardelemente "row", Spalten werden zu Attributen. SQL-select mit XML-Anforderung und Darstellung (auto) select * from kunde for xml auto <kunde kundenname="Meier <kunde kundenname="Müller <kunde kundenname="Schulze " pin="123" kontostand="396.00"/> " pin="321" kontostand="8000.00"/> " pin="435" kontostand="2203.00"/> Tabellennamen werden zu Elementnamen, Spalten werden zu Attributen. TFH Berlin/Steyer XML-Unterstützung 10-1 SQL-select mit XML-Anforderung und Darstellung (auto, elements) select * from kunde for xml auto, elements <kunde> <kunde> <kunde> <kundenname>Meier</kundenname> <pin>123</pin> <kontostand>396.00</kontostand></kunde> <kundenname>Müller</kundenname> <pin>321</pin> <kontostand>8000.00</kontostand></kunde> <kundenname>Schulze</kundenname> <pin>435</pin> <kontostand>2203.00</kontostand></kunde> Tabellennamen werden zu Elementnamen, Spalten werden zu Unterelemente. Der Inhalt eines XML-Dokuments ist eine Baumstruktur mit genau einem Wurzelelement und stellt die interne Struktur des Dokuments dar. Dieser Baum kann durch einen sogenannten XML-Parser aufgebaut werden. Auf diese Weise kann für eine Anwendung , z.B. einen Browser, der Zugriff auf einzelne Baumknoten ermöglicht werden. XML ist ein einfacher, flexibler und kostengünstiger Weg, um Daten zwischen verschiedenen Anwendungen auszutauschen. Es ist ein Schlüsselelement der Business-zu-Business-Kommunikation (B2B). XML-Ausdrücke als Bäume {. . .} row mit Attributen (keine Baumdarstellung) {. . .} Kunde mit Attributen (keine Baumdarstellung) Kunde mit Elementen (Baumdarstellung) <kunde> <kunde> <kunde> <kundenname>Meier</kundenname> <pin>123</pin> <kontostand>396.00</kontostand></kunde> <kundenname>Müller</kundenname> <pin>321</pin> <kontostand>8000.00</kontostand></kunde> <kundenname>Schulze</kundenname> <pin>435</pin> <kontostand>2203.00</kontostand></kunde> kunde kunde kunde Kundenname pin kontostand Kundenname pin kontostand Kundenname pin Meier 123 396.00 ...Müller 8000.00 TFH Berlin/Steyer XML-Unterstützung 321 Meier 435 kontostand 2203.00 10-2 <!-- DTD Definition kunde --> <!ELEMENT kunde (kundenname, pin, kontostand)> <!ELEMENT kundenname #PCDATA> <!ELEMENT pin #PCDATA> <!ELEMENT kontostand #PCDATA> Eine Tabellenzeile entspricht einem Kantenzug von der Wurzel zu einem Blattknoten. OPENXML Im Query Analyzer: create procedure dbo.newshippers (@xml varchar(1000)) as declare @ixml int, @rc int execute sp_xml_preparedocument @ixml OUTPUT, @xml select * from OPENXML(@ixml,'sp/Shippers') select @rc=@@rowcount exec sp_xml_removedocument @ixml if @rc > 0 begin select 'Success' return 0 end else begin select 'Failure' return 1 end newshippers '<sp> <Shippers x="y" u="v"/> </sp>' newshippers '<br> <Shippers x="y" u="v"/> </br>' Ausgabe: Ausgabe: (kein Spaltenname) (kein Spaltenname) SUCCESS FAILURE Schritte zum Speichern von XML-Daten in relationale Datenbanken - aus dem XML-String einen Baum bauen (durch Parser, preparedocument) - Zeilenmenge erzeugen (= jeder Kantenzug des XML-Baumes) - eintragen der Zeilenmenge in eine Tabelle (bulk insert) (- Speicherbereich des Baumes freigeben) TFH Berlin/Steyer Verteilte Datenbanksysteme 10-2 4) Verteilte Datenbanksysteme z.B. auf einem Kleinrechnerverbund (PCs) Anwendung mit zentraler Datenbank Anwendung mit verteilter Datenbank Oberfläche Oberfläche Programme Programme Datenverwaltung Datenverwaltung Motivation Leistungsfähigkeit Verfügbarkeit Kosteneffektivität Anpassung an dezentrale Organisationen Regeln von Date (Buch S. 49) 1 2 3 4 5 6 7 8 9 10 11 12 Lokale Autonomie Keine Abhängigkeit von zentralen Systemfunktionen Hohe Verfügbarkeit Ortstransparenz Fragmentierungstransparenz Replikationstransparenz Verteilte Anfragebearbeitung Verteilte Transaktionsverwaltung Hardware-Unabhängigkeit Betriebssystem-Unabhängigkeit Netzwerk-Unabhängigkeit Datenbanksystem-Unabhängigkeit Katalog bisher: jetzt noch: Tabellenbeschreibungen, Feldbeschreibungen, Speicheradressen Indexinformationen Zugriffsberechtigungen, Passwörter, Privilegien Statistiken Verteilungsinformationen Annahme: horizontale Primärschlüsselzerlegung der Tabellen TFH Berlin/Steyer 10-2 Verteilte Datenbanksysteme DDL Kommandos place person where pnr between x and y on location | | | | Tabelle Schlüssel mit Prädikat lokale Datenbank pnr p2 p4 p3 p1 p5 pname Schulz Meier Müller Scholz Weber pnr p5 pname Weber loc1 pnr p2 p1 pname Schulz Scholz loc2 pnr p4 p3 pname Meier Müller loc3 pnr p4 p3 pname Meier Müller loc4 place person where pnr = p5 on loc1 place person where pnr = p2 or pnr = p1 on loc2 place person where pnr between p3 and p4 on loc3 place person where pnr between p3 and p4 on loc4 (repliziert) Vertikal ist schwieriger Andere Kommandos: move, remove Fragmentierung und Replikation sind möglich. Anfragebearbeitung Zerlegung einer Anfrage in Teilanfragen Lokalisierung der Daten und ihrer Locations Globale Optimierung (CPU-Kosten/EA-Kosten/Kommunikationskosten) Joinbearbeitung select * from person where pnr between p1 and p4 ergibt select * from person where pnr between p1 and p2 (von loc2) select * from person where pnr between p3 and p4 (von loc3) oder (falls loc3 nicht verfügbar oder langsamer ist) select * from person where pnr between p1 and p2 (von loc2) select * from person where pnr between p3 and p4 (von loc4) Transaktionsverwaltung Es gibt einen Transaktionsbaum mit Haupt- und Subtransaktionen. Der Abbruch einer Subtransaktion bedeutet Abbruch der gesamten Transaktion. Die ACID-Eigenschaften müssen erhalten bleiben. Zwei-Phasen-Commit 1.Phase: Schreiben in die lokalen Logs (ToDoListen) 2.Phase: Realisieren in den Daten Alle müssen Phase1 durchgeführt und Erfolg gemeldet haben. Dann erst kann Phase 2 beginnen. TFH Berlin/Steyer 10-2 Verteilte Datenbanksysteme Beispiel Personentabelle Definition create table . . . place . . . (Verteilung auf alle locs) Einfügen von Zeilen (Orte ermitteln, Transport, Speichern) (Verteilung auf eine loc) (Verteilung auf weitere locs bei Replikation) Anfragebearbeitung (Zerlegung, Sammlung der Ergebnisse, Alternativen bei Replikation) (Verteilung auf eine oder weitere locs) Ändern aller Werte (z.B. Gehaltserhöhung) (Versand der Operation an alle locs, mit Erfolg/Misserfolg) TFH Berlin/Steyer 10-3