Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает? / 3 сообщений из 3, страница 1 из 1
19.07.2017, 18:40
    #39491806
Сергей Б
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
На сервере создал процедуры и таблицы как описаны в статье
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
19.07.2017, 22:56
    #39491897
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
Сергей БWHERE who = USER

так USER наверное внутри процедуры всегда = владельцу процедуры. Зачем там user вообще?
...
Рейтинг: 0 / 0
19.07.2017, 23:16
    #39491905
яфшуеі
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает?
В свое время пытались настроить ограничение на количество сессий
с запросом только по 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
Форумы / Informix [игнор отключен] [закрыт для гостей] / Процедура SYSDBOPEN. Почему не все соединения с базой отлавливает? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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