powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_FILE вопрос
34 сообщений из 34, показаны все 2 страниц
UTL_FILE вопрос
    #39766131
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, запуталась,
UTL_FILE.fopen может создавать файлы только на хосте, на котором развернута БД?
Есть ошибка ORA-29283: invalid file operation
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766161
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS70896]
UTL_FILE provides file access both on the client side and on the server side.
When run on the server , UTL_FILE provides access to all operating system files that are accessible from the server .
On the client side, as in the case for Forms applications , UTL_FILE provides access to operating system files that are accessible from the client.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766261
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще какие-то нюансы, кроме запуска Oracle под учеткой, имеющей доступ к сетевому диску.

Возможно, сетевой диск надо как-то монтировать в сеансе запуска службы. Т.к., в отличие от Unix, под виндой сетевой диск видится только в сеансе пользователя, его подключившего.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Connected to Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 
Connected as system@//localhost/TEST

SQL> 
SQL> create directory TEST as 'Z:\test';

Directory created
SQL> declare
  2    f utl_file.file_type;
  3  begin
  4    f := utl_file.fopen('TEST', 'test1.txt', 'w');
  5    utl_file.fclose(f);
  6  end;
  7  /

declare
  f utl_file.file_type;
begin
  f := utl_file.fopen('TEST', 'test1.txt', 'w');
  utl_file.fclose(f);
end;

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at line 4

SQL> 

...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766500
DarkClaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

GRANT READ, WRITE ON DIRECTORY пробовали?
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766506
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkClawGRANT READ, WRITE ON DIRECTORY пробовали?Метод тыка хорош только для проверки тока в розетке. Хватает одного раза, чтобы больше никогда не тыкать.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766524
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
спасибо!

dmdmdm,
у меня Unix.

DarkClaw, -2-
директории в ОС созданы точно, права на них ставили и 770, и 777. Ошибка та же.
Первичные группы у владельца директорий в OC и пользователя oracle - одинаковые.

В БД директории созданы пользователем-схемой через CREATE OR REPLACE DIRECTORY. Этот же пользователь на БД запускает скрипт на открытие и запись файла в директорию. Дополнительные гранты на объект-директорию в БД не создавала. Может нужно? Но вроде тот, кто создал у меня директории, тот и запускает скрипт.
Упорно лезет ошибка ORA-29283: invalid file operation. На ОС ставили права 777. Не знаю, куда дальше копать.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766574
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте test case, он поможет вам и советующим.

[root@localhost init.d]# mkdir /tmp/test
[root@localhost init.d]# chmod 777 /tmp/test

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Connected to Oracle Database 18c Express Edition Release 18.0.0.0.0 
Connected as system@//192.168.1.80/XE

SQL> alter session set "_ORACLE_SCRIPT"=true;

Session altered

SQL> create user u IDENTIFIED BY "1" DEFAULT TABLESPACE USERS QUOTA 100M ON USERS;

User created

SQL> grant connect to u;

Grant succeeded

SQL> grant create any directory to u;

Grant succeeded

SQL> conn u/1;
Connected to Oracle Database 18c Express Edition Release 18.0.0.0.0 
Connected as u@//192.168.1.80/XE

SQL> create directory TEST as '/tmp/test';

Directory created


SQL> 
SQL> declare
  2    f utl_file.file_type;
  3  begin
  4    f := utl_file.fopen('TEST', 'test1.txt', 'w');
  5    utl_file.fclose(f);
  6  end;
  7  /

PL/SQL procedure successfully completed

SQL> 



[root@localhost init.d]# ls -lh /tmp/test
total 0
-rw-r-----. 1 oracle oinstall 0 Jan 29 06:55 test1.txt
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766580
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто знает, как посмотреть трассировку вызова open на unix, типа strace. Но он у меня не работает
Код: plsql
1.
2.
strace -f -e open -p 1234
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted


Каким еще способ отслеить, что передается на вызов при UTL_FILE.fopen?
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766586
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,
делали такие тесты, файлы создаются
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766613
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом и суть test case. Не одним словом "делали", а конкретно, что делали.

Раз в ОС не работает, надо, чтоб заработало. Потом будете в СУБД пробовать.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
[root@localhost etc]# mount -t cifs //192.168.1.3/R /mnt/test -o username=user1,password=******,rw
[root@localhost etc]# su - oracle
Last login: Tue Jan 29 07:31:37 EST 2019 on pts/0
[oracle@localhost ~]$ touch /mnt/test/test1.txt
touch: cannot touch ‘/mnt/test/test1.txt’: Permission denied
[oracle@localhost ~]$ logout
[root@localhost etc]# touch /mnt/test/test1.txt
[root@localhost etc]# ls -lh /mnt/test/test*
-rwxr-xr-x 1 root root 0 Jan 29 07:35 /mnt/test/test1.txt



Копать куда-то туда.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766634
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5dmdmdm,
делали такие тесты, файлы создаются

А под каким OC пользователем? UTL_FILE выполняется из-под OC юзера oracle и посему 777 на конечную директорию может и не хватить - oracle нужен read на всю цепочку. Ну и не NAS ли часом? Если да, то он должен быть mounted с определенными параметрами.

SY.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766687
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

под oracle на клиенте. Права выдавались, как chmod -R, так что на все подкаталоги.

тест
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[oracle@test ~]$ cd /home/user/output/files
[oracle@test files]$ echo "test" >  test_20190129.txt
[oracle@test files]$ ls -all | grep test_20190129.txt
-rw------- 1 oracle  oinstall    5 Jan 29 test_20190129.txt
[oracle@test files]$



[user@test ~]$ ls -all output
total 20
drwxrwxrwx  5 user oinstall 4096 Jan 16 14:14 .
drwx------ 20 user      501 4096 Jan 22 10:57 ..
drwxrwxrwx  2 user oinstall 4096 Jan 16 14:14 files


...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766691
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5под oracle на клиенте.
utl_file Вы тоже НА КЛИЕНТЕ гоняете или все-таки на сервере?
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766692
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5,

И диск не NAS?

SY.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766727
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
на клиенте

SY,
не NAS

dmdmdm,
написал про монтирование. Не поняла этот момент. Что нужно монтировать? Директории с клиента на сервер?

Ещё думаю, что может на сервере процессы, листенер не под oracle запущены... мало ли, проверю.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766766
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5на клиенте utl_file - серверный пакет и работает на файловой системе, где установлена субд(Если не формсы, конечно)
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766839
MirnyiAtom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LVV5,
И проверьте еще что у директории в оракле есть права на запись
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766884
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,

Так вот и вопрос, то есть физически директории должны быть созданы на том же сервере, где и БД развёрнута? Или на сервер с БД можно монтировать директории с клиентского сервера? Я этот момент не понимаю. Сам скрипт запускается через Sqlplus.

MirnyiAtom права есть.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766916
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Или на сервер с БД можно монтировать директории с клиентского сервера?
Технически это, конечно, возможно, но по сути полная ерунда.
Вам нужен файл на клиенте?
Так и формируйте его на клиенте и оставьте UTL_FILE в покое.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766940
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
нужен на клиенте. Ткните подробнее, как без UTL_FILE, записать файлы? Файлы - это результат работы разных процедур.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766946
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5как без UTL_FILE, записать файлыecho 123 > 123.txt
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766951
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для теста запускаю скрипт через sqlplus.
В реальной работе всё запускается через Web и дергает процедуры PL/SQL.

код
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
SET SERVEROUTPUT ON
DECLARE
  v_Filename         VARCHAR2(255);
  v_Location          VARCHAR2(32767) := '/home/user/outfiles';
  v_Dir_Name        all_directories.Directory_Name%TYPE;  
  g_File                 UTL_FILE.FILE_TYPE;   
BEGIN
  v_Filename := 'test_' || To_Char(SYSDATE, 'yyyymmdd_hh24miss');
  DBMS_OUTPUT.PUT_LINE( 'Step 1' );  
  
  BEGIN 
	SELECT DIRECTORY_NAME INTO v_Dir_Name 
	  FROM ALL_DIRECTORIES 
	 WHERE directory_path = v_Location AND rownum = 1;  	 
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE( 'Error! Can''t find directory ' || v_Location || ' in ALL_DIRECTORIES table!');	
      RAISE;
    WHEN OTHERS THEN
      RAISE;	 
  END;
	
  DBMS_OUTPUT.PUT_LINE( 'v_Dir_Name: '|| v_Dir_Name ); 

  g_File := UTL_FILE.FOPEN( location      => v_Dir_Name
                          , filename      => v_Filename
                          , open_mode     => 'w'
                          , max_linesize  => 32767
                          );
  DBMS_OUTPUT.PUT_LINE( 'Step 2' );								  
  UTL_FILE.PUT_LINE(g_File, 'test');								  
  DBMS_OUTPUT.PUT_LINE( 'Step 3' );  			
  UTL_FILE.fclose(g_File);  
  DBMS_OUTPUT.PUT_LINE( 'Step 4' );   
EXCEPTION   
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE( 'Error! '|| SQLERRM );  
END;
/
 
Step 1
v_Dir_Name: TEST_DIR
Error! ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line
536
ORA-29283: invalid file operation
PL/SQL procedure successfully completed.


...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766953
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

мне из PL/SQL запускать shell команды? Это ещё хуже.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766958
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Для теста запускаю скрипт через sqlplus.
В реальной работе всё запускается через Web и дергает процедуры PL/SQL.
Представленный код смело выбрасывайте полностью - выбранный Вами инструмент не походит для решения задачи в указанном окружении.
Попробуйте сформулировать исходную задачу, а не ту, которую Вы вынесли на форум.
Вам помогут с подбором инструмента.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766959
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5из PL/SQL запускать shell команды?из шелла
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766960
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

это не разово работает, чтобы echo использовать, а на постоянной основе.
Работает логика PL/SQL, записывает файлы, логи. Раньше с переменной utl_file_dir работала, теперь с директориями напрямую. У меня-то клиент-сервер - это одна машина, и всё работает. И это скрипт тоже работает. То, что физически нельзя записывать файлы на клиенте не слышала. Столкнулись с такой проблемой, вот и спрашиваю. Это в этом проблема, или всё-таки в другом где-то копать, в запущенных листенерах, или в правильности имени директорий и т.д. ?
Скрипт, выложенный мной выше, работает на моей машине. Не работает на другой, где клиент и сервер разнесены.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766963
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Хорошо.
С Web дергается PL/SQL процедура, которая дергает ещё множества всего, выполняет свою работу. Записывает данные в БД, работает с ними. В процессе работы формируются 1) файлы - аналог лог-файлов для разбора ошибок, 2) файлы с необходимыми клиенту данными.
Клиенту по сути не нужно вообще лезть в БД и самому получать данными и тем более лезть в логику.
Ему нужны по сути только конечные файлы с информацией. И возможно логи, в случае разбора ошибок. Хотя логи больше нужны разработчику.
Вот и всё. Записывать в БД конечные данные - не вариант.
Ранее работали с переменной utl_file_dir. Проблем не испытывали. Но я никогда не уточняла, как разнесены сервер и клиент.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766966
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5andrey_anonymous,
нужен на клиенте. Ткните подробнее, как без UTL_FILE, записать файлы? Файлы - это результат работы разных процедур.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
sqlplus user/pass
set pages 0 trimspool on line 32000 long 32000 verify off feedback off 
set serveroutput on
spool file.txt
declare
begin
 null;
end;
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766970
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Работает логика PL/SQL, записывает файлы, логи.
Раньше с переменной utl_file_dir работала, теперь с директориями напрямую.
Отдайте клиенту посредством
Код: plsql
1.
select bfilename('directory','filename') from dual


LVV5 У меня-то клиент-сервер - это одна машина, и всё работает.
Что Вам по этому поводу сказали архитектор и тимлид?
Разработчик всегда должен иметь ввиду не только буквы PL/SQL, но и архитектуру решения.
1. Клиент-сервер ВСЕГДА предполагает, что сервер и клиент - физически различные системы .
2. Клиент-сервер ВСЕГДА предполагает, что к одному серверу могут подключиться несколько клиентов одновременно .
Помните об этом. Все время.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766973
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5То, что физически нельзя записывать файлы на клиенте не слышала."физически" можно по разному трактовать.
Программно можно. Редирект шелла > или команда sqlплюса spool пример записи в файл на клиенте.LVV5файлыВебсервер все равно на запрос вебклиента не умеет отдавать файлЫ. Как получать из бд данные и как их хранить для передачи вебклиенту, вопрос не по ораклу, а по используемому вебсерверу.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766974
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Ему нужны по сути только конечные файлы с информацией.
Неверно.
Клиенту нужна информация.
Файл - лишь способ ее "материализации".
Web-приложение для БД суть обычный клиент, и нет никакой необходимости строить файловый велосипед просто для передачи данных web-приложению, оно отлично выполнит запрос и получит свой набор данных, который упакует в html и отправит клиенту - без всяких промежуточных файлов.
Логи - немного иной объект, по сути побочный. И да, их иногда складывают в файлы. Если логи нужны разработчику, то разработчик просто заходит на расшаренный ресурс с логами и читает нужный файл.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766975
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Вебсервер все равно на запрос вебклиента не умеет отдавать файлЫ.
Ээээ... именно это он и умеет от рождения.
Динамический контент - это уже позже, сначала был CGI, затем...
Впрочем, к случаю ТС это имеет весьма опосредованное отношение.

2ТС: еще одно решение - смонтироовать на сервер приложений расшаренный каталог сервера БД, содержащий файлы.
Решение чуть лучше идеи монтировать ФС клиента на сервер БД, но тоже плохое - к примеру, создает ненужные риски по безопасности.
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766977
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

идеи поняла, спасибо!
...
Рейтинг: 0 / 0
UTL_FILE вопрос
    #39766996
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-Вебсервер все равно на запрос вебклиента не умеет отдавать файлЫ .Ээээ... именно это он и умеет от рождения. Речь о том, что нельзя в одном ответе вернуть несколько файлов. Требуется промежуточное хранилище для их представления вебсервером по отдельности или для заворачивания в конверт. Варианты реализации сильно разнятся в зависимости от применяемых технологий и требований к интерфейсу пользователя.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_FILE вопрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]