Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
здравствуйте! необходимо в Forms отобразить таблицу, отражающую текущие активные сессии. В Forms отбражается представление create or replace view ACTIVE_SESSIONS_VIEW ( SSO_ID, AUDSID, FIO, OTDNAME, OTD, STRTYPE, SESSION_ID, SERIAL#, MACHINE, LOGON_TIME ) as ( select /*+ RULE */a.sso_id, b.audsid, c.fam||' '||c.im||' '||c.ot as fio, otdname(c.otd,c.strtype) as otdname, c.otd, c.strtype, a.sid, b.serial#, b.machine, to_char(b.logon_time,'HH24:MM:SS') from active_sessions a , sys.v_$session b, logon_info d, otdpers c where a.sid = b.audsid and a.sso_id = d.userid(+) and d.otdpers = c.code(+) ) В active_sessions инфа заносится в Forms if userid is not null then dog_ctx.set_fgac_id(userid,'S'); else dog_ctx.set_fgac_id(user,'B'); end if; insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid')); А проблема заключается в том, что в формсах для текущей сессии, запущенной на том компе, откуда вызвали преиложение, отражается сражу три записи, с разными serial#, а в базе на тот момент только одна, как и полагается:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 14:51 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Чем не устраивает SELECT * FROM v$session WHERE status = 'ACTIVE' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 16:01 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что если я смотрю в своем active_sessions_view или в V_$sessions, то вижу единственную запись, касающююся моего идентификатора сессии, а вот в формсах почему-то их три, они отличаются временем входа и атрибутом serial#(у нужной мне записи он всегда наибольший) . Откуда еще две? И почему их не видно параллельноиз SQL Navigator? forms_ddl('commit') сделан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 16:33 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Силюсь понять, почему все так сложно сделано :) Тебе нужно вывести на форме результат селекта, который возвращал бы только активные сессии, так? Если да, то зачем нужна таблица active_sessions? В динамическом представлении v$session есть атрибут STATUS, который говорит о том, активна сессия или нет. Соответственно, для того чтобы отобразить только активные сессии, достаточно указать условие where status = 'ACTIVE'. Зачем нужны эти извращения с таблицей active_sessions? Что значит фраза Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:04 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Интересуют только те сессии, которые запущены приложением Forms и при запуске приложения в триггере и происходит userid := get_application_property(SSO_USERID); if userid is not null then dog_ctx.set_fgac_id(userid,'S'); else dog_ctx.set_fgac_id(user,'B'); end if; insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid')); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:07 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Я конечно понимаю, что у тебя в триггере происходит dog_ctx.set_fgac_id(userid,'S') Только это ни о чем не говорит. Используй модуль sys.dbms_application_info для регистрации запущенного приложения и критерий отбора активных сессий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:15 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
автор userid := get_application_property(SSO_USERID); if userid is not null then dog_ctx.set_fgac_id(userid,'S'); else dog_ctx.set_fgac_id(user,'B'); end if; insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid')); Зря ты так делаешь [SRС] Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0 Connected as igor SQL> SQL> create or replace trigger trig_log 2 AFTER logon ON DATABASE 3 --for each row 4 declare 5 -- local variables here 6 begin 7 INSERT INTO t1 VALUES (1); 8 end trig_log; 9 / Trigger created SQL> select * from t; select * from t ORA-00942: òàáëèöà èëè ïðåäñòàâëåíèå ïîëüçîâàòåëÿ íå ñóùåñòâóåò SQL> select * from t1; I --------------------------------------- SQL> disconnect; Not logged on SQL> connect Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0 Connected as igor SQL> select * from t1; I --------------------------------------- 1 1 1 SQL [/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:21 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
waspwortЯ конечно понимаю, что у тебя в триггере происходит dog_ctx.set_fgac_id(userid,'S') Только это ни о чем не говорит. Используй модуль sys.dbms_application_info для регистрации запущенного приложения и критерий отбора активных сессий. ой, извиняюсь, забыла procedure set_fgac_id(usr varchar2,atype varchar2) is cursor main(u varchar2,a varchar2) is select A.* from ACCON A where Upper(A.userid) = Upper(u) and A.auth = a; ou varchar2(20); begin DBMS_SESSION.SET_CONTEXT('dog_ctx', 'user', usr); DBMS_SESSION.SET_CONTEXT('dog_ctx', 'auth', atype); for rec in main(usr,atype) loop DBMS_SESSION.SET_CONTEXT('dog_ctx', 'UTYPE', rec.strtype); DBMS_SESSION.SET_CONTEXT('dog_ctx', 'UINFO', rec.otd); DBMS_SESSION.SET_CONTEXT('dog_ctx', 'OTDPERS', rec.otdpers); end loop; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:33 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Insert был в триггере When-new_form-instance. Хм.. это вроде как три раза сработал? А в чем спасение? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 17:41 |
|
||
|
активные сессии в Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Я ж говорю, используй пакет DBMS_APPLICATION_INFO. Вот что Кайт про него пишет Том Кайт Пакет DBMS_APPLICATION_INFO можно использовать для получения ответов на эти и многие другие вопросы. Он позволяет устанавливать значения трех столбцов — CLIENT_INFO, ACTION и MODULE — соответствующей сеансу строки в представле- нии V$SESSION. Пакет предоставляет функции не только для установки этих значе- ний, но и для их получения. Кроме того, один из параметров встроенных функций USERENV и SYS_CONTEXT позволяет получить значения столбца CLIENT_INFO в запросе. Можно, например, выполнить SELECT USERENV('CLIENT_INFO') FROM DUAL или использовать конструкцию WHERE SOME_COLUMN - SYS_CONTEXT('USERENV','CLIENT_INFO') в запросах. Значения, устанавливаемые в представлениях V$, сразу же доступны в других сеансах. Фиксировать их не нужно, что позволяет эффективно использовать эти представления для взаимодействия с "вне- шним миром". Мой вариант, как решить твою проблему: 1) создаешь в форме триггер POST-LOGON следующего содержания: dbms_application_info.set_module('test form',''); Строковые значения подставляешь свои, ессно. 2) Отображаешь на своей информационной форме следующий запрос: select * from v$session where module = 'test form' Соответственно показываются только те сессии, соответствующие запущенным формам, в которых есть триггер POST-LOGON. Недостаток - этот триггер надо сделать во всех формах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 19:25 |
|
||
|
|

start [/forum/topic.php?fid=51&msg=33192398&tid=1879365]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 385ms |

| 0 / 0 |
