Data Pump Internals

Werbung
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
Herunterladen