|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Всем привет Волей судеб вынужден на работе поддерживать работоспособность старой программы (вообще-то их порядка 10), написанной на Delphi с использованием БД Firebird. Я в обоих системах имею очень поверхностные знания. Недавно столкнулся с новой проблемой. При массовых вставках в некоторые таблицы стали выдаваться ошибки на ограничении по первичному ключу. В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение. Найти разработчиков не удалось (уволились и старые контакты уже не актуальны) - приходится самому разбираться. Подключений к БД много. Работает с БД не один клиент (порядка 10 разных программ) и есть системы, которые работают 24/7 - фиксируют в журнале разные операции, которые происходят постоянно. Т.е. определить какие клиенты и чьи запросы приводят к такой ситуации - не могу. Вручную я конечно генератор переопределяю и все опять запускается, но мне такое решение не нравится Очень надеюсь, что знатоки на форуме смогут мне подсказать - куда копать... Заранее всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 09:38 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub, - проверить, не сломана ли структура базы; - посмотреть в процедурах/триггерах работу с генераторами. Наверное, всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 09:57 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub, а триггер есть при добавлении в таблицу, в котором срабатывает генератор? Или как используется gen_id()? Заодно и версию FB озвучьте. Может даже и скрипт добавления данных в таблицу приведёте? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 09:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
KreatorXXI delphi_nub, а триггер есть при добавлении в таблицу, в котором срабатывает генератор? Или как используется gen_id()? Заодно и версию FB озвучьте. Может даже и скрипт добавления данных в таблицу приведёте? Триггер есть. И все работало до недавнего времени Версия 2.0 - знаю, что устаревшая, но миграцию боюсь выполнять, т.к. если что-то сломается я сам назад не откачу и поломки не сделаю (собственник нанял аутсерсеров - они разрабатывают новую систему, а эту мне нужно просто поддерживать, чтобы дожили до внедрения новой) Сам триггер: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:18 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ delphi_nub, - проверить, не сломана ли структура базы; - посмотреть в процедурах/триггерах работу с генераторами. Наверное, всё. Каждую неделю делаю бекап/ресторе (это прописано в протоколе обслуживания) - вычищаю, если возникли какие-то артефакты. Как еще проверить структуру? Ну и триггер в 99.99% случаев работает правильно, но раз в несколько суток может выбирать ошибку. Руками обновляю генератор и все опять работает в штатном режиме. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Всем привет Волей судеб вынужден на работе поддерживать работоспособность старой программы (вообще-то их порядка 10), написанной на Delphi с использованием БД Firebird. Я в обоих системах имею очень поверхностные знания. Недавно столкнулся с новой проблемой. При массовых вставках в некоторые таблицы стали выдаваться ошибки на ограничении по первичному ключу. В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение. Найти разработчиков не удалось (уволились и старые контакты уже не актуальны) - приходится самому разбираться. Подключений к БД много. Работает с БД не один клиент (порядка 10 разных программ) и есть системы, которые работают 24/7 - фиксируют в журнале разные операции, которые происходят постоянно. Т.е. определить какие клиенты и чьи запросы приводят к такой ситуации - не могу. Вручную я конечно генератор переопределяю и все опять запускается, но мне такое решение не нравится Очень надеюсь, что знатоки на форуме смогут мне подсказать - куда копать... Заранее всем спасибо. Forced write включено? Были записи о падении службы сервера? Внеплановые перезагрузки? Довольно часто встречается при регулярном нажатии кнопки ресет на сервере. Иногда умирают и индексы PK/FK. Мы лечим переносом данных в чистую эталонную БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:29 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastor Forced write включено? Были записи о падении службы сервера? Внеплановые перезагрузки? Довольно часто встречается при регулярном нажатии кнопки ресет на сервере. Иногда умирают и индексы PK/FK. Мы лечим переносом данных в чистую эталонную БД. Сейчас погуглю, что это за Forced write Внеплановые перезагрузки возможно бывали (не могу сейчас точно определить) Но точно бывали принудительные "обрывы" подключений путем удаления всех клиентских процессов - это админы зачем-то сделали. Это могло повлиять? Можно подробней про перенос данных в чистую БД? Т.е. это не ресторе/бекап, а какой-то отдельный процесс? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:41 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub, Извлекаешь метаданные в скрипт, создаешь пустую БД под новым именем. Потом из старой БД переливаешь данные в новую. Через dump/pump... База большая? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:49 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
DarkMaster, а чем restore/backup не подходит? Он же вроде делает также База порядка 33 Гб. Восстановление из архива идет порядка 4 часов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:52 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Взял статистику по БД: автор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 включен может еще что-то нужно посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 10:57 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub В ходе анализа выяснилось, что по какой-то причине, в генераторе записано значение, которое существенно меньше последнего добавленного ключа и при новой вставке, естественно, появляется задвоение. Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 11:23 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
KreatorXXI Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи? Я тоже думаю, что генератор должен работать безусловно. Но что-то мешает. Надеюсь, что мой вопрос увидят люди, разбирающиеся во внутренних процессах сервера. По поводу непустого значние - восстановление работы с таблицей возникает только после ручного исправления генератора. Т.е. это не ситуация, когда идентификтор уже приходит в записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 11:31 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Скорее всего, без привлечения разработчиков задачу не решить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 11:32 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub KreatorXXI Надо проверить вот этот момент. Значение генератора не может быть меньше, если правильно срабатывает Ваш триггер. Даже если вставка не прошла, значение генератора всё равно изменяется (вроде так, гуру подправят). Может быть уже ID не нулевой при вставке записи? Я тоже думаю, что генератор должен работать безусловно. Но что-то мешает. Надеюсь, что мой вопрос увидят люди, разбирающиеся во внутренних процессах сервера. По поводу непустого значние - восстановление работы с таблицей возникает только после ручного исправления генератора. Т.е. это не ситуация, когда идентификтор уже приходит в записи. страница генератора не сбрасывается на диск. если FW точно включен - то где-то в кешах ос, контроллеров и пр. теряется. при обрывах такого быть не может, только при ресетах. хотя, что там было в 2.0, уже не помню. PS. о. если вместе с серваком стоит еще какая-нибудь джава- то происходило все что угодно, поле отжора всех сокетов, хэндллов или памяти. миннимум два раза на такое соседство нарывались ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 11:35 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub, пробуйте не в боевом режиме, на копии. Добавляете одну запись из своей программы, смотрите результат. И т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:04 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
KreatorXXI delphi_nub, пробуйте не в боевом режиме, на копии. Добавляете одну запись из своей программы, смотрите результат. И т.д. Все работает на рабочей БД. Сотни записей добавляются нормально, но в какой-то момент сбоит. На тестовой БД и в "штучном" запуске такое не ловится - мне не удавалось никак поломать генератор. Думаю, что там максимально все надежно сделано. А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:11 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubв генераторе записано значение, которое существенно меньше последнего добавленного ключа Сколько это твоё "существенно"? В штуках. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:15 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы. а что там проверять? ставишь монитор ресурсов и смотришь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:16 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubСам триггер: При таком триггере получить задвоение - обычное дело если кто-то вставляет записи с готовым ID. Найти его не так уж и трудно, достаточно добавить протоколирование таких случаев в ELSE ветку, вопрос только в твоей квалификации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, 1. В штуках? Ну несколько сотен разница может быть - я не вычисляю разницу, но она есть 2. Еще раз повторю - для сотен строк все работает отлично. Чтобы не ходить по кругу - вставка в эту таблицу протокола происходит из хранимой процедуры, которая вызывается из других тригеров других таблицы. В самой хранимой процедуре только одна ветка, где и происходит INSERT Т.е. нет "нескольких" источников данных для этой таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:32 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastor delphi_nub А вот идею pastor с системными накладками нужно проверять - уже направил админам запросы. а что там проверять? ставишь монитор ресурсов и смотришь. У нас есть отдельная группа сис. админов, которые занимаются системными вопросами (серверов чуть больше 20) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:34 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubТ.е. нет "нескольких" источников данных для этой таблицы Это ты так думаешь. Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например, доступ к БД по сети или расширение .gdb у файла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 12:42 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov delphi_nubТ.е. нет "нескольких" источников данных для этой таблицы Это ты так думаешь. Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например, доступ к БД по сети или расширение .gdb у файла. 1. Ошибка возникает при записи в разные таблицы со стороны клиентских систем. Ошибка валится только в таблице логирования. 2. Я руками меняю генератор 3. Со стороны клиентских систем перестают лезть ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:22 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Если бы страница генераторов не записалась на диск при резком рестарте или крэше, то и соответствующая транзакция бы обломилась и была откачена. Тут что-то другое. Например, доступ к БД по сети или расширение .gdb у файла. Генераторы, транзакции - не вижу связи. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:26 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastorне вижу связи. Попробуй включить логику: при коммите грязные страницы из кэша сбрасываются на диск, включая страницу генераторов. Генераторы работают исключительно на увеличение. Чтобы возникла описанная ситуация, вставленные данные должны записаться на диск, а генератор - нет. В каком случае это возможно? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:31 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastor, ну, связь можно увидеть, например, при FW=OFF. Вставляется запись, меняется генератор делается коммит тут происходит ресет. С учетом FW=OFF вполне может быть запись успела записаться, Коммит успел записаться, а страница генераторов - нет. (хотя у автора fw=on). Скорее всего, где-то в коде есть обращения к генератору вне триггеров, причем, с вызовами типа gen_id(GEN_DB_LOG_ID, 0). Иначе у автора ресеты там постоянно происходят. Видимо, авторы софта не расчитывали на то, что у пользователя их системы за 12-13 лет интенсивность работы с данными вырастет до 5млн транзакций в сутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:37 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov pastorне вижу связи. Попробуй включить логику: при коммите грязные страницы из кэша сбрасываются на диск, включая страницу генераторов. Генераторы работают исключительно на увеличение. Чтобы возникла описанная ситуация, вставленные данные должны записаться на диск, а генератор - нет. В каком случае это возможно? При коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Порядок записи страниц зависит не только от сервера. Еще и от ос/контроллера. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:45 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Вариант 1: при коммите любой транзакции. Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение генератора для вставки записи в таблицу. Опять включаем логику: есть ли разница между этими вариантами?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:52 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Вариант 1: при коммите любой транзакции. Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение генератора для вставки записи в таблицу. Опять включаем логику: есть ли разница между этими вариантами?.. все 10500 в любом порядке. а кеш ос/контроллера посчитал, что этот блок пипец какой востребованный, раз к нему столько обращаются и на носитель скидывать пока не стал. а там и хендлы кончились. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:59 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Попробую добавить информации, чтобы не было хождения по кругу с одними и теми же вопросами. Чаще всего слетает генератор у таблицы, которая отвечает за журналирование изменений в БД. Запись в таблицу только из одной хранимой процедуры, которая вызывается из тригеров на вставку/обновление/удаление для 50 разных таблиц. Из программного кода эта таблица только читается - никаких изменений в эту таблицу не проводится. Несколько раз такое возникло и в других таблицах (генераторы тоже "отставали"), где запись происходит из клиентского интерфейса. Отношение возникновения ситуаций в дургих таблицах к протоколу, где-то 1к50. Но это по причине того, что в протоколе фиксируется значительно больше строк. Везде генераторы работают по "классике" - в BEFORE INSERT. Т.е. теоретически значение генератора должно инкрементироваться еще до того, как этот идентификатор "ляжет" в таблицу. Вопрос Гуру - может ли произойти запись в таблицу без записи изменений в таблице генераторов, если генератор инкрементится в тригере? БД в одном фале - может ли как-то влиять структура файловой системы? У нас виртуальный сервер? Может есть какие-то настройки кеша (буфера), которые можно "подергать"? UPD: еще вопрос. Может ли влиять как-то SWEEP=0 ? У меня "свип" по расписанию каждые 3 часа вызывается, а в самой БД интервал сброшен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:01 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubПопробую добавить информации Попробуй ещё раз, в этом раунде у тебя не получилось. Ты рассказываешь как твоя система работает по твоему мнению. Это не поможет решить проблему, поскольку система явно работает несколько иначе. delphi_nubВезде генераторы работают по "классике" - в BEFORE INSERT. Т.е. теоретически значение генератора должно инкрементироваться еще до того, как этот идентификатор "ляжет" в таблицу. Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". delphi_nubБД в одном фале Расширение у этого файла какое? delphi_nubУ нас виртуальный сервер? С этим - в битву экстрсенсов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, про виртуальный сервер я ошибочно знак вопроса поставил. Расширение FDB Проверку на пустой ID я убрал, конечно. Но проверка гипотезы займет какое-то время... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:14 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Коллеги, извините, что пишу возможно глупости. Но это от незнания темы и остроты проблемы. Крайним назначили меня и никого не волнуют проблемы индейцев Решил посмотреть в лог-файл сервера. Очень много записей с ошибкой формата: Clump N at offset NNNNNN А потом вот такая: Fatal exception during clumplet dump: Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long Быстрый гуглинг не привел к результату - не может ли это быть следом из одной и той же проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:19 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ Dimitry Sibiryakov Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :) Только в тригере. Не должно все встать колом, т.к. просто айди записи изменится на более "свежий" Связок с этой таблицей по внешнему ключу нет, т.е. логика данных не нарушится ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:24 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Ну, ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:28 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
DS> Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Ты хорош глупости-то советовать, не зная подробностей. Все связи между таблицами могут накрыться, а он потом восстановить нифига не сможет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:39 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей. Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:44 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей. Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого. Какие вменяемые советы были проигнорированы? Поставить "ELSE", чтобы "поймать", что кто-то пишет свой айди? Нет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Все делается в тригерах БД. Еще раз повторю - это протокол изменений БД Т.е. там фиксируется информация, в какой таблице БД, в какое время, какая запись была добавлена/изменена/удалена Запись в эту таблицу с клиента не предусмотрена кодом. Файл БД не расшарен (у нас с этим все очень строго). Расширение файла (не знаю, на что оно влияет) я вам написал. В ходе спора про проверку на нул, могли не заметить мой вопрос про протокол сервера. Посмотрите на него пожалуйста - я через гугл пока не нашел внятного объяснения появления этой ошибки кроме вот этого: http://www.firebirdfaq.org/faq320/ Но там лишь рекоменадция все на UTF8 перевести, а у меня все работает в 1251 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:54 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Версия 2.0 автор ODS version 11.1 Разве так бывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Это ты так думаешь. ъъъъъРазве так бывает? Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:02 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Это ты так думаешь. ъъъъъРазве так бывает? Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может. Все равно весело. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:03 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, мог ошибиться в версии FB - где посмотреть реальный № версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:04 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub могли не заметить мой вопрос про протокол сервера. Если ты про ошибки из лога, то, как я уже сказал, версия 2.0 их выдавать не может, они появились только в 3.0 и вызываются тем, что из приложения серверу (клиенту) скармливают мусор в DPB/TPB/итд. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:06 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Dimitry Sibiryakov, мог ошибиться в версии FB - где посмотреть реальный № версии? Например, посмотри свойства серверного процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ Например, посмотри свойства серверного процесса. 2.1.1.17910 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:14 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора? Как это возможно и где это можно искать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:15 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:15 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога. Это memory corruption в результате сбойного ОЗУ или кривой UDF. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:19 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога. Это memory corruption в результате сбойного ОЗУ или кривой UDF. Спасибо Задам вопрос админам, насколько это вероятный сценарий для наших виртуальных серверов ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:22 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Dimitry Sibiryakov Впрочем, есть один сценарий, в который укладывается и откат генераторов, и ошибки из лога. Это memory corruption в результате сбойного ОЗУ или кривой UDF. Спасибо Задам вопрос админам, насколько это вероятный сценарий для наших виртуальных серверов И как они UDF выпрямят? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:24 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ И как они UDF выпрямят? UDF не менялись, как я говорил - код не менялся уже несколько лет. А вот про ОЗУ могут ответить ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:28 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub, а сервер ты обновить не желаешь? У тебя 2.1 совсем древней сборки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:30 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub IBExpert А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора? Как это возможно и где это можно искать? 1. SET GENERATOR <генератор> TO <значение> 2. SELECT GEN_ID(<генератор>, <отрицательное_значение>) FROM RDB$DATABASE Где искать - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:30 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Тут вот еще одна интересная вещь обнаружилась В ходе "копания" в журналах и записях предыдущих "крайних" специалистов по сопровождению этого имущества, я наткнулся на запись, что совсем недавно в базе был какой-то сбой, что вроде никто не мог зайти в систему, т.к. все валилось на подключении в триггере RDB$TRIGGER7 И этот триггер был "успешно" удален из БД и якобы система заработала. Ну, выглядит это дико. Это как из машины выкинуть какую-то деталь... Но имею то, что имею Насколько я понимаю, это системный триггер и восстановить его из бекапов рабочей БД не получится. Есть какая-то вероятность, что это как-то связано? Не знаю, что это за тригер и на что он влияет - в гугле инфы нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:33 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ, поставил админам задачу обновиться. К сожалению, у нас строгое распределение обязанностей и я не имею права устанавливать какое-либо ПО ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:35 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
При memory corruption в результате сбойного ОЗУ там полБД может накрыться, а не только один несчастный генератор. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:38 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Жесть какая-то... БД отресторить имеешь право хоть? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:38 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, если я правильно понял, то бекап/рестор я могу делать и делаю это регулярно согласно протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:40 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Рестор-то ты делаешь (себе или на бэкап-сервер или даже рядышком на боевой), а основную БД на отресторенную заменяешь? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:42 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Жесть Да ладно. У нас есть клиент, у которого уже несколько лет подряд сервер на "моноблоке" живет, у того моноблока не работает монитор и ucb - порты, работает сетевая карта и кнопка включения, хранятся важные документы в больших объемах, ага... "записку мы каждый год посылаем, руководство решает"... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:46 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, конечно. бекапы делаются по расписанию автоматом с выливанием на FTP а для рестор у меня выделяется время порядка 5 часов, когда я лочу все подключения, делаю бекап актуальной БД, потом делаю рестор в файл рабочей БД и рестартую сервер ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:47 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub я лочу все подключения, делаю бекап актуальной БД delphi_nub бекап/рестор я могу делать и делаю это регулярно согласно протокола. Что, прямо такой протокол - "лочить подключения"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:49 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub делаю бекап актуальной БД, потом делаю рестор в файл рабочей БД и рестартую сервер Хорошие грабли, качественные. Рукоятка как раз под ети... самые. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:53 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Начал "ковырять" эти системные триггера В списке системных триггеров (в IBExpert включил соответствующую опцию) я не нашел триггера RDB$TRIGGER7 и RDB$TRIGGER_7 Но эти триггера я нашел в таблице RDB$TRIGGERS Это единственные системные триггера, у которых есть данные в поле исходных текстов RDB$TRIGGER_7: Код: sql 1. 2. 3.
RDB$TRIGGER7: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Первый код мне кажется каким-то бессмысленным бредом. А второй похож на вполне реальный триггер регистрации чего-то там в системных таблицах Но самое интересное в поле RDB$TRIGGER_BLR Для триггера без "_" (RDB$TRIGGER7) откомпилированный код выглядит очень похожим на тот же, что и в исходных текстах. Там встречаются такие же имена таблиц и полей А вот для триггера с "_" (RDB$TRIGGER_7) в этом поле очень много текста откомпилированного кода, который совсем не похож на 3 строчки исходного текста И вот там встречаются упоминания этих самых генераторов. У меня сейчас возникли неприятные подозрения, что кто-то в БД внес какой-то зловредный код с таймером, который действительно записывает в генератор уменьшенное значение (как предположил IBExpert ) Вопрос: может кто-то подсказать, что правильно должно быть в этом самом триггер под № 7 И есть ли возможность декомпилировать код из RDB$TRIGGER_BLR ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
О, началась операция на сердце с консультацией по телефону... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:01 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
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, какие значения? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:13 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub> делаю рестор в файл рабочей БД и рестартую сервер Ну ты гигант, конечно. Как раз про для таких в FAQ жирно выделено, что так делать нельзя. > Начал "ковырять" эти системные триггера То, что IBExpert подсказал - проверь, конечно. Но вообще, не там и не то ковыряешь. Сделай выгрузку метаданных и проверь, есть ли там эти самые RDB$TRIGGER-а. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Но вообще, не там и не то ковыряешь. Не, все он правильно ковыряет, судя по всему. Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел. В этом триггере что-то делается, но исходный текст триггера заменили на другой. В FB 2.1 с этим проблем нет. Осталось выяснить, на какую таблицу этот триггер повешен и на какое действие. Тогда можно будет попытаться спровоцировать его на срабатывание и посмотреть на результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:27 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел. дембельский аккорд? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:33 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubUDF не менялись, как я говорил - код не менялся уже несколько лет. Это, к сожалению, не означает, что они не гадят в память. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:35 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert, похоже на то Насколько я понял, они лезут в одну из таблиц, замаскированную под рабочую таблицу с данными, а затем начинают "чудить". Считывают MAX по айдишнику и GEN_ID(__, 0) Если MAX меньше или равен значению из генератора (на меньше, наверное, проверяют, чтобы не попасть в "процедуру", когда генератор уже инкрементирован, но идентифкатор еще не записался в таблицу), то они вызывают GEN_ID(___, -2000*RAND()) И такой код вызывается на нескольких разных таблицах. Почему чаще всего срабатывает на "протоколе" - пока не понимаю. Возможно, там какая-то формула, которая вычисляет, какой код когда вызывать. Но чтобы это понять, нужно детальней "курить" BLR :) RDB$RELATION_NAME - NULL RDB$TRIGGER_TYPE - 8192 RDB$TRIGGER_INACTIVE - 1 Активирован, но таблицы нет... Возможно, используется какая-то недокументированная возможность? Чисто теоретически, я могу принудительно вызвать выполнение триггера? Есть ли где-то в системных таблицах "связь", которую можно увидеть в разделе зависимостей? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:38 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub RDB$TRIGGER_TYPE - 8192 RDB$TRIGGER_INACTIVE - 1 Активирован, но таблицы нет... Возможно, используется какая-то недокументированная возможность? Чисто теоретически, я могу принудительно вызвать выполнение триггера? Есть ли где-то в системных таблицах "связь", которую можно увидеть в разделе зависимостей? Это триггер на коннект (ON CONNECT). Я и забыл, что в 2.1 они уже были. Таблица ему не нужна, и срабатывает он при каждом коннекте. Но он сейчас деактивирован. Срабатывание вызвать легко: активировать его, и он будет срабатывать при каждом коннекте. Можно сделать копию базы и поиграться с ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:43 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Дегтярев Евгений IBExpert Кто-то создал триггер RDB$TRIGGER_7 с закосом под системный. В базах системного триггера с таким именем нет, я посмотрел. дембельский аккорд? К бабке не ходи. Судя по следующему посту ТС - грохнуть его не дожидаясь перитонитов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:43 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Ну и если не жалко, кинь сюда содержимое закладки As BLR из Blob Viewer для этого триггера. Может, кто что интересное и увидит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:44 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ха, не факт что это единственная пасхалка, эту отключили осталась другая/другие ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:45 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert, ну, имя триггера уже засветил. Значит, авторы уже сокрее всего его узнают. Шифроваться нет смысла. Сохранил в текстовом файле. Вложение к файлу Теоретически, это может быть не единственной "пасхалкой", как предположил Дегтярев Евгений Похоже, пора известить СБ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:50 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
...всем присутствующим зайти в первый отдел для освежения подписки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:52 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Когда я выше сказал "жесть", то недооценил пинзец происходящего. delphi_nub> Похоже, пора известить СБ Если название конторы светить нельзя - озвучь отрасль деятельности, плиз. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 16:56 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub> И такой код вызывается на нескольких разных таблицах. Да, и таки сделай выгрузку метаданных и проверь её "глазами", всю - там таких чудес ещё может быть много. P.S. А предыдущего "сопровожденца" что, обидели? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:00 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, похоже, что это разрабы обиделись... но это отдельная история. не хочу перемывать кости и ковыряться в гадостях... мне сейчас нужно "правильно" решить проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:05 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub мне сейчас нужно "правильно" решить проблему Фигово то, что в таких триггерах может и что-то полезное делаться... Я бы попробовал создать базу из скрипта для начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:18 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert> Я бы попробовал создать базу из скрипта для начала. Да его надо сначала выгрузить и просмотреть. А потом уже делать выводы/действия. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:28 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Да его надо сначала выгрузить и просмотреть. А потом уже делать выводы/действия. И чего ты там глазами увидишь, если все сюрпризы в BLR, а в коде - какой-нибудь безобидный запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:31 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub ъъъъъ delphi_nub, ... - посмотреть в процедурах/триггерах работу с генераторами. ... ...триггер в 99.99% случаев работает правильно, но раз в несколько суток может выбирать ошибку. Руками обновляю генератор и все опять работает в штатном режиме. Выполни с помощью IBExpert "поиск в метаданных", указав имя генератора. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:33 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert> И чего ты там глазами увидишь, если все сюрпризы в BLR А, ну если они совсем ухищренные, то да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:36 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, именно, что очень "засекретили" спрятали под системный триггер, при этом SRC не сходится с BLR я как смог BLR "прочитал" и понял, какие таблицы задействованы в "работе" и какие "поля" смущеает, что он деактивирован. подозреваю, что где-то в недрах серверов есть маленькая программка или в одной нормальной программке есть "пускатель", который в какие-то моменты включает триггер, а потом выключает. или, допускаю, что кроме этого триггера есть еще какой-то код, который тоже лезет портит гереатор случайным образом буду пробовать вытаскивать все BLR (т.к. теперь доверия исходникам нет нигде) из БД и там искать упоминание генератора всем большое спасибо. проблему я, конечно, не решил, но благодаря "мозговому штурму" вышел на след... дальше уже придется самому, ну или СБ найдет авторов и сможет выяснить подробности ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:50 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub> буду пробовать вытаскивать все BLR delphi_nub> (т.к. теперь доверия исходникам нет нигде) Процесс можно упростить/ускорить, пересоздав БД из скрипта и сравнив BLR-ы. DB-level триггеров нет? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub смущеает, что он деактивирован. Вы же его и деактивировали: delphi_nub все валилось на подключении в триггере RDB$TRIGGER7 И этот триггер был "успешно" удален из БД и якобы система заработала. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 17:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, возможно. Для меня любой процесс с FB сложный, т.к. я с этой СУБД знаком пару месяцев :( ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 18:06 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Да нет там ничего сложного. Разве что в других СУБД BLR не увидишь. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 18:09 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub проблему я, конечно, не решил Ну этот-то триггер можно и прибить, он все равно деактивирован. Предварительно сделав бэкап метаданных на всякий случай. А дальше смотреть, что из этого получилось, и параллельно искать другие сюрпризы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 18:29 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам P.S. А предыдущего "сопровожденца" что, обидели? Не обязательно так уж обидели. Не подписали договор о сопровождении разработки, вот и решил, что когда начнёт глючить, позовут и дадут денешку. Почему так думаю - сделано с умом и не портит данные, а работать мешает. Прецедент в личной практике - сделали мы в 89-93 году АСУП экскаваторного производства Ижорского завода. Трудозатрат вложили немеряно, и не только в софт. 17 цехов по два километра длиной, там для одной добычи сетевух, тянущих без репитеров внутри цеха, потратили на загранкомандировки и банкеты... А уж между цехами, модемы через местную телефонную линию на искрящих шаговых искателях... Не, заплатили нормально, но потом - а дальше без вас обойдёмся. Руки чесались вообще-то заложить мину-другую такого типа, но сдержались. И прикинь, в 2006м, когда уже ни ДОСа, ни BTRieve и вообще вокруг сплошное телевидение интернет, звонят мне по рабочему! откуда узнали-то, команда наша уже 10 лет как разбежалась, и просят чёта-там подмандить Прифигел я по полной :) Исходники-то уже давно потеряны, смысл их хранить-то. Такшта ускорить обращение за саппортом - вполне разумный и даже полезный для обоих сторон шаг Да, и этта... Респект ТС. Человек по инструменту не в теме, но о чём думать и куда копать въехал с полоборота. Системное мышление. Все бы такие "нубасики" были :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 19:03 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
СПМ> о чём думать и куда копать въехал с полоборота. Теперь представь, что у него эти проблемы с генератором и clumpet error-ами на Oracle вылезли бы. И полез бы он по форумам с вопросами шастать - 50% ответов было бы "плати нам баблосы, посмотрим", ещё 50% - просто с г***м смешали бы в духе "куда ты лезешь нубас!" Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 19:15 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
При адекватных вопросах поиск ответа упёрся бы только в деньги. Потому как без денег DocID и описание проблемы - не очень-то помогают. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 19:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Ну, где генераторы откручиваются - ладно, нашли. А вот ошибки в структуре блоков это, выходит, совсем другая история (которая тоже может вылезти боком). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 22:01 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Да, этот тригер я просто переименую Заодно послежу, не появится ли он снова. Если появится, значит где-то есть "помощник" Вырузил сейчас все BLR для тригеров и хранимок - поищу по тексту Нашел быстрое решение - сделать новые генераторы для таблиц из этой "пасхалки". "Пасхалки" будут и далее трудиться над старыми генераторами, а таблички будут работать с новыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 22:50 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub> Нашел быстрое решение - сделать новые генераторы для таблиц из этой "пасхалки". Методом тыка не чинят: можно починить, можно не починить, а можно и доломать. К примеру, если где-то используется клиентская генерация ключей - или всё встанет, или конкретно для этой сущности и связанных разъедутся данные и собирай их потом... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 22:59 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, клиентских генераций нет. айдишник записи не используется для связей с другими таблицами. но, соглашусь, что лучше не спешить с этим. можно поискать по скомпилированным текстам, где используется данный генератор, чтобы "подстраховаться" в исходниках делфи GEN_ID нигде не используется - разработчики всю бизнес-логику заложили в хранимках ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 23:06 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Выгрузил все BLR и нашел еще одну "пасхалку" Была заложена в процедуру, которая вызывалась при каждом логине любого пользователя При этом, исходный код хранимки не затерт, а содержит только "чистый" код - без пасхалки. А в откомпилированном виде, после основного кода идет дополнительный. Который даже хитрей того, что я нашел в триггерах. Процедуру перекомпилировал. А BLR оставил для истории. С этим типом "сюрприза" все решено. Но я вспоминаю еще одну проблему, которую костылями решал пару недель назад - подозреваю, что есть еще варианты "сюрпризов". Теперь понимаю принцип поиска - будет легче Главное, что это не какие-то системные проблемы, которые не понятно как решать Всем еще раз спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 23:44 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Создатели "пасхалок" - из местных, небось. Ждут визита СБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 00:06 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Всем еще раз спасибо Держи в курсе событий, интересно же.) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 06:57 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Exteris> Держи в курсе событий, интересно же.) +1 Надеюсь, все сёстры получат по серьге серьгам. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 08:37 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
А я правильно понял, что FB позволяет хранить исходники одной ХП, в то время как работать будет другая?.. Это нормально вообще? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 15:38 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
15.05.2020 15:38, alekcvp пишет: > > А я правильно понял, что FB позволяет хранить исходники одной ХП, в то время как работать будет другая?.. > такой финт можно было провернуть только в очень древних версиях путём прямого редактирования системных таблиц. в современных версиях невозможно редактировать системные таблицы напрямую. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 15:50 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Мимопроходящий, именно текст ХП/триггеров/функций и сейчас можно редактировать. По крайней мере сбрасывать в NULL точно. Я помню эту штуку специально назад правили для любителей удалять исходники ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 15:53 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Симонов Денис Мимопроходящий, именно текст ХП/триггеров/функций и сейчас можно редактировать. По крайней мере сбрасывать в NULL точно. Я помню эту штуку специально назад правили для любителей удалять исходники менять текст - фиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2020, 16:01 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560352]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
125ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
107ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 287ms |
0 / 0 |