Я пока накидал принудительное ограничение на 48 сессий (при 50 лицензиях), проверяю у клиента...
Кто ошибку заметит - скажите... Запускать от sys.
'STAR\ORASERV','ORASERV' - имя сервера, где стоит сервер лицензий
Код:
CREATE OR REPLACE TRIGGER BLOCK_EXCEEDED
AFTER LOGON ON DATABASE
DECLARE
V_USER VARCHAR2 (64);
V_HOST VARCHAR2 (64);
SESS_C NUMBER (5);
LOGON_C NUMBER (5);
BEGIN
SELECT sys_context('userenv','session_user'),sys_context('userenv','host') INTO V_USER, V_HOST FROM dual;
IF V_USER NOT IN ('SUPERMAG','SYS') THEN
IF V_HOST NOT IN ('STAR\ORASERV','ORASERV') THEN
SELECT count(distinct machine) INTO SESS_C FROM sys.v$session;
if SESS_C>48 THEN
SELECT count(1) INTO LOGON_C FROM sys.v$session where machine like '%'||upper(v_host)||'%';
IF LOGON_C<1 THEN
DBMS_LOCK.SLEEP(2);
RAISE_APPLICATION_ERROR(-20000, V_HOST||':Error #Session limit! Relax or visit https://olegon.ru');
END IF;
END IF;
END IF;
END IF;
END;
/
Код:
CREATE OR REPLACE TRIGGER BLOCK_EXCEEDED
AFTER LOGON ON DATABASE
DECLARE
V_USER VARCHAR2 (64);
V_HOST VARCHAR2 (64);
SESS_C NUMBER (5);
LOGON_C NUMBER (5);
BEGIN
SELECT sys_context('userenv','session_user'),sys_context('userenv','terminal') INTO V_USER, V_HOST FROM dual;
SELECT count(*) INTO SESS_C FROM (select distinct(username||terminal) from sys.v$session where (username,terminal) not in (select sys_context('userenv','session_user'),sys_context('userenv','terminal') from dual));
if SESS_C>23 THEN
RAISE_APPLICATION_ERROR(-20000, V_HOST||':Error #Session limit! Relax or visit https://olegon.ru');
END IF;
END;
/