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

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

А у тебя богатый выбор -- от DBMS_SCHEDULER, external tables, Java и до написания внешних процедур
...
Рейтинг: 0 / 0
18.03.2017, 09:20
    #39422063
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Выбор настолько богатый что не могу выбрать никак
Что лучше использовать для простого действия - отправка команды, получение ответа в Varchar?
...
Рейтинг: 0 / 0
18.03.2017, 09:48
    #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
18.03.2017, 10:50
    #39422073
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Спасибо за помощь!

Мне нужно узнать IP сервера Оракл из хранимой процедуры
...
Рейтинг: 0 / 0
18.03.2017, 11:12
    #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
18.03.2017, 11:19
    #39422080
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Вячеслав Любомудров
Код: plsql
1.
select utl_inaddr.get_host_address(host_name) from v$instance;

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

Дело в том, что возвращается неверное значение.
Мне нужно чтоб вернулся тот IP который указан в tnsnames, для подключения, а возвращается IP standby сервера, почему-то
...
Рейтинг: 0 / 0
18.03.2017, 11:52
    #39422093
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Это как-то странно
А как подсказывает Elic (конспиратор, блин), без аргумента тоже фигню выдает?
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_inaddr.htm#ARPLS71181
...
Рейтинг: 0 / 0
18.03.2017, 12:18
    #39422098
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Mr_MuscleМне нужно чтоб вернулся тот IP который указан в tnsnames, для подключенияВ общем случае на стороне сервера узнать адрес, использованный клиентом для tcp/ip подключения, затруднительно.
...
Рейтинг: 0 / 0
18.03.2017, 12:26
    #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
18.03.2017, 12:34
    #39422103
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
А со стороны сервера БД тот-же ping pluton про какой адрес говорит?
Я легко могу на сервере в /etc/hosts прописать любой другой адрес, а не тот, который резолвится, например, через DNS

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

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

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

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

Клиент - обычный Outlook, получатели - не только разработчики но и обычные юзеры, которым тоже важно знать уведомления с боевого сервера, резервного или тестовго.... к сожалению не вижу как мне могут помочь заголовки письма?
...
Рейтинг: 0 / 0
18.03.2017, 13:49
    #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
18.03.2017, 13:50
    #39422126
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить команду ОС из процедуры
Вячеслав Любомудров,

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

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

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

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


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