Dato che sei su 10 g, puoi farlo con l'API Data Pump. È necessario disporre dell'accesso in lettura e scrittura su un oggetto directory che esegue il mapping alla directory del sistema operativo di destinazione.
Nell'esempio seguente sto esportando due tabelle, EMP e DEPT, in un file chiamato EMP.DMP in una directory identificata da 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 chiede:
"Esiste uno strumento di data pump o un'API simili disponibili per l'esecuzione dal lato client"
DataPump, sia l'API PL/SQL che l'utilità del sistema operativo, scrivono nelle directory Oracle. Una directory Oracle deve rappresentare una directory del sistema operativo visibile al database. Di solito è una directory sul server, anche se suppongo che sia teoricamente possibile mappare un'unità PC sulla rete. Dovresti convincere il tuo amministratore di rete che questa è una buona idea, è una vendita difficile, perché non lo è...
Le utilità IMP ed EXP precedenti leggono e scrivono dalle directory client, quindi è teoricamente possibile eseguire l'IMP di un file di dump locale in un database remoto. Ma non credo che questo sia un approccio pratico. Per loro natura, i file di dump tendono ad essere di grandi dimensioni, quindi l'importazione attraverso una rete è lenta e soggetta a errori. È una soluzione molto migliore per comprimere il file dump, copiarlo sul server e importarlo da lì.