CftClub.ru
Клуб специалистов ЦФТ-Банк

Запуск JOBа от имени другого пользователя
На страницу 1, 2, 3, 4  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Igorka
Профи


Вступление в Клуб: 28.09.2007
СообщениеПт Мар 26, 2010 11:45   Запуск JOBа от имени другого пользователя Ответить с цитатой
Полезность: Нет оценки
Хочу сделать операцию запускающую задания по расписанию, включить ее в завершение дня, можно ли сделать так, чтобы JOB запускался от имени пользователя TRC, а не от имени закрывающего день?
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСб Мар 27, 2010 22:42    Ответить с цитатой
Полезность: 1
Можно в JOB подменить пользователя:
stdlib.userid := trc_user;
После нужно дернуть процедуру установки контекста пользователя.
ИБСО под рукой нет, как назывется не помню. Помню только, что находится TRC.
Darkangelo
Участник со стажем


Вступление в Клуб: 04.07.2007
СообщениеПн Мар 29, 2010 10:00    Ответить с цитатой
Полезность: 2
можно не подменять stdlib.userid
следующие строки вот такие:
::[SYSTEM].[VARIABLES].set_system_vars_by_user(exec_user,true);
::[TRC].[INI].trc_set_var_current;

exec_user - ссылка на пользователя в типе ::[USER]
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПн Мар 29, 2010 21:40    Ответить с цитатой
Полезность: Нет оценки
Darkangelo пишет:
можно не подменять stdlib.userid
следующие строки вот такие:
::[SYSTEM].[VARIABLES].set_system_vars_by_user(exec_user,true);
::[TRC].[INI].trc_set_var_current;

exec_user - ссылка на пользователя в типе ::[USER]

Можно и так.
Только, если мне не изменяет память, set_system_vars_by_user работает только в job'ах. Если хочется подменить пользователя в обычной операции, то stdlib.userid и rc_set_var_current помогут.
Igorka
Профи


Вступление в Клуб: 28.09.2007
СообщениеВт Мар 30, 2010 09:26    Ответить с цитатой
Полезность: Нет оценки
Спасибо! буду пробовать
Igorka
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Апр 12, 2010 14:09    Ответить с цитатой
Полезность: Нет оценки
не прокатило. даже не в завершение дня вставил, а отдельным job-ом,
Цитата:
locate prov_user in [USER] where prov_user.[USERNAME] = 'TRC';
::[SYSTEM].[VARIABLES].set_system_vars_by_user(prov_user,false,true);
::[TRC].[INI].trc_set_var_current;
далее запуск других job-ов, которые должны под поользователем TRC заупститься


stdlib.UserId.[USERNAME] выдает правильно юзера, а задание все равно подо мной запускается Sad
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПн Апр 12, 2010 20:33    Ответить с цитатой
Полезность: Нет оценки
Я так понимаю, что job'ы запускаются от юзера Oracle а не ИБСО.
Цель запуска джобов именно от юзера TRC? Может, в запускаемых джобах подменять контекст?
ГлСП
Профи


Вступление в Клуб: 20.09.2007
СообщениеВт Апр 13, 2010 05:03    Ответить с цитатой
Полезность: 1
смотрим ::[TRC].[INI]

Код:

-- процедура инициализации переменных РЦ по заданному филиалу
-- Вычисляет пользователя из настроек договора РЦ филиала и устанавливает
-- в соответствии с ним переменные РЦ, системного пользователя
-- и зависящие от него переменные пакета SYSTEM.VARIABLES
-- Может использоваться только в процедурах, работающих в заданиях по расписанию
procedure trc_set_var(filial ref [BRANCH]);

-- Делает тоже самое, что и trc_set_var (см. описание выше),
-- но системный пользователь (stdlib.userid) не подменяется
--  и SYSTEM.VARIABLES инициализируется от подразделения,
--  которое можно задать параметром p_depart (используется в СПЭД и BankFactura)
--  !!! Если задан p_depart, то значение параметра filial игнорируется
-- p_do - если true, то выполнять переинициализацию
--        даже если filial равен текущему значению переменной ::[TRC].[INI].USER_FILIAL
procedure trc_set_var_lim(filial ref [BRANCH],
                  p_depart ref [DEPART] default null,
                  p_do boolean default false);



Мы сделал вот так, чтобы пользователя головы могли обрабатывать документы любых филиалов.




Код:

   [INI].set_var(P_FILIAL);
    [INI_ADDS].set_tune;
   ::[SYSTEM].[VARIABLES].set_system_vars_by_user([INI].CUR_USER, true, true);
   ::[CL_PART].[VAR].set_var;
   ::[TRC].[VPS_LIB].reset_cache_vars;



Но ведь никто не мешает подставить нужного пользователя.

А если дело косается запуска джобов для обработки документов РЦ, то вообще ничего не надо. И так уже все есть, только нужно сделать соответствующие настройки.
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеЧт Июл 08, 2010 10:32    Ответить с цитатой
Полезность: Нет оценки
Открыл новую ветку...
http://www.cftclub.ru/viewtopic.php?p=11588#11588
однако может кто тут поможет?

Хотелось бы заставить ибсятину выполнять JOB'ы от имени других пользователей.. при этом не залогиниваясь или же для установки Задачи. Может у кого получилось подобное реализовать?
_________________
Всего должно быть в меру.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Июл 08, 2010 15:06    Ответить с цитатой
Полезность: Нет оценки
zh пишет:
Открыл новую ветку...
http://www.cftclub.ru/viewtopic.php?p=11588#11588
однако может кто тут поможет?

Хотелось бы заставить ибсятину выполнять JOB'ы от имени других пользователей.. при этом не залогиниваясь или же для установки Задачи. Может у кого получилось подобное реализовать?


В свое время писал джоб для закрытия дня.. там как раз выислялся юзер из настройки

Код:
-- вычислим контекст пользователя, под которым выполняется ЗОД
   V_USER = ::[END_OD_OPERATION].[END_OD].V_USER := ::[FP_TUNE].[LIB].get_str_value('DOCUMENT_USER_ZOD',::[FP_TUNE].[LIB].SET_CANONS('BRANCH', filial%id), '0'); -- считаем настройку
   ::[SYSTEM].[VARIABLES].set_system_vars_by_user(V_USER, false, true); --переопределим пользователя


В настоящее время данный код успешно работает
_________________
всегда есть как минимум 2 выхода
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеПт Июл 09, 2010 07:54    Ответить с цитатой
Полезность: Нет оценки
Цитата:

В свое время писал джоб для закрытия дня.. там как раз выислялся юзер из настройки

Код:
-- вычислим контекст пользователя, под которым выполняется ЗОД
V_USER = ::[END_OD_OPERATION].[END_OD].V_USER := ::[FP_TUNE].[LIB].get_str_value('DOCUMENT_USER_ZOD',::[FP_TUNE].[LIB].SET_CANONS('BRANCH', filial%id), '0'); -- считаем настройку
::[SYSTEM].[VARIABLES].set_system_vars_by_user(V_USER, false, true); --переопределим пользователя


В настоящее время данный код успешно работает


Как я понимаю, не принципиально, откуда берется V_USER, главное, что бы он содержал ссылку на живого пользователя системы...

Так или иначе...

Код:
stdio.put_line_buf('Пользователь = ' || stdlib.user_id.[NAME]);
::[SYSTEM].[VARIABLES].set_system_vars_by_user(user, false, true);
stdio.put_line_buf('Пользователь = ' || stdlib.user_id.[NAME]);


Вне зависимости, с экранной ли формы user или я его locate'ом определяю... в теле ли операции, или же в блоке "p_message = 'DEFAULT' все одно stdio всегда возвращает пользователя, которым залогинен.. Что то не получается. Sad
_________________
Всего должно быть в меру.
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеПт Июл 09, 2010 09:33    Ответить с цитатой
Полезность: Нет оценки
По сути, если отключить p_ignore

система возвращает сие:

"set_system_vars_by_user: переопределение текущего пользователя завершилось неудачно!"

Получается, не отрабатывает

Код:
prev_user := APP_SECURITY.SetUserId(p_user);


и возвращает меня же в качестве системного пользователя...
_________________
Всего должно быть в меру.
2mb
Участник


Вступление в Клуб: 23.04.2008
СообщениеВт Июл 27, 2010 09:47    Ответить с цитатой
Полезность: Нет оценки
APP_SECURITY.SetUserId работает ТОЛЬКО из-под JOB или EOD
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеСр Июл 28, 2010 13:27    Ответить с цитатой
Полезность: Нет оценки
2mb пишет:
APP_SECURITY.SetUserId работает ТОЛЬКО из-под JOB или EOD

Засунул в операцию, которая, собственно, выполняется по расписанию, т.е. крутится под JOB'ом...

не помогло.

Пользователь был успешно поменян без ошибок.

ORA-0000: normal, successful completion

Однако проводки все равно легли под пользователем, поставившим задание.
_________________
Всего должно быть в меру.
2mb
Участник


Вступление в Клуб: 23.04.2008
СообщениеЧт Июл 29, 2010 09:47    Ответить с цитатой
Полезность: Нет оценки
zh пишет:
2mb пишет:
APP_SECURITY.SetUserId работает ТОЛЬКО из-под JOB или EOD

Засунул в операцию, которая, собственно, выполняется по расписанию, т.е. крутится под JOB'ом...

не помогло.

Пользователь был успешно поменян без ошибок.

ORA-0000: normal, successful completion

Однако проводки все равно легли под пользователем, поставившим задание.


А переинициализацию контекстов пользователя и системных переменных Вы не забыли выполнить?
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2, 3, 4  След.
Страница 1 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru