powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
3 сообщений из 3, страница 1 из 1
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
    #39491806
Сергей Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере создал процедуры и таблицы как описаны в статье
https://www.ibm.com/developerworks/ru/library/dm-1109sysdbopen/.
Проверил, как работает (под разными пользователями через dbaccess и через сервер студио соединялся с сервером). Все работает, все фиксируется.

Добавил небольшой «кусок кода»
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
….
-- Теперь проверим, не знаем ли мы уже этого пользователя
SELECT count(*) INTO flag 
FROM sysdbopenuser 
WHERE who = USER 
AND db_name = my_database; 

      --add 29/06/17
	SELECT s.hostname,s.sid as ses
        INTO v_host,v_ses
	FROM sysmaster:syssessions s ,sysmaster:sysopendb b
	WHERE s.username = USER AND s.sid = DBINFO('sessionid') AND  
	      s.sid=b.odb_sessionid AND b.odb_iscurrent = 'Y';
     --end add 29/06/17

IF flag = 0			-- новая запись
….
ELSE BEGIN 
	SELECT count(*) INTO act_conn_x 
	FROM sysmaster:syssessions s, sysmaster:sysopendb o 
	WHERE s.username = USER 
	AND o.odb_dbname = my_database 
	AND o.odb_sessionid = s.sid; 

        --  add 29/06/17
        INSERT INTO sysdbopenusr 
	VALUES (USER,CURRENT year to second,null,my_database,v_host,v_ses);
       --end add 29/06/17
…..


Проверил как работает. Все работает, все фиксируется.
Начал контролировать кто и когда подсоединялся к БД. И к своему удивлению заметил, что не все фиксируется этой процедурой.

Делаю запрос к сессиям и вижу, что новые сессии появляются, но не все отображается в таблице sysdbopenuser

Код: plsql
1.
2.
3.
select sid,username,hostname,dbinfo('UTC_TO_DATETIME',connected) as connected,feprogram,state 
,current - (dbinfo('UTC_TO_DATETIME',connected) + 1 UNITS HOUR) as duration
from syssessions



Проверяю и сравниваю с запросом, который фиксирует подключение к БД в процедуре.
Код: plsql
1.
select * from syssessions = SELECT  * FROM sysopendb t2 {0}



но это в том случае, если во втором запросе закоментировать условие s.username = USER AND s.sid = DBINFO('sessionid').
Значит эта процедура не все соединения фиксирует. Подскажите пожалуйста, какой тип/вид соединений она не фиксирует и почему?
...
Рейтинг: 0 / 0
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
    #39491897
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей БWHERE who = USER

так USER наверное внутри процедуры всегда = владельцу процедуры. Зачем там user вообще?
...
Рейтинг: 0 / 0
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
    #39491905
яфшуеі
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В свое время пытались настроить ограничение на количество сессий
с запросом только по sysmaster:syssessions проблем не было, ограничивало количество сессий корректно,
если клиент не использует IFX_NODBPROC.

Зачем делать связку с sysopendb? процедура и так отрабатывает только на этой БД.
На сколько я понимаю, sysdbopen работает только в случае если БД открыта как database, во всяком случае на 11.70FC5
Если мы обращаемся к таблице с другой БД - sysdbopen не отрабатывает

Т.е. запрос типа
echo "select t1.* from systables t , mydb:systables t1 where t1.tabid=1 and t.tabid=t1.tabid " | dbaccess sysmaster
на БД mydb не вызывает sysdbopen. Аналогично и для подзапроса.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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