Oracle DataPump via PL/SQL – DBMS_DATAPUMP

Oracle DataPump hat sich bei vielen Anwendern aufgrund seiner Vorteile als Import/Export-Werkzeug durchgesetzt. Neben den Werkzeugen impdp und expdp lässt sich die DataPump auch via PL/SQL steuern. Hierzu dient das Package DBMS_DATAPUMP. Die Verwendung für einen Schema-Export zeigt folgendes Beispiel:

DECLARE
  v_DPHandle_n      NUMBER;
  v_TimeStamp_vc    VARCHAR2(15);
  v_JobName_vc      VARCHAR2(30);
  v_DumpFilename_vc VARCHAR2(50);
  v_LogFilename_vc  VARCHAR2(50);
  v_JobStatus_vc    VARCHAR2(50);
  v_SchemaName_vc   VARCHAR2(8)  := 'SCOTT';
  
  -- dieses Oracle-Verzeichnis muss evtl. vorher angelegt werden
  --
  -- CREATE OR REPLACE DIRECTORY DPUMP_TEST_DIR AS '/tmp';
  --
  -- evtl. muessen auch Schreib-/Lese-Rechte gesetzt werden
  --
  -- GRANT READ, WRITE ON DIRECTORY DPUMP_TEST_DIR TO orauser;
  --
  v_DumpDir_vc      VARCHAR2(20) := 'DPUMP_TEST_DIR';
BEGIN
  v_TimeStamp_vc    := TO_CHAR(sysdate, 'YYYYMMDD-HH24MISS');
  v_JobName_vc      := v_TimeStamp_vc || '_' || v_SchemaName_vc;
  
  -- wichtig ist der Platzhalter %U, je nach Parallelitaet werden so
  -- mehrere Dump-Files erzeugt
  v_DumpFilename_vc := v_SchemaName_vc || '_' || v_TimeStamp_vc || '_%U.dmp';
  v_LogFilename_vc  :=  v_SchemaName_vc || '_' || v_TimeStamp_vc || '.log';
    
  -- Datapump-Job oeffnen  
  v_DPHandle_n := DBMS_DATAPUMP.open(
    operation   => 'EXPORT',
    job_mode    => 'SCHEMA',
    job_name    => v_JobName_vc
  );

  -- Dump-File fuer den Job definieren
  DBMS_DATAPUMP.add_file(
    handle    => v_DPHandle_n,
    filename  => v_DumpFilename_vc,
    directory => v_DumpDir_vc
  );

  -- Log-File definieren
  DBMS_DATAPUMP.add_file(
    handle    => v_DPHandle_n,
    filename  => v_LogFilename_vc,
    directory => v_DumpDir_vc,
    filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE
  );

  -- welches Schema soll exportiert werden?
  DBMS_DATAPUMP.metadata_filter(
    handle => v_DPHandle_n,
    name   => 'SCHEMA_EXPR',
    value  => '= ''' || v_SchemaName_vc || ''''
  );
    
  -- Parallelitaet auf 4 setzen  
  DBMS_DATAPUMP.SET_PARALLEL(
    handle => v_DPHandle_n,
    degree => 4
  );
    
  -- eigene Eintraege im Log-File sind moeglich
  DBMS_DATAPUMP.LOG_ENTRY(
    handle => v_DPHandle_n,
    message => '---> Schema Export via PL/SQL'
  );

  -- Job starten
  DBMS_DATAPUMP.start_job(v_DPHandle_n);
 
  -- auf das Job Ende wird normalerweise nicht gewartet
  -- mit WAIT_FOR_JOB laesst sich dies aber bei Bedarf
  -- realisieren
  DBMS_DATAPUMP.WAIT_FOR_JOB(
    handle => v_DPHandle_n,
    job_state => v_JobStatus_vc
  );
  
END;
/

Ein allgemeiner Hinweis zu Oracle DataPump:
DataPump-Prozesse laufen immer auf dem Oracle-Server!
Dies hat in der Praxis folgende Auswirkungen:

  • Der Betriebssystem-Benutzer, dem die Oracle-Server Prozesse zugeordnet sind, braucht Schreib-Rechte auf dem gewünschten Export-Verzeichnis (läuft die Datenbank-Instanz als Windows-Dienst und dem Benutzer LocalSystem ist kein Schreiben auf Netzwerk-Shares möglich, da dieser Benutzer keine Netzwerk-Shares sieht)
  • Es gibt keinen Client-/Server-Modus (z.B. Export eines Schemas von einem entfernten Oracle Server über einen lokalen Oracle Client)

Weitere Beiträge

Vorheriger Beitrag
Nächster Beitrag

Interessiert? Sprechen Sie mich gerne an.

Schreiben Sie mir einfach eine kurze E-Mail, und wir finden gemeinsam einen Termin für ein Erstgespräch. Darin klären wir, wo es in Ihrer IT konkret hakt und ob der Modernisierungs-Workshop der passende erste Schritt ist. Eine Stunde per Video oder Telefon, kostenfrei und ohne Verpflichtung.