Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sichern von Tabellen in Oracle 10g mit PL/SQL-Prozedur

Da Sie auf 10g sind, können Sie dies mit der Data Pump API tun. Sie benötigen Lese- und Schreibzugriff auf ein Verzeichnisobjekt, das dem Zielverzeichnis des Betriebssystems zugeordnet ist.

Im folgenden Beispiel exportiere ich zwei Tabellen, EMP und DEPT, in eine Datei namens EMP.DMP in einem Verzeichnis, das durch DATA_PUMP_DIR identifiziert wird.

SQL> declare
  2      dp_handle       number;
  3  begin
  4      dp_handle := dbms_datapump.open(
  5      operation   => 'EXPORT',
  6      job_mode    => 'TABLE');
  7
  8    dbms_datapump.add_file(
  9      handle    =>  dp_handle,
 10      filename  => 'emp.dmp',
 11      directory => 'DATA_PUMP_DIR');
 12
 13    dbms_datapump.add_file(
 14      handle    => dp_handle,
 15      filename  => 'emp.log',
 16      directory => 'DATA_PUMP_DIR',
 17      filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
 18
 19    dbms_datapump.metadata_filter(
 20      handle => dp_handle,
 21      name   => 'NAME_LIST',
 22      value  => '''EMP'',''DEPT''');
 23
 24    dbms_datapump.start_job(dp_handle);
 25
 26    dbms_datapump.detach(dp_handle);
 27  end;
 28  /    

PL/SQL procedure successfully completed.

SQL> 

@DerekMahar fragt:

"Gibt es ein ähnliches Datenpumptool oder eine API, die von der Clientseite aus ausgeführt werden kann"

DataPump, sowohl die PL/SQL-API als auch das Betriebssystemdienstprogramm, schreiben in Oracle-Verzeichnisse. Ein Oracle-Verzeichnis muss ein OS-Verzeichnis darstellen, das für die Datenbank sichtbar ist. Normalerweise ist das ein Verzeichnis auf dem Server, obwohl ich annehme, dass es theoretisch möglich ist, ein PC-Laufwerk dem Netzwerk zuzuordnen. Sie müssten Ihren Netzwerkadministrator davon überzeugen, dass dies eine gute Idee ist, es lässt sich schwer verkaufen, weil es nicht...

ist

Die älteren IMP- und EXP-Dienstprogramme lesen und schreiben aus Client-Verzeichnissen, daher ist es theoretisch möglich, eine lokale Speicherauszugsdatei in eine entfernte Datenbank zu überführen. Aber ich glaube nicht, dass das ein praktikabler Ansatz ist. Von Natur aus sind Dump-Dateien in der Regel groß, sodass das Importieren über ein Netzwerk langsam und fehleranfällig ist. Es ist eine viel bessere Lösung, die Dump-Datei zu komprimieren, auf den Server zu kopieren und von dort zu importieren.