Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Отключение пользователей по бездействию : Супермаг Плюс (Супермаг 2000)

24.04.2024 6:17


23.09.2011 07:51
OlegON
 
Как смотрю, по статистике у очень многих стоит вопрос с недостатком лицензий, который можно было бы решить отключением пользователей по бездействию. Конечно, есть профили в Оракле и планы, но они не решают проблему (решают ее криво) в связи с тем, что сессий Супермаг открывает несколько и не очень хорошо выкидывать пользователей, если за ними числится открытый на редактирование документ.
Я, конечно, в итоге сделаю в оптимизаторе и сам, но если у кого-то есть готовый алгоритм/скрипт/пожелания/замечания - поделитесь?
23.09.2011 10:54
Carott
 
Часто бывает, что менеджеры оставляют открытытыми приложения и занимаются другими делами. В Администраторе сервера приложений есть такой пункт - Время бездействия. Можно используя данные из него отключать сессию пользователя (через час например)
Это в раздел пожелания*129
03.09.2015 10:56
karachun
 
Как известно СМ+ создаёт несколько сессий Oracle. Посмотреть эти сессии и время их простоя в V$SESSION труда не составляет. В «Администратор сервера приложений» в окне «Статистика и управление активными сессиями» есть информация о времени простоя. Одна из строчек в V$SESSION, для пользователя совпадает по времени простоя из «Администратор сервера приложений».
Вопрос: по какому условию из нескольких сессий для одного имени пользователя выбрать ту, по у которой время простоя совпадёт с временем из «Администратор сервера приложений»?
03.09.2015 11:00
OlegON
 
Я, кстати, так ничего и не сделал.
Но, если бы стал копать и сравнивать - стал бы сравнивать, какие сессии что лочат в SUPERMAG.SSLOCKS.
Надеюсь, что поделишься изысканиями в итоге...
04.09.2015 09:33
karachun
 
Вот что у меня получилось:
SQL код:
select TO_CHAR(FLOOR(S.LAST_CALL_ET 60 60), '00') || ':' ||
       
TO_CHAR(FLOOR((S.LAST_CALL_ET -
                     
FLOOR(S.LAST_CALL_ET 60 60) * 60 60) / 60), '00') || ':' ||
       
TO_CHAR(S.LAST_CALL_ET FLOOR(S.LAST_CALL_ET 60 60) * 60 60 -
               
FLOOR((S.LAST_CALL_ET -
                     
FLOOR(S.LAST_CALL_ET 60 60) * 60 60) / 60) * 60'00') as "Время простоя"
       
,S.LAST_CALL_ET
       
,S.SID
       
,S.SERIAL#
       
,S.USERNAME
       
--,L.*
from   SUPERMAG_SESSIONS S
      
,SSLOCKS           L
where  S
.SID L.SID
       
and S.SERIAL# = L.SERNUM
      
--
       and 
S.USERNAME <> 'SUPERMAG'
       
and S.PROGRAM 'Sm.Main.exe' 
То что отбирается удаляю через
SQL код:
ALTER SYSTEM KILL SESSION 'sid,serial#'
Тестировал целый день. Жалоб от пользователей нет. В «Администратор сервера приложений» в окне «Статистика и управление активными сессиями» количество пользователей изменяется.
Считаю цель занятия достигнута.
04.09.2015 09:43
OlegON
 
Выкидываешь даже тех, кто с залоченными документами? Инвентаризаторы не убьют? И обращу внимание, что извращенцам, которые считают ТД и выполняют другие сервисные функции не из под SUPERMAG, придется запрос поправить.
04.09.2015 10:01
karachun
 
Спасибо!!! Подумаю над замечаниями.
05.11.2018 11:57
Diamondne
 
Добрый день.

Появилась идея автоматически дропать бездействующие сессии, чтоб высвобождать лицензии. Проблема в том, что, если "убить" все сессии через alter system kill session '<sid>,<serial#>' immediate; , то супермаг переподключается через 3-4 секунды и снова начинает расходовать лицензию. В рамках одного офиса, проблему решил батником, который из базы дергает сессии, с бездействием больше часа и через RPC грохает процесс 'Sm.Main.exe' на компьютере пользователя. Но в масштабе всей сети не хочется так делать. Подскажите, мб кто сталкивался, хочется отстреливать клиентов только на уровне БД. Клиент Супермага подключается через oracle client.
06.11.2018 07:23
OlegON
 
Цитата:
Diamondne сессии, с бездействием больше часа
Угу, проблема в том, что Супермаг может открывать несколько сессий, некоторые из которых будут бездействовать... Второй прикол в том, что в Супермаге есть сессии, постоянно дергающие базу, независимо от того, чем занят или бездействует пользователь (это в сравнительно новых версиях). Как результат вижу только возможность всех загонять на сервер терминалов, чтобы там бездействующих отключать, либо написать свой хранитель экрана, убивающий клиента СМ.
06.11.2018 08:46
Diamondne
 
Цитата:
OlegON Угу, проблема в том, что Супермаг может открывать несколько сессий, некоторые из которых будут бездействовать... Второй прикол в том, что в Супермаге есть сессии, постоянно дергающие базу, независимо от того, чем занят или бездействует пользователь (это в сравнительно новых версиях).
Скрипт отслеживает ту сессию, которая отображается в "Статистике по активным сессиям" администратора сервера приложений СМ. В случае подключения через oracle client (т.е. не через сервер приложений СМ) этого достаточно. Механизм убивания процесса Sm.Main.exe в винде пользователя работает уже 6 месяцев. Нареканий нет. Единственный возможный косяк - это несколько окон СМ - он убьет все. Но это не такая проблема. У меня не получается только отключать клиента без убивания процесса в винде. По поводу того, что СМ открывает несколько сессий: - я убиваю все сессии конкретного пользователя с конкретного ПК.
Часовой пояс GMT +3, время: 06:17.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.