|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
Доброго времени суток. Использую Firebird Embedded 2.5. Есть таблица с ключевым полем NUM типа bigint. Для неё создаётся генератор: Код: sql 1.
и триггер: Код: sql 1.
Всё идёт хорошо, но на одном экземпляре программы внезапно прекратились записи в эту таблицу. В ходе разбирательств увидел, что программа, которая пользует эту БД выдаёт исключение при попытке записи: авторFirebirdSql.Data.FirebirdClient.FbException (0x80004005): violation of PRIMARY or UNIQUE KEY constraint "INTEG_6" on table "tableName" Problematic key value is ("NUM" = 336) ---> violation of PRIMARY or UNIQUE KEY constraint "INTEG_6" on table "tableName" Problematic key value is ("NUM" = 336) Это исключение выдаётся каждый раз при попытке записи, при этом "NUM" = 336 каждый раз исправно инкрементируется. Сейчас в таблице менее 5 тыс. записей с корректно заданным значением этого поля (от 1 до последнего с шагом - 1). Просто в какой-то момент времени почему-то начался отсчёт с нуля. Собственно вопросы: 1) Из-за чего это могло произойти? 2) Есть ли способ предупредить подобные случаи? 3) Можно ли как-то "починить" функцию без потери данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:32 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
aquamakc, сделай Код: sql 1. 2.
Потом полученное значение подставишь в Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:37 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
Код: aquamakc 1. 2.
1. кто-то сбросил генератор (последовательность) 2. нет. В 2.5 прав на генераторы не было (появилось в 3.0) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:40 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
Симонов Денис, По пункту 3 подправил генератор в IB Expert руками. Но первые два всё-ещё волнуют. "Кто-то" это точно не человек. Нет там, где программа работает таких людей и программ, чтобы открыть БД и сбросить значение генератора. Остаётся только программный сбой. Может есть идеи, как можно защититься от подобного в будущем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:47 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
aquamakc, ну собственно вариантов штатно сбросить генератор только 2: 1. ALTER SEQUENCE или SET GENERATOR 2. GEN_ID(autoIncrementNum, -<значение генератора>) Теоретически (маловероятно) поскольку используется embedded сервер ошибка в программе могла повлиять. Я с таким ни разу не сталкивался ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:55 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
Симонов Денис1. кто-то сбросил генератор (последовательность) Вероятнее, что кто-то вставил запись со значением не из последовательности. Хотя "провал" генератора при краше приложения (перезагрузке винды, отключении питания) с Embedded тоже возможен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 17:39 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
aquamakc, У меня раньше было пару подобных случаев, когда сбрасывался генератор. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 19:10 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
Заполучил логи работы программы за месяц. Софтина (это, кстати, служба виндовс) работала-работала, всё было нормально, но в один момент значение генератора сбросилось, причём даже не на 0, а на 274. И совершенно без признаков внешнего вмешательства. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2018, 11:08 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
aquamakc, А какие признаки вмешательства могли бы быть? Просто интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2018, 11:36 |
|
Сбился GEN_ID
|
|||
---|---|---|---|
#18+
WildSery, Ну, например, останов программы (службы), которая работает с БД. Без этого доступ к БД невозможен. Из программы выполнение непосредственных запросов к БД осуществить нельзя, такой функционал просто не предусмотрен. Выполнение какой-либо SQL инъекции отобразилось бы в логах. А этого ничего не было. Просто условно в 00:01:35 запись в таблицу была произведена нормально, следующая в 00:01:55 и все остальные - со сбитым генератором. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2018, 11:49 |
|
|
start [/forum/search_topic.php?author=SergeyRussia&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 1201ms |
total: | 1359ms |
0 / 0 |