powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
56 сообщений из 56, показаны все 3 страниц
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268790
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нашел в MON таблицах что-либо, непосредственно указывающее на архитектуру и решил сделать отдельную ХП, но для формирования connString, опять же, необходим номера порта сервера текущего клиентского подключения.
Код: plsql
1.
2.
3.
4.
5.
EXECUTE STATEMENT ('SELECT Iif(MON$SERVER_PID = MON$REMOTE_PID, ''SS'', ''CS'') FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION')
  AS USER 'SYSDBA'
  PASSWORD 'masterke'
  ON EXTERNAL DATA SOURCE :connString
  INTO: MODE;


Кто как решал подобную задачу?
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268792
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Rdb Dev!
You wrote on 6 июля 2016 г. 13:32:02:

Rdb Dev> непосредственно указывающее на архитектуру
и снова всё тот же вопрос: НАХРЕНА?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268799
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь даже спросить, для чего это нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268800
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не успел.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268804
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

нету ни в таблицах мониторинга, ни в контекстных переменных этой инфы. В тройке тоже нет.
Идеально было бы если можно было считать в таблицу мониторинга текущие параметры конфигурации. Возможно в 4.0 сделают.

Проще сделать UDF которая будет брать инфу из конфига, по крайней мере насчёт порта.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268821
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 6 июля 2016 г. 13:45:38:

Симонов Денис> Проще сделать UDFтут программист нужен... (с)

зы: проще дать уже таки ему гранату
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268823
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> Идеально было бы если можно было считать в таблицу
Симонов Денис> мониторинга текущие параметры конфигурации. Возможно в 4.0 сделают.

Я вообще не понимаю, почему это в 3.0 не сделали,
хотя бы то, что активно, без перечитывания с диска.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268829
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

задача не так проста как кажется на первый взгляд. В 3.0 параметры могут быть уровня сервера, БД и соединения.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268834
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийи снова всё тот же вопрос: НАХРЕНА?Для реализации UDF функций блокировок. К примеру, для SS алгоритм функции может использовать обычные атомарные функции, а для CS - глобальные объекты ОС. Что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
bool _cdecl lock
    (
      const char * svr_mode,   // SS/CS
      const char * lock_name,  // имя для объекта блокировки
      long lock_owner          // идентификатор транзакции
    )
{
  switch (*reinetrpret_cast<unsigned short*>(svr_mode))
  {
    case 0x5353:
      /* использование атомарных функций */
      break;
    case 0x5343:
      /* использование глобальных объектов ОС */
      break;
    default:
      return false;
  }
  return true;
}
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДля реализации UDF функций блокировок. К примеру, для SS алгоритм функции может
использовать обычные атомарные функции, а для CS - глобальные объекты ОС.

Всегда используй "обычные атомарные функции" на общей памяти и будет тебе счастье.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268853
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Rdb Dev!
You wrote on 6 июля 2016 г. 14:04:08:

Rdb Dev> Для реализации UDF функций блокировок.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268857
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

TIBConfigService с ФБ не работает? Я уже давно не проверял.
isc_info_svc_get_config вроде должно возвращать содержимое firebird.conf. А в 3.0 там есть режим сервера.

Но как я уже говорил, все это лабуда. Блокируем объект в коннекте, коннект умирает, и что дальше? Ни в какой архитектуре нельзя определить, в каком коннекте был заблокирован некий системный объект, и жив ли этот коннект или нет.

Это сервер может определить, активна транзакция или нет (путем ее блокировки), а вот со всякими пользовательскими udf это не получится. "Это" - в смысле определения блокировки ресурса и его разблокирования.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268866
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВсегда используй "обычные атомарные функции" на общей памяти и будет тебе счастье.CreateSharedMemory/AllocateSharedMemory? Вариант... Спасибо за подсказку!
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268886
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvTIBConfigService с ФБ не работает? Я уже давно не проверял.
isc_info_svc_get_config вроде должно возвращать содержимое firebird.conf. А в 3.0 там есть режим сервера.Хотелось сделать чтоб работало из ХП или триггера.

kdvНо как я уже говорил, все это лабуда. Блокируем объект в коннекте, коннект умирает, и что дальше? Ни в какой архитектуре нельзя определить, в каком коннекте был заблокирован некий системный объект, и жив ли этот коннект или нет.Можно еще ХП навернуть, что будет вызываться из триггеров или ХП других транзакций и проверять живучесть транзакции, заблокировавшей объекты, принудительно снимая блокировки в случае смерти этой транзакции, но видится мне, это далеко не самое красивое решение.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268887
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, многапиксюлей.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268901
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, мне кацца, в триггерах ON TRANSACTION COMMIT/ROLLBACK не хватает контекстных переменных типа COMMITTED_TRANSACTION/ROLLEDBACK_TRANSACTION. Хотя, наличие подобных контекстных переменных всё равно никак не поможет при отрубании транзакций через 'DELETE FROM MON$ATTACHMENTS'. :(
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268904
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devМожно еще ХП навернуть, что будет вызываться из триггеров или ХП других транзакций и проверять живучесть транзакции, заблокировавшей объекты, принудительно снимая блокировки в случае смерти этой транзакции, но видится мне, это далеко не самое красивое решение.

Что-то у меня есть подозрения, что ты бутерброт не с той стороны есть начал.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268912
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисзадача не так проста как кажется на первый взгляд. В 3.0 параметры могут быть уровня сервера, БД и соединения.?
RDB$GET_CONTEXT ('SYSTEM' | 'USER_SESSION' | 'USER_TRANSACTION' , '<varname>')
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268915
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterЧто-то у меня есть подозрения, что ты бутерброт не с той стороны есть начал.Надо колбасой на язык?
Рассмотрю любые варианты.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268926
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

не прокатит. Я же сказал уровня сервера, БД и коннектов.
1. Уровня БД в контекстных переменных нет
2. Коннектов много, не факт что нужно знать свои параметры

Поясню. Уровня БД обозначает что параметры заданы в databases.conf, а не в firebird.conf

Код: plaintext
1.
2.
3.
4.
5.
horses = d:\fb\fb30\data\horses.fdb
{
	DefaultDbCachePages = 32K
	TempCacheLimit = 1024M
	TempBlockSize = 4M
}
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268936
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devв триггерах ON TRANSACTION COMMIT/ROLLBACK не хватает контекстных переменных типа
COMMITTED_TRANSACTION/ROLLEDBACK_TRANSACTION.

Чем они могут отличаться от CURRENT_TRANSACTION?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268938
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис1. Уровня БД в контекстных переменных нетНу, список контекстов можно и расширить.

Симонов Денис2. Коннектов много, не факт что нужно знать свои параметрыА вот тут ...опа!
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39268962
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЧем они могут отличаться от CURRENT_TRANSACTION?
Ничем. Это у меня глюки из-за непонятно с чего возникшей аналогии с триггерами CONNECT/DISCONNECT.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269047
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devХотелось сделать чтоб работало из ХП или триггера.
можно использовать такое правило - если не знаешь или не можешь определить архитектуру, то делай так, как будто это всегда классик. Не ошибешься. Тут только единственное исключение - не использовать threadvar.
rdb_devи проверять живучесть транзакции, заблокировавшей объекты
ты не понял, совсем. Когда сервер сталкивается с активной конкурирующей транзакцией, он пытается на нее сделать лок. Если лок успешен, значит коннект (или процесс), стартовавший эту транзакцию отвалился, и транзакцию надо перевести в роллбэк. Если не успешен - транзакция жива.
Ты это из процедур, функций, udf и прочего никак не можешь выполнить аналогичную проверку, или использовать подобный механизм для проверки блокированности своих объектов (мютексов, семафоров и проч). Потому что серверу наплевать на твои объекты. А кроме активного коннекта эти объекты проверять и блокировать-разблокировать больше некому. Еще раз привожу пример:
- коннект выполняет функцию блокировки мютекса
- коннект (процесс) отваливается.
- мютекс заблокирован, а кто его заблокировал (и жив он или нет) - неизвестно.
аминь. И снять такую блокировку можно по таймауту. Но вот проблема - у мютекса нет свойства "время блокировки".
rdb_devс чего возникшей аналогии с триггерами CONNECT/DISCONNECT.
если процесс/коннект умер, то для него disconnect не вызовется. Подозреваю, что on rollback для такой транзакции тоже не вызовется. насчет delete from mon$attachments - тоже не вызовется ни on disconnect, ни on rollback.
То есть, у тебя возникает "дыра", при которой твои объекты могут оказаться заблокированными навечно.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269210
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devКто как решал подобную задачу?
Таблоид ее когда-то давно решал. В академических целях, как у него обычно водится :)
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269443
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТы это из процедур, функций, udf и прочего никак не можешь выполнить аналогичную проверку, или использовать подобный механизм для проверки блокированности своих объектов (мютексов, семафоров и проч). Потому что серверу наплевать на твои объекты. А кроме активного коннекта эти объекты проверять и блокировать-разблокировать больше некому. Еще раз привожу пример:
- коннект выполняет функцию блокировки мютекса
- коннект (процесс) отваливается.
- мютекс заблокирован, а кто его заблокировал (и жив он или нет) - неизвестно.
аминь. И снять такую блокировку можно по таймауту. Но вот проблема - у мютекса нет свойства "время блокировки".Проблема, в большей степени, обходится созданием собственных объектов блокировки в разделяемой памяти со штампом времени и фиксированным маленьким таймаутом (к примеру, 500мс), но начинает упираться в накладные расходы на маршалинг при вызове какой-нибудь UDF функции, типа hold_lock(:hndl_lock, CURRENT_TRANSACTION), продлевающей блокировку, а также сильно упираться в использование транзакций wait. Последнее вовсе начисто отбивает желание самостоятельной реализации через UDF, так как любая блокировка записей в конкурирующей транзакции, дольше заданного времени, приведет к автоматической разблокировки ресурса и неопределенному дальнейшему поведению.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269445
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineТаблоид ее когда-то давно решал. В академических целях, как у него обычно водится :)Так и я больше в академических целях, так как никто подобных задач передо мной не ставит, а свою собственную мысль не загонишь исключительно в рамки тех.заданий.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269467
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev а свою собственную мысль не загонишь исключительно в рамки тех.заданий.А как же ты тогда свои тех. задания пишешь?
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269473
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, чукча не писатель, чукча читатель.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269485
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел решение Таблоида (самому интерессно стало): 18162493 .
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269507
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devYuRock, чукча не писатель, чукча читатель. Ну а когда для себя что-то пишешь или для души? Или большой неописанный в тз кусок?
Ты что, алгоритм хотябы вначале не описываешь? Что и как работать будет в будущем твоем творении?

Ведь именно законченное, проработанное тз и экономит время и ресурсы. Быстрее сначала продумать и написать алгоритм (на русском языке, например), а потом закодить его спокойно и уверенно, чем сразу бросаться кодить пальцем в небо и затем либо переделывать 5 раз либо грабли и костыли оставлять. Наподобие внешних блокировок функций работы СУБД :)
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269510
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline, в принципе, то же самое и тоже без порта, но мне не понятно нафига там обращение к MON$IO_STAT и это:
select a.mon$server_pid + 0*(select count(*) from rdb$types,rdb$types)
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269523
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

читай комментарий dimitr выше втом топике
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269541
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

теперь заверни это все в триггеры on commit/on rollback, и получи тормоза (как и было у Таблоида).
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269543
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извращение с (select count(*) from rdb$types,rdb$types) IMHO лишнее, на момент любого опроса MON$-таблиц всегда должно было произойти как минимум одно страничное чтение и/или одна страничная запись. И уж точно более одного страничного фетча. Т.е. если в MON$IO_STATS для БД ноль, то это точно CS/SC, в SS такого быть не должно в принципе. Выполнять холостые 10000 чтений из RDB$TYPES это слишком дорогая перестраховка.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269557
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

по сути архитектуру надо определить один раз в ON CONNECT триггере и запомнить её в контекстной переменной, а потом получать её от туда. Но решение с MON$ всё равно не очень, по крайней мере в 2.5, ибо может замедлить коннект. В системах где частые и короткоживущие коннекты это смерти подобно.

В 3.0 с MON$ уже лучше. Кроме того можно сделать функцию, которая получает архитектуру по требованию и кеширует это значение в тех же контекстных переменных, вместо размещения в ON CONNECT.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269736
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline, попробовал сделать "красившэ":
Код: 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.
CREATE OR ALTER EXCEPTION db__xGetOut 'Отвали!';
-- CREATE OR ALTER EXCEPTION db__xIamSS 'Я супер сервер!!!';
-- CREATE OR ALTER EXCEPTION db__xIamCS 'Классик';

SET TERM ^;
CREATE OR ALTER TRIGGER db__TR_CONN
  ON CONNECT
AS
  DECLARE VARIABLE remoteProcess VARCHAR(255) CHARACTER SET UTF8;
  DECLARE VARIABLE isSuperServer SMALLINT DEFAULT 0;
BEGIN
  IF (CURRENT_USER = 'SERVER_MON_USER') THEN
    BEGIN
      SELECT MON$REMOTE_PROCESS,
          Iif(MON$SERVER_PID = MON$REMOTE_PID, 1, 0)
        FROM MON$ATTACHMENTS
        WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION
          AND MON$REMOTE_PROTOCOL = 'TCPv4'
          AND MON$REMOTE_ADDRESS = '127.0.0.1'
          -- AND MON$REMOTE_PROCESS = MON$LOCAL_PROCESS
        INTO: remoteProcess, isSuperServer;
      IF (:remoteProcess IS NULL) THEN EXCEPTION db__xGetOut;
      -- IF (:isSuperServer = 1) THEN
      --   EXCEPTION db__xIamSS;
      -- ELSE
      --   EXCEPTION db__xIamCS;
    END
END^
SET TERM ;^

но в ХП с EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE исключения db__xIamSS и db__xIamCS не поймать через WHEN EXCEPTION ... DO. :(
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269741
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтеперь заверни это все в триггеры on commit/on rollback, и получи тормоза (как и было у Таблоида).
Нафига их заворачивать в эти триггеры? Не проще сделать это в триггере ON CONNECT и сохранить через RDB$SET_CONTEXT ?
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269743
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, опередил. :)
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269795
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще странно, что нельзя отловить пользовательское исключение из EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE.

"Триггера на события CONNECT и DISCONNECT выполняются в специально созданной
для этого транзакции. Если при обработке триггера не было вызвано исключение, то
транзакция подтверждается. Не перехваченные исключения откатят транзакцию и:
• в случае триггера на событие CONNECT соединение разрывается, а исключения
возвращается клиенту;"


Пусть не по имени исключения, так как исключение выброшено не в текущем подключении к БД, но, хотя бы, по номеру.
Вот как-то так:
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SET TERM ^;
CREATE OR ALTER PROCEDURE SERVER_MODE
  RETURNS
  (
    RET TAG2
  )
AS
  DECLARE VARIABLE attachName   VARCHAR(255) CHARACTER SET UTF8 DEFAULT NULL;
  DECLARE VARIABLE dbName       VARCHAR(255) CHARACTER SET UTF8 DEFAULT NULL;
  DECLARE VARIABLE connString   VARCHAR(255) CHARACTER SET UTF8 DEFAULT NULL;
  DECLARE VARIABLE xIamSS       INTEGER;
  DECLARE VARIABLE xIamCS       INTEGER;
BEGIN
  SELECT RDB$EXCEPTION_NUMBER
    FROM RDB$EXCEPTIONS
    WHERE RDB$EXCEPTION_NAME = 'DB__XIAMSS'
    INTO: xIamSS;
  SELECT RDB$EXCEPTION_NUMBER
    FROM RDB$EXCEPTIONS
    WHERE RDB$EXCEPTION_NAME = 'DB__XIAMCS'
    INTO: xIamCS;
  SELECT MON$ATTACHMENT_NAME,
      (SELECT MON$DATABASE_NAME FROM MON$DATABASE) AS DATABASE_NAME
    FROM MON$ATTACHMENTS
    WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION
    INTO: attachName, dbName;
  connString = '127.0.0.1/3050:' || Coalesce(attachName, dbName);
  EXECUTE STATEMENT ('SELECT Cast(NULL AS CHAR(2) CHARACTER SET ASCII FROM RDB$DATABASE')
    AS USER 'SERVER_MON_USER'
    PASSWORD '12345678'
    ROLE 'RDB$ADMIN'
    ON EXTERNAL DATA SOURCE :connString
    INTO: RET;
  WHEN EXCEPTION :xIamSS DO
    BEGIN
      RET = 'SS';
      SUSPEND;
    END
  WHEN EXCEPTION :xIamCS DO
    BEGIN
      RET = 'CS';
      SUSPEND;
    END
END^
SET TERM ;^

...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269799
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВообще странно, что нельзя отловить пользовательское исключение из EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE.???
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269811
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, на оба исключения (db__xIamSS и db__xIamCS) я получаю только GDSCODE = 335544921 и SQLSTATE = '42000'
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269813
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

решения у тебя какие-то проктостоматологические мягко говоря
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269816
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, а это и не решения вовсе. Так... Мысли вслух.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269936
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad, на оба исключения (db__xIamSS и db__xIamCS) я получаю только GDSCODE = 335544921 и SQLSTATE = '42000'А почему ты решил, что должен получить что-то другое ? Ты доку по EXEC STMT читал ?
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39269946
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 7 июля 2016 г. 15:54:57:

Симонов Денис> решения у тебя какие-то проктостоматологические мягко говоряprofession de foi...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270014
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА почему ты решил, что должен получить что-то другое ? Ты доку по EXEC STMT читал ??
"Каждое исключение, вызванное
оператором, возвращает eds_connection или eds_statement ошибки. Для обработки
исключений в коде PSQL вы должны использовать WHEN GDSCODE eds_connection,
WHEN GDSCODE eds_statement или WHEN ANY."


Это понятно, но хотелось бы как-то ловить... Прекрасно вижу сообщение об ошибке, выплюнутое из ХП SERVER_MODE, и пойманное на клиенте (в IBExpert):
335544517: exception 11
335544382: DB__XIAMSS
335544382: Я супер сервер!

а поймать не могу. :( Эх, если бы была какая-нибудь функция типа EXCEPTION(nestLevel), способная возвращать номер исключения из соединений соединения внешнего провайдера...
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270036
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

зачем вся эта проктостоматология? Почему EDS просто не может вернуть имя архитектуры?
Подумай головным мозгом как перехватить исключения которых нет в твоей базе. Ведь EDS может подключаться не только к самой себе.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270107
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

кстати зачем тебе потребовал определить архитектуру? Это всё твоя шальная затея с мьютексами что ли? Все решения должны проектироваться так чтобы они работали независимо от архитектуры сервера.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270113
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисзачем вся эта проктостоматология? Почему EDS просто не может вернуть имя архитектуры?Хотя бы затем, чтобы, в данном случае, максимально ограничить и обезопасить "подключение" пользователя SERVER_MON_USER. Чтобы не ставить под угрозу целостность данных на сервере ФБ даже при отсутствие DMZ зоны за грамотно настроенным брандмауэром и наличие в сети хакера с инструментом ARP spoofing'а.

Симонов ДенисПодумай головным мозгом как перехватить исключения которых нет в твоей базе. Ведь EDS может подключаться не только к самой себе.Я уже писал, что это можно сделать по номеру исключения, а как я этот номер буду интерпретировать - мои проблемы. Например:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WHEN ANY DO
  BEGIN
    nestLevel = 0;
    xn = EXCEPTION_NUMBER(nestLevel);  -- номер исключения уровня нашего подключения
    WHILE (:xn IS NOT NULL) DO
      BEGIN
        exception_number = xn;
        nestLevel = nestLevel + 1;
        xn = EXCEPTION_NUMBER(nestLevel); -- номер исключения уровня внешнего провайдера n+1
      END
    SUSPEND;
  END
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270114
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devХотя бы затем, чтобы в данном случае максимально ограничить и обезопасить подключение пользователя SERVER_MON_USER

ты своим триггером ничего не обезопасил. Оно (подключение) уже произошло, просто исключение в ON CONNECT триггере его разрывает. Между инициализацией подключения и срабатыванием твоего триггера может произойти много чего интересного.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270115
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денискстати зачем тебе потребовал определить архитектуру? Это всё твоя шальная затея с мьютексами что ли? Все решения должны проектироваться так чтобы они работали независимо от архитектуры сервера.
Нее... Затея с собственной реализацией мьютексов/объектов блокировки не имеет смысла, а в FirebirdSQL реализацию таких вещей, я полагаю, не скоро добавят, если вообще когда-нибудь добавят.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270116
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисты своим триггером ничего не обезопасил. Оно (подключение) уже произошло, просто исключение в ON CONNECT триггере его разрывает. Между инициализацией подключения и срабатыванием твоего триггера может произойти много чего интересного.Всё правильно! Но без успешного выполнения триггера ON CONNECT, подключающийся пользователь не сможет выполнить DDL и что-нибудь попортить.
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270118
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

нет ты всё таки извращенец, да ещё и не читаешь ответы ДЕ. А ведь он тебе рассказал про простое решение без всяких там EDS, исключений и другой чепухи. Вот же оно

Код: sql
1.
2.
3.
4.
SELECT
    IIF(I.MON$PAGE_FETCHES > 0, 'SS', 'CS/SC') AS ARCH
FROM MON$IO_STATS I
WHERE I.MON$STAT_GROUP = 0  
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270129
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

а если добавить к этому проверку PID, то и SC от CS можно отличить
...
Рейтинг: 0 / 0
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
    #39270221
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениснет ты всё таки извращенец, да ещё и не читаешь ответы ДЕ. А ведь он тебе рассказал про простое решение без всяких там EDS, исключений и другой чепухи. Вот же оноВидимо, я недоразобрался с примером Таблоида. Спасибо, что ткнул носом.
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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