Jak jste na 10g, můžete to udělat pomocí Data Pump API. Musíte mít přístup pro čtení a zápis do objektu adresáře, který se mapuje do cílového adresáře OS.
V následujícím příkladu exportuji dvě tabulky, EMP a DEPT, do souboru s názvem EMP.DMP v adresáři označeném 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 se ptá:
"Je k dispozici podobný nástroj datové pumpy nebo API pro spuštění ze strany klienta?"
DataPump, PL/SQL API i obslužný program OS, zapisují do adresářů Oracle. Adresář Oracle musí představovat adresář OS, který je viditelný pro databázi. Obvykle je to adresář na serveru, i když předpokládám, že je teoreticky možné namapovat jednotku PC do sítě. Museli byste přesvědčit svého správce sítě, že je to dobrý nápad, že se to těžko prodává, protože to není...
Starší nástroje IMP a EXP čtou a zapisují z adresářů klientů, takže je teoreticky možné IMP soubor místního výpisu paměti do vzdálené databáze. Ale nemyslím si, že je to praktický přístup. Soubory výpisu bývají ze své podstaty velké, takže import přes síť je pomalý a náchylný k selhání. Mnohem lepším řešením je zazipovat soubor výpisu, zkopírovat jej na server a odtud importovat.