Als PDF Downloaden!

Werbung
Tipps & Tricks: Juli 2004
Bereich:
DBA, PL/SQL
Erstellung:
06/2004 MP
Versionsinfo:
10.1,10.2, 11.1, 11.2
Letzte Überarbeitung:
06/2009 MP
Datapump Package
Neues Package für Export/Import in Oracle 10g (dbms_datapump)
Die Oracle Version 10g hat die Export/Import Utilities komplett erneuert. Es werden zwar aus
Kompatibilitätsgründen noch die beiden alten Tools EXP und IMP ausgeliefert, aber wohl nicht mehr lange
unterstützt.
1. Was bringt nun die neue Schnittstelle
Höhere Geschwindigkeit (Export bis zu 60% schneller, Import ca. 15 mal schneller!)
Viel mehr Optionen (z.B. Exclude und Include Listen)
und eine API in Form eines Package (dbms_datapump)
Da diese Schnittstelle im Internet noch nicht besonders gut dokumentiert ist, wollen wir hier näher darauf
eingehen:
2. Stolperfallen
In der Oracle Dokumentation Version 10.1 sind leider einige Fehler versteckt, die einem das Leben
schwer machen. Darüber hinaus sind die Fehlermeldungen des Package mehr als dürftig.
Bei der OPEN Procedure heißt der Parameter job_mode und nicht mode !
Bei der METADATA_FILTER Procedure heiß der Parameter NAME_EXPR und nicht
INCLUDE_NAME_EXPR
Beim Export darf die Datei nicht existieren, in die exportiert werden soll, sonst bekommt man folgende
Fehlermeldung:
ORA-39001: Ungültiger Argumentwert
Hinweis: Ab Version 11.1 kann der Parameter REUSE_DUMPFILES=Y das Problem lösen.
Der Shared Pool sollte größer als 60M sein, sonst kann es ein Speicherfehler geben:
ORA-00604: Fehler auf rekursiver SQL-Ebene 2
ORA-04031: 4096 Byte des Shared Memorys konnten nicht zugewiesen werden ("shared
pool","select pos#,intcol#,col#,spa...","Typecheck
ORA-06508: PL/SQL: aufgerufene Programm-Einheit ist nicht zu finden
Sie sollten auch nicht als SYS das Package aufrufen sonst gibt es diese Fehlermeldung:
FLASHBACK automatisch aktiviert, um Datenbankintegrität aufrechtzuerhalten.
ORA-39135: SYS-Schema kann keine Daten mit spezifischen SCNs lesen
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 4
Wenn ein fehlerhafter Export bereits zuvor gelaufen ist, kann es nötig sein, sich erneut anzumelden !!!
und dann die Verwaltungstabelle des Exports zu löschen. Der Name der Tabelle entspricht dem
Export-Job-Namen ( im unteren Beispiel EMP_EXPORT)
Informationen über noch laufende Prozesse finden Sie in der Verwaltungsview: DBA_DATAPUMP_JOBS
Export und Import arbeiten nur mit Directories zusammen und nicht mit UTL_FILE_DIR !
Sowohl Export als auch Import erfolgen asynchron. Das heisst, die dbms_datapump Routinen sind
bereits fertig, dann startet erst der eigentliche Vorgang.
Sie können jedoch nach dem erfolgreichen Beenden der Routinen, Ihre Session beenden, die Aufgabe
liegt deswegen trotzdem weiterhin in AQ-Tabellen.
Wenn man diese Klippen umschifft hat kann man mit dem Export beginnen...
3. Beispiel-Skript für Tabellen-Export:
Anmelden an der DB:
CONNECT system/manager
Verzeichnisse erstellen:
HOST mkdir C:\oracle\expimp
HOST mkdir C:\oracle\expimp\logs
Directory Einträge anlegen:
CREATE OR REPLACE DIRECTORY expimp AS 'C:\oracle\expimp';
CREATE OR REPLACE DIRECTORY expimp_log AS 'C:\oracle\expimp\logs';
Rechte vergeben:
GRANT READ,WRITE ON DIRECTORY expimp TO system;
Alte Exportdatei(falls vorhanden) löschen:
HOST del C:\oracle\expimp\myexp*.dmp
Alte EXPORT-Verwaltungstabelle löschen sonst kann Job nicht neu angelegt werden:
DROP TABLE system.emp_export;
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
p_dph NUMBER;
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 4
BEGIN
p_dph := DBMS_DATAPUMP.open(operation=>'EXPORT',job_mode=>'TABLE',job_name
=>'EMP_EXPORT');
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'MYEXP%U.DMP',directory
=> 'EXPIMP',filetype=>1);
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'EXP.LOG',directory
=> 'EXPIMP_LOG',filetype=>3);
DBMS_DATAPUMP.metadata_filter(handle => p_dph,name=>'SCHEMA_EXPR',value
=>'IN (''SCOTT'')');
DBMS_DATAPUMP.metadata_filter(handle => p_dph,name=>'NAME_EXPR',value
=>'IN (''EMP'')');
DBMS_DATAPUMP.start_job(p_dph);
DBMS_DATAPUMP.detach(p_dph);
dbms_output.put_line('Export erfolgreich beendet');
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Fehler:'||sqlerrm||' bei Job-ID:'||p_dph);
END;
/
4. Beispiel-Skript für Tabellen-Import :
CONNECT SYSTEM/MANAGER
VARIABLE ret NUMBER
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
p_dph NUMBER;
BEGIN
p_dph := DBMS_DATAPUMP.open(operation=>'IMPORT',job_mode=>'TABLE',job_name
=>'EMP_IMPORT');
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'MARCO%U.DMP',directory
=> 'EXPIMP',filetype=>1);
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'MARCO_IMP.LOG',directory
=> 'EXPIMP_LOG',filetype=>3);
DBMS_DATAPUMP.set_parameter(handle=> p_dph,name=>'TABLE_EXISTS_ACTION',value
=>'REPLACE');
DBMS_DATAPUMP.start_job(p_dph);
DBMS_DATAPUMP.detach(p_dph);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Fehler:'||sqlerrm||' bei Job-ID:'||p_dph);
END;
/
5. Zusammenfassung
Oracle hat den Anwender ein mächtiges Package mit an die Hand gegeben, aber leider nur dürftig dokumentiert.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 4
Man könnte hier viele Beispiele aufführen, aber dafür haben wir ja ausgiebig Zeit in unserem Backup & Recover
Kurs :-).
Dort werden wir uns hoffentlich alle wieder sehen ....
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 4 von 4
Herunterladen