Oracle
 sql >> Base de données >  >> RDS >> Oracle

Prendre le vidage des tables dans oracle 10g en utilisant la procédure PL/SQL

Comme vous êtes sur 10g, vous pouvez le faire avec l'API Data Pump. Vous devez disposer d'un accès en lecture et en écriture sur un objet de répertoire mappé au répertoire du système d'exploitation de destination.

Dans l'exemple suivant, j'exporte deux tables, EMP et DEPT, vers un fichier appelé EMP.DMP dans un répertoire identifié par DATA_PUMP_DIR.

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 demande :

"Existe-t-il un outil de pompage de données similaire ou une API disponible pour l'exécution du côté client"

DataPump, à la fois l'API PL/SQL et l'utilitaire du système d'exploitation, écrivent dans les répertoires Oracle. Un répertoire Oracle doit représenter un répertoire du système d'exploitation visible par la base de données. Il s'agit généralement d'un répertoire sur le serveur, bien que je suppose qu'il soit théoriquement possible de mapper un lecteur PC sur le réseau. Vous devrez persuader votre administrateur réseau que c'est une bonne idée, c'est difficile à vendre, car ce n'est pas...

Les anciens utilitaires IMP et EXP lisaient et écrivaient à partir des répertoires clients, il est donc théoriquement possible d'IMP un fichier de vidage local dans une base de données distante. Mais je ne pense pas que ce soit une approche pratique. De par leur nature, les fichiers de vidage ont tendance à être volumineux, de sorte que l'importation sur un réseau est lente et sujette à l'échec. C'est une bien meilleure solution pour compresser le fichier de vidage, le copier sur le serveur et l'importer à partir de là.