Как скопировать/прочитать файл с удалённого сервера?
У меня есть сервер с приложением и сервер БД. Приложение размещает на своём сервере файл. Нужно его прочитать с сервера БД.
Из того, что нашёл это DBMS_FILE_TRANSFER.GET_FILE, но чтобы взять файл с удалённого сервера, на нём должна быть установленна БД.
Или с помощью DBMS_SCHEDULER выполнить команду cmd, чтобы скопировать файл с удалённого сервера, но это решение, мне кажется, не очень.
Ответы (1 шт):
Как один из вариантов решения:
- сделать каталог с файлами на сервере приложений общим
- смонтировать его на сервере БД
- создать объект директории и читать оттуда файлы в PL/SQL блоке
Например, смонтировал сетевой каталог //wincomputer/appshare под /mnt/share/, и далее:
create directory appshare as '/mnt/share'
/
Directory APPSHARE created.
Для чтения списка файлов воспользовался этим решением, заменив имена таблицы и каталога на appfiles и appshare соответственно. Создал новый файл на Windows машине:
D:\> echo abc123 >appshare\appfile_123.txt
, и прочёл его на сервере БД:
SQL> col filename new_value filename
SQL> select *
from appfiles where filename like 'appfile%';
FILENAME
--------------------------------------------------------------------------------
appfile_123.txt
set autoprint
var rc refcursor
declare
f utl_file.file_type;
buff varchar2 (128);
begin
f := utl_file.fopen (upper ('appshare'), '&filename', 'r');
utl_file.get_line (f, buff);
utl_file.fclose (f);
open :rc for
select '&filename'||' contains >>'||buff||'<<' result from dual;
end;
/
Результат:
RESULT
-----------------------------------
appfile_123.txt contains >>abc123
<<