introduction into oracle data pump 11g/12c - export and import data
TRANSCRIPT
Seite 1Gunther Pippèrr © 2015 http://www.pipperr.de
ORACLE DATA PUMPModern Exportieren und Importieren
0101
1010101
0101011010
11010110100011
1010101101000000
1000101010101000000
1001110101010000000001
0110101110010100000000001
0101101000110100100000000010
1010010101000111010100000000010
0110101010010000011000000000000101
1011010101010010101000000000000000001
1000011111010010101010100000000000000101
0000110011110100000000000000000000000000000
0100000110001111111111111110010100000000000101
Seite 2Gunther Pippèrr © 2015 http://www.pipperr.de
Agenda
Imp und Exp – Vergangenheit und Zukunft
Architektur und Grundlagen
Praktischer Einsatz
Erweiterte Funktionen
Ausblick New Feature 12c
Seite 3Gunther Pippèrr © 2015 http://www.pipperr.de
IMP und EXP in 11g/12c
Importieren wie gehabt
Exportieren mit EXP veraltet und wohl demnächst
nicht mehr verfügbar
Wird vorerst aber weiter unterstützt
– Aber unterstützt keine neuen Features der Datenbank mehr!
– Ab 12c sollte es dann auch nicht mehr verwendet werden
Seite 4Gunther Pippèrr © 2015 http://www.pipperr.de
Die Nachteile vom Imp/Exp
Schwieriger Neustart bei einem Fehler
Keine Parallelisierung
– Ausführung vom Client nur in einem einzigen Thread
Dump Files können relativ groß werden
Optimierung der Performance nur bedingt möglich
Überwachung des Exp/Imp Vorgangs schwierig
Eingeschränkte Filterung der gewünschten Objekte
Seite 5Gunther Pippèrr © 2015 http://www.pipperr.de
Vorteil von imp/exp
Kann von einem Client Rechner gestartet werden
Keine Konfiguration vorab auf dem Datenbank Server
notwendig
Seite 6Gunther Pippèrr © 2015 http://www.pipperr.de
In welchen Editionen ist Data Pump verfügbar?
Core Feature der Datenbank10g/11g/12c
D.h. auf allen Versionen verfügbar
– XE , Standard-One, Standard, Enterprise
– Parallelisierung aber nur unter der Enterprise Edition
möglich!
D:\>expdp parallel=2 schemas=oe8 dumpfile=myoe8.dmp
Export: Release 10.1.0.4.2 - Production on Montag, 19 Juni, 2006 16:38
Copyright (c) 2003, Oracle. All rights reserved.
Benutzername: sys/oracle@xe as sysdba
Angemeldet bei: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
ion
ORA-39002: Ung³ltiger Vorgang
ORA-39094: Parallelausf³hrung wird in dieser Datenbankedition nicht unterstützt
Aufruf in der Standard Edition:
Seite 7Gunther Pippèrr © 2015 http://www.pipperr.de
Die ersten Schritte
Einen einfachen Export durchführen
1. Versuch (wie gewohnt)
oracle@gpidb01:~> expdp GPI/GPI@oradev directory=/tmp dumpfile=GPI.dmp
Export: Release 10.2.0.1.0 - 64bit Production on Dienstag, 16 Mai, 2006
16:13:43
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -
64bit Production
With the Partitioning, OLAP and Data Mining options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name /TMP is invalid
Seite 8Gunther Pippèrr © 2015 http://www.pipperr.de
Die ersten Schritte (1)
Pfad-Angabe über ein Oracle Directory
SQL> create directory dmpdir as '/opt/oracle';
Directory created.
SQL> grant read, write on directory dmpdir to scott;
Grant succeeded.
SQL> SELECT directory_path FROM dba_directories WHERE directory_name =
'DATA_PUMP_DIR';
DIRECTORY_PATH
-------------------------------------------------------------------------------
-
/app/oracle/product/10.2.0/rdbms/log/
Standard Directory = DATA_PUMP_DIR
D:\app\oracle\admin\XE\dpdump\XE:=>
Seite 9Gunther Pippèrr © 2015 http://www.pipperr.de
Die ersten Schritte
Sicherung nach DATA_DUMP_DIRexpdp GPI/GPI@oradev directory=DATA_PUMP_DIR dumpfile=GPI.dmp
Export: Release 10.2.0.1.0 - 64bit Production on Dienstag, 16 Mai, 2006
16:50:11
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -
64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "GPI"."SYS_EXPORT_SCHEMA_01": GPI/********@oradev
directory=DATA_PUMP_DIR dumpfile=GPI.dmp
..................
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "GPI"."INGRAM_IMPORT" 16.71 MB 44825 rows
. . exported "GPI"."TECHDATA_IMPORT" 9.100 MB 35497 rows
. . .....
. . exported "GPI"."TAS_PRO" 0 KB 0 rows
Master table "GPI"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for GPI.SYS_EXPORT_SCHEMA_01 is:
/opt/oracle/products/10.2.0/rdbms/log/GPI.dmp
Job "GPI"."SYS_EXPORT_SCHEMA_01" successfully completed at 16:50:30
Seite 10Gunther Pippèrr © 2015 http://www.pipperr.de
Die Architektur von Data Pump
Wie funktioniert das nun im Detail?
Seite 11Gunther Pippèrr © 2015 http://www.pipperr.de
Die beteiligten Data Pump Komponenten
expdp impdpEnterpriseManager
WeitereClients
DBMS_DATAPUMP
Loader
External Table API
DataPump
Direct Path API Metadata API:DBMS_METADATA
Data/Metadata movement engine
Data Pump
Seite 12Gunther Pippèrr © 2015 http://www.pipperr.de
Die Architektur von Data Pump
Der Export/Import wird über eigene Serverprozesse
auf dem Server durchgeführt
Kontrollprozess WorkerWorker
CMDimpdp/expdp
DatenbankJob Starten
Exp/Imp Prozess
DumpFile
1..n1..99
DumpFile
MasterTable
Schema
Seite 13Gunther Pippèrr © 2015 http://www.pipperr.de
Im Detail
Seite 14Gunther Pippèrr © 2015 http://www.pipperr.de
Ablauf Shadow-Prozess
Client startet DB-Prozess (Shadow-Prozess)
Mit DBMS_DATAPUMP.open wird ein neuer Job
angelegt
Die AQ-Tabellen werden angelegt
Die Master-Tabelle wird angelegt
– Log-Tabelle des gesamten Export Vorganges mit den Namen
des Export-Jobs
– Tabelle wird in den Export aufgenommen und dann gelöscht
(muss daher auch immer in eine Export Datei passen!)
Der Master-Control-Prozess gestartet
Seite 15Gunther Pippèrr © 2015 http://www.pipperr.de
Ablauf MCP Master Control Process
Ein Kontroll-Prozess pro Job zuständig
– Prozessname: <instance>_DMnn_<pid>
Überwacht und startet die Worker-Prozesse
Überwacht das Datei-Handling
– Legt neue Dateien an
Berechtigung beachten – Dateien werden unter dem User angelegt unter demdie Datenbank Prozesse auch gestartet wurden!
Im Oracle Real Applikation Cluster muss der Cluster Owner auch Schreibrechte auf das gewünschte Verzeichnis haben!
Seite 16Gunther Pippèrr © 2015 http://www.pipperr.de
Ablauf Worker-Prozesse
Es können mehrere Prozesse pro Job gestartet
werden
– Prozessname: <instance>_DWnn_<pid>
Datenstrukturen der zu exportierenden Objekte
werden extrahiert ( DBMS_METADATA)
Daten werden ausgelesen und in die DB oder
Datendateien geschrieben
Nur Enterprise Edition!
Seite 17Gunther Pippèrr © 2015 http://www.pipperr.de
Ausführung Worker-Prozesse
Der Export wird mit Direct-Path-Export oder External
Table von den Worker-Prozessen durchgeführt
Die Export-Datei kann in bis zu 99 einzelne Dateien
zerlegt werden
– dumpfile=exportname_%U.dmp filesize=650MB
Seite 18Gunther Pippèrr © 2015 http://www.pipperr.de
Monitoring (1)
Jobs in der DB überwachen
– Views:
DBA_DATAPUMP_JOBS
DBA_DATADUMP_SESSIONS
Interaktiver Modus
– Mit CTRL-C laufenden Client in den interaktiven Modus
versetzen
– Mit attach=<JOB_NAME> an den laufenden Export
andocken
Seite 19Gunther Pippèrr © 2015 http://www.pipperr.de
Monitoring (2)
Kommando „Status“ des Clients
Export> status
Job: SYS_EXPORT_SCHEMA_01
Operation: EXPORT
Mode: SCHEMA
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /opt/oracle/products/10.2.0/rdbms/log/dptest.dmp
bytes written: 4.096
Worker 1 Status:
State: EXECUTING
Object Schema: BHGVK2
Object Name: MYTEST
Object Type: SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Completed Objects: 2
Total Objects: 2
Worker Parallelism: 1
Mit „CTRL-C“ in den Kommando Modus wechseln
Seite 20Gunther Pippèrr © 2015 http://www.pipperr.de
Ein Performance-Vergleich
Export einer 2,3 GB großen Datenbank
Versuch EXP
Versuch EXPD
PS> Measure-Command { exp "'/ as sysdba'" full=yes file=full_exp.dmp }
PS> Measure-Command { expdp "'/ as sysdba'" FULL=YES
DIRECTORY=WORK_EXPORT DUMPFILE=full_expdp.dmp }
Ergebnis:- Datapump sollte in der Regel schnell sein- Dumpfile-Größe bei Data Pump kleiner
Dump File ca. 209 MB
Dump File ca. 83,9 MB
Minutes : 4Seconds : 48Milliseconds : 681
Minutes : 5Seconds : 47Milliseconds : 716
Seite 21Gunther Pippèrr © 2015 http://www.pipperr.de
Die Top Features von Oracle Data Pump
Parallele Ausführung auf dem Server möglich
Direkte Kontrolle über die Ausführung durch
dedizierten Kontrollprozess
– Status-Übersicht
– Restart eines Prozesses
– Neue Worker-Prozesse hinzufügen
Hauptnachteil:
Zugang zum Server wird benötigt, die Export Daten werden auf dem Server erstellt
Lösung: Share auf das die DB schreiben kann und alle lesen können
Seite 22Gunther Pippèrr © 2015 http://www.pipperr.de
Der Praktische Einsatz von Data Pump
Wie kann ich das am besten täglich
verwenden
Seite 23Gunther Pippèrr © 2015 http://www.pipperr.de
Vorbereitung – Directory Objekt für den Export
Einmalige Vorbereitung
– Anlegen eines Export Verzeichnisses im Betriebssystem
• Schreib- und Leserechte für den Oracle DB Prozess Owner auf den
Directory einrichten!
– DB SYS User: Erstellen eines Datenbank Directory Objects
das auf diese Export Verzeichnis zeigt
• Rechte an den Export User vergeben falls nicht mit SYS exportiert
werden soll
sqlplus / as sysdba
create directory WORK_EXPORT as 'D:\datapump_workshop';
grant read,write on directory WORK_EXPORT to GPI;
Seite 24Gunther Pippèrr © 2015 http://www.pipperr.de
Vorbereitung – Rechte für den Export User
Um nur seine eigenen Objekte zu exportieren
– Rolle CONNECT + RESOURCE + Schreibrechte auf dem
eigenen Default Tablespace
Um alle Objekte der Datenbank zu
exportieren/importieren
– Rolle EXP_FULL_DATABASE und IMP_FULL_DATABASE
sqlplus / as sysdba
grant CONNECT to GPI;
grant RESOURCE to GPI;
alter user GPI quota 10G on users;
grant EXP_FULL_DATABASE to GPI;
grant IMP_FULL_DATABASE to GPI;
Seite 25Gunther Pippèrr © 2015 http://www.pipperr.de
Export
Die Daten extrahieren
Seite 26Gunther Pippèrr © 2015 http://www.pipperr.de
Logisches Backup – Einen User exportieren(1)
Aufgabe: Daten sollen täglich gesichert werden und
bei Bedarf wieder eingespielt werden
Problem: Alle Tabellen müssen im gleiche Stand zu
einander konsistent gesichert werden!
– Sonst passen zum Beispiel die Master Detail Beziehungen
nicht zu einander!
Lösung A: Während der Sicherung wird die Applikation
angehalten
Lösung B: Die Daten werden transaktional zum
Zeitpunkt X exportiert, unabhängig davon die lange
der eigentliche Export dauert!
Wenig praktikabel
So sollte das immer durchgeführt werden!Funktioniert aber nur mit ausreichenden Ressourcen im Rollback Segment
Seite 27Gunther Pippèrr © 2015 http://www.pipperr.de
Zusätzlich ausdem UNDO Segment die alten Daten lesen
Konsistenter Export
Alle Tabelle zum gleichen Zeitpunkt exportieren
Zeit =>
B
C
A
Start Time = SCN
Tabelle A Tabelle B Tabelle C
Daten werde verändert Daten werde verändert
Export File
ORA-01555 „Snapshot Too Old“ Risiko!
FLASHBACK_TIME=SYSTIMESTAMP
FLASHBACK_SCN=582159018
Seite 28Gunther Pippèrr © 2015 http://www.pipperr.de
Logisches Backup – Einen User exportieren(2)
Eine Steuerdatei für den Export erstellen
– Steuerdatei in einem Editor erstellen#Wo soll der Export landen und wie soll der Export heißen
DIRECTORY=WORK_EXPORT
DUMPFILE=gpi_user_export.dmp
LOGFILE=gpi_user_export.log
#Welchen Namen soll der Export in der DB erhalten
#Welchen Name bekommt die Metadaten Tabelle
JOB_NAME=gpi_user_export_05_12_2015
#führe einen konsistenten Export zu diesem Zeitpunkt aus
FLASHBACK_TIME=SYSTIMESTAMP
#Welcher User soll exportiert werden
SCHEMAS=GPI,SCOTT
#Optional, sollen bereits bestehende Exports überschrieben werden
REUSE_DUMPFILES=YES
#Performance
EXCLUDE=STATISTICS
METRICS=YES
Empfehlung: Möglichst immer Steuerdatei statt Kommando Zeilen Übergabe verwenden!
Seite 29Gunther Pippèrr © 2015 http://www.pipperr.de
Logisches Backup – Eine User exportieren(3)
Den Export starten
– Export als SYS lokal aufrufen
– Export als GPI User über SQL*Net
export ORACLE_SID=GPI
$ORACLE_HOME/bin/expdp "'/ as SYSDBA'" parfile=~/export_gpi_user.dpctl
$ORACLE_HOME/bin/expdp gpi/gpi@gpi parfile=~/export_gpi_user.dpctl
Seite 30Gunther Pippèrr © 2015 http://www.pipperr.de
Die Größe eines Exports vorab berechnen
Parameter ESTIMATE_ONLY=YES
– Parameterdatei
#Wo soll der Log von dem Test Export liegen
DIRECTORY=WORK_EXPORT
LOGFILE=gpi_user_export_calculate.log
#Welchen Namen soll der Export erhalten in der DB erhalten
JOB_NAME=gpi_user_export_05_12_2015
#Für welche User soll der Test Export durchgeführt werden
SCHEMAS=GPI,GPI2
#Nur schätzen!
ESTIMATE_ONLY=YES
Objekttyp SCHEMA_EXPORT/TABLE/TABLE_DATA wird verarbeitet
. geschätzt "GPI"."TGPI" 12 MB
. geschätzt "GPI2"."TGPI2" 12 MB
Gesamte Schätzung mit BLOCKS Methode: 24 MB
Auszug aus der Logdatei:
Seite 31Gunther Pippèrr © 2015 http://www.pipperr.de
1 – 99 Export-Datei erzeugen mit %U
%U und FILESIZE
– Parameterdatei#Wo soll der Export landen und wie soll der Export heißen
DIRECTORY=WORK_EXPORT
#Export in 1MB große Files zerlegen
DUMPFILE=gpi_user_export_%U.dmp
FILESIZE=1M
LOGFILE=gpi_user_export.log
#Welchen Namen soll der Export erhalten in der DB erhalten
JOB_NAME=gpi_user_export_05_12_2015
#führe einen konsistenten Export zu diesem Zeitpunkt aus
FLASHBACK_TIME=SYSTIMESTAMP
#Welcher User soll
exportiert werden
SCHEMAS=GPI,GPI2
Seite 32Gunther Pippèrr © 2015 http://www.pipperr.de
Export komprimieren
Parameter COMPRESION
– COMPRESSION=[ALL | DATA_ONLY | METADATA_ONLY |
NONE]
• ALL enables compression for the entire export operation. The ALL
option requires that the Oracle Advanced Compression option be
enabled.
• DATA_ONLY results in all data being written to the dump file in
compressed format. The DATA_ONLY option requires that the Oracle
Advanced Compression option be enabled.
• METADATA_ONLY results in all metadata being written to the dump
file in compressed format. This is the default.
• NONE disables compression for the entire export operation.
https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL838
Seite 33Gunther Pippèrr © 2015 http://www.pipperr.de
Export parallelisieren
Parameter PARALLEL
– Default 1
– Sinnvolle Werte max. CPU Anzahl
Nur mit der Enterprise Edition der Datenbank
Seite 34Gunther Pippèrr © 2015 http://www.pipperr.de
Nur die Metadaten exportieren
Parameter CONTENT=METADATA_ONLY
– Nur die DDL‘s aller DB Objekte werden exportiert
Seite 35Gunther Pippèrr © 2015 http://www.pipperr.de
Nur Teile der Daten exportieren
Zum Beispiel um nur eine Teil der Produktion als Test
Daten einspielen, z.B. nur 10%
– Parameter
SAMPLE=[[schema_name.]table_name:]sample_percent
Nur bestimmte Daten exportieren
– Parameter
QUERY = [schema.][table_name:] query_clause
QUERY=employees:"WHERE department_id > 10 AND salary > 10000"
SAMPLE=scott.employees:10
Seite 36Gunther Pippèrr © 2015 http://www.pipperr.de
Zwischen verschiedene DB Version exportieren
Parameter VERSION
Export
– Daten werden so exportiert, das diese wieder in die „ältere“
Version importiert werden können
– Beispiel : VERSION=10.1.0.0.0
Quelle 12c Ziel 10g R1
Seite 37Gunther Pippèrr © 2015 http://www.pipperr.de
Wie löst Data Pump Abhängigkeiten auf?
Siehe View:
Database/Schema/Table_EXPORT_OBJECTS
SQL> select object_path,comments
from table_export_objects
where object_path like 'TABLE%';
OBJECT_PATH COMMENTS
-------------------- ----------------------------------------
TABLE/AUDIT_OBJ Object audits on the selected tables
TABLE/COMMENT Table and column comments on the selecte
d tables
TABLE/CONSTRAINT Constraints (including referential const
raints)
TABLE/CONSTRAINT/REF Referential constraints
_CONSTRAINT
TABLE_EXPORT/TABLE/A Object audits on the selected tables
Seite 38Gunther Pippèrr © 2015 http://www.pipperr.de
Filter für DB-Objekte
Erweiterte Auswahl von Filtern für DB-Objekte
– Mit include und exclude können für alle DB-Objekte
Filterregeln gesetzt werden
Siehe auch Metalink Doc ID 341733.1
EXCLUDE = object_type[:name_clause] [, ...]
INCLUDE = object_type[:name_clause] [, ...]
SCHEMAS=scott EXCLUDE=SEQUENCE, TABLE:"IN ('EMP', 'DEPT')"
SCHEMAS=scott INCLUDE=FUNCTION, PACKAGE, PROCEDURE, TABLE:"=
'EMP'"
Beispiele:
Entweder include ODER
exclude!
Seite 39Gunther Pippèrr © 2015 http://www.pipperr.de
Nach was kann gefiltert werden?
Nur entweder nach EXCLUDE oder INCLUDE
Je nach Export Type kann nach dem folgenden
gefiltert werden:
Job_type: het_type:• FULL => DATABASE_EXPORT
• SCHEMA => SCHEMA_EXPORT
• TABLE => TABLE_EXPORT
• TRANSPORTABLE => TRANSPORTABLE_EXPORT
select seq_num
, full_path
, het_type
from sys.datapump_paths
order by het_type,seq_num
/
Seite 40Gunther Pippèrr © 2015 http://www.pipperr.de
Beispiel Exclude – Keine Statistiken exportieren
Parameter „exclude=statistics”
– Keine Statistiken exportieren
Seite 41Gunther Pippèrr © 2015 http://www.pipperr.de
Import
Daten wieder importieren
Seite 42Gunther Pippèrr © 2015 http://www.pipperr.de
Export wieder einspielen – Daten ersetzen(1)
Die tägliche logische Sicherung der Daten soll wieder
in die Datenbank unter dem gleichen User eingespielt
und dabei sollen alle Daten ersetzen werden
– Eine Steuerdatei für den Import erstellenDIRECTORY=WORK_EXPORT
DUMPFILE=gpi_user_export.dmp
LOGFILE=gpi_user_import.log
#Welchen Namen soll der Export erhalten in der DB erhalten
JOB_NAME=gpi_user_import_05_12_2015
#Welcher User soll importiert werden
SCHEMAS=GPI
#Was soll mit existierenden Tabellen passieren?
TABLE_EXISTS_ACTION=REPLACE
Seite 43Gunther Pippèrr © 2015 http://www.pipperr.de
Export wieder einspielen – Optionen (2)
Was soll mit existierenden Tabellen passieren?
Parameter
– TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE |
REPLACE]
• SKIP = Überspringen
• APPEND = Daten anhängen
• TRUNCATE = Lösche die Daten und importiere
• REPLACE = Drop Table und importiere
Default
Seite 44Gunther Pippèrr © 2015 http://www.pipperr.de
Export in ein anderes User Schema einspielen
Parameter REMAP_SCHEMA
– <Quelle im export file>:<Ziel Schema in der Datenbank>
– Ziel muss nicht existieren, wird angelegt falls der Import User
genügend Rechte hat (wie Import mit SYS)
– Es können gleichzeitig auch Quellen in ein Ziel importiert
werdenDIRECTORY=WORK_EXPORT
DUMPFILE=scott_user_export.dmp
LOGFILE=gpi_user_import.log
#Welchen Namen soll der Export erhalten in der DB erhalten
JOB_NAME=scott_user_import_05_12_2015
#Welcher User soll importiert werden
REMAP_SCHEMA=GPI:GPI3
REMAP_SCHEMA=GPI2:GPI3
#Was soll mit existierenden Tabellen passieren?
TABLE_EXISTS_ACTION=REPLACE
Seite 45Gunther Pippèrr © 2015 http://www.pipperr.de
Beispiel Include – Nur eine Tabelle importieren
Parameter
schemas=hr include=table/table:\"= \'EMPLOYEES\'\“
– Nur die Tabelle wird importiert
Parameter
schemas=hr include=table:\"= \'EMPLOYEES\'\"
– Tabelle + alle Objekte im Pfad werden importiert
Im Pfad wird gefunden…SCHEMA_EXPORT/TABLE/TABLESCHEMA_EXPORT/TABLE/TABLE_DATASCHEMA_EXPORT/TABLE/GRANTSCHEMA_EXPORT/TABLE/INDEX….
Seite 46Gunther Pippèrr © 2015 http://www.pipperr.de
Tabellen beim Import umbenennen
Parameter REMAP_TABLE
– Beispiel
REMAP_TABLE=emp:mitarbeiter
Seite 47Gunther Pippèrr © 2015 http://www.pipperr.de
SQL/DDL aus einem Export extrahieren
Import nur des SQL‘s des Exports in eine Log Datei
Nur zum Beispiel
Tabellen DDL erzeugen
– Parameter include=TABLE
impdp "'/ as sysdba'" directory=WORK_EXPORT
dumpfile=GPI_USER_EXPORT_%U.DMP
sqlfile=gpi_script.sql
Seite 48Gunther Pippèrr © 2015 http://www.pipperr.de
DDL-Transformation beim Import
Objekt-Meta-Daten werden als XML-Datei gespeichert
Durch eine XSL-Transformation werden während dem
Import Eigenschaften geändert
IMPDP stellt zur Verfügung
– REMAP_SCHEMA
(wie fromUser/toUser beim alten IMP)
– REMAP_TABLESPACE,REMAP_DATAFILE
– TRANSFORM=<storge Klausel>
Damit können die Storage-Klauseln entfernt werden
Seite 49Gunther Pippèrr © 2015 http://www.pipperr.de
Job Control
Exp/Imp kontrollieren und überwachen
Seite 50Gunther Pippèrr © 2015 http://www.pipperr.de
Einen Export Job nur initialisieren
Parameter ABORT_STEP
– -1 Nur Meta Daten Tabelle anlegen
– <n> = Export durchführen bis zu dieser Process Number in
der Master table
Job Tabelle wird unter dem Export User angelegt:
Seite 51Gunther Pippèrr © 2015 http://www.pipperr.de
An eine Job wieder anknüpfen
Parameter ATTACH
– An den Job nun anknüpfen
– Im Interaktiven Modus jetzt starten und Log Ausgaben
anzeigen lassen
• STATUS => Zeigt den Status
• START_JOB => Startet den Job erneut
• CONTINUE_CLIENT => Job läuft im Client Modus weiter
expdp "'/ as sysdba'" ATTACH=GPI_USER_EXPORT_05_12_2015
Seite 52Gunther Pippèrr © 2015 http://www.pipperr.de
Job Control mit Ctr-C starten
Mit Ctrl-C kann der Job in den Interaktiven Modus
versetzt werden
The following commands are valid while in interactive mode.
Note: abbreviations are allowed
Command Description
------------------------------------------------------------------------------
ADD_FILE Add dumpfile to dumpfile set.
CONTINUE_CLIENT Return to logging mode. Job will be re-started if idle.
EXIT_CLIENT Quit client session and leave job running.
FILESIZE Default filesize (bytes) for subsequent ADD_FILE commands.
HELP Summarize interactive commands.
KILL_JOB Detach and delete job.
PARALLEL Change the number of active workers for current job.
PARALLEL=<number of workers>.
START_JOB Start/resume current job.
STATUS Frequency (secs) job status is to be monitored where
the default (0) will show new status when available.
STATUS[=interval]
STOP_JOB Orderly shutdown of job execution and exits the client.
STOP_JOB=IMMEDIATE performs an immediate shutdown of the
Data Pump job.
Seite 53Gunther Pippèrr © 2015 http://www.pipperr.de
Eine Job beenden
Mit „Ctr-C“ oder mit ATTACH eine Job Console öffenen
Mit „KILL_JOB“ den Job beenden
Achtung!
Möglichst IMMER sauber den Job so beenden!
Ansonsten können Leichen/Reste der Jobs in den DB verbleiben wie zum Beispiel die Metadaten Tabelle oder gelegentlich auch mal ein Worker Prozesse!
Seite 54Gunther Pippèrr © 2015 http://www.pipperr.de
Restart
Ein Restart ist immer dann möglich wenn:
– Die Master-Table ist noch intakt
– Die Dump file Set noch in Ordnung
Neustart mit:
– Ein Client kann sich über „ATTACH=<job_name>“ wieder
verbinden
– Bei Problemen mit dem letzten zu exportierenden Objekt
kann mit „START=SKIP_CURRENT“ dieses übersprungen
werden
In Informationen über den Job sind immer in der aktuellen Master-Tabelle hinterlegt!
Seite 55Gunther Pippèrr © 2015 http://www.pipperr.de
Weitere Features
Noch mehr Möglichkeiten
Seite 56Gunther Pippèrr © 2015 http://www.pipperr.de
Der Netzwerk-Modus
Daten zwischen zwei Instanzen austauschen
– Nur zwischen gleiche DB-Versionen zu empfehlen
– Datenaustausch über DB-Link
– Daten werden über „insert as select“ kopiert
– Kann auch Remote „read only“ DBs exportieren, wenn die
Ziel-Instanz die Jobs steuert
– Keine Unterstützung für LONG/LONG RAW
Seite 57Gunther Pippèrr © 2015 http://www.pipperr.de
Beispiel Netzwerk Modus
Kein Export notwendig
Aufruf mit Import
Parameter NETWORK_LINK=<Source DB>
Ziel Quelle
DB Link auf die Quell Datenbank =>
impdp "'/ as sysdba'"
DIRECTORY=WORK_EXPORT
NETWORK_LINK=MYSOURCE
LOGFILE=NET_IMPORT_PRODDEV.LOG
EXCLUDE=STATISTICS
REMAP_SCHEMA=SCOTT:SCOTT2
MYSOURCE
Seite 58Gunther Pippèrr © 2015 http://www.pipperr.de
Performance-Überlegungen
I/O-Bandbreite ist der wichtigste Faktor
– DUMP File auf einen anderen Bereich als die Datendateien
legen
– Mehrere Dump File Locations angeben
Etwas mehr SGA für die JOB-Ausführung
Auf genügend Platz in den Rollback -Segmenten
achten
Seite 59Gunther Pippèrr © 2015 http://www.pipperr.de
Performance-Überlegungen
Ausführungszeiten anzeigen lassen– METRICS=YES
Export:– Statistiken nicht exportieren
• EXCLUDE=STATISTICS
Import– Indexes erste nachträglich erstellen
• EXCLUDE=INDEXES
– SQL aus dem Export extrahieren • INCLUDE=INDEXES SQLFILE=indexes.sql
– SQL überarbeiten und parallel ausführen
Seite 60Gunther Pippèrr © 2015 http://www.pipperr.de
Trace für Data Pump anlegen
Mit „trace=480300“ kann für den Master Control
Process (MCP) und den Worker-Prozess ein Trace
angelegt werden
Metalink Doc ID: Note:286496.1
Seite 61Gunther Pippèrr © 2015 http://www.pipperr.de
Sicherheitsüberlegungen
Problematik des Überschreibens und das Anlegen von
Dateien im Betriebssystem
– Dateien werden mit den Rechten des Oracle-Prozesses in
Verzeichnisse geschrieben
Seite 62Gunther Pippèrr © 2015 http://www.pipperr.de
Bekannte Probleme
Export / Import von Objekt-Typen
Lösung: Neue OID errechnen lassen mit:– Parameter transform=OID:n:type
ORA-39083: Objekttyp TYPE konnte nicht erstellt werden,
Fehler:
ORA-02304: Ungültiges Objektidentifizierungsliteral
Fehlerhafte SQL ist:
CREATE TYPE "OE9"."CUST_ADDRESS_TYP" OID
'88A4AF6A4CD1656DE034080020E0EE3D'
AS OBJECT
( street_address VARCHAR2(40)
, postal_code VARCHAR2(10)
, city VARCHAR2(30)
, state_province VARCHAR2(10)
, country_id CHAR(2)
);
Seite 63Gunther Pippèrr © 2015 http://www.pipperr.de
Neue Feature mit 12c - Export
Eine View als Table
– Parameter
• VIEWS_AS_TABLES=[schema_name.]view_name[:table_name],
Seite 64Gunther Pippèrr © 2015 http://www.pipperr.de
Neue Feature mit 12c - Import
Nologging Mode beim Import
– Parameter transform=disable_archive_logging:y
– Weniger Archive Logs beim Import
– Original Settings auf dem DB Objekten werden nach dem
Import wieder hergestellt
Seite 65Gunther Pippèrr © 2015 http://www.pipperr.de
Neue Feature mit 12c
Log mit Zeitstempel
– Parameter logtime=all
– Timestamp bei jeder Operation
LOB nach Securefile transformieren
– Parameter transform=lob_storage:securefile
Seite 66Gunther Pippèrr © 2015 http://www.pipperr.de
Data Pump aus der DB aufrufen
Eine Export per PL/SQL durchführen
Seite 67Gunther Pippèrr © 2015 http://www.pipperr.de
Das Package DBMS_DATAPUMP
Starten und verwalten von Import/Export aus der
Datenbank heraus
Benötigte Rollen: • EXP_FULL_DATABASE
• IMP_FULL_DATABASE
Job anlegen mit: dbms_datapump.open
Seite 68Gunther Pippèrr © 2015 http://www.pipperr.de
Einen Export aus der DB aufrufen
Starten des Export-Jobs in der DBDECLARE
h1 NUMBER; -- Data Pump job handle
BEGIN
h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'JOBNAME','LATEST');
DBMS_DATAPUMP.ADD_FILE( handle => h1
, filename =>'GPI_DBINTERN.dmp'
, directory => 'WORK_EXPORT'
, filetype => 1 );
Dbms_DataPump.Add_File( handle => h1
, filename => 'expdp_plsql.log'
, directory => 'WORK_EXPORT'
, filetype => 3 );
DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''GPI'')');
DBMS_DATAPUMP.START_JOB(h1);
END;
/
Typ 3 :Log
Datei
Typ 1 :ExportDateiKU$_FILE_TYPE_DUMP_FILE
KU$_FILE_TYPE_LOG_FILE
Seite 69Gunther Pippèrr © 2015 http://www.pipperr.de
Mit dem SQL*Developer DP Skripte erzeugen
DBA Tools verwenden
Import Wizard kann auch den Inhalt von einem Dump lesen!
Seite 70Gunther Pippèrr © 2015 http://www.pipperr.de
Mit dem SQL*Developer DP Skripte erzeugen
Skripte werden über eine Job auf der Datenbank
heraus ausgeführt
Demo
Seite 71Gunther Pippèrr © 2015 http://www.pipperr.de
External Table mit Data Pump
Datenaustausch zwischen Datenbanken
Archivieren von Alt Daten
Seite 72Gunther Pippèrr © 2015 http://www.pipperr.de
Externe Tabelle mit Data Pump anlegen
Externe Tabelle vom Type oracle_datapump anlegen
Abfragen:
CREATE TABLE tgpi_export
ORGANIZATION EXTERNAL
(
TYPE oracle_datapump
DEFAULT DIRECTORY WORK_EXPORT
LOCATION ('tgpi_export_table.dmp')
)
AS
SELECT * FROM TGPI;
select count(*) from TGPI;
Mit Oracle 12c Kompression möglich (Lizenz pflichtig!)ACCESS PARAMETERS (COMPRESSION ENABLED MEDIUM)
Seite 73Gunther Pippèrr © 2015 http://www.pipperr.de
Externe Tabelle einbinden
In einer anderen DB wieder einbinden
CREATE TABLE tgpi_export(
-- Spalten Definition
)
ORGANIZATION EXTERNAL
(
TYPE oracle_datapump
DEFAULT DIRECTORY WORK_EXPORT
LOCATION ('tgpi_export_table.dmp')
)
/
Select count(*) from tgpi_export
/
Seite 74Gunther Pippèrr © 2015 http://www.pipperr.de
Einsatz
Archivierung von Tabellen
– Vorteil:
• Tabelle ist Read Only
• Datenbank wird kleiner (Backup Volumen!)
– Nachteil:
• Langsamer
Transport von Daten
Seite 75Gunther Pippèrr © 2015 http://www.pipperr.de
Transportable Tablespace
Datendateien austauschen
Seite 76Gunther Pippèrr © 2015 http://www.pipperr.de
Transportable Tablespaces
Schnellste Möglichkeit Daten zwischen zwei
Datenbanken auszutauschen
Mit Storage Snapshot Techniken lassen sich TeraByte
an Daten in Sekunden austauschen
– Mit expdp werden nur die Meta Daten erzeugt
– Datendatei zur neuen Datenbank kopieren
• Tipp: ocopy unter Windows verwenden um geöffnete Dateien zu
kopieren
– Datendatei in der neuen Umgebung wieder einbinden
Seite 77Gunther Pippèrr © 2015 http://www.pipperr.de
Voraussetzung bzw. Nachteil
Gleicher Zeichensatz zwischen den Datenbanken
Gleiche BIG/Little Endian Daten Darstellung
Alle transportieren Objekte haben keine
Abhängigkeiten zu anderen Tablespaces wie Indexes
etc.
Daten werden nicht automatisch reorganisiert
Ablauf siehe z.B.:http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/tts/index.html
Seite 78Gunther Pippèrr © 2015 http://www.pipperr.de
Data Masking mit Data Pump
Daten beim laden verändern
Seite 79Gunther Pippèrr © 2015 http://www.pipperr.de
Daten beim Import manipulieren
Parameter REMAP_DATA
– REMAP_DATA=[schema.]tablename.column_name:[schema
.]pkg.function
Daten können bei Import mit einer in der DB
hinterlegten eigenen Funktion manipuliert werden
DIRECTORY=WORK_EXPORT
DUMPFILE=gpi_user_export.dmp
LOGFILE=gpi_user_import.log
#Welchen Namen soll der Export erhalten in der DB erhalten
JOB_NAME=gpi_user_import_05_12_2015
#Welcher User soll importiert werden
SCHEMAS=GPI
#Daten mit einer Funktion ersetzen
REMAP_DATA=hr.mitarbeiter.geburstdatum:hr.dataMappingFunction
Seite 80Gunther Pippèrr © 2015 http://www.pipperr.de
Zusammenfassung
Was bringt uns das?
Seite 81Gunther Pippèrr © 2015 http://www.pipperr.de
Vor- und Nachteile
Vorteil:
– Ausführung aus PL/SQL über eigene API
– Restart möglich
– Wesentlich performanter
Nachteil:
– Je nach dem, läuft nur auf dem Server
Seite 82Gunther Pippèrr © 2015 http://www.pipperr.de
Zusammenfassung
Export/Import direkt aus der Datenbank ausführen
Wesentlich bessere Steuerung als mit IMP/EXP
Deutlich bessere Performance
Seite 83Gunther Pippèrr © 2015 http://www.pipperr.de
AF&Fragen
Antworten
Oracle Data Pump
Seite 84Gunther Pippèrr © 2014 http://www.pipperr.de
Gunther Pippèrr - IT-Architekt - Berater
• High-Tech• Real Estate• Utility• Communications
• IT System Architekt • Technische Projektleitung• Design und Implementierung
von Datenbank Anwendungen
• Entwurf und Umsetzung von IT Infrastrukturen zum Datenmanagement
Gunther Pippèrr arbeitet seit mehr als 16 Jahre intensiv mit den Produkten der Firma Oracle im Bereich Datenbanken/Applikationsserver und Dokumenten-Management.
Herr Pippèrr hat sich tiefes Wissen über den Aufbau komplexer IT Architektur aneignen können und hat dieses in der Praxis erfolgreich umgesetzt.
Herr Pippèrr hat eine Abschluss als Dipl. Ing. Technische Informatik (FH) an der FH Weingarten.
Industry Expertise
Background
Functional Expertise
Datenbank Architekt für ein Projekt zur Massendatenverarbeitung in der Telekommunikation
Architekt und technische Projektverantwortung für ein Smart Metering Portal für das Erfassen von Energiezählerdaten und Asset Management
Architekt und Projektleitung , Datenbank Design und Umsetzung für die Auftragsverwaltung mit Steuerung von externen Mitarbeitern für den Sprachdienstleister von deutschen Technologiekonzern
Architekt und technische Projektverantwortung für IT Infrastrukturprojekte, z.B.:
Zentrale Datenhaltung für Münchner Hotelgruppe mit über 25 Hotels weltweit,
Redundante Cluster Datenbank Infrastrukturen für diverse größere Web Anwendungen wie Fondplattform und Versicherungsportale, Loyalty Card Anwendungen
CRM- und Ausschreibungsportal für großen Münchner Bauträger
Selected Experience
http://www.pipperr.dehttp://orapowershell.codeplex.com
Web