Ponieważ korzystasz z 10g, możesz to zrobić za pomocą interfejsu API Data Pump. Musisz mieć dostęp do odczytu i zapisu w obiekcie katalogu, który mapuje do docelowego katalogu systemu operacyjnego.
W poniższym przykładzie eksportuję dwie tabele, EMP i DEPT, do pliku o nazwie EMP.DMP w katalogu identyfikowanym przez 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 pyta:
„Czy istnieje podobne narzędzie do pompowania danych lub API dostępne do wykonania po stronie klienta”
DataPump, zarówno PL/SQL API, jak i narzędzie systemu operacyjnego, zapisuje do katalogów Oracle. Katalog Oracle musi reprezentować katalog systemu operacyjnego, który jest widoczny dla bazy danych. Zwykle jest to katalog na serwerze, chociaż przypuszczam, że teoretycznie możliwe jest mapowanie dysku PC do sieci. Musiałbyś przekonać administratora sieci, że to dobry pomysł, to trudna sprzedaż, ponieważ tak nie jest...
Starsze narzędzia IMP i EXP odczytują i zapisują z katalogów klientów, więc teoretycznie możliwe jest IMPowanie lokalnego pliku zrzutu do zdalnej bazy danych. Ale nie sądzę, żeby to było praktyczne podejście. Z natury pliki zrzutów są zwykle duże, więc importowanie przez sieć jest powolne i podatne na niepowodzenie. O wiele lepszym rozwiązaniem jest spakowanie pliku zrzutu, skopiowanie go na serwer i zaimportowanie z tego miejsca.