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

Необходимо выполнить команду линукс из PL/SQL процедуры (11g)
Пытаюсь при помощи dbms_pipe.send_message, но не пойму как получить ответ команды который является текстом (строкой)?
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422062
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBMS_PIPE -- это не каналы OS, это внутренняя кухня оракла

А у тебя богатый выбор -- от DBMS_SCHEDULER, external tables, Java и до написания внешних процедур
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422063
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбор настолько богатый что не могу выбрать никак
Что лучше использовать для простого действия - отправка команды, получение ответа в Varchar?
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422068
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, смотря что за команда
В самом простом случае -- команда не ждет и не обрабатывает аргументов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
tst> create table pwd(str varchar2(256))
  2  organization external (
  3  type oracle_loader
  4  default directory tmp_dir
  5  access parameters (
  6  records delimited by newline
  7  preprocessor bin_dir:'pwd'
  8  )
  9  location ('.')
 10  );

Table created.

tst> select * from pwd;

STR
-------------------------------------------
/u/app/oracle/product/11gr2/dbs

tst> 

С аргументами, через создание shell-файлика тут , там же и определены TMP_DIR, BIN_DIR
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422073
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!

Мне нужно узнать IP сервера Оракл из хранимой процедуры
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422077
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем внешняя процедура?
Код: plsql
1.
2.
3.
4.
5.
SQL> select utl_inaddr.get_host_address(host_name) from v$instance;

UTL_INADDR.GET_HOST_ADDRESS(HOST_NAME)
------------------------------------------------------------------------
192.168.210.6

В 11 надо будет еще дать право 'resolve' через dbms_network_acl_admin
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422080
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Код: plsql
1.
select utl_inaddr.get_host_address(host_name) from v$instance;

Код: plaintext
dual
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422090
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Дело в том, что возвращается неверное значение.
Мне нужно чтоб вернулся тот IP который указан в tnsnames, для подключения, а возвращается IP standby сервера, почему-то
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422093
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как-то странно
А как подсказывает Elic (конспиратор, блин), без аргумента тоже фигню выдает?
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_inaddr.htm#ARPLS71181
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422098
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_MuscleМне нужно чтоб вернулся тот IP который указан в tnsnames, для подключенияВ общем случае на стороне сервера узнать адрес, использованный клиентом для tcp/ip подключения, затруднительно.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422100
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_NAME);
Получаю 'pluton'
Делаю DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_ADDRESS('pluton')); или DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_ADDRESS);
Получаю 22 IP, хотя в tns стоит 21

Не могу понять как так получается

Elic, да, и поэтому возникла идея может можно команду оси запустить из процедуры.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422103
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А со стороны сервера БД тот-же ping pluton про какой адрес говорит?
Я легко могу на сервере в /etc/hosts прописать любой другой адрес, а не тот, который резолвится, например, через DNS

А так, да -- сервер может иметь несколько адресов
В RAK-е могут быть еще и виртуальные адреса

Тут в общем-то надо скакать от твоей задачи, а не решать часть ее -- получение какого-то адреса (тем более, если ты знаешь имя)
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422105
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, можно еще парсить вывод V$LISTENER_NETWORK, но он тоже не дает информации о всех слушающих адресах
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422106
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_MuscleElic, да, и поэтому возникла идея может можно команду оси запустить из процедуры.Ты не понял. Между клиентом и сервером может быть куча NAT-ов.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422107
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

на стороне сервера возвращается 21

Задача в целом такая, в хранимых процедурах находится довольно много почтовых рассылок.
Нужно сделать так, чтобы в случае создания клона базы или если будет происходить синхронизация баз, в эти почтовые рассылки добавлялась строка которая бы позволила понять, с какого сервера почта приходит.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422114
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему именно адрес, а не имя?
Или даже имя БД (если, конечно, на клонах другие имена)
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422119
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что все знают только IP, имена то одинаковые..некоторые на 1 букву отличаются. Менять их никто не станет. Не информативно получится. А так 4 копии БД, боевая, 2 тестовых и резервная. Вот недавно подняли админы клон - потестировать что-то себе. Так мы, разработчики, головы сломали откуда же к нам уведомления на почту сыпятся.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422120
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В заголовках писем, если почтарь не занимается анонимизацией, прекрасно видны IP-адрес и имя хоста-отправителя.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422124
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Клиент - обычный Outlook, получатели - не только разработчики но и обычные юзеры, которым тоже важно знать уведомления с боевого сервера, резервного или тестовго.... к сожалению не вижу как мне могут помочь заголовки письма?
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422125
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_MuscleДелаю DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_NAME);
Получаю 'pluton'
Делаю DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_ADDRESS('pluton')); или DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_ADDRESS);
Получаю 22 IP, хотя в tns стоит 21Я бы все-таки попытался разобраться в ситуации
Возможно, с привлечением сисадмина
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422126
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

т.е. это ненормально?
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422127
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: "Вставить пистон админам, которые подняли стенд, не поменяв настройки системы уведомления".
Решение: увидев уведомление, "которого не должно быть" включить отображение служебных заголовков, найти IP-адрес отправителя и подойти для раздачи люлей.
Проблема: Никто в компании разработчиков никогда не видел служебных заголовков писем и не знает как их отобразить.
Решение проблемы: пригласить (нанять) сисадмина или даже толкового хелпдескера.

P.S. Уж простите мой сарказм, но даже аутглюке можно посмотреть заголовки писем. Не так удобно, как нормальном почтовом клиенте, но тоже можно.
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422132
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_MuscleВячеслав Любомудров,

т.е. это ненормально?Если у тебя там standalone-база, не RAC, т.е. у тебя один узел, то это, естественно, не нормально
Собственно, даже в случае с RAC-ом резолвинг по имени хоста не должен быть неправильным
...
Рейтинг: 0 / 0
Выполнить команду ОС из процедуры
    #39422135
Mr_Muscle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

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


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