powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление файлов и папок на ОС по данным из БД
23 сообщений из 23, страница 1 из 1
Удаление файлов и папок на ОС по данным из БД
    #39419133
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Есть следующая задач, в Oracle есть таблица в которой хранится имя папки и имена файлов, которые нужно удалить.
Подскажите пожалуйста как реализовать чтение из БД в цикле как для unix так и для Windows среды, знаю что вопрос начального уровня, буду признателен как за примеры кода, так и за полезные ссылки.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419169
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшое уточнение, сервер Oracle и сервер на котором находятся папки/файлы это два совершенно разных сервера.
С сервера на котором находятся папки/файлы (Unix/Windows) можно увидеть БД, но в свою очередь Oracle сервер ничего не знает о другом сервере.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419181
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583, смонтировать по NFS на сервер с базой и работать как с локальными через utl_file
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419185
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583,

dbms_scheduler external job , и там уже что душе угодно, если секьюрити позволяет.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419214
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583Небольшое уточнение, сервер Oracle и сервер на котором находятся папки/файлы это два совершенно разных сервера.
С сервера на котором находятся папки/файлы (Unix/Windows) можно увидеть БД, но в свою очередь Oracle сервер ничего не знает о другом сервере.

Что за приложение на другом сервере? application server?
Если так, то работать надо на нем, а с сервера БД только запрашивать список.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419224
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смонтировать нет возможности, запрещено и насколько я знаю utl_file не поддерживает удаление папок.

Вопрос собственно в том, что нужна помощь в написании cmd/bat и sh скрипта, в котором, будет реализован цикл по данным из таблицы в БД, на каждой итерации будет выполняться удаление файла + удаление папки.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419240
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583Смонтировать нет возможности, запрещено и насколько я знаю utl_file не поддерживает удаление папок.

Вопрос собственно в том, что нужна помощь в написании cmd/bat и sh скрипта, в котором, будет реализован цикл по данным из таблицы в БД, на каждой итерации будет выполняться удаление файла + удаление папки.


И как ты будешь запускать удаленную команду удаления?
Если запрещено монтирование, то и варианты:
unix: ssh, ftp
windows: at, del \\server\path

Будут скорее всего запрещены

Узнай сначала что можно.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419248
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

Будет создан cron job, который будет запускаться по определённому расписанию, вычитывать все данные из таблицы - удалять файлы/папки на своем сервере и затем чистить таблицу в БД.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419266
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583cmd/bat и sh скрипта, в котором, будет реализован цикл по данным из таблицы в БД, на каждой итерации будет выполняться удаление файла + удаление папки.Почему бы не Perl+DBD/DBI, для обеих платформ; unlink одна и та же, и примеров море...
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419280
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusSergey_2583cmd/bat и sh скрипта, в котором, будет реализован цикл по данным из таблицы в БД, на каждой итерации будет выполняться удаление файла + удаление папки.Почему бы не Perl+DBD/DBI, для обеих платформ; unlink одна и та же, и примеров море...А смысл городить столько огорода? Одного sqlplus достаточно.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419294
где-то так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
файл rm_file.sql

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set head off
set pagesize 0
set feedback off
set timing off
set echo off
set verify off
set linesize 120
set trimspool on
spool rm_file.sh
select 'rm '||file_name from file_tables;
spool off
exit



Код: plsql
1.
2.
3.
sqlplus @rm_file.sql
chmod 740 rm_file.sh
rm_file.sh
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419297
где-то так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лучче
Код: plsql
1.
sqlplus -s @rm_file.sql
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419313
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где-то так
Код: plsql
1.
2.
3.
sqlplus @rm_file.sql
chmod 740 rm_file.sh
rm_file.sh

В чмод для интерпретации скрипта шеллом нет необходимости.
Но и запуск самого сгенеренного файла опосля sqlplus излишество.
Да и сама генерация файла тоже.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419321
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, а всё таки есть возможность реализации через цикл?

Чтобы можно было после каждого удаления например добавить логирование.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419328
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_2583Чтобы можно было после каждого удаления например добавить логирование.
Код: plsql
1.
select 'rm '||file_name||' >>log.txt' from file_tables;
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419364
Sergey_2583
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю, что в целом решение задачи уже наверное есть, но как быть если нужно обрабатывать построчно данные из БД?
Прочитали первую строку:
- удалили файл с указанным именем
- удалили папку с указанным именем
- обновили строку в БД
- записали в лог таблицу, что выполнили такое действие над файлом/папкой успешно
Прочитали следующую строку и тд.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39419383
Sergey_2583как бытьзависит от того, как проверяющий будет определять твою итеративность.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420124
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где-то так
Код: plsql
1.
2.
3.
spool rm_file.sh
select 'rm '||file_name from file_tables;
spool off



Код: plsql
1.
2.
chmod 740 rm_file.sh
rm_file.sh



Получение имён файлов неизвестно откуда и использование их в Unix shell может закончиться очень плохо: http://www.dwheeler.com/essays/filenames-in-shell.html Надо очень внимательно проверять имена и экранировать в них разные спецсимволы.

Поддерживаю предыдущих ораторов насчёт perl и его DBI - там такой проблемы нет и оно встроено в состав сервера Oracle, так что ничего ставить дополнительно не надо.
Или написать на java, там бибилотека для подключения к базе поставляется одним файлом и тоже портабельна между Windows/Unix.
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420152
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На PHP тоже запросто делается.

К примеру, я зипую файлы перед отправкой по FTP таким способом:

Код: php
1.
2.
$aaaa=`zip -r -9 $location.zip $location.txt`;
print $aaaa.'<br>';


Где $locatio n передается имя файла, которое как раз выбирается из базы, в в этот же файл заливаются данные тоже из базы и, в итоге, zip-файл отправляется и затем стирается и TXT и ZIP

Код: php
1.
2.
$bbbb=`rm -f $location.zip ; rm -f $location.txt`;
print $bbbb.'<br>';
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420179
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg M.Ivanov
Код: php
1.
$aaaa=`zip -r -9 $location.zip $location.txt`;


Тоже чревато проблемами со специмволами в именах файлов.

Oleg M.Ivanov
Код: php
1.
$bbbb=`rm -f $location.zip ; rm -f $location.txt`;


Это вообще кошмар. Неужели в php нет встроенной функции удаления файлов?
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420400
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мутагенгде-то так
Код: plsql
1.
2.
3.
spool rm_file.sh
select 'rm '||file_name from file_tables;
spool off



Код: plsql
1.
2.
chmod 740 rm_file.sh
rm_file.sh



Получение имён файлов неизвестно откуда и использование их в Unix shell может закончиться очень плохо: http://www.dwheeler.com/essays/filenames-in-shell.html Надо очень внимательно проверять имена и экранировать в них разные спецсимволы.

Поддерживаю предыдущих ораторов насчёт perl и его DBI - там такой проблемы нет и оно встроено в состав сервера Oracle, так что ничего ставить дополнительно не надо.
Или написать на java, там бибилотека для подключения к базе поставляется одним файлом и тоже портабельна между Windows/Unix.

+1

тем более, сюрприз, но sqlplus не умеет работать с stderr чуть менее, чем вообще:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
sqlplus / as sysdba 2> /dev/null

SQL*Plus: Release 12.1.0.2.0 Production on Thu Mar 16 00:40:35 2017

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select * from zztop;
select * from zztop
              *
ERROR at line 1:
ORA-00942: table or view does not exist



спрашивается в задаче, какого ...... ORA-00942 делает в stdout?
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420446
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchМутагенпропущено...


Получение имён файлов неизвестно откуда и использование их в Unix shell может закончиться очень плохо: http://www.dwheeler.com/essays/filenames-in-shell.html Надо очень внимательно проверять имена и экранировать в них разные спецсимволы.

Поддерживаю предыдущих ораторов насчёт perl и его DBI - там такой проблемы нет и оно встроено в состав сервера Oracle, так что ничего ставить дополнительно не надо.
Или написать на java, там бибилотека для подключения к базе поставляется одним файлом и тоже портабельна между Windows/Unix.

+1

тем более, сюрприз, но sqlplus не умеет работать с stderr чуть менее, чем вообще:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
sqlplus / as sysdba 2> /dev/null

SQL*Plus: Release 12.1.0.2.0 Production on Thu Mar 16 00:40:35 2017

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select * from zztop;
select * from zztop
              *
ERROR at line 1:
ORA-00942: table or view does not exist



спрашивается в задаче, какого ...... ORA-00942 делает в stdout?

Наверное потому, что это не stderr

Варианты:
- exception PL/SQL блока
- предварительная проверка наличия таблицы PL/SQL
- разные фокусы с макроподстановками sqlplus и column newval
- обработка WHENEVER SQLERROR /OSERROR
...
Рейтинг: 0 / 0
Удаление файлов и папок на ОС по данным из БД
    #39420499
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МутагенOleg M.Ivanov
Код: php
1.
$aaaa=`zip -r -9 $location.zip $location.txt`;


Тоже чревато проблемами со специмволами в именах файлов.

Oleg M.Ivanov
Код: php
1.
$bbbb=`rm -f $location.zip ; rm -f $location.txt`;


Это вообще кошмар. Неужели в php нет встроенной функции удаления файлов?
1. Я сам файлы создаю, сам и удаляю, там все предсказуемо.
2. Есть, конечно, unlink и rmdir , соответственно, для удаления файла и каталога, но мне вполне достаточно выполнить команду ОС, тем более, что сначала в той же ОС файл зиповать сначала нужно и уже переменная подготовлена.

Ну а топикстартеру просто как варианты для выбора.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление файлов и папок на ОС по данным из БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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