Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
Сервер ORACLE и веб-сервер крутятся на разных машинах, была идея готовить файл на сервере оракла и выкладывать его сразу на машину веб. Выгрузка делается с помощью utl_file. С помощью utl_file это реализуемо в принципе, если да, то какие нужны права и телодвижения? Если нет, то каким образом это можно сделать или почему следует от этой идеи отказаться. Спасибо заранее за ответ или ссылку по теме
8 фев 07, 10:58    [3754565]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
znakv
Member

Откуда:
Сообщений: 1
Так затруднение в том, как перекидывать выгруженный файл по сети с машины БД на машину веб-сервера?
8 фев 07, 11:21    [3754786]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
Alexei_Unregistered
Guest
Вариант 1: на веб-сервере сделать аппликуху, которая
будет честно ходить на сервер Oracle, там читать
нужные файлы и сохранять их у себя локально.
Т.е. этакий Oracle-ftp, только с улучшенным security.
Вариант 2: смонтировать некий расшаренный ресурс
между веб-сервером и Oracle, и писать туда напрямую
из utl_file (нужно будет правильно выставить permissions,
добавить этот ресурс в список utl_file_dir инстанса Oracle).
8 фев 07, 11:25    [3754827]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
добавить этот ресурс в список utl_file_dir инстанса Oracle
У вас устаревшие сведения, начиная с 9i Oracle "настоятельно рекомендует" DIRECTORY...
8 фев 07, 11:28    [3754849]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
проблема как выгрузить СРАЗУ на машину клиента - и собстенно вопрос возможно ли это
как перекладывать - это запустить крутиться шедулеры про которые вообщем-то ясно и это запасной вариант
8 фев 07, 11:28    [3754851]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Сразу на машину клиента можно, только используя клиентское приложение, например, sql*plus
8 фев 07, 11:30    [3754864]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
aigr
проблема как выгрузить СРАЗУ на машину клиента - и собстенно вопрос возможно ли это

А если юзер не хочет лишних файлов?
Я бы предложил либо отправлять файл на почту, либо отправлять сцылку с описанием по которой юзер может этот файл получить.
8 фев 07, 11:35    [3754910]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
Alexei_Unregistered
Guest
tru55
Сразу на машину клиента можно, только используя клиентское приложение, например, sql*plus


Это и есть вариант1 (sqlplus весьма хороший инструмент дла работы с БД)
8 фев 07, 11:42    [3754952]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
Спасибо Alexei_Unregistered
про sql plus понятно и 1 вариант тоже ясен
Про вариант 2 - просто расшатить паку на магшине и указать путь как "\\WEBSERWER\DATAFILE"
не сработало, подключили как диск к оракловому серверу- тоже не вышло, можно поподробнее про premissions -я просто не понимаю ДОЛЖНО ли работать
Timm - нашего юзера- веб сервер никто не спрашиват :(
8 фев 07, 12:00    [3755098]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
Alexei_Unregistered
Guest
Вариант 2:
Расшаренный ресурс монтируется как диск (для WIN),
создается каталог обмена (например X:\EXCHANGE)
или как том для UNIX (например /webshare/exchange).
Далее - USER, под которым крутися oracle, должен иметь
права на чтение-запись в этом каталоге на уровне ОС
(это и есть permissions).
Далее:
для Oracle8i в инициализационный файл init..ora добавляется
параметр utl_file_dir=<имя расшаренного ресурса, как его видит сервер Oracle>
инстанс после этого нужно перестартовать;
для Oracle9i можно создать объект directory:
create directory mydir as '<имя ресурса>'.
Далее - вперед с песней - utl_file.open ... указываете либо
непосредственно путь (если задан utl_file_dir),
либо мнемоническое имя mydir (для нужного пути).
Даете доступ и веб-серверу в тот же каталог.
8 фев 07, 13:11    [3755688]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
"права на чтение-запись в этом каталоге на уровне ОС"
можно подробнее вот про это?
Локальные политики безопасности, локальные политики, назначение прав пользователей ... я иду в правильном направлении??7 а дальше?
И правильно ли я понимаю, что ORACLE крутится под SYSTEM?
8 фев 07, 15:05    [3756680]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
Alexei_Unregistered
Guest
Все правильно.
8 фев 07, 15:10    [3756715]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
AlexVin
Member

Откуда: E-burg
Сообщений: 1055
файлы большие?
при файлах первейшая проблема - где и сколько и как их хранить.
формируй динамически через веб. mod_plsql
8 фев 07, 15:13    [3756739]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
AlexVin
Member

Откуда: E-burg
Сообщений: 1055
большой размер можно победить компрессией. идея - вебсервисы
8 фев 07, 15:16    [3756766]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
Человек сам себе создает трудности, чтобы мужественно из преодолевать (с)
Если файл нужен на клиенте, то пусть клиент его и формирует.
Если работаете в трехзвенке, то соответствующая утиля должна жить на сервере приложений и выдавать файлы по http.
8 фев 07, 15:17    [3756782]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
to andrey_anonymous
файл формируется job-ом, на сервере веб-клиент его только подбирает и показывает
запинать политику безопасности мне таки не удалось :(
уже просто хочется убедиться что это работает у принципе, отходные пути подготовлены
8 фев 07, 15:39    [3756966]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
1) Oracle крутится под тем пользователем, от которого Вы его запускаете. Судя по некоторым вторичным половым признакам Ваш сервер крутится под windows.
По умолчанию служба действительно запускается от system, но крайне рекомендуется стартовать ее от специально созданного пользователя (например, "oracle"). Настроить можно непосредственно в службе, указав "run as"
Политики безопасности - штука хорошая, но желательно все-таки про них почитать, или спрашивать в соответствующем форуме :)
2) Специфичной проблемой utl_file для windows-версии oracle является невозможность корректного формирования бинарных файлов - при записи в файл любой код 0x0A преобразуется в последовательность 0x0a 0x0d. Побороть в свое время не удалось, равно как никогда не слышал, чтобы кто-то поборол.
3) utl_file - это еще и медленно
4) Вас ждет уже озвученная проблема очистки ненужных файлов.
....
25)...

Что я хочу сказать? Да очень просто.
- Вам уже рекомендовали воспользоваться mod_plsql. Это неплохая рекомендация.
- Если процесс формирования файла - тяжелая операция, отложенная на overnight run, то можно:
а) формировать результат job в виде CLOB/BLOB или в специальной табличке, который зачитывать тем же mod_plsql
б) Запускать формирование не job, а процессом на сервере приложений (тем же sql*plus) посредством AT(cron)

На мой непросвещенный взгляд такой подход к решению задачи будет значительно проще в реализации и сопровождении.
Вообще говоря, мой персональный опыт организации активного поведения со стороны БД скорее отрицательный чем положительный. IMHO СУБД гораздо лучше справляется с ролью "ведомой" системы, чем с ролью пропеллера.
8 фев 07, 18:57    [3758357]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
AlexVin
Member

Откуда: E-burg
Сообщений: 1055
не помню версию оракела у кого проблемы, но раз он хочет на сервере, то пусть выгружает. главное после этого скорее серверу от файла избавиться - куда-нить на почту, на ftp его отправить поскорее и счастливо забыть.
есть ftp у каждого клиента? нет. это применимо только для обмена файлами с каким-нить сервисом. - дак пусть клиент сам забирает (...формирует при заборе, это уже обсуждалось; кстати, если выборка некоторое время статична и нужна не одному пользователю - можно поиграться с owa_cache, как делается, например, для новостных сайтов)
если на почту или фтп - явой (тормозновато часто) или внешними скриптами (тут рассогласования всякие возможны) - оно вам надо?
отталкивайтесь от задачи (бизнеспроцессы и тп...), а не просто - как файлы передать клиенту
9 фев 07, 07:52    [3759342]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные с сервера в файл на машину клиента  [new]
aigr
Member

Откуда:
Сообщений: 61
Спасибо всем большое за подробные ответы- очень помогло
Толстый намек про пятое колесо понят и принят, будем идти другим путем
9 фев 07, 15:10    [3762691]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить