powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с генератором
32 сообщений из 32, показаны все 2 страниц
глюк с генератором
    #32622622
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня столкнулся с такой вот проблемой:
При добавлении записи вылетела ошибка, что нельзя дублировать значение Primary key. Зашел я в базу, а там: значение primary key у последней вставленной записи и значение генератора различаются почти на 20, т.е.
значение генератора на 20 меньше чем значение primary key у последней вставленной записи. И такая же фигня еще в 2-х таблицах.

значение primary key генерится с помощью FIBPlus
Сервер - FireBird 1.5.0.4306
ОС - Windows 98

Вопрос: кто-нибудь знает отчего такое может случиться и как вообще могли добавляться записи?
...
Рейтинг: 0 / 0
глюк с генератором
    #32622662
Posco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего был откат генератора, либо значения PK были присвоены искуственно.
...
Рейтинг: 0 / 0
глюк с генератором
    #32622688
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Posco

"искусственно " - в смысле не в программе а ручками например в IBExpert ?
если так, то в принципе не может такого быть, юзеры так не умеют :)

а в каких это случаях может быть откат генератора?
...
Рейтинг: 0 / 0
глюк с генератором
    #32622807
Posco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в каких это случаях может быть откат генератора?
SET GENERATOR <Ваш генератор> TO <Новое значение>,
И такая же фигня еще в 2-х таблицах
...и так еще для двух генераторов :)

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

Чудес не бывает, а если и бывают, то тут наверное у разработчиков FireBird 1.5.0.4306 нужно спрашивать в чём дело ;)
...
Рейтинг: 0 / 0
глюк с генератором
    #32622819
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posco а в каких это случаях может быть откат генератора?
SET GENERATOR <Ваш генератор> TO <Новое значение>,
И такая же фигня еще в 2-х таблицах
...и так еще для двух генераторов :)

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

Чудес не бывает, а если и бывают, то тут наверное у разработчиков FireBird 1.5.0.4306 нужно спрашивать в чём дело ;)

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

Данные ниоткуда не перемещались, а заводились с нуля, с момента эксплуатации приложения.

Короче - чудеса, да и только.
...
Рейтинг: 0 / 0
глюк с генератором
    #32622847
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где наращивается значение генератора ? И кто его инициирует ?
...
Рейтинг: 0 / 0
глюк с генератором
    #32622899
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnmenА где наращивается значение генератора ? И кто его инициирует ?

Для автоинкремента значения генератора использутся компонент pFIBDataSet. Он сам получает значение от генератора и естественно при этом оно увеличивается. Приложение где-то с месяц уже работает, и вот на тебе. :(
...
Рейтинг: 0 / 0
глюк с генератором
    #32622914
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Senator

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

Тогда предположение только одно:
Где-то, кто-то/что-то пишет в таблицу не наращивая значения. Напр.другой компонент pFIBDataSet, в др.программе; "руками" добавили записей в тбл.

руками точно никто писать не может - просто нет там соответсвующих инструментов, а остальное - будем проверять, но все-таки - месяц все работало прекрасно, и вдруг такое

и еще: каждый день делались бэкапы, и если восстановить предпоследний бэкап, то в базе все нормально, а вот в последнем фигня такая получается :(
...
Рейтинг: 0 / 0
глюк с генератором
    #32623008
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я не совсем прав.
Там же ещё PK на поле. Тогда однозначно - кто-то/что-то подправил значение.
...
Рейтинг: 0 / 0
глюк с генератором
    #32623031
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnmenКстати, я не совсем прав.
Там же ещё PK на поле. Тогда однозначно - кто-то/что-то подправил значение.

ну а если никто руками не мог подправить (я в этом на 100% уверен), то что же тогда еще может быть?
...
Рейтинг: 0 / 0
глюк с генератором
    #32623355
s999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senator JohnmenКстати, я не совсем прав.
Там же ещё PK на поле. Тогда однозначно - кто-то/что-то подправил значение.

ну а если никто руками не мог подправить (я в этом на 100% уверен), то что же тогда еще может быть?

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

Ещё маловероятное предположение - нарушения на странице генераторов.
Возможные причины - постом выше.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624042
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая фигня у меня случилась после того как вырубили электричество. Видимо и у тебя был какой-то сбой с питанием.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624089
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А всё потому, что надо было Forced Writes = True выставить
:)
...
Рейтинг: 0 / 0
глюк с генератором
    #32624100
s999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnmenА всё потому, что надо было Forced Writes = True выставить
:)

В том то и проблема, что генераторы как бы под это не подпадают, данные то записались, а генераторы нет.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624125
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>s999

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

Не знаю, может в FB это поправили, но проблема была. Значения генераторов "не форсятся" на диск, а "сидят" в памяти, а на диск попадают по "своим правилам". Таким образом, возможна ситуация когда вставленные записи уже на диске, а "дернутые генераторы" туда попасть еще не успели. А пишем данные или только генераторы дергаем, здесь это непринципиально.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624359
ENN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тогда транзакция?
...
Рейтинг: 0 / 0
глюк с генератором
    #32624360
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ENN:

при чем здесь транзакция?
...
Рейтинг: 0 / 0
глюк с генератором
    #32624377
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удивительно что никто так ничего и не сказал путного :-)

На 97% заложусь было так:
1. Клиент пишет новые данные с дерганьем генератора
2. Данные сбрасываются в базу
3. Вырубается свет

Самое интересное что страница генераторов по FW=On в 4306 сбрасывается по каким-то другим правилам (честно не помню точно по каким, хотя LOA полгода назад в конференции расписывал это дело). Короче фокус именно в том что страница генераторов пишется именно ПОЗЖЕ страницы данных (!!!). Вот тебе и глюк с генераторами. Тогда же во время обсуждения данной проблемы было выработано решение что сделать с генераторами и данной проблемой. Не знаю как в Yaffil, я за ним просто не слежу но думаю что там это тоже поправлено, а в FireBird 1.5.1 4481 эта проблема точно поправлена. Так что как говорится "просто переставь сервак". :-)

P.S. Блин, и поменяй W98 на W2K!! Не думаю что это машина ниже Селерона и у нее мозгов меньше 128. Хотя могу и ошибаться однако. А то она тебе столько накрутит с базой что потом устанешь боротся просто.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624379
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь по поводу фразы про путность. Спросонья некоторые сообщения пропустил :-) Сказили путного много, и даже про то что я описал сказал s999. И все-таки дабы избежать проблем - переставь версию FB.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624445
Senator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnmenА всё потому, что надо было Forced Writes = True выставить
:)

Однако, Forced Writes = True

Наверное s999 и andyshark правы, а сервак я уже переставил :)

Спасибо всем
...
Рейтинг: 0 / 0
глюк с генератором
    #32624598
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При FW=ON кеш сбрасывается на диск по коммиту транзакции. Т.к. генераторы лежат вне контроля транзакций, то их страницы могут быть записаны на диск несколько позже страниц данных (на это влияют особенности использования данного генератора из нескольких конкурентных транзакций). Соотв-но, при аномальном завершении процесса сервера часть информации по генераторам может быть потеряна. Начиная с FB 1.5.1 эта проблема устранена (то же самое относится к последним сборкам Yaffil) - теперь страницы генераторов всегда сбрасываются на диск не позднее данных.
...
Рейтинг: 0 / 0
глюк с генератором
    #32624647
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>dimitr
>теперь страницы генераторов всегда сбрасываются на диск не позднее данных.

Т.е. раньше ?
:)
...
Рейтинг: 0 / 0
глюк с генератором
    #32624705
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не придирайся к словам ;-) Но на самом деле может быть и раньше:

1. Старт транзакции А (не read-only)
2. Старт транзакции Б
3. Модификация транзакцией Б данных с использованием генератора
4. Коммит транзакции А -> сброс страницы генератора на диск
5. Коммит транзакции Б -> сброс измененных страниц данных на диск

В случае отсутствия конкурентных транзакций страницы генератора запишутся одновременно с измененными страницами данных.
...
Рейтинг: 0 / 0
глюк с генератором
    #32625286
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ни крути, а ситуация неприятная, но, к сожалению, возможная.
Сделай процедуру восстановления, например:

CREATE PROCEDURE RESET_GENERATORS
AS
DECLARE VARIABLE NEW_ID BIGINT;
begin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
 --------------------------------------------------------------------
 
 -- Сброс генераторов - начало блока
 

select Coalesce(Max(Bank_id),  0 ) from Bank into :New_id;  -- Банки
 
  New_id = gen_id(Bank_id_gen, New_id - gen_id(Bank_id_gen,  0 ));

select Coalesce(Max(Bill_id),  0 ) from Bill into :New_id;  -- Счет
 
  New_id = gen_id(Bill_id_gen, New_id - gen_id(Bill_id_gen,  0 ));

 --...
 
 --...
 
 --...
 

select Coalesce(Max(Unit_id),  0 ) from Unit into :New_id;  -- Ед.измерения
 
  New_id = gen_id(Unit_id_gen, New_id - gen_id(Unit_id_gen,  0 ));

 -- Сброс генераторов - конец блока
 
 --------------------------------------------------------------------
 

end

Вот для нее скрипт ErWin макроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE %TemplateName AS
declare variable New_Id bigint;
begin
 --------------------------------------------------------------------
 
 -- Сброс генераторов - начало блока
 

%ForEachEntity() {
%if(%==(%EntityProp(generate_id),yes))
{  select Coalesce(Max(%TableName_id),  0 ) from %TableName into :New_id;  -- %EntityName
 
  New_id = gen_id(%TableName_id_gen, New_id - gen_id(%TableName_id_gen,  0 ));
}
}
 -- Сброс генераторов - конец блока
 
 --------------------------------------------------------------------
 

end

Предполагается наличие UPD с именем generate_id (типа List, значение по умолчанию ~yes,no) для каждой таблички на логическом уровне, и (в другом скрипте) генерация генераторов (пардон :) и соотв. триггеров.
...
Рейтинг: 0 / 0
глюк с генератором
    #32625874
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2mv Хм, я вот только совсем не понимаю - зачем создавать лишний геморой? По русски сказано что проблема устранена.

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

Если честно после рапорта о сбое в генераторах исправление стало доступно буквально через пару недель, и это с учетом того что еще шли споры по поводу того какой из механизмов сохранения генераторов реализовать (было три варианта). И даже голосование было сделано маленькое :-)
...
Рейтинг: 0 / 0
глюк с генератором
    #32626948
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andyshark
Эту процедуру я думаю запускать чужими руками, когда мне звонят тетки, и читают вслух тескст знакомого всем сообщения об ошибках. Ну, вот я и скажу им, как запустить эту лабуду.
...
Рейтинг: 0 / 0
глюк с генератором
    #32627854
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2mv У меня ситуация со сбоем генераторов была всего 2 раза за год. После первого раза отрапортовал в конфу, а когда второй раз получился в другом месте я им прогу скинул по мылу которая генераторы нарастила на +10. Скоро поменяю сервак и забуду что такая бага была :-) поменяй теткам сервак и скажи что ты сделал. Они тебе по гроб жизни благодарны будут если такое хоть раз 5 случалось и они помнят. Заодно сделаешь вид что работаешь :-)
...
Рейтинг: 0 / 0
глюк с генератором
    #32627886
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тетки у меня нормальные. У меня сисадмины приморожены - отторможены. Когда им кажется, что сервак "подвис" (типа - на клавиши не быстро реагирует), могут и ресет нажать. Невзирая на количество живых коннектов к базе, и то, что у клиентов никаких проблем. И никакие тут UPS не помогут.

А сбой генераторов уменя тоже, второй раз за 1,5 года. Причем на моих глазах все и произошло, когда такую грамотную перезагрузку делали.
...
Рейтинг: 0 / 0
глюк с генератором
    #32628172
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сочувствую. Но отморозков везде и всегда полно. Иногда конечно по зашпарке делаешь глупости, но чтобы нажать ресет на серваке... Мдя.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с генератором
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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