Daten-Ex- und Import mit Oracle und PostgreSQL Holger Jakobs – [email protected] 2004-09-07 Inhaltsverzeichnis 1 Grund für Daten-Im- und -Exporte 1 2 Werkzeuge 2.1 Export 2.2 Import 2.3 Export 2.4 Import 2.5 Import 2.6 Export 1 2 3 3 4 4 4 mit pg_dump von PostgreSQL nach PostgreSQL . . . . . . . mit TOra . . . . . . . . . . . mit TOra . . . . . . . . . . . mit SQL*Loader von Oracle . mit b.i.b.-Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Grund für Daten-Im- und -Exporte Daten-Ex- und -Importe werden aus verschiedenen Gründen gemacht. Hier einige Beispiele: • Datensicherung: Statt die Datenbank-Dateien direkt zu sichern, kann man auch die exportierten Daten sichern. Diese lassen sich sehr oft gut komprimieren, weil sie reine Textdaten sind • Datenübermittlung: Um den Datenbestand von einer Datenbank auf eine andere (anderes DBMS, neue Installation wegen Versionswechsel oder anderer Rechner) zu übertragen, eignet sich ein exportierter Datenbestand sehr gut. • Restrukturierung: Wenn man eine Datenbank restrukturiert, ist es oft praktisch, den alten Bestand vorher zu exportieren – ggf. schon in einem Format, das an die neue, etwas anders strukturierte Datenbank angepasst ist. 2 Werkzeuge für den Daten-Ex-/-Import Den Daten-Ex- und -Import kann man mit verschiedenen Werkzeugen durchführen. Es gibt kein für alle Datenbanksysteme geeignetes Tool. Bei einigen DBMS ist alles Notwendige im Lieferumfang, oft wird man im Open Source Bereich fündig. In diesem Dokument werden weiter unten erläutert: 1 2.1 Export mit pg_dump von PostgreSQL 2 WERKZEUGE Tabelle 1: wichtige Optionen von pg dump -a --data-only -c -C -d --clean --create --inserts -D --column-inserts -f -o -s -t --filename=filename --oids --schema-only --table=tabelle -v -x --verbose --no-privileges nur Daten ausgeben, kein Datenbankschema (CREATE TABLE) Datenbank vor dem Erzeugen löschen (DROP TABLE) Datenbank-Erzeugungskommando einbauen Daten in Form von INSERT-Kommandos ausgeben, nicht in Form von COPY-Kommandos, weil letztere PostgreSQL-spezifisch sind Daten mit Attributnamen in INSERT-Kommandos ausgeben Ausgabe in Datei statt auf stdout OID (object identifiers) mit ausgeben nur Datenbankschema ausgeben, keine Daten Nur genannte Tabelle ausgeben, nicht die gesamte Datenbank ausführliche Ausgabe keine Rechte (GRANT/REVOKE) ausgeben • pg_dump – im Lieferumfang von PostgreSQL • TOra – Open Source Tool für Oracle • SQL*Loader von Oracle – nur Import Information zu den Oracla-Utilities Export, Import und SQL*Loader finden Sie unter • Export: http://www.bg.bib.de/Bibliothek/oracle/server.817/a76955/ch01.htm • Import: http://www.bg.bib.de/Bibliothek/oracle/server.817/a76955/ch02.htm • SQL*Loader: http://www.bg.bib.de/Bibliothek/oracle/server.817/a76955/ch03.htm Export und Import verwenden ein binäres Format, das nur von diesen Programmen verwendet werden kann. Um Daten in einem lesbaren Format zu importieren, das von anderen Systemen generiert wurde, ist SQL*Loader zu benutzen. 2.1 Export mit pg_dump von PostgreSQL pg_dump gehört zum Lieferumfang von PostgreSQL und ist das Standardwerkzeug für den Datenexport. Es ist ein einfaches, aber flexibles Kommandozeilenprogramm. Die Aufrufsyntax ist pg_dump [ Optionen ] Datenbankname Die wichtigsten Optionen von pg_dump werden in Tabelle 1 erläutert. 2 2 WERKZEUGE 2.2 Import nach PostgreSQL Abbildung 1: Startbildschirm von DB-Extraction/Compare 2.2 Import nach PostgreSQL Sofern die Daten als INSERT-Statements vorliegen, kann man sie einfach mit psql ausführen, indem man sie per Pipe übermittelt, die Eingabe auf psql umlenkt oder im psql das Kommando \i dateiname verwendet. Um Daten aus anderen ASCII- oder Binär-Dateien zu importieren, verwendet man das copy-Kommando von psql. Ein Beispiel hierzu ist im Dokument Das Erzeugen und Füllen ” einer PostgreSQL-Datenbank“ enthalten. 2.3 Export mit TOra TOra eignet sich wegen seiner grafischen Oberfläche gut für das interaktive Arbeiten. Um regelmäßig auf dieselbe Art und Weise Daten zu ex- oder importieren, ist es weniger geeignet, denn dazu ist zuviel Handarbeit bei jedem Vorgang erforderlich. Dann muss man auf scriptfähige Tools umsteigen, die von der Kommandozeile aus aufgerufen werden können. Zum Daten-Ex- und -Import wird das Tool DB-Extraction/Compare“ verwendet, das ” Sie aus dem Tools-Menü oder direkt über das nebenstehend abgebildete Symbol aufrufen können. Die Abbildung 1 zeigt den Startbildschirm von DB-Extraction/Compare. Wählen Sie hier die Option Extract“. Die in der zweiten Spalte aufgeführten Optionen bedeuten, dass ” 3 2.4 Import mit TOra 2 WERKZEUGE bestimmte Dinge in die Ausgabe mit aufgenommen werden (nicht alle Optionen werden hier erläutert), siehe Tabelle 2 auf der nächsten Seite. In der zweiten Spalte wird das zu exportierende Schema ausgewählt. Erfolg ist nur für Ihr eigenes Schema garantiert, weil Sie bei den anderen wohl keine entsprechenden Rechte haben. Aus Ihrem Schema können Sie mittels Include objects“ diejenigen Tabellen und ” Sichten auswählen, Sie sie extrahieren möchten , siehe Abbildung 2 auf der nächsten Seite. Die ausgewählten Objekte sind mit einem Häkchen gekennzeichnet. Den zweiten Reiter mit der Aufschrift Resize“ ignorieren wir. Durch Anklicken des grü” nen Pfeils (wie bei Abfragen) starten Sie den Extraktionslauf. Ist dieser gut gegangen, so erscheint jetzt der dritte Reiter Result“ nicht mehr deaktiviert, sondern kann ausgewählt ” werden. Die erzeugten Insert-Kommandos können als Datei gespeichert oder auch direkt aus diesem Fenster heraus ausgeführt werden. Dazu sind innerhalb des Fensters die gleichen StartKnöpfe vorhanden wie im Worksheet. Leider funktioniert bei der Version 1.0.0 von TOra das Extrahieren von Datendefinitionskommandos nicht ordnungsgemäß, sondern erzeugt immer eine Fehlermeldung. Zur Zeit können wir es also nur zum Extrahieren von Daten benutzen. 2.4 Import mit TOra Sofern die Daten als INSERT-Statements vorliegen, kann man sie einfach ins TOraWorksheet laden und dann ausführen. Andere Datenformate kann TOra in der Version 1.0.0 nicht lesen, so dass man hier auf andere Tools, z. B. SQL*Loader, zurückgreifen muss. 2.5 Import mit SQL*Loader von Oracle Die Abbildung 4 auf Seite 6 zeigt eine Übersicht über den Ablauf bei Verwendung des SQL*Loaders. Es können für den Import fast beliebige Datenformate verwendet werden, die allerdings beschrieben werden müssen. äheres hierzu ist in der Online-Dokumentation zu Oracle beschrieben, URL siehe oben in diesem Dokument. Allerdings eignet sich der Loader – wie der Name schon sagt – nur zum Laden von Daten (Import), nicht zum Entladen (Export). 2.6 Export mit b.i.b.-Tools Im b.i.b. Bergisch Gladbach steht ein in Tcl/Tk (http://www.tcl.tk) geschriebenes Tool zum Datenexport (ohne Datendefinition, also nur Tabelleninhalte) für Oracle und PostgreSQL zur Verfügung. Es ist unter Linux im b.i.b.-Menü für Datenbanken enthalten. Bei Oracle ist die Eingabe des Passwords erforderlich. Aus den angezeigten Tabellen sind die zu exportierenden auszuwählen, siehe auch Abbildung 5 auf Seite 7 Das Zielverzeichnis kann frei bestimmt werden. Für jede Tabelle wird eine gleichnamige Datei mit der Erweiterung .sql erzeugt, die die INSERT-Kommandos enthält. 4 2 WERKZEUGE 2.6 Export mit b.i.b.-Tools Tabelle 2: wichtige Optionen beim TOra-Datenexport Option DDL In die Ausgabe wird mit aufgenommen: Datendefinitionen, d. h. die CREATE TABLEKommandos und die folgenden Teilmengen davon, sofern ebenfalls ausgewählt constraints Definition von Constraints (Primär-/Fremdschlüssel, Check-Constraints) indexes Definition von zusätzlichen Indexen, die zur Performance-Optimierung eingerichtet wurden grants Kommandos zur Vergabe von Rechten comments Kommentare zu den Datenbank-Objekten content of tables Tabelleninhalt generated schema none“ bedeutet, dass keine Schema-Angaben ein” gefügt werden, same“ fügt die Schema-Angaben ” des aktuellen Schemas ein Abbildung 2: Auswahl der zu extrahierenden Objekte Abbildung 3: Ergebnis der Extraktion 5 2.6 Export mit b.i.b.-Tools 2 WERKZEUGE Abbildung 4: Übersicht über SQL*Loader (aus der Oracle-Doku) Das Ausführen dieser Kommandos ist im Vergleich zum Laden mit anderen Tools zwar nicht sehr schnell, aber es ist eine gut definierte, vom Datenbanksystem unabhängige Schnittstelle. Außerdem werden alle Plausibilitäts- und Konsistenzprüfungen wie bei jeder anderen Eingabe auch durchgeführt. $Id: DatenExport.tex,v 1.4 2004/09/07 05:31:12 hj Exp $ 6 2 WERKZEUGE 2.6 Export mit b.i.b.-Tools Abbildung 5: b.i.b.-Tool zum Datenexport 7