powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / GEN_ID дает повторяющееся значение
108 сообщений из 108, показаны все 5 страниц
GEN_ID дает повторяющееся значение
    #39957254
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

Волей судеб вынужден на работе поддерживать работоспособность старой программы (вообще-то их порядка 10), написанной на Delphi с использованием БД Firebird.
Я в обоих системах имею очень поверхностные знания.

Недавно столкнулся с новой проблемой. При массовых вставках в некоторые таблицы стали выдаваться ошибки на ограничении по первичному ключу.
В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение.
Найти разработчиков не удалось (уволились и старые контакты уже не актуальны) - приходится самому разбираться.

Подключений к БД много. Работает с БД не один клиент (порядка 10 разных программ) и есть системы, которые работают 24/7 - фиксируют в журнале разные операции, которые происходят постоянно. Т.е. определить какие клиенты и чьи запросы приводят к такой ситуации - не могу.

Вручную я конечно генератор переопределяю и все опять запускается, но мне такое решение не нравится

Очень надеюсь, что знатоки на форуме смогут мне подсказать - куда копать...

Заранее всем спасибо.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957261
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub,

- проверить, не сломана ли структура базы;
- посмотреть в процедурах/триггерах работу с генераторами.

Наверное, всё.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957262
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub,

а триггер есть при добавлении в таблицу, в котором срабатывает генератор? Или как используется gen_id()? Заодно и версию FB озвучьте. Может даже и скрипт добавления данных в таблицу приведёте?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957268
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI
delphi_nub,

а триггер есть при добавлении в таблицу, в котором срабатывает генератор? Или как используется gen_id()? Заодно и версию FB озвучьте. Может даже и скрипт добавления данных в таблицу приведёте?


Триггер есть. И все работало до недавнего времени

Версия 2.0 - знаю, что устаревшая, но миграцию боюсь выполнять, т.к. если что-то сломается я сам назад не откачу и поломки не сделаю (собственник нанял аутсерсеров - они разрабатывают новую систему, а эту мне нужно просто поддерживать, чтобы дожили до внедрения новой)

Сам триггер:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SET TERM ^ ;

CREATE OR ALTER TRIGGER DB_LOG_BI FOR DB_LOG
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_DB_LOG_ID,1);
END
^

SET TERM ; ^
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957270
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
delphi_nub,

- проверить, не сломана ли структура базы;
- посмотреть в процедурах/триггерах работу с генераторами.

Наверное, всё.


Каждую неделю делаю бекап/ресторе (это прописано в протоколе обслуживания) - вычищаю, если возникли какие-то артефакты.

Как еще проверить структуру?

Ну и триггер в 99.99% случаев работает правильно, но раз в несколько суток может выбирать ошибку. Руками обновляю генератор и все опять работает в штатном режиме.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957272
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub
Всем привет

Волей судеб вынужден на работе поддерживать работоспособность старой программы (вообще-то их порядка 10), написанной на Delphi с использованием БД Firebird.
Я в обоих системах имею очень поверхностные знания.

Недавно столкнулся с новой проблемой. При массовых вставках в некоторые таблицы стали выдаваться ошибки на ограничении по первичному ключу.
В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение.
Найти разработчиков не удалось (уволились и старые контакты уже не актуальны) - приходится самому разбираться.

Подключений к БД много. Работает с БД не один клиент (порядка 10 разных программ) и есть системы, которые работают 24/7 - фиксируют в журнале разные операции, которые происходят постоянно. Т.е. определить какие клиенты и чьи запросы приводят к такой ситуации - не могу.

Вручную я конечно генератор переопределяю и все опять запускается, но мне такое решение не нравится

Очень надеюсь, что знатоки на форуме смогут мне подсказать - куда копать...

Заранее всем спасибо.


Forced write включено?
Были записи о падении службы сервера?
Внеплановые перезагрузки?

Довольно часто встречается при регулярном нажатии кнопки ресет на сервере.
Иногда умирают и индексы PK/FK. Мы лечим переносом данных в чистую эталонную БД.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957274
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastor


Forced write включено?
Были записи о падении службы сервера?
Внеплановые перезагрузки?

Довольно часто встречается при регулярном нажатии кнопки ресет на сервере.
Иногда умирают и индексы PK/FK. Мы лечим переносом данных в чистую эталонную БД.


Сейчас погуглю, что это за Forced write

Внеплановые перезагрузки возможно бывали (не могу сейчас точно определить)

Но точно бывали принудительные "обрывы" подключений путем удаления всех клиентских процессов - это админы зачем-то сделали. Это могло повлиять?

Можно подробней про перенос данных в чистую БД? Т.е. это не ресторе/бекап, а какой-то отдельный процесс?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957278
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub,

Извлекаешь метаданные в скрипт, создаешь пустую БД под новым именем. Потом из старой БД переливаешь данные в новую. Через dump/pump...

База большая?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957280
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster, а чем restore/backup не подходит? Он же вроде делает также

База порядка 33 Гб. Восстановление из архива идет порядка 4 часов.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957283
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Взял статистику по БД:
авторDatabase header page information:
Flags 0
Checksum 12345
Generation 24626070
Page size 16384
ODS version 11.1
Oldest transaction 24580554
Oldest active 24580555
Oldest snapshot 24580555
Next transaction 24582829
Bumped transaction 1
Sequence number 0
Next attachment ID 43227
Implementation ID 16
Shadow count 0
Page buffers 2048
Next header page 0
Database dialect 1
Creation date May 9, 2020 14:22:06
Attributes force write

Variable header data:
Sweep interval: 0
*END*

Force Write включен
может еще что-то нужно посмотреть?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957309
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение.

Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957314
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI

Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи?


Я тоже думаю, что генератор должен работать безусловно. Но что-то мешает. Надеюсь, что мой вопрос увидят люди, разбирающиеся во внутренних процессах сервера.

По поводу непустого значние - восстановление работы с таблицей возникает только после ручного исправления генератора. Т.е. это не ситуация, когда идентификтор уже приходит в записи.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957317
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее всего, без привлечения разработчиков задачу не решить.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957320
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub
KreatorXXI

Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи?


Я тоже думаю, что генератор должен работать безусловно. Но что-то мешает. Надеюсь, что мой вопрос увидят люди, разбирающиеся во внутренних процессах сервера.

По поводу непустого значние - восстановление работы с таблицей возникает только после ручного исправления генератора. Т.е. это не ситуация, когда идентификтор уже приходит в записи.


страница генератора не сбрасывается на диск.
если FW точно включен - то где-то в кешах ос, контроллеров и пр. теряется.

при обрывах такого быть не может, только при ресетах.
хотя, что там было в 2.0, уже не помню.

PS. о. если вместе с серваком стоит еще какая-нибудь джава- то происходило все что угодно, поле отжора всех сокетов, хэндллов или памяти.
миннимум два раза на такое соседство нарывались
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957336
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub,

пробуйте не в боевом режиме, на копии. Добавляете одну запись из своей программы, смотрите результат. И т.д.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957341
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI
delphi_nub,

пробуйте не в боевом режиме, на копии. Добавляете одну запись из своей программы, смотрите результат. И т.д.


Все работает на рабочей БД. Сотни записей добавляются нормально, но в какой-то момент сбоит.
На тестовой БД и в "штучном" запуске такое не ловится - мне не удавалось никак поломать генератор. Думаю, что там максимально все надежно сделано.

А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957348
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubв генераторе записано значение, которое существенно меньше последнего добавленного ключа

Сколько это твоё "существенно"? В штуках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957349
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы.


а что там проверять? ставишь монитор ресурсов и смотришь.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957355
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubСам триггер:

При таком триггере получить задвоение - обычное дело если кто-то вставляет записи с
готовым ID. Найти его не так уж и трудно, достаточно добавить протоколирование таких
случаев в ELSE ветку, вопрос только в твоей квалификации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957360
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

1. В штуках? Ну несколько сотен разница может быть - я не вычисляю разницу, но она есть
2. Еще раз повторю - для сотен строк все работает отлично.

Чтобы не ходить по кругу - вставка в эту таблицу протокола происходит из хранимой процедуры, которая вызывается из других тригеров других таблицы.
В самой хранимой процедуре только одна ветка, где и происходит INSERT

Т.е. нет "нескольких" источников данных для этой таблицы
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957361
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastor
delphi_nub

А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы.


а что там проверять? ставишь монитор ресурсов и смотришь.


У нас есть отдельная группа сис. админов, которые занимаются системными вопросами (серверов чуть больше 20)
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957367
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubТ.е. нет "нескольких" источников данных для этой таблицы

Это ты так думаешь.

Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и
соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например,
доступ к БД по сети или расширение .gdb у файла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957382
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

delphi_nubТ.е. нет "нескольких" источников данных для этой таблицы

Это ты так думаешь.

Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и
соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например,
доступ к БД по сети или расширение .gdb у файла.


1. Ошибка возникает при записи в разные таблицы со стороны клиентских систем. Ошибка валится только в таблице логирования.
2. Я руками меняю генератор
3. Со стороны клиентских систем перестают лезть ошибки
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957386
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и
соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например,
доступ к БД по сети или расширение .gdb у файла.


Генераторы, транзакции - не вижу связи.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957389
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorне вижу связи.

Попробуй включить логику: при коммите грязные страницы из кэша сбрасываются на диск,
включая страницу генераторов. Генераторы работают исключительно на увеличение. Чтобы
возникла описанная ситуация, вставленные данные должны записаться на диск, а генератор -
нет. В каком случае это возможно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957397
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

ну, связь можно увидеть, например, при FW=OFF.
Вставляется запись, меняется генератор
делается коммит
тут происходит ресет.
С учетом FW=OFF вполне может быть запись успела записаться, Коммит успел записаться, а страница генераторов - нет.
(хотя у автора fw=on).

Скорее всего, где-то в коде есть обращения к генератору вне триггеров, причем, с вызовами типа gen_id(GEN_DB_LOG_ID, 0).
Иначе у автора ресеты там постоянно происходят.
Видимо, авторы софта не расчитывали на то, что у пользователя их системы за 12-13 лет интенсивность работы с данными вырастет до 5млн транзакций в сутки.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957405
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

pastorне вижу связи.

Попробуй включить логику: при коммите грязные страницы из кэша сбрасываются на диск,
включая страницу генераторов. Генераторы работают исключительно на увеличение. Чтобы
возникла описанная ситуация, вставленные данные должны записаться на диск, а генератор -
нет. В каком случае это возможно?


При коммите какой именно транзакции из 100500 сбрасывается страница генераторов?

Порядок записи страниц зависит не только от сервера. Еще и от ос/контроллера.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957409
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов?

Вариант 1: при коммите любой транзакции.
Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение
генератора для вставки записи в таблицу.

Опять включаем логику: есть ли разница между этими вариантами?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957415
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов?

Вариант 1: при коммите любой транзакции.
Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение
генератора для вставки записи в таблицу.

Опять включаем логику: есть ли разница между этими вариантами?..


все 10500 в любом порядке.
а кеш ос/контроллера посчитал, что этот блок пипец какой востребованный, раз к нему столько обращаются и на носитель скидывать пока не стал. а там и хендлы кончились.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957416
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую добавить информации, чтобы не было хождения по кругу с одними и теми же вопросами.

Чаще всего слетает генератор у таблицы, которая отвечает за журналирование изменений в БД.
Запись в таблицу только из одной хранимой процедуры, которая вызывается из тригеров на вставку/обновление/удаление для 50 разных таблиц.
Из программного кода эта таблица только читается - никаких изменений в эту таблицу не проводится.

Несколько раз такое возникло и в других таблицах (генераторы тоже "отставали"), где запись происходит из клиентского интерфейса. Отношение возникновения ситуаций в дургих таблицах к протоколу, где-то 1к50. Но это по причине того, что в протоколе фиксируется значительно больше строк.

Везде генераторы работают по "классике" - в BEFORE INSERT. Т.е. теоретически значение генератора должно инкрементироваться еще до того, как этот идентификатор "ляжет" в таблицу.

Вопрос Гуру - может ли произойти запись в таблицу без записи изменений в таблице генераторов, если генератор инкрементится в тригере?

БД в одном фале - может ли как-то влиять структура файловой системы? У нас виртуальный сервер?

Может есть какие-то настройки кеша (буфера), которые можно "подергать"?

UPD: еще вопрос. Может ли влиять как-то SWEEP=0 ? У меня "свип" по расписанию каждые 3 часа вызывается, а в самой БД интервал сброшен.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957423
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubПопробую добавить информации
Попробуй ещё раз, в этом раунде у тебя не получилось.

Ты рассказываешь как твоя система работает по твоему мнению. Это не поможет решить
проблему, поскольку система явно работает несколько иначе.

delphi_nubВезде генераторы работают по "классике" - в BEFORE INSERT. Т.е.
теоретически значение генератора должно инкрементироваться еще до того, как этот
идентификатор "ляжет" в таблицу.
Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)".

delphi_nubБД в одном фале

Расширение у этого файла какое?

delphi_nubУ нас виртуальный сервер?

С этим - в битву экстрсенсов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957428
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, про виртуальный сервер я ошибочно знак вопроса поставил.
Расширение FDB


Проверку на пустой ID я убрал, конечно.
Но проверка гипотезы займет какое-то время...
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957433
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, извините, что пишу возможно глупости. Но это от незнания темы и остроты проблемы.
Крайним назначили меня и никого не волнуют проблемы индейцев



Решил посмотреть в лог-файл сервера.

Очень много записей с ошибкой формата:
Clump N at offset NNNNNN

А потом вот такая:
Fatal exception during clumplet dump: Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long

Быстрый гуглинг не привел к результату - не может ли это быть следом из одной и той же проблемы?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957435
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)".

Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :)
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957439
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
Dimitry Sibiryakov
Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)".

Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :)


Только в тригере. Не должно все встать колом, т.к. просто айди записи изменится на более "свежий"
Связок с этой таблицей по внешнему ключу нет, т.е. логика данных не нарушится
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957444
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, ладно.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957451
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)".

Ты хорош глупости-то советовать, не зная подробностей.
Все связи между таблицами могут накрыться, а он потом
восстановить нифига не сможет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957457
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей.

Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957460
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей.

Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого.


Какие вменяемые советы были проигнорированы? Поставить "ELSE", чтобы "поймать", что кто-то пишет свой айди?
Нет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Все делается в тригерах БД.
Еще раз повторю - это протокол изменений БД
Т.е. там фиксируется информация, в какой таблице БД, в какое время, какая запись была добавлена/изменена/удалена
Запись в эту таблицу с клиента не предусмотрена кодом.
Файл БД не расшарен (у нас с этим все очень строго).
Расширение файла (не знаю, на что оно влияет) я вам написал.


В ходе спора про проверку на нул, могли не заметить мой вопрос про протокол сервера.

Посмотрите на него пожалуйста - я через гугл пока не нашел внятного объяснения появления этой ошибки кроме вот этого: http://www.firebirdfaq.org/faq320/

Но там лишь рекоменадция все на UTF8 перевести, а у меня все работает в 1251
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957464
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
Версия 2.0


автор
ODS version 11.1


Разве так бывает?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957467
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде.

Это ты так думаешь.

ъъъъъРазве так бывает?

Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957468
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде.

Это ты так думаешь.

ъъъъъРазве так бывает?

Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может.

Все равно весело.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957470
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
мог ошибиться в версии FB - где посмотреть реальный № версии?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub
могли не заметить мой вопрос про протокол сервера.

Если ты про ошибки из лога, то, как я уже сказал, версия 2.0 их выдавать не может, они появились только в 3.0 и вызываются тем, что из приложения серверу (клиенту) скармливают мусор в DPB/TPB/итд.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957475
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957477
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
Dimitry Sibiryakov,
мог ошибиться в версии FB - где посмотреть реальный № версии?

Например, посмотри свойства серверного процесса.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957479
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
Например, посмотри свойства серверного процесса.


2.1.1.17910
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957480
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert
А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора?


Как это возможно и где это можно искать?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957481
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
2.1.1

Лапа ты моя!
Скорее обновляйся: https://firebirdsql.org/en/firebird-2-1/
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957484
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога.
Это memory corruption в результате сбойного ОЗУ или кривой UDF.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957489
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога.
Это memory corruption в результате сбойного ОЗУ или кривой UDF.


Спасибо
Задам вопрос админам, насколько это вероятный сценарий для наших виртуальных серверов
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957491
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
Dimitry Sibiryakov

Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога.
Это memory corruption в результате сбойного ОЗУ или кривой UDF.


Спасибо
Задам вопрос админам, насколько это вероятный сценарий для наших виртуальных серверов

И как они UDF выпрямят?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957495
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
И как они UDF выпрямят?


UDF не менялись, как я говорил - код не менялся уже несколько лет.

А вот про ОЗУ могут ответить
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957497
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub,

а сервер ты обновить не желаешь? У тебя 2.1 совсем древней сборки.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957498
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub
IBExpert
А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора?


Как это возможно и где это можно искать?


1. SET GENERATOR <генератор> TO <значение>
2. SELECT GEN_ID(<генератор>, <отрицательное_значение>) FROM RDB$DATABASE

Где искать - не знаю.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957504
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут вот еще одна интересная вещь обнаружилась
В ходе "копания" в журналах и записях предыдущих "крайних" специалистов по сопровождению этого имущества, я наткнулся на запись, что совсем недавно в базе был какой-то сбой, что вроде никто не мог зайти в систему, т.к. все валилось на подключении в триггере RDB$TRIGGER7

И этот триггер был "успешно" удален из БД и якобы система заработала.
Ну, выглядит это дико. Это как из машины выкинуть какую-то деталь... Но имею то, что имею


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


Есть какая-то вероятность, что это как-то связано? Не знаю, что это за тригер и на что он влияет - в гугле инфы нет.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957506
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, поставил админам задачу обновиться.
К сожалению, у нас строгое распределение обязанностей и я не имею права устанавливать какое-либо ПО
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957508
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При memory corruption в результате сбойного ОЗУ там полБД
может накрыться, а не только один несчастный генератор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957509
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть какая-то...

БД отресторить имеешь право хоть?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957512
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, если я правильно понял, то бекап/рестор я могу делать и делаю это регулярно согласно протокола.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957513
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рестор-то ты делаешь (себе или на бэкап-сервер или даже рядышком на боевой),
а основную БД на отресторенную заменяешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957517
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
Жесть

Да ладно.
У нас есть клиент, у которого уже несколько лет подряд сервер на "моноблоке" живет, у того моноблока не работает монитор и ucb - порты, работает сетевая карта и кнопка включения, хранятся важные документы в больших объемах, ага... "записку мы каждый год посылаем, руководство решает"...
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957518
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, конечно.
бекапы делаются по расписанию автоматом с выливанием на FTP
а для рестор у меня выделяется время порядка 5 часов, когда я лочу все подключения, делаю бекап актуальной БД, потом делаю рестор в файл рабочей БД и рестартую сервер
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957521
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
я лочу все подключения, делаю бекап актуальной БД

delphi_nub
бекап/рестор я могу делать и делаю это регулярно согласно протокола.

Что, прямо такой протокол - "лочить подключения"?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957526
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

делаю бекап актуальной БД, потом делаю рестор в файл рабочей БД и рестартую сервер


Хорошие грабли, качественные. Рукоятка как раз под ети... самые.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957531
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал "ковырять" эти системные триггера

В списке системных триггеров (в IBExpert включил соответствующую опцию) я не нашел триггера RDB$TRIGGER7 и RDB$TRIGGER_7

Но эти триггера я нашел в таблице RDB$TRIGGERS

Это единственные системные триггера, у которых есть данные в поле исходных текстов

RDB$TRIGGER_7:
Код: sql
1.
2.
3.
BEGIN 
  CONNECTION_ID = 0; 
END



RDB$TRIGGER7:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
AS
BEGIN
  INSERT INTO IBE$STATE(IBE$ATTID, IBE$SRVID, IBE$ADDR, IBE$PROC)
  SELECT
       MON$ATTACHMENT_ID
      ,MON$SERVER_PID
      ,MON$REMOTE_ADDRESS
      ,MON$REMOTE_PROCESS
  FROM MON$ATTACHMENTS
  WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION
  ;
END



Первый код мне кажется каким-то бессмысленным бредом.
А второй похож на вполне реальный триггер регистрации чего-то там в системных таблицах

Но самое интересное в поле RDB$TRIGGER_BLR
Для триггера без "_" (RDB$TRIGGER7) откомпилированный код выглядит очень похожим на тот же, что и в исходных текстах. Там встречаются такие же имена таблиц и полей

А вот для триггера с "_" (RDB$TRIGGER_7) в этом поле очень много текста откомпилированного кода, который совсем не похож на 3 строчки исходного текста
И вот там встречаются упоминания этих самых генераторов.

У меня сейчас возникли неприятные подозрения, что кто-то в БД внес какой-то зловредный код с таймером, который действительно записывает в генератор уменьшенное значение (как предположил IBExpert )

Вопрос: может кто-то подсказать, что правильно должно быть в этом самом триггер под № 7
И есть ли возможность декомпилировать код из RDB$TRIGGER_BLR ?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957534
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О, началась операция на сердце с консультацией по телефону...
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957541
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

В списке системных триггеров (в IBExpert включил соответствующую опцию) я не нашел триггера RDB$TRIGGER7 и RDB$TRIGGER_7

Но эти триггера я нашел в таблице RDB$TRIGGERS


Значит, кто-то все же чудил в базе. Это не системные триггеры. Системные триггеры имеют RDB$SYSTEM_FLAG = 1, и их точно было бы видно в ветке системных триггеров.
Кто-то создал эти триггеры намеренно и замаскировал под системные, ИМХО.

Что у RDB$TRIGGER_7 живет в полях RDB$RELATION_NAME, RDB$TRIGGER_TYPE и RDB$TRIGGER_INACTIVE, какие значения?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957544
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub> делаю рестор в файл рабочей БД и рестартую сервер

Ну ты гигант, конечно. Как раз про для таких
в FAQ жирно выделено, что так делать нельзя.

> Начал "ковырять" эти системные триггера

То, что IBExpert подсказал - проверь, конечно.
Но вообще, не там и не то ковыряешь.
Сделай выгрузку метаданных и проверь,
есть ли там эти самые RDB$TRIGGER-а.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957549
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

Но вообще, не там и не то ковыряешь.


Не, все он правильно ковыряет, судя по всему. Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел.
В этом триггере что-то делается, но исходный текст триггера заменили на другой. В FB 2.1 с этим проблем нет.
Осталось выяснить, на какую таблицу этот триггер повешен и на какое действие.
Тогда можно будет попытаться спровоцировать его на срабатывание и посмотреть на результат.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957553
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел.

дембельский аккорд?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nubUDF не менялись, как я говорил - код не менялся уже несколько лет.

Это, к сожалению, не означает, что они не гадят в память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957558
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, похоже на то
Насколько я понял, они лезут в одну из таблиц, замаскированную под рабочую таблицу с данными, а затем начинают "чудить".
Считывают MAX по айдишнику и GEN_ID(__, 0)
Если MAX меньше или равен значению из генератора (на меньше, наверное, проверяют, чтобы не попасть в "процедуру", когда генератор уже инкрементирован, но идентифкатор еще не записался в таблицу), то они вызывают GEN_ID(___, -2000*RAND())

И такой код вызывается на нескольких разных таблицах. Почему чаще всего срабатывает на "протоколе" - пока не понимаю. Возможно, там какая-то формула, которая вычисляет, какой код когда вызывать.
Но чтобы это понять, нужно детальней "курить" BLR :)

RDB$RELATION_NAME - NULL
RDB$TRIGGER_TYPE - 8192
RDB$TRIGGER_INACTIVE - 1

Активирован, но таблицы нет... Возможно, используется какая-то недокументированная возможность?
Чисто теоретически, я могу принудительно вызвать выполнение триггера?
Есть ли где-то в системных таблицах "связь", которую можно увидеть в разделе зависимостей?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957560
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

RDB$TRIGGER_TYPE - 8192
RDB$TRIGGER_INACTIVE - 1

Активирован, но таблицы нет... Возможно, используется какая-то недокументированная возможность?
Чисто теоретически, я могу принудительно вызвать выполнение триггера?
Есть ли где-то в системных таблицах "связь", которую можно увидеть в разделе зависимостей?


Это триггер на коннект (ON CONNECT). Я и забыл, что в 2.1 они уже были. Таблица ему не нужна, и срабатывает он при каждом коннекте. Но он сейчас деактивирован.
Срабатывание вызвать легко: активировать его, и он будет срабатывать при каждом коннекте.
Можно сделать копию базы и поиграться с ней.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957561
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
IBExpert
Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел.

дембельский аккорд?


К бабке не ходи. Судя по следующему посту ТС - грохнуть его не дожидаясь перитонитов.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957563
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и если не жалко, кинь сюда содержимое закладки As BLR из Blob Viewer для этого триггера. Может, кто что интересное и увидит.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957564
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ха, не факт что это единственная пасхалка, эту отключили осталась другая/другие
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957568
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert, ну, имя триггера уже засветил. Значит, авторы уже сокрее всего его узнают. Шифроваться нет смысла.
Сохранил в текстовом файле. Вложение к файлу

Теоретически, это может быть не единственной "пасхалкой", как предположил Дегтярев Евгений

Похоже, пора известить СБ
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957571
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...всем присутствующим зайти в первый отдел для освежения подписки.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957575
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я выше сказал "жесть", то недооценил пинзец происходящего.

delphi_nub> Похоже, пора известить СБ

Если название конторы светить нельзя - озвучь отрасль деятельности, плиз.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957578
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub> И такой код вызывается на нескольких разных таблицах.

Да, и таки сделай выгрузку метаданных и проверь её
"глазами", всю - там таких чудес ещё может быть много.


P.S. А предыдущего "сопровожденца" что, обидели?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957583
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, похоже, что это разрабы обиделись...
но это отдельная история. не хочу перемывать кости и ковыряться в гадостях...
мне сейчас нужно "правильно" решить проблему
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957597
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

мне сейчас нужно "правильно" решить проблему


Фигово то, что в таких триггерах может и что-то полезное делаться...
Я бы попробовал создать базу из скрипта для начала.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957605
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert> Я бы попробовал создать базу из скрипта для начала.

Да его надо сначала выгрузить и просмотреть.
А потом уже делать выводы/действия.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957610
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

Да его надо сначала выгрузить и просмотреть.
А потом уже делать выводы/действия.


И чего ты там глазами увидишь, если все сюрпризы в BLR, а в коде - какой-нибудь безобидный запрос?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957615
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
ъъъъъ
delphi_nub,
...
- посмотреть в процедурах/триггерах работу с генераторами.
...


...триггер в 99.99% случаев работает правильно, но раз в несколько суток может выбирать ошибку. Руками обновляю генератор и все опять работает в штатном режиме.


Выполни с помощью IBExpert "поиск в метаданных", указав имя генератора.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957617
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert> И чего ты там глазами увидишь, если все сюрпризы в BLR

А, ну если они совсем ухищренные, то да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957626
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, именно, что очень "засекретили"
спрятали под системный триггер, при этом SRC не сходится с BLR
я как смог BLR "прочитал" и понял, какие таблицы задействованы в "работе" и какие "поля"

смущеает, что он деактивирован.
подозреваю, что где-то в недрах серверов есть маленькая программка или в одной нормальной программке есть "пускатель", который в какие-то моменты включает триггер, а потом выключает.

или, допускаю, что кроме этого триггера есть еще какой-то код, который тоже лезет портит гереатор случайным образом

буду пробовать вытаскивать все BLR (т.к. теперь доверия исходникам нет нигде) из БД и там искать упоминание генератора

всем большое спасибо.
проблему я, конечно, не решил, но благодаря "мозговому штурму" вышел на след... дальше уже придется самому, ну или СБ найдет авторов и сможет выяснить подробности
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957634
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub> буду пробовать вытаскивать все BLR
delphi_nub> (т.к. теперь доверия исходникам нет нигде)

Процесс можно упростить/ускорить, пересоздав БД
из скрипта и сравнив BLR-ы. DB-level триггеров нет?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957635
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphi_nub
смущеает, что он деактивирован.

Вы же его и деактивировали:

delphi_nub
все валилось на подключении в триггере RDB$TRIGGER7

И этот триггер был "успешно" удален из БД и якобы система заработала.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957641
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, возможно.
Для меня любой процесс с FB сложный, т.к. я с этой СУБД знаком пару месяцев :(
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957645
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет там ничего сложного.
Разве что в других СУБД BLR не увидишь. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957662
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

проблему я, конечно, не решил


Ну этот-то триггер можно и прибить, он все равно деактивирован. Предварительно сделав бэкап метаданных на всякий случай.
А дальше смотреть, что из этого получилось, и параллельно искать другие сюрпризы.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957692
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

P.S. А предыдущего "сопровожденца" что, обидели?


Не обязательно так уж обидели. Не подписали договор о сопровождении разработки, вот и решил, что когда начнёт глючить, позовут и дадут денешку. Почему так думаю - сделано с умом и не портит данные, а работать мешает. Прецедент в личной практике - сделали мы в 89-93 году АСУП экскаваторного производства Ижорского завода. Трудозатрат вложили немеряно, и не только в софт. 17 цехов по два километра длиной, там для одной добычи сетевух, тянущих без репитеров внутри цеха, потратили на загранкомандировки и банкеты... А уж между цехами, модемы через местную телефонную линию на искрящих шаговых искателях... Не, заплатили нормально, но потом - а дальше без вас обойдёмся. Руки чесались вообще-то заложить мину-другую такого типа, но сдержались. И прикинь, в 2006м, когда уже ни ДОСа, ни BTRieve и вообще вокруг сплошное телевидение интернет, звонят мне по рабочему! откуда узнали-то, команда наша уже 10 лет как разбежалась, и просят чёта-там подмандить Прифигел я по полной :) Исходники-то уже давно потеряны, смысл их хранить-то. Такшта ускорить обращение за саппортом - вполне разумный и даже полезный для обоих сторон шаг

Да, и этта... Респект ТС. Человек по инструменту не в теме, но о чём думать и куда копать въехал с полоборота. Системное мышление. Все бы такие "нубасики" были :)
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957710
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПМ> о чём думать и куда копать въехал с полоборота.

Теперь представь, что у него эти проблемы с генератором
и clumpet error-ами на Oracle вылезли бы. И полез бы он
по форумам с вопросами шастать - 50% ответов было бы
"плати нам баблосы, посмотрим", ещё 50% - просто с
г***м смешали бы в духе "куда ты лезешь нубас!"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957715
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При адекватных вопросах поиск ответа упёрся бы только в деньги. Потому как без денег DocID и описание проблемы - не очень-то помогают.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957758
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, где генераторы откручиваются - ладно, нашли. А вот ошибки в структуре блоков это,
выходит, совсем другая история (которая тоже может вылезти боком).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957764
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, этот тригер я просто переименую
Заодно послежу, не появится ли он снова. Если появится, значит где-то есть "помощник"
Вырузил сейчас все BLR для тригеров и хранимок - поищу по тексту

Нашел быстрое решение - сделать новые генераторы для таблиц из этой "пасхалки".
"Пасхалки" будут и далее трудиться над старыми генераторами, а таблички будут работать с новыми.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957768
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub> Нашел быстрое решение - сделать новые генераторы для таблиц из этой "пасхалки".

Методом тыка не чинят: можно починить, можно не починить, а можно и доломать.
К примеру, если где-то используется клиентская генерация ключей - или всё встанет,
или конкретно для этой сущности и связанных разъедутся данные и собирай их потом...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957773
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, клиентских генераций нет. айдишник записи не используется для связей с другими таблицами.
но, соглашусь, что лучше не спешить с этим.

можно поискать по скомпилированным текстам, где используется данный генератор, чтобы "подстраховаться"

в исходниках делфи GEN_ID нигде не используется - разработчики всю бизнес-логику заложили в хранимках
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957782
delphi_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выгрузил все BLR и нашел еще одну "пасхалку"
Была заложена в процедуру, которая вызывалась при каждом логине любого пользователя

При этом, исходный код хранимки не затерт, а содержит только "чистый" код - без пасхалки. А в откомпилированном виде, после основного кода идет дополнительный. Который даже хитрей того, что я нашел в триггерах.

Процедуру перекомпилировал. А BLR оставил для истории.

С этим типом "сюрприза" все решено.

Но я вспоминаю еще одну проблему, которую костылями решал пару недель назад - подозреваю, что есть еще варианты "сюрпризов".

Теперь понимаю принцип поиска - будет легче

Главное, что это не какие-то системные проблемы, которые не понятно как решать

Всем еще раз спасибо
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957789
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создатели "пасхалок" - из местных, небось. Ждут визита СБ.
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957818
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_nub

Всем еще раз спасибо

Держи в курсе событий, интересно же.)
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39957839
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris> Держи в курсе событий, интересно же.)

+1

Надеюсь, все сёстры получат по серьге серьгам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39958048
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я правильно понял, что FB позволяет хранить исходники одной ХП, в то время как работать будет другая?.. Это нормально вообще?
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39958053
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.05.2020 15:38, alekcvp пишет:
>
> А я правильно понял, что FB позволяет хранить исходники одной ХП, в то время как работать будет другая?..
>

такой финт можно было провернуть только в очень древних версиях путём прямого редактирования системных таблиц.
в современных версиях невозможно редактировать системные таблицы напрямую.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39958054
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

именно текст ХП/триггеров/функций и сейчас можно редактировать. По крайней мере сбрасывать в NULL точно. Я помню эту штуку специально назад правили для любителей удалять исходники
...
Рейтинг: 0 / 0
GEN_ID дает повторяющееся значение
    #39958061
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Мимопроходящий,

именно текст ХП/триггеров/функций и сейчас можно редактировать. По крайней мере сбрасывать в NULL точно. Я помню эту штуку специально назад правили для любителей удалять исходники
только в NULL.
менять текст - фиг.
...
Рейтинг: 0 / 0
108 сообщений из 108, показаны все 5 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / GEN_ID дает повторяющееся значение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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