Khi bạn ở trên 10g, bạn có thể thực hiện việc này với API bơm dữ liệu. Bạn cần có quyền truy cập đọc và ghi trên một đối tượng thư mục ánh xạ đến thư mục hệ điều hành đích.
Trong ví dụ sau, tôi đang xuất hai bảng, EMP và DEPT, sang tệp có tên EMP.DMP trong thư mục được xác định bởi 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 hỏi:
"Có công cụ bơm dữ liệu tương tự hoặcAPI có sẵn để thực thi từ phía phòng khám không"
DataPump, cả API PL / SQL và tiện ích hệ điều hành, ghi vào các thư mục Oracle. Thư mục Oracle phải đại diện cho một thư mục hệ điều hành được hiển thị cho cơ sở dữ liệu. Thông thường đó là một thư mục trên máy chủ, mặc dù tôi cho rằng về mặt lý thuyết có thể ánh xạ ổ đĩa PC vào mạng. Bạn phải thuyết phục quản trị viên mạng của mình rằng đây là một ý tưởng hay, đây là một món hàng khó bán, bởi vì nó không ...
Các tiện ích IMP và EXP cũ hơn đọc và ghi từ các thư mục máy khách, vì vậy về mặt lý thuyết có thể IMP một tệp kết xuất cục bộ vào cơ sở dữ liệu từ xa. Nhưng tôi không nghĩ đây là một cách tiếp cận thực tế. Về bản chất, các tệp kết xuất có xu hướng lớn, vì vậy việc nhập qua mạng sẽ chậm và dễ bị lỗi. Giải pháp tốt hơn nhiều là nén tệp kết xuất, sao chép tệp đó vào máy chủ và nhập tệp từ đó.