Aangezien u op 10g zit, kunt u dit doen met de Data Pump API. U moet lees- en schrijftoegang hebben tot een directory-object dat is toegewezen aan de doel-OS-directory.
In het volgende voorbeeld exporteer ik twee tabellen, EMP en DEPT, naar een bestand met de naam EMP.DMP in een map die wordt geïdentificeerd door 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 vraagt:
"Is er een vergelijkbare datapomptool of API beschikbaar voor uitvoering vanaf de clientzijde"
DataPump, zowel de PL/SQL API als het OS-hulpprogramma, schrijven naar Oracle-directories. Een Oracle-directory moet een OS-directory vertegenwoordigen die zichtbaar is voor de database. Meestal is dat een directory op de server, hoewel ik veronderstel dat het theoretisch mogelijk is om een pc-station aan het netwerk toe te wijzen. Je moet je netwerkbeheerder ervan overtuigen dat dit een goed idee is, het is moeilijk te verkopen, want het is niet...
De oudere IMP- en EXP-hulpprogramma's lezen en schrijven vanuit clientdirectory's, dus het is theoretisch mogelijk om een lokaal dumpbestand te IMP in een externe database. Maar ik denk niet dat dit een praktische benadering is. Door hun aard zijn dumpbestanden vaak groot, dus importeren via een netwerk is traag en vatbaar voor fouten. Het is een veel betere oplossing om het dumpbestand te zippen, naar de server te kopiëren en van daaruit te importeren.