Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3? / 16 сообщений из 16, страница 1 из 1
19.10.2021, 12:26
    #40105376
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Всем доброго дня,

согласно доке id процесса CLIENT_PID был добавлен в RDB$GET_CONTEXT начиная с версии 2.5.3.
Есть ли возможность получить его в версиях ниже 2.5.3 но не ниже 2.1?

Спасибо
...
Рейтинг: 0 / 0
19.10.2021, 12:31
    #40105378
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Да. Бэкпортируй соответствующий коммит и используй эту свою собственную сборку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.10.2021, 12:42
    #40105379
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Dimitry Sibiryakov

Да. Бэкпортируй соответствующий коммит и используй эту свою собственную сборку.


в этом случае проще обновиться до 2.5.9. Речь идёт о клиентских машинах (которых много, и на некоторых по моей информации встречается ещё версия 2.5.1 а возможно и 2.1 хотя конечно 2.1 маловероятна).
...
Рейтинг: 0 / 0
19.10.2021, 12:46
    #40105380
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Заставь своё приложение устанавливать переменную со своим PID. Костыль как раз в
твоём духе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.10.2021, 12:56
    #40105384
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Dimitry Sibiryakov

Заставь своё приложение устанавливать переменную со своим PID. Костыль как раз в
твоём духе.

тут как раз попытка уйти от правки всех модулей, а это как раз и потребует сей правки.
Я так понимаю иначе никак PID не получить потому что его физически в 2.5.1 нигде нет?
...
Рейтинг: 0 / 0
19.10.2021, 13:40
    #40105394
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotun,

есть 2 момента. В суб-релизе 2.5.3 были добавлены переменные
SYSTEM::CLIENT_PID and SYSTEM::CLIENT_PROCESS.

Но это переменные.

А так те же значения должны быть в столбцах
mon$attachments
- MON$REMOTE_PID (remote client process ID)
- MON$REMOTE_PROCESS (remote client process pathname)

Эти столбцы есть и в 2.1 (точно).
Другое дело, что если эти столбцы есть, но они пустые, то это значит что клиентская либа древняя,
которая эти данные серверу передавать не умеет (до версии 2.1).
Либо, эти столбцы не заполняются при коннектах из .net и Java (т.к. к серверу они лезут сами, а авторы этих драйверов как-то игнорируют эти данные).

Так что - на сервере ты указанные переменные можешь получить в 2.5.3, не раньше. Или можешь получить эти данные из mon$, хоть с 2.1. А вот заполняет эти данные с клиентской стороны только клиент 2.1, не меньше.

Как-то так.

p.s. по идее, CLIENT_PID и CLIENT_PROCESS могут заполняться не так как mon$, поэтому обращение к ним менее влияет на производительность, чем заполнение mon$ при первом обращении в транзакции. Но тут я не в курсе конкретной реализации.
...
Рейтинг: 0 / 0
19.10.2021, 13:57
    #40105401
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
kdv,

спасибо за обстоятельный ответ.
Вариант с mon$attachments вполне подходит. Клиентская либа там точно правильная и из .net или Java тоже точно нет.

Спасибо!
...
Рейтинг: 0 / 0
19.10.2021, 14:50
    #40105412
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotunВариант с mon$attachments вполне подходит.
тут надо быть бдительным - не дрюкать слишком часто, а то на 2.5 и тем более на классике может просаживать (в момент сбора данных mon$).
...
Рейтинг: 0 / 0
19.10.2021, 15:09
    #40105418
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
kdv
Либо, эти столбцы не заполняются при коннектах из .net и Java (т.к. к серверу они лезут сами, а авторы этих драйверов как-то игнорируют эти данные).
До Java 8 (включительно) нет штатного способа узнать идентификатор процесса JVM, в которой работает java-приложение.
...
Рейтинг: 0 / 0
19.10.2021, 15:26
    #40105422
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
kdv
hlopotunВариант с mon$attachments вполне подходит.

тут надо быть бдительным - не дрюкать слишком часто, а то на 2.5 и тем более на классике может просаживать (в момент сбора данных mon$).

т.е. лучше создать GTT уровня соединения с базой в триггере соединения, запихать туда IP и PID один раз и таскать их оттуда в рамках этого соединения?
...
Рейтинг: 0 / 0
19.10.2021, 15:27
    #40105423
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotun,

зачем? Пиши через RDB$SET_CONTEXT в переменную уровня сессии
...
Рейтинг: 0 / 0
19.10.2021, 15:28
    #40105425
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotun,

rdb$set_context('USER_SESSION', 'PID', ....)
rdb$set_context('USER_SESSION', 'IP', ....)
...
Рейтинг: 0 / 0
19.10.2021, 15:30
    #40105426
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Шавлюк Евгений
hlopotun,

rdb$set_context('USER_SESSION', 'PID', ....)
rdb$set_context('USER_SESSION', 'IP', ....)


и это будет работать в 2.5.1?
...
Рейтинг: 0 / 0
19.10.2021, 15:31
    #40105427
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotun,

Сколько времени надо чтобы проверить?
...
Рейтинг: 0 / 0
19.10.2021, 15:33
    #40105429
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
Шавлюк Евгений
hlopotun,

Сколько времени надо чтобы проверить?


sorry, в доке: Эти функции были добавлены в Firebird в версии 2.0.
...
Рейтинг: 0 / 0
19.10.2021, 16:32
    #40105443
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?
hlopotun
создать GTT уровня соединения с базой в триггере соединения
Независимо от темы и прочего обсуждения - это чушь полная.
Надеюсь это был просто поток сознания бессознательного.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3? / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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