Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск внешней программы из SQL-скрипта 
:(
    Опции темы
stron
Дата 12.10.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Собственно, как это сделать?
Или хотя бы в какую сторону копать?


--------------------
подписи нет
PM ICQ   Вверх
LSD
Дата 12.10.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 537





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
stron
Дата 12.10.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Чего-то я не понял как он работает smile
Не знает он команды Host, а как её включить я не понял


--------------------
подписи нет
PM ICQ   Вверх
LSD
Дата 12.10.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 537



Дело в том, что host это не команда SQL, а команда SQL*Plus. Т.е. когда ты выполняешь из SQL*Plus скрипт, он парсит его и когда видит свои команды, то он их выполняет. Естественно host выполняется на том же компьютере что и сам SQL*Plus и от его имени. Другие SQL клиенты могут этого и не делать.
В Oracle нет стандартного способа выполнить команду ОС. Если надо выполнять команду на сервере, то надо писать хранимую процедуру на Java.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
stron
Дата 12.10.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Ok, тогда может подскажешь, как лучше реализовать такую задачу:
Мне раз в неделю надо заливать данные из файла в таблицу базы( 7-8 млн. записей ), далее, на основе этой таблицы производить расчёты и строить другие таблицы.
Записей достаточно много, поэтому хотелось бы перед каждой заливкой обнулять Sequence( возможно, производить ещё какие-нибудь действия ).

Мне видится такой алгоритм:
Создать в Oracle Job, который бы вызывал SP выполняющую: 
- подготовительные действия
- вызов SQL Loader'a
- вызов процедуры, производящей дальнейщие манипуляции



--------------------
подписи нет
PM ICQ   Вверх
Paradox
Дата 12.10.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: 3
Всего: 1



реализуйте это не через job а через shell-скрипт, который сделает вам все эти вещи
ну или через виндовский шедулер и батник

Добавлено @ 14:31 
или вместо лоадера используйте external table


--------------------
---
PM MAIL WWW   Вверх
stron
Дата 12.10.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Первое решение не нравится - хочу всё оставить в Оракле.
Пока буду смотреть в сторону 2-ого


--------------------
подписи нет
PM ICQ   Вверх
3x3
Дата 12.10.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



Цитата(stron @ 12.10.2006,  14:50)
Первое решение не нравится - хочу всё оставить в Оракле.
Пока буду смотреть в сторону 2-ого

А вот это зря. Случись что, админ может и не увидеть какое приложение впало в проблемы. В поддержке намного легче когда админ сразу видит, что процесс load_data_weekly.sh начинает процессор жрать, кушает слишком много памяти или, наоборот, висит ничего не делая, нежели этот процесс ему будет явлен как один из многочисленных oracle. 


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
Paradox
Дата 13.10.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: 3
Всего: 1



на самом деле действительно удобнее иметь все в БД, а не зоопарком припарок вокруг нее
а на джобы можно и сторожа поставить, чтобы ставили всех на уши, если джоб работает либо слишком долго, либо наоборот не поднялся в определенное время.


--------------------
---
PM MAIL WWW   Вверх
brabus
Дата 13.10.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.12.2005

Репутация: нет
Всего: нет



если правильно понял - требуется запустить внешнеее приложение из оракла? - возможно наиболее правильный вариант решения  с использованием java процы
PM MAIL   Вверх
3x3
Дата 13.10.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



Цитата(Paradox @ 13.10.2006,  08:08)
на самом деле действительно удобнее иметь все в БД, а не зоопарком припарок вокруг нее
а на джобы можно и сторожа поставить, чтобы ставили всех на уши, если джоб работает либо слишком долго, либо наоборот не поднялся в определенное время.

Чем удобнее?
Необходимостью ставить каких-то "сторожей" на джобы? 


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
Paradox
Дата 13.10.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: 3
Всего: 1



удобнее в администрировании и переносах БД на другое железо
отследить работу джоба труда не составляет труда, а вот если таких скриптов становится много то жизнь админа сладкой не назовешь, хотя ее и так такой не бывает smile



--------------------
---
PM MAIL WWW   Вверх
stron
Дата 13.10.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Всё-таки я придерживаюсь такого мнения, если функционал можно интегрировать в одном месте, то надо так и делать.


--------------------
подписи нет
PM ICQ   Вверх
LSD
Дата 13.10.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 537



Цитата(3x3 @  13.10.2006,  11:19 Найти цитируемый пост)
Чем удобнее?

Можно управлять job-ом средствами Oracle, и использовать Resource Manager.

Выполнить команду ОС можно так:
Код
create or replace and compile java source named server_exec as
import java.io.*;

public class Test
{
  public static int exec(String command, String outLogFile, String errLogFile) throws IOException, InterruptedException
  {
    Process process = Runtime.getRuntime().exec(command);
    Spooller outSpooller = new Spooller(outLogFile, process.getInputStream());
    Spooller errSpooller = new Spooller(errLogFile, process.getErrorStream());
    outSpooller.start();
    errSpooller.start();
    return process.waitFor();
  }

  private static class Spooller extends Thread
  {
    private OutputStream out;
    private InputStream in;

    public Spooller(String fileName, InputStream in) throws FileNotFoundException
    {
      out = new FileOutputStream(fileName);
      this.in = in;
    }

    public void run()
    {
      byte[] buffer = new byte[32 * 1024];
      int read;
      try
      {
        while((read = in.read(buffer)) != -1)
          out.write(buffer, 0, read);
      }
      catch(IOException e)
      {}
      try
      {
        out.close();
      }
      catch(IOException e)
      {}
    }
  }
}

Код
create or replace function EXEC(command varchar2) return number as
language java name 'Test.exec(java.lang.String, java.lang.String, java.lang.String) return int';

Только надо будет еще дать все необходиые разрешения.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
3x3
Дата 13.10.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



Цитата(Paradox @ 13.10.2006,  10:34)
удобнее в администрировании и переносах БД на другое железо

Напротив, неудобнее.


Цитата

отследить работу джоба труда не составляет труда

Как определить сколько CPU кушает джоб в данный момент и сколько для него распределено памяти?

Цитата

а вот если таких скриптов становится много то жизнь админа сладкой не назовешь, хотя ее и так такой не бывает smile

Жизнь админа становится несладкой, когда он не в состоянии контролировать свою поляну. Вот вы какого админа имеете в виду? Админа ОС или админа БД?

Добавлено @ 15:07 
Цитата(LSD @ 13.10.2006,  11:52)
Выполнить команду ОС можно так:

Что бы выполнять команды ОС есть отличное от Oracle средство. Это средство - собственно ОС и есть. Десятилетиями ОС совершенствуются с целью сделать выполнение ими команд ОС как можно более надёжным, безопасным и контролируемым.  smile  smile  smile  

Это сообщение отредактировал(а) 3x3 - 13.10.2006, 15:08


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.