36
Seite 1 Gunther Pippèrr © 2010 http://www.pipperr.de ORACLE DATA PUMP Moden Exportieren und Importieren 0101 1010101 0101011010 11010110100011 1010101101000000 1000101010101000000 1001110101010000000001 0110101110010100000000001 0101101000110100100000000010 1010010101000111010100000000010 0110101010010000011000000000000101 1011010101010010101000000000000000001 1000011111010010101010100000000000000101 0000110011110100000000000000000000000000000 0100000110001111111111111110010100000000000101

Oracle Data Pump - pipperr.depipperr.de/knowhow/datapump/Data_Pump_10g.pdf · Gunther Pippèrr © 2010 Seite 3 IMP und EXP Importieren und Exportieren wie gehabt Wird vorerst weiter

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Seite 1 Gunther Pippèrr © 2010 http://www.pipperr.de

ORACLE DATA PUMP Moden Exportieren und Importieren

0101

1010101

0101011010

11010110100011

1010101101000000

1000101010101000000

1001110101010000000001

0110101110010100000000001

0101101000110100100000000010

1010010101000111010100000000010

0110101010010000011000000000000101

1011010101010010101000000000000000001

1000011111010010101010100000000000000101

0000110011110100000000000000000000000000000

0100000110001111111111111110010100000000000101

Seite 2 Gunther Pippèrr © 2010 http://www.pipperr.de

Agenda

Imp und Exp – Vergangenheit und Zukunft

Architektur und Grundlagen

Erweiterte Funktionen

Seite 3 Gunther Pippèrr © 2010 http://www.pipperr.de

IMP und EXP

Importieren und Exportieren wie gehabt

Wird vorerst weiter unterstützt

Seite 4 Gunther Pippèrr © 2010 http://www.pipperr.de

Probleme bei Imp/Exp

Schwieriger Neustart bei einem Fehler

Ausführung vom Client 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 5 Gunther Pippèrr © 2010 http://www.pipperr.de

Wo ist DataPump verfügbar?

Feature des Database Core 10g

– 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

Seite 6 Gunther Pippèrr © 2010 http://www.pipperr.de

Die ersten Schritte

Einen einfachen Export durchführen

1. Versuch (wie gewohnt)

oracle@ncidb01:~> 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 7 Gunther Pippèrr © 2010 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 8 Gunther Pippèrr © 2010 http://www.pipperr.de

Die ersten Schritte

Sicherung nach DATA_DUMP_DIR oracle@ncidb01:/opt/oracle/products/10.2.0> expdp 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 9 Gunther Pippèrr © 2010 http://www.pipperr.de

Die beteiligten Komponenten

expdp impdp Enterprise Manager

Weitere - Client

DBMS_DATAPUMP

Loader

External Table API

DataPump

Direct Path API Metadata API: DBMS_METADATA

Data/Metadata movement engine

Data Pump

Seite 10 Gunther Pippèrr © 2010 http://www.pipperr.de

Die Architektur

Der Export/Import wird über eigene Serverprozesse

auf dem Server durchgeführt

Kontrollprozess Worker Worker

CMD impdp/expdp

Datenbank Job Starten

Exp/Imp Prozess

DumpFile

1..n 1..99

DumpFile

Master Table

Schema

Seite 11 Gunther Pippèrr © 2010 http://www.pipperr.de

Im Detail Master Table

Logfile

Status Queue

control Queue

Master Kontrollprozess

Shadow process

DumpFile

DumpFile Set

Worker process 1

Worker process n

Worker process 2

CMD impdp/expdp

MCP

Seite 12 Gunther Pippèrr © 2010 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 auch immer in eine Export Datei passen!)

Der Master-Control-Prozess gestartet

Seite 13 Gunther Pippèrr © 2010 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

Seite 14 Gunther Pippèrr © 2010 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 aus / gelesen und in die DB oder

Datendateien geschrieben

Seite 15 Gunther Pippèrr © 2010 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 16 Gunther Pippèrr © 2010 http://www.pipperr.de

Monitoring (1)

Jobs in der DB überwachen

– Views:

DBA_DATAPUMP_JOBS

DBA_DATADUMP_SESSIONS

Seite 17 Gunther Pippèrr © 2010 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

Seite 18 Gunther Pippèrr © 2010 http://www.pipperr.de

Die wichtigsten Funktionen

Parallele Ausführung auf dem Server

Direkte Kontrolle über die Ausführung durch

dedizierten Kontrollprozess

– Status-Übersicht

– Restart eines Prozesses

– Neue Worker-Prozesse hinzufügen

Seite 19 Gunther Pippèrr © 2010 http://www.pipperr.de

Die Größe eines Exports berechnen

Parameterdatei

JOB_NAME=MYEXPORT

DIRECTORY=DATA_PUMP_DIR

LOGFILE=DATA_PUMP_DIR:GPI.explog

ESTIMATE_ONLY=Yes

.................

. estimated "GPI"."PRO_CON" 0 KB

. estimated "GPI"."PROJECTS" 0 KB

. estimated "GPI"."TASKS" 0 KB

. estimated "GPI"."TAS_PRO" 0 KB

Total estimation using BLOCKS method: 31.68 MB

Job "GPI"."GPIXXX" successfully completed at 14:36:05

Auszug aus der Logdatei:

oracle@ncidb01:~>expdp GPI/GPI@oradev parfile=mypar.dpctl

Seite 20 Gunther Pippèrr © 2010 http://www.pipperr.de

1 – 99 Export-Datei erzeugen mit %U

Parameterdatei

JOB_NAME=MYEXPORT

DIRECTORY=DATA_PUMP_DIR

DUMPFILE=DATA_PUMP_DIR:GPI_%U.dmp

LOGFILE=DATA_PUMP_DIR:GPI.explog

STATUS=20

FILESIZE=132K

oracle@ncidb01:~>expdp GPI/GPI@oradev parfile=mypar.dpctl

Dump file set for GPI.GPIXXX is: /opt/oracle/products/10.2.0/rdbms/log/GPI_01.dmp /opt/oracle/products/10.2.0/rdbms/log/GPI_02.dmp /opt/oracle/products/10.2.0/rdbms/log/GPI_03.dmp Job "GPI"."GPIXXX" successfully completed at 14:31:01

Auszug aus der Log-Datei:

Seite 21 Gunther Pippèrr © 2010 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 22 Gunther Pippèrr © 2010 http://www.pipperr.de

DDL-Transformation

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 23 Gunther Pippèrr © 2010 http://www.pipperr.de

Einen Job steuern

Mit Ctrl-C kann der Job in den Edit-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 24 Gunther Pippèrr © 2010 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 letzen 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 25 Gunther Pippèrr © 2010 http://www.pipperr.de

Das Package DBMS_DATAPUMP

Starten und verwalten von Import/Export aus der

Datenbank heraus

Benötigte Rollen: EXP_FULL_DATABASE und

IMP_FULL_DATABASE

Job anlegen mit: Dbms_DataPump.Open

Seite 26 Gunther Pippèrr © 2010 http://www.pipperr.de

Einen Export aus der DB aufrufen

Starten des Export-Jobs in der DB DECLARE

h1 NUMBER; -- Data Pump job handle

BEGIN

h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'JOBNAME','LATEST');

DBMS_DATAPUMP.ADD_FILE( handle => h1

, filename =>'GPI05.dmp'

, directory => 'DMPDIR'

, filetype => 1 );

Dbms_DataPump.Add_File( handle => h1

, filename => 'expdp_plsql.log'

, directory => 'DMPDIR'

, filetype => 3 );

DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''GPI'')');

DBMS_DATAPUMP.START_JOB(h1);

END;

/

Typ 3 : Log

Datei

Typ 1 : Export Datei KU$_FILE_TYPE_DUMP_FILE

KU$_FILE_TYPE_LOG_FILE

Seite 27 Gunther Pippèrr © 2010 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

Seite 28 Gunther Pippèrr © 2010 http://www.pipperr.de

Wie löst DataPump 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 29 Gunther Pippèrr © 2010 http://www.pipperr.de

Performance-Überlegungen

I/O-Bandbreite ist der wichtigste Faktor

– DUMP File auf einen anderen Bereich als die Datendateien

legen

Etwas mehr SGA für die JOB-Ausführung

Auf genügend Platz in den Rollback -Segmenten

achten

DUMPFILE=myDumpDirectory1:myExport%u.dmp ,myDumpDirectory1:myExport%u.dmp

Seite 30 Gunther Pippèrr © 2010 http://www.pipperr.de

Ein Performance-Vergleich

Export eines Schemas

Versuch EXP

Versuch EXPD

real 25m58.134s user 12m53.760s sys 4m50.485s

time exp bhgvk2@oradev file=test.dmp

real 6m11.165s user 0m0.311s sys 0m0.148s

time expdp sys@oradev schemas=bhgvk2 dumpfile=dptest.dmp

Ergebnis: - Datapump ca. 3-4 mal so schnell - Dumpfile-Größe ähnlich

Dump file ca. 1.033 MB

Dump File ca. 925 MB

Seite 31 Gunther Pippèrr © 2010 http://www.pipperr.de

Trace für DataPump 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 32 Gunther Pippèrr © 2010 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 33 Gunther Pippèrr © 2010 http://www.pipperr.de

Bekannte Probleme

Export / Import von Objekt-Typen 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 34 Gunther Pippèrr © 2010 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

– Nur zu 10g kompatibel

– Für Installationsroutinen für das Verteilen eines Schematas

zu viel Vorarbeit notwendig

Seite 35 Gunther Pippèrr © 2010 http://www.pipperr.de

Zusammenfassung

Export/Import direkt aus der Datenbank ausführen

Wesentlich bessere Steuerung als mit IMP/EXP

Deutlich bessere Performance

Seite 36 Gunther Pippèrr © 2010 http://www.pipperr.de

A F & Fragen

Antworten

Oracle Data Pump