Daten-Import/-Export Datenbank Data Pump Internals Autor: Marti Dean, Trivadis AG Als Ablösung für die EXP- und IMP-Werkzeuge liefert Oracle mit 10g die Data-Pump-Utilities aus. Was sie können und ob sie halten, was sie laut Oracle Marketing versprechen, wird nachfolgend unter die Lupe genommen. Oracle Data Pump ist ein neues Feature von 10g. Das Tool wurde mit dem Ziel entwickelt, einen neuen Daten-Entlade- und -Lade-Mechanismus mit signifikanten Performance-Verbesserungen für die (Bulk-)Daten- und Metadaten-Verschiebung zu bieten. Durch die Möglichkeit der Parallelisierung (nur Enterprise Edition) ist ein deutlich schnelleres Datenverschieben als mit den herkömmlichen Export- und Import-Werkzeugen (exp und imp) möglich. Der Grad der Parallelisierung lässt sich während der Laufzeit dynamisch ändern. Ein neues PL/SQL-Package namens DBMS_DATAPUMP stellt die serverseitige Infrastruktur dieses Tools zur Verfügung. In 10g wird der Export über das Client-Tool "expdp" und der Import über "impdp" durchgeführt. Data Pump ist serverbasiert, während die originalen Export- und ImportWerkzeuge primär clientbasiert waren. www.doag.org Das Data-Pump-API in 10g bietet nicht nur die Möglichkeit, Daten und Metadaten parallel im Direct-Path-Verfahren zu laden, sondern auch viele weitere Funktionalitäten wie beispielsweise das Wiederaufsetzen eines Export- oder Import-Vorgangs nach Unterbrechungen, einstellbaren Ressourcen-Verbrauch für Data-Pump-Vorgänge, Schätzung der Ausführungsdauer und des Platzverbrauchs sowie sehr flexible und fein granulierbare Auswahlmöglichkeiten der Export- und Import-Strukturen. Außerdem stellen die neuen Data-Pump-Werkzeuge eine vielfältigere ObjektSelektion von Daten und Metadaten als die herkömmlichen Tools zur Verfügung. Zu hoffen ist, dass bekannte "Kinderkrankheiten" in naher Zukunft behoben werden. Übersicht Das neue Export- und Import-Werkzeug Data Pump besteht aus drei Komponenten: • die Command-Line-Clients expdp und impdp • das Data-Pump-API bestehend aus dem PL/SQL Package DBMS_DATAPUMP • das Metadata-API bestehend aus dem PL/SQL Package DBMS_METADATA News Q4-2006 43 Datenbank Daten-Import/-Export Die Command-Line-Client-Utilities expdp und impdp ähneln sehr den früheren Export-(exp)- und Import-(imp)Werkzeugen. Die Dumpfiles dieser Tools sind jedoch nicht kompatibel. Im Gegensatz zu den früheren Tools werden alle Data-Pump-Export- und -Import-Operationen inklusive Lesen Schreiben der Dumpfiles auf dem Server ausgeführt. Die expdp- und impdp-Clients nutzen die Prozeduren, die vom PL/SQL-Package DBMS_DATAPUMP bereitgestellt werden. Die Parameter dieser Kommandozeilen-Werkzeuge ermöglichen das Exportieren oder Importieren von ganzen oder gewissen Teilen einer Datenbank. Werden Daten verschoben, entscheidet Data Pump aufgrund der selektierten Strukturen (zum Beispiel Datentypen) automatisch, ob entweder der Direct-Path load beziehungsweise unload, der External-Tables-Mechanismus oder eine Kombination von beidem zum Einsatz kommt. Dies kann vom User nicht beeinflusst werden. Das Data-Pump-Dateiformat entspricht dem internen Stream-Format des Direct-Path-API. Dies ist wiederum dem Format sehr ähnlich, das in den Datenfiles der Tablespaces verwendet wird. Dadurch ermöglicht das Direct-Path-API die schnellste Single-Stream-Leistung. Die Export-Dumpfiles von expdp werden durch dieses Format bei größeren Tabellen rund 15 Prozent kleiner als die Dumpfiles vom bisherigen exp-Tool. Das External-Tables-Feature hingegen ermöglicht ein sehr effizientes Nutzen der Parallel-Query- und ParallelDML-Fähigkeiten von Oracle. Dateien, die von Data Pump über den External-Table-Mechanismus erstellt wurden, sind nicht kompatibel zu External-Table-Dateien, die manuell in der Datenbank durch "CREATE TABLE … ORGANIZATION EXTERNAL" angelegt wurden. Dies liegt daran, dass Data Pump die Metadaten in diese Dateien ablegt, wohingegen bei manuell erstellten Tabellen die Metadaten in der Datenbank hinterlegt sind. Standardmäßig nutzt Data Pump Direct Path zum Laden und Entladen von Daten. Werden Metadaten verschoben, nutzt Data Pump die Funktionalitäten, die vom PL/SQL-Package DBMS_METADATA bereitgestellt werden. Diese bieten eine Vielzahl von Möglichkeiten, um Metadaten zu extrahieren, zu laden oder zu verändern. Die beiden PL/SQL-Packages DBMS_DATAPUMP und DBMS_ METADATA können unabhängig auch ohne die ClientTools (expdp, impdp) genutzt werden. Performance Die auf Data Pump basierenden Export- und ImportFeatures sind erheblich schneller als die bereits existierenden Export- und Import-Komponenten. Data Pump übernimmt das automatische Management von mehreren parallel laufenden Lade- beziehungsweise Entladeströmen, wodurch ein optimaler Durchsatz gewährleistet ist. Ein einzelner Thread des Data-Pump-Direct-PathEntladevorgangs ist rund zweimal so schnell wie der bisherige Direct-Path-Export. Ein einzelner Thread des Data-Pump-Direct-Path-Ladevorgangs ist sogar bis zu 45 Mal schneller als ein original Import. Als weiterer Vorteil lassen sich Data-Pump-Operationen im Parallel-Modus anstoßen, jedoch nur in der Enterprise Edition von 10g, wobei dynamisch jederzeit parallele Threads zur Laufzeit hinzugefügt oder weggenommen werden können. 44 News Q4-2006 Wichtig ist, die Anzahl der parallelen Threads entsprechend der zur Verfügung stehenden I/O-Bandbreite zu wählen. Ansonsten kommt es trotz der Konfiguration von immer neuen parallelen Threads zu erheblichen PerformanceEinbußen. Dabei sollte darauf geachtet werden, dass die Dumpfile-Sets auf anderen Disks liegen als die DatenbankFiles, die entladen werden sollen. Die Verwendung von Wildcards in den Dumpfile-Namen erleichtert die Verteilung der I/O-Last über mehrere Disks. Ein Beispiel: expdp hr/hr directory=dpump_dir1 dumpfile=hr_exp_a%U.dmp, \ dumpfile=dpump_dir2:hr_exp_b%U.dmp parallel=6 JOB_NAME=hr_exp In diesem Beispiel werden in dem Verzeichnis, das in der Datenbank für dpump_dir1 angegeben ist, beim Start die Dateien hr_exp_a01.dmp, hr_exp_a02.dmp und hr_ exp_a03.dmp erstellt. Im Verzeichnis von dpump_dir2 liegen die Dateien hr_exp_b01.dmp, hr_exp_b02.dmp und hr_exp_b03.dmp. Der Parallelisierungsgrad ist auf 6 gesetzt, jedem Entladestrom steht somit eine Datei zur Verfügung. Der Performance-Vorteil gegenüber den herkömmlichen Tools ist bei (Bulk-)Daten-Verschiebung am größten, bei Metadaten ist die Geschwindigkeit in etwa vergleichbar. Init.ora-Parameter Die standardmäßig eingestellten Initialisierungsparameter bieten genügend Performance bei Data-Pump-Vorgängen. Es kann versucht werden, über die folgenden Init.oraParameter die Performance eines Jobs zu steigern: • DISK_ASYNCH_IO=TRUE • DB_BLOCK_CHECKING=FALSE • DB_BLOCK_CHECKSUM=FALSE Wichtig: Oracle empfiehlt DB_BLOCK_CHECKING und DB_BLOCK_CHECKSUM auf FALSE zu setzen, aus Konsistenzgründen raten wir dringend davon ab. Die Kommunikation von Data Pump basiert auf Advanced Queuing, diese benötigt zusätzlich SGA-Speicherbedarf. Zuständig dafür ist eine genügend große SHARED_ POOL_SIZE. Modi Der gewählte Modus entscheidet darüber, welche Daten in oder aus einer Datenbank transferiert werden. Impdp verwendet als Quelle entweder ein Dumpfile-Set oder bei gesetztem NETWORK_LINK-Parameter eine andere Datenbank. Beim Import aus einem Dumpfile ist das Angeben eines Modus’ nur nötig, wenn nicht der ganze Inhalt des Dumpfiles importiert werden soll. Bei einem Export wird standardmäßig ein Schema-Mode-Export durchgeführt. Wie die früheren Werkzeuge unterstützt auch Data Pump einen Full-, Schema- und Tabellen-Modus. Neu hinzugekommen ist der Netzwerk-Modus. Netzwerk-Modus Data Pump bietet die Möglichkeit, Daten von einer Datenbank direkt in eine andere Datenbank zu laden (Network-Import und Network-Export). Anstelle von www.doag.org Daten-Import/-Export Network-Pipes wie in den früheren Utilities, die nicht von allen Plattformen unterstützt werden, verwendet der Network-Mode Datenbank-Links. Über den Parameter NETWORK_LINK, dem ein Datenbank-Link als Parameter mitgegeben wird, ist dieser Modus definiert. Während des Network-Imports arbeitet die MetadataAPI auf der Quellseite, extrahiert Objekt-Definitionen und sendet diese zum lokalen Knoten, auf dem nun die Objekte wieder erstellt werden. Der Data-Pump-ImportJob läuft auf der Zielseite. Daten werden über "insert as select"-Statements geladen. Network-Export bietet die Möglichkeit, auch Readonly-Datenbanken zu exportieren. Data-Pump-Export kann nicht lokal auf einer Read-only-Datenbank-Instanz laufen, da die Master-Table nicht erstellt werden kann. Datenbewegungen werden bei Network-Export nur über External-Tables ausgeführt, da "create as select@service"Aufrufe als DML-Statement benötigt werden. Gerade bei Parallelisierung kann das Netzwerk zum Engpass werden. Über den Parameter TABLE_EXISTS_ACTION = {SIKP | APPEND | TRUNCATE | REPLACE } wird beim Import gesteuert, was mit den Daten einer bereits existierenden Tabelle geschieht. Der Standardwert ist SKIP. Dieser Parameter ist ähnlich der beim Import (imp) existierenden Möglichkeit IGNORE=Y, die an eine bestehende Tabelle weitere Zeilen hinzufügt. Bei impdp gibt es noch Erweiterungen: • SKIP (Default): eine Tabelle wird nicht geladen, sofern sie schon existiert • APPEND: fügt weitere Sätze in die Tabelle ein, solange sie mit der Spaltendefinition der Ziel-Tabelle kompatibel sind • TRUNCATE (neu): leert die Tabelle und fügt anschließend neue Sätze in die Tabelle ein, wenn: • die Definitionen übereinstimmen • ein truncate durchgeführt werden kann. Dies ist nicht möglich, wenn die Tabelle Master einer referentiellen Integrität ist. • REPLACE (neu): entfernt die existierende Tabelle, erstellt sie neu und lädt sie anschließend aus dem Importfile Dieser Parameter hat einige Besonderheiten und Restriktionen, beispielsweise müssen die Quell- und Ziel-Tabellen genau die gleichen Attribute besitzen, damit TABLE_ EXISTS_ACTION=TRUNCATE funktioniert. Ist dies nicht der Fall, kann ein ORA-00600-Fehler (Oracle EE 10.2.0) auftreten. Ein Beispiel: $impdp hr/hr directory=dpump_dir1 dumpfile=table_emp_system.dmp \ tables=employees TABLE_EXISTS_ACTION= append Vergleich mit EXP und IMP Oracle Data Pump ist die Ablösung für die originalen Export- und Import-Tools und unterstützt nun fast alle neuen 10g-Features. Data Pump wurde komplett neu entwickelt und ist größtenteils serverbasiert, wohingegen die originalen Werkzeuge primär clientbasiert waren. Die Tools sind untereinander nicht kompatibel. Beide bisherigen Interfaces werden auch mit 10g ausgeliefert. • IMP wird es aus Kompatibilitätsgründen für den Import www.doag.org Datenbank älterer Version von 5 bis 9i weiterhin geben. Exportdateien, die mit imp erstellt wurden, sind nicht kompatibel zu solchen von expdp und umgekehrt. • EXP im bisherigen Format wird wahrscheinlich, laut offizieller Aussage von Oracle, nur noch mit der Version 10g ausgeliefert. Dies ist notwendig, um die Funktionalität von 9i zu gewährleisten. Neue Features der Datenbank 10g werden im bisherigen expClient nicht unterstützt. Um Exports einer 10g-Datenbank in eine 9i-Datenbank zu ermöglichen, muss der exp-Client von 9i verwendet werden. Für Migrationen von Daten einer Datenbank der Versionen 10g zu 10g Rx sollte dann aber der VERSION-Parameter des expdp-Clients verwendet werden. Unterschiede Data Pump wurde entwickelt, um große Datenmengen mit zahlreichen Dateien zu bearbeiten. Dies führt zu einer Reihe von Auswirkungen: • Die Startup-Zeit ist länger: Bevor ein Job starten kann, müssen alle Prozesse und die Kommunikationsinfrastruktur initialisiert werden. Zusätzlich beinhaltet der Exportstartzeitpunkt die Suche und das Ordnen aller Table-DataObjects, sodass der Master-Control-Prozess anschließend direkt mit dem Entladen der Tabellen beginnen kann. • Data-Pump-Export schreibt die Master-Table am Ende des Jobs ins Dumpfile-Set. Der Import muss die MasterTable lokalisieren und sie bei Start des Jobs als Erstes laden. Dies kann bei sehr vielen Objekten eine gewisse Zeit dauern. Die Master-Table wird immer im DirectLoad-Verfahren ge- bzw. entladen. • Wird nur ein Teil der Dumpfile-Daten geladen, so werden während des Import-Vorgangs nicht passende Daten aus der Master-Table gelöscht. Ist der zu ladende Teil sehr gering im Vergleich zum gesamten Export-Set, so kann das Löschen aus der Master-Table einen erheblichen Zeitfaktor darstellen. • Die Geschwindigkeit der Extraktion und das Erstellen der Metadaten ist ungefähr vergleichbar mit der originalen Export- und Import-Tools. Zudem ist es sehr schwierig, die DDL-Erstellung zu beschleunigen. Der größte Geschwindigkeitsgewinn gegenüber den originalen Werkzeugen ergibt sich dann, wenn große Datenmengen ent- bzw. geladen werden. • Die XML-Repräsentation der Metadaten in den Dumpfiles ist rund siebenmal größer als die DDL-Darstellung der originalen Exp-Dumpfile. Das Data-Pump-Data-Stream-Format hingegen ist etwa 15 Prozent kleiner gegenüber den herkömmlichen Export-Dumpfiles. Kompressions-Tools wie beispielsweise gzip bieten die größte Kompression bei Dumpfiles, die hauptsächlich aus Metadaten bestehen. • Die Ressourcen-Intensität kann bei Data Pump entsprechend konfiguriert werden: Die Reduzierung der "elapsed time pro Job" war das überwiegende Ziel beim Design. Deshalb beansprucht Data Pump genausoviel CPU, Memory, I/O-Bandbreite und Netzwerk-Bandbreite (im Network Modus) wie mit dem Parallel-Parameter Prozesse konfiguriert werden. Fazit Die Data-Pump-Utilities EXPDP und IMPDP sind nicht nur ein Nachfolger für die originalen IMP- und EXP-Tools, News Q4-2006 45 Datenbank Daten-Import/-Export sondern auch eine markanter Schritt in die richtige Richtung. Data Pump wurde für das Verschieben von großen Datenmengen konstruiert. Darin überzeugt es durch eine hohe Performance und die feingliedrige Objekt-Selektion, womit beinahe jedes einzelne Objekt exportiert beziehungsweise importiert werden kann. Durch die serverseitigen PL/SQL-Packages bietet es eine Schnittstelle für Eigenentwicklungen oder Tools von Drittanbietern. Über Vor- und Nachteil der Verschiebung der Kernelemente vom Client zum Server lässt sich streiten. Wir halten es klar für eine positive Veränderung. 46 News Q4-2006 Literatur und Links • • • • http://download-west.oracle.com/docs/cd/ B14117_01/server.101/b10825/part_dp.htm http://www.oracle.com/technology/products/ database/utilities/htdocs/data_pump_overview.html http://www.orafaq.com/node/74 http://www.databasejournal.com/features/oracle/ article.php/3489491 Kontakt: Dean Marti [email protected] www.doag.org